From 9d82a668a4a8a2762d8f1f6a9754234a99888313 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 6 Jan 2025 15:54:16 -0500 Subject: [PATCH] Release v4.2.0 --- .../ISSUE_TEMPLATE/01-feature_request.yaml | 2 +- .github/ISSUE_TEMPLATE/02-bug_report.yaml | 2 +- docs/development/release-checklist.md | 8 +- docs/release-notes/version-4.2.md | 5 +- mkdocs.yml | 1 + .../dist/graphiql/graphiql.min.js | 45260 +++++++++------- netbox/project-static/dist/netbox.js | Bin 390582 -> 390886 bytes netbox/project-static/dist/netbox.js.map | Bin 525040 -> 525356 bytes .../netbox-graphiql/package.json | 6 +- netbox/project-static/package.json | 4 +- netbox/project-static/yarn.lock | 66 +- netbox/translations/fr/LC_MESSAGES/django.mo | Bin 237343 -> 237945 bytes netbox/translations/fr/LC_MESSAGES/django.po | 244 +- requirements.txt | 2 +- 14 files changed, 25465 insertions(+), 20135 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01-feature_request.yaml b/.github/ISSUE_TEMPLATE/01-feature_request.yaml index cb39ae9be..7cb6057ea 100644 --- a/.github/ISSUE_TEMPLATE/01-feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/01-feature_request.yaml @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v4.1.11 + placeholder: v4.2.0 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/02-bug_report.yaml b/.github/ISSUE_TEMPLATE/02-bug_report.yaml index e42ff3045..e2145543d 100644 --- a/.github/ISSUE_TEMPLATE/02-bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/02-bug_report.yaml @@ -39,7 +39,7 @@ body: attributes: label: NetBox Version description: What version of NetBox are you currently running? - placeholder: v4.1.11 + placeholder: v4.2.0 validations: required: true - type: dropdown diff --git a/docs/development/release-checklist.md b/docs/development/release-checklist.md index 557d01671..c74fcf8f6 100644 --- a/docs/development/release-checklist.md +++ b/docs/development/release-checklist.md @@ -120,15 +120,9 @@ Then, compile these portable (`.po`) files for use in the application: * Update the example version numbers in the feature request and bug report templates under `.github/ISSUE_TEMPLATES/`. * Replace the "FUTURE" placeholder in the release notes with the current date. -Commit these changes to the `main` branch and push upstream. - -### Verify CI Build Status - -Ensure that continuous integration testing on the `main` branch is completing successfully. If it fails, take action to correct the failure before proceeding with the release. - ### Submit a Pull Request -Submit a pull request titled **"Release vX.Y.Z"** to merge the current release branch (e.g. `release-vX.Y.Z`) into `main`. Copy the documented release notes into the pull request's body. +Commit the above changes and submit a pull request titled **"Release vX.Y.Z"** to merge the current release branch (e.g. `release-vX.Y.Z`) into `main`. Copy the documented release notes into the pull request's body. Once CI has completed and a colleague has reviewed the PR, merge it. This effects a new release in the `main` branch. diff --git a/docs/release-notes/version-4.2.md b/docs/release-notes/version-4.2.md index f0ad3766c..75a776573 100644 --- a/docs/release-notes/version-4.2.md +++ b/docs/release-notes/version-4.2.md @@ -1,9 +1,6 @@ # NetBox v4.2 -## v4.2-beta1 (2024-12-02) - -!!! danger "Not for Production Use" - This is a beta release of NetBox intended for testing and evaluation. **Do not use this software in production.** Also be aware that no upgrade path is provided to future releases. +## v4.2.0 (2025-01-06) ### Breaking Changes diff --git a/mkdocs.yml b/mkdocs.yml index f870b69d6..db6798eae 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -176,6 +176,7 @@ nav: - Provider Network: 'models/circuits/providernetwork.md' - Virtual Circuit: 'models/circuits/virtualcircuit.md' - Virtual Circuit Termination: 'models/circuits/virtualcircuittermination.md' + - Virtual Circuit Type: 'models/circuits/virtualcircuittype.md' - Core: - DataFile: 'models/core/datafile.md' - DataSource: 'models/core/datasource.md' diff --git a/netbox/project-static/dist/graphiql/graphiql.min.js b/netbox/project-static/dist/graphiql/graphiql.min.js index 03d4ac1e1..229d3ebe6 100644 --- a/netbox/project-static/dist/graphiql/graphiql.min.js +++ b/netbox/project-static/dist/graphiql/graphiql.min.js @@ -1,5 +1,4 @@ /******/ (function() { // webpackBootstrap -/******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "../../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js": @@ -8,6 +7,7 @@ \**************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34,6 +34,7 @@ var _default = exports["default"] = index; \**************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -57,6 +58,7 @@ var _default = exports["default"] = memoize; \****************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -1194,6 +1196,7 @@ exports.size = size; \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -1901,6 +1904,7 @@ exports.computePosition = computePosition; \**************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2256,6 +2260,7 @@ function useFloating(options) { \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2432,6 +2437,7 @@ exports.Animation = Animation; \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2460,6 +2466,7 @@ var _easingEs = __webpack_require__(/*! ./utils/easing.es.js */ "../../../node_m \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2501,6 +2508,7 @@ function getEasingFunction(definition) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2698,6 +2706,7 @@ function animateStyle(element, key, keyframesDefinition, options = {}) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2731,6 +2740,7 @@ function getMotionValue(motionValues, name) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2779,6 +2789,7 @@ function animate(elements, keyframes, options = {}) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2816,6 +2827,7 @@ const style = exports.style = { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2895,6 +2907,7 @@ const selectFinished = animation => animation.finished; \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2932,6 +2945,7 @@ function registerCssVariable(name) { \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2952,6 +2966,7 @@ exports.cubicBezierAsString = cubicBezierAsString; \***************************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2995,6 +3010,7 @@ for (const key in featureTests) { \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3015,6 +3031,7 @@ function getStyleName(key) { \*******************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3041,6 +3058,7 @@ exports.keyframesList = keyframesList; \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3064,6 +3082,7 @@ exports.getOptions = getOptions; \************************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3091,6 +3110,7 @@ function stopAnimation(animation, needsCommit = true) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3134,6 +3154,7 @@ function createStyles(keyframes) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3161,6 +3182,7 @@ function createStyleString(target = {}) { \********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3253,6 +3275,7 @@ const transformListToString = (template, name) => `${template} ${name}(var(${asT \**************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3346,6 +3369,7 @@ const isNumberOrNull = value => typeof value !== "string"; \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3364,6 +3388,7 @@ const glide = exports.glide = (0, _createGeneratorEasingEs.createGeneratorEasing \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3382,6 +3407,7 @@ const spring = exports.spring = (0, _createGeneratorEasingEs.createGeneratorEasi \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3447,6 +3473,7 @@ function inView(elementOrSelector, onStart, { \**************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3529,6 +3556,7 @@ function resizeElement(target, handler) { \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3571,6 +3599,7 @@ function resizeWindow(callback) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3591,6 +3620,7 @@ function resize(a, b) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3682,6 +3712,7 @@ function scroll(onScroll, _a = {}) { \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3751,6 +3782,7 @@ function updateScrollInfo(element, info, time) { \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3807,6 +3839,7 @@ function resolveEdge(edge, length, inset = 0) { \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3884,6 +3917,7 @@ function resolveOffsets(container, info, options) { \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3927,6 +3961,7 @@ function calcInset(element, container) { \**************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3973,6 +4008,7 @@ function resolveOffset(offset, containerLength, targetLength, targetInset) { \***************************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3994,6 +4030,7 @@ const ScrollOffset = exports.ScrollOffset = { \*****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4065,6 +4102,7 @@ function scrubAnimation(controls, axisInfo) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4204,6 +4242,7 @@ var _styleStringEs = __webpack_require__(/*! ./animate/utils/style-string.es.js \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4241,6 +4280,7 @@ const hover = exports.hover = { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4283,6 +4323,7 @@ const inView = exports.inView = { \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4322,6 +4363,7 @@ const press = exports.press = { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4511,6 +4553,7 @@ function createMotionState(options = {}, parent) { \**************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4548,6 +4591,7 @@ function dispatchViewEvent(element, name, entry) { \*******************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4577,6 +4621,7 @@ function shallowCompare(next, prev) { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4595,6 +4640,7 @@ function isVariant(definition) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4618,6 +4664,7 @@ function resolveVariant(definition, variants) { \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4657,6 +4704,7 @@ const fireNext = iterator => iterator.next(); \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4869,6 +4917,7 @@ function getValueSequence(name, sequences) { \********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4897,6 +4946,7 @@ function calcNextTime(current, next, prev, labels) { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4939,6 +4989,7 @@ function addKeyframes(sequence, keyframes, easing, offset, startTime, endTime) { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4961,6 +5012,7 @@ function compareByTime(a, b) { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4993,6 +5045,7 @@ function resolveElements(elements, selectorCache) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5040,6 +5093,7 @@ function resolveOption(option, i, total) { \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5102,6 +5156,7 @@ function cubicBezier(mX1, mY1, mX2, mY2) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5130,6 +5185,7 @@ var _stepsEs = __webpack_require__(/*! ./steps.es.js */ "../../../node_modules/@ \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5153,6 +5209,7 @@ exports.steps = steps; \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5264,6 +5321,7 @@ exports.glide = glide; \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5306,6 +5364,7 @@ var _velocityEs = __webpack_require__(/*! ./utils/velocity.es.js */ "../../../no \******************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5326,6 +5385,7 @@ const defaults = exports.defaults = { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5388,6 +5448,7 @@ exports.spring = spring; \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5406,6 +5467,7 @@ exports.calcDampingRatio = calcDampingRatio; \***************************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5424,6 +5486,7 @@ function hasReachedTarget(origin, target, current) { \******************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5467,6 +5530,7 @@ function pregenerateKeyframes(generator, toUnit = _utils.noopReturn) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5488,6 +5552,7 @@ function calcGeneratorVelocity(resolveValue, t, current) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5519,6 +5584,7 @@ exports.MotionValue = MotionValue; \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5540,6 +5606,7 @@ var _MotionValueEs = __webpack_require__(/*! ./MotionValue.es.js */ "../../../no \***************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5563,6 +5630,7 @@ function removeItem(arr, item) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5580,6 +5648,7 @@ exports.clamp = clamp; \******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5602,6 +5671,7 @@ const defaults = exports.defaults = { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5622,6 +5692,7 @@ function getEasingForSegment(easing, i) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5780,6 +5851,7 @@ var _wrapEs = __webpack_require__(/*! ./wrap.es.js */ "../../../node_modules/@mo \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5822,6 +5894,7 @@ function interpolate(output, input = (0, _offsetEs.defaultOffset)(output.length) \*************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5840,6 +5913,7 @@ exports.isCubicBezier = isCubicBezier; \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5857,6 +5931,7 @@ exports.isEasingGenerator = isEasingGenerator; \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5875,6 +5950,7 @@ exports.isEasingList = isEasingList; \*********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5892,6 +5968,7 @@ exports.isFunction = isFunction; \*******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5909,6 +5986,7 @@ exports.isNumber = isNumber; \*******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5926,6 +6004,7 @@ exports.isString = isString; \*************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5943,6 +6022,7 @@ exports.mix = mix; \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5962,6 +6042,7 @@ exports.noopReturn = noopReturn; \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5992,6 +6073,7 @@ function defaultOffset(length) { \******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -6009,6 +6091,7 @@ exports.progress = progress; \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -6028,6 +6111,7 @@ const time = exports.time = { \******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -6052,6 +6136,7 @@ function velocityPerSecond(velocity, frameDuration) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -6072,6 +6157,7 @@ exports.wrap = wrap; \********************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -6214,6 +6300,7 @@ exports.makePushPullAsyncIterableIterator = makePushPullAsyncIterableIterator; \***************************************************************/ /***/ (function(module) { +"use strict"; function $parcel$export(e, n, v, s) { @@ -6242,6 +6329,7 @@ function $1a6a90a521dcd173$export$b9ecd428b558ff10(originalEventHandler, ourEven \*****************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $eQpDd$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -6297,6 +6385,7 @@ const $09f4ad68a9251bc3$export$be92b6f5f03c0fe9 = $09f4ad68a9251bc3$export$21b07 \**********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $hnlpS$react = __webpack_require__(/*! react */ "react"); @@ -6428,6 +6517,7 @@ function $1a96635ec239608b$export$c74125a8e3af6bb2(name) { \************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $dJwbH$react = __webpack_require__(/*! react */ "react"); @@ -6473,6 +6563,7 @@ function $9c2aaba23466b352$export$c7b2cbe3552a0d05(...refs) { \*******************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $4O1Ne$react = __webpack_require__(/*! react */ "react"); @@ -6606,6 +6697,7 @@ function $dec3cc0142d4f286$var$composeContextScopes(...scopes) { \******************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $aJCrN$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -7041,6 +7133,7 @@ const $f4833395aa1bca1a$export$f39c2d165cd861fe = $f4833395aa1bca1a$export$fba2f \*********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $9g4ps$react = __webpack_require__(/*! react */ "react"); @@ -7083,6 +7176,7 @@ const $cc45c1b701a63adc$export$2881499e37b75b9a = $cc45c1b701a63adc$export$c760c \*****************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $g2vWm$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -7366,6 +7460,7 @@ const $d715e0554b679f1f$export$aecb2ddcb55c95be = $d715e0554b679f1f$export$4d5eb \*************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $7dQ7Q$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -7826,6 +7921,7 @@ const $d1bf075a6b218014$export$6d4de93b380beddf = $d1bf075a6b218014$export$f34ec \************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $cnctE$react = __webpack_require__(/*! react */ "react"); @@ -7881,6 +7977,7 @@ const $71476a6ed7dbbaf3$export$be92b6f5f03c0fe9 = $71476a6ed7dbbaf3$export$ac5b5 \***********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $buum9$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -8186,6 +8283,7 @@ const $2bc01e66e04aa9ed$export$be92b6f5f03c0fe9 = $2bc01e66e04aa9ed$export$20e40 \**************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $47woD$react = __webpack_require__(/*! react */ "react"); @@ -8217,6 +8315,7 @@ function $dc478e4659f630c5$export$f680877a34711e37(deterministicId) { \****************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $cnSS2$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -9284,6 +9383,7 @@ const $213e4d2df823067d$export$6d4de93b380beddf = $213e4d2df823067d$export$e7142 \******************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $50Iv9$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -9639,6 +9739,7 @@ const $34310caa050a8d63$export$21b07c8f274aebd5 = $34310caa050a8d63$export$79d62 \******************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $amzHf$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -9688,6 +9789,7 @@ const $913a70b877676c16$export$be92b6f5f03c0fe9 = $913a70b877676c16$export$602ea \********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $fnLeV$react = __webpack_require__(/*! react */ "react"); @@ -9829,6 +9931,7 @@ function $a2fa0214bb2735a1$var$getAnimationName(styles) { \*********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $iMixA$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -9927,6 +10030,7 @@ const $c3def6332c2749a6$export$be92b6f5f03c0fe9 = $c3def6332c2749a6$export$250ff \************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $9QJ9Y$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -10180,6 +10284,7 @@ const $0063afae63b3fa70$export$6d08773d2e66f8f2 = $0063afae63b3fa70$export$ab9df \****************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $dAvBt$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -10292,6 +10397,7 @@ const $82dc8d030dec7549$export$be92b6f5f03c0fe9 = $82dc8d030dec7549$export$8c6ed \*******************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $iVrL9$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -10873,6 +10979,7 @@ const $c34afbc43c90cc6f$export$21b07c8f274aebd5 = $c34afbc43c90cc6f$export$c27ee \****************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $92muK$react = __webpack_require__(/*! react */ "react"); @@ -10909,6 +11016,7 @@ function $28e03942f763e819$export$25bec8c6f54ee79a(callback) { \**********************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $ijazI$react = __webpack_require__(/*! react */ "react"); @@ -10968,6 +11076,7 @@ function $b84d42d44371bff7$var$useUncontrolledState({ \******************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $b0gz3$react = __webpack_require__(/*! react */ "react"); @@ -11004,6 +11113,7 @@ function $24c84e9f83c4454f$export$3a72a57244d6e765(onEscapeKeyDownProp, ownerDoc \*****************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $caHyQ$react = __webpack_require__(/*! react */ "react"); @@ -11034,6 +11144,7 @@ const $ca21affb0542a8a4$export$e5c5a5f917a5871c = Boolean(globalThis === null || \********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $ksDzM$react = __webpack_require__(/*! react */ "react"); @@ -11100,6 +11211,7 @@ function $d2c1d285af17635b$export$1ab7ae714698c4b8(element) { \***************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $awrN2$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -11157,6 +11269,7 @@ const $685371e9c20848e2$export$be92b6f5f03c0fe9 = $685371e9c20848e2$export$439d2 \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -11346,6 +11459,7 @@ exports.suppressOthers = suppressOthers; \*************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -11368,12 +11482,17149 @@ var _default = exports["default"] = clsx; /***/ }), +/***/ "../../../node_modules/codemirror/addon/comment/comment.js": +/*!*****************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/comment/comment.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + var noOptions = {}; + var nonWS = /[^\s\u00a0]/; + var Pos = CodeMirror.Pos, + cmp = CodeMirror.cmpPos; + function firstNonWS(str) { + var found = str.search(nonWS); + return found == -1 ? 0 : found; + } + CodeMirror.commands.toggleComment = function (cm) { + cm.toggleComment(); + }; + CodeMirror.defineExtension("toggleComment", function (options) { + if (!options) options = noOptions; + var cm = this; + var minLine = Infinity, + ranges = this.listSelections(), + mode = null; + for (var i = ranges.length - 1; i >= 0; i--) { + var from = ranges[i].from(), + to = ranges[i].to(); + if (from.line >= minLine) continue; + if (to.line >= minLine) to = Pos(minLine, 0); + minLine = from.line; + if (mode == null) { + if (cm.uncomment(from, to, options)) mode = "un";else { + cm.lineComment(from, to, options); + mode = "line"; + } + } else if (mode == "un") { + cm.uncomment(from, to, options); + } else { + cm.lineComment(from, to, options); + } + } + }); + + // Rough heuristic to try and detect lines that are part of multi-line string + function probablyInsideString(cm, pos, line) { + return /\bstring\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\'\"\`]/.test(line); + } + function getMode(cm, pos) { + var mode = cm.getMode(); + return mode.useInnerComments === false || !mode.innerMode ? mode : cm.getModeAt(pos); + } + CodeMirror.defineExtension("lineComment", function (from, to, options) { + if (!options) options = noOptions; + var self = this, + mode = getMode(self, from); + var firstLine = self.getLine(from.line); + if (firstLine == null || probablyInsideString(self, from, firstLine)) return; + var commentString = options.lineComment || mode.lineComment; + if (!commentString) { + if (options.blockCommentStart || mode.blockCommentStart) { + options.fullLines = true; + self.blockComment(from, to, options); + } + return; + } + var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1); + var pad = options.padding == null ? " " : options.padding; + var blankLines = options.commentBlankLines || from.line == to.line; + self.operation(function () { + if (options.indent) { + var baseString = null; + for (var i = from.line; i < end; ++i) { + var line = self.getLine(i); + var whitespace = line.slice(0, firstNonWS(line)); + if (baseString == null || baseString.length > whitespace.length) { + baseString = whitespace; + } + } + for (var i = from.line; i < end; ++i) { + var line = self.getLine(i), + cut = baseString.length; + if (!blankLines && !nonWS.test(line)) continue; + if (line.slice(0, cut) != baseString) cut = firstNonWS(line); + self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut)); + } + } else { + for (var i = from.line; i < end; ++i) { + if (blankLines || nonWS.test(self.getLine(i))) self.replaceRange(commentString + pad, Pos(i, 0)); + } + } + }); + }); + CodeMirror.defineExtension("blockComment", function (from, to, options) { + if (!options) options = noOptions; + var self = this, + mode = getMode(self, from); + var startString = options.blockCommentStart || mode.blockCommentStart; + var endString = options.blockCommentEnd || mode.blockCommentEnd; + if (!startString || !endString) { + if ((options.lineComment || mode.lineComment) && options.fullLines != false) self.lineComment(from, to, options); + return; + } + if (/\bcomment\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return; + var end = Math.min(to.line, self.lastLine()); + if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end; + var pad = options.padding == null ? " " : options.padding; + if (from.line > end) return; + self.operation(function () { + if (options.fullLines != false) { + var lastLineHasText = nonWS.test(self.getLine(end)); + self.replaceRange(pad + endString, Pos(end)); + self.replaceRange(startString + pad, Pos(from.line, 0)); + var lead = options.blockCommentLead || mode.blockCommentLead; + if (lead != null) for (var i = from.line + 1; i <= end; ++i) if (i != end || lastLineHasText) self.replaceRange(lead + pad, Pos(i, 0)); + } else { + var atCursor = cmp(self.getCursor("to"), to) == 0, + empty = !self.somethingSelected(); + self.replaceRange(endString, to); + if (atCursor) self.setSelection(empty ? to : self.getCursor("from"), to); + self.replaceRange(startString, from); + } + }); + }); + CodeMirror.defineExtension("uncomment", function (from, to, options) { + if (!options) options = noOptions; + var self = this, + mode = getMode(self, from); + var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), + start = Math.min(from.line, end); + + // Try finding line comments + var lineString = options.lineComment || mode.lineComment, + lines = []; + var pad = options.padding == null ? " " : options.padding, + didSomething; + lineComment: { + if (!lineString) break lineComment; + for (var i = start; i <= end; ++i) { + var line = self.getLine(i); + var found = line.indexOf(lineString); + if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1; + if (found == -1 && nonWS.test(line)) break lineComment; + if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment; + lines.push(line); + } + self.operation(function () { + for (var i = start; i <= end; ++i) { + var line = lines[i - start]; + var pos = line.indexOf(lineString), + endPos = pos + lineString.length; + if (pos < 0) continue; + if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length; + didSomething = true; + self.replaceRange("", Pos(i, pos), Pos(i, endPos)); + } + }); + if (didSomething) return true; + } + + // Try block comments + var startString = options.blockCommentStart || mode.blockCommentStart; + var endString = options.blockCommentEnd || mode.blockCommentEnd; + if (!startString || !endString) return false; + var lead = options.blockCommentLead || mode.blockCommentLead; + var startLine = self.getLine(start), + open = startLine.indexOf(startString); + if (open == -1) return false; + var endLine = end == start ? startLine : self.getLine(end); + var close = endLine.indexOf(endString, end == start ? open + startString.length : 0); + var insideStart = Pos(start, open + 1), + insideEnd = Pos(end, close + 1); + if (close == -1 || !/comment/.test(self.getTokenTypeAt(insideStart)) || !/comment/.test(self.getTokenTypeAt(insideEnd)) || self.getRange(insideStart, insideEnd, "\n").indexOf(endString) > -1) return false; + + // Avoid killing block comments completely outside the selection. + // Positions of the last startString before the start of the selection, and the first endString after it. + var lastStart = startLine.lastIndexOf(startString, from.ch); + var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length); + if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false; + // Positions of the first endString after the end of the selection, and the last startString before it. + firstEnd = endLine.indexOf(endString, to.ch); + var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch); + lastStart = firstEnd == -1 || almostLastStart == -1 ? -1 : to.ch + almostLastStart; + if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false; + self.operation(function () { + self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)), Pos(end, close + endString.length)); + var openEnd = open + startString.length; + if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length; + self.replaceRange("", Pos(start, open), Pos(start, openEnd)); + if (lead) for (var i = start + 1; i <= end; ++i) { + var line = self.getLine(i), + found = line.indexOf(lead); + if (found == -1 || nonWS.test(line.slice(0, found))) continue; + var foundEnd = found + lead.length; + if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length; + self.replaceRange("", Pos(i, found), Pos(i, foundEnd)); + } + }); + return true; + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/dialog/dialog.js": +/*!***************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/dialog/dialog.js ***! + \***************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Open simple dialogs on top of an editor. Relies on dialog.css. + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + function dialogDiv(cm, template, bottom) { + var wrap = cm.getWrapperElement(); + var dialog; + dialog = wrap.appendChild(document.createElement("div")); + if (bottom) dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom";else dialog.className = "CodeMirror-dialog CodeMirror-dialog-top"; + if (typeof template == "string") { + dialog.innerHTML = template; + } else { + // Assuming it's a detached DOM element. + dialog.appendChild(template); + } + CodeMirror.addClass(wrap, 'dialog-opened'); + return dialog; + } + function closeNotification(cm, newVal) { + if (cm.state.currentNotificationClose) cm.state.currentNotificationClose(); + cm.state.currentNotificationClose = newVal; + } + CodeMirror.defineExtension("openDialog", function (template, callback, options) { + if (!options) options = {}; + closeNotification(this, null); + var dialog = dialogDiv(this, template, options.bottom); + var closed = false, + me = this; + function close(newVal) { + if (typeof newVal == 'string') { + inp.value = newVal; + } else { + if (closed) return; + closed = true; + CodeMirror.rmClass(dialog.parentNode, 'dialog-opened'); + dialog.parentNode.removeChild(dialog); + me.focus(); + if (options.onClose) options.onClose(dialog); + } + } + var inp = dialog.getElementsByTagName("input")[0], + button; + if (inp) { + inp.focus(); + if (options.value) { + inp.value = options.value; + if (options.selectValueOnOpen !== false) { + inp.select(); + } + } + if (options.onInput) CodeMirror.on(inp, "input", function (e) { + options.onInput(e, inp.value, close); + }); + if (options.onKeyUp) CodeMirror.on(inp, "keyup", function (e) { + options.onKeyUp(e, inp.value, close); + }); + CodeMirror.on(inp, "keydown", function (e) { + if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { + return; + } + if (e.keyCode == 27 || options.closeOnEnter !== false && e.keyCode == 13) { + inp.blur(); + CodeMirror.e_stop(e); + close(); + } + if (e.keyCode == 13) callback(inp.value, e); + }); + if (options.closeOnBlur !== false) CodeMirror.on(dialog, "focusout", function (evt) { + if (evt.relatedTarget !== null) close(); + }); + } else if (button = dialog.getElementsByTagName("button")[0]) { + CodeMirror.on(button, "click", function () { + close(); + me.focus(); + }); + if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close); + button.focus(); + } + return close; + }); + CodeMirror.defineExtension("openConfirm", function (template, callbacks, options) { + closeNotification(this, null); + var dialog = dialogDiv(this, template, options && options.bottom); + var buttons = dialog.getElementsByTagName("button"); + var closed = false, + me = this, + blurring = 1; + function close() { + if (closed) return; + closed = true; + CodeMirror.rmClass(dialog.parentNode, 'dialog-opened'); + dialog.parentNode.removeChild(dialog); + me.focus(); + } + buttons[0].focus(); + for (var i = 0; i < buttons.length; ++i) { + var b = buttons[i]; + (function (callback) { + CodeMirror.on(b, "click", function (e) { + CodeMirror.e_preventDefault(e); + close(); + if (callback) callback(me); + }); + })(callbacks[i]); + CodeMirror.on(b, "blur", function () { + --blurring; + setTimeout(function () { + if (blurring <= 0) close(); + }, 200); + }); + CodeMirror.on(b, "focus", function () { + ++blurring; + }); + } + }); + + /* + * openNotification + * Opens a notification, that can be closed with an optional timer + * (default 5000ms timer) and always closes on click. + * + * If a notification is opened while another is opened, it will close the + * currently opened one and open the new one immediately. + */ + CodeMirror.defineExtension("openNotification", function (template, options) { + closeNotification(this, close); + var dialog = dialogDiv(this, template, options && options.bottom); + var closed = false, + doneTimer; + var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000; + function close() { + if (closed) return; + closed = true; + clearTimeout(doneTimer); + CodeMirror.rmClass(dialog.parentNode, 'dialog-opened'); + dialog.parentNode.removeChild(dialog); + } + CodeMirror.on(dialog, 'click', function (e) { + CodeMirror.e_preventDefault(e); + close(); + }); + if (duration) doneTimer = setTimeout(close, duration); + return close; + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/edit/closebrackets.js": +/*!********************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/edit/closebrackets.js ***! + \********************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + var defaults = { + pairs: "()[]{}''\"\"", + closeBefore: ")]}'\":;>", + triples: "", + explode: "[]{}" + }; + var Pos = CodeMirror.Pos; + CodeMirror.defineOption("autoCloseBrackets", false, function (cm, val, old) { + if (old && old != CodeMirror.Init) { + cm.removeKeyMap(keyMap); + cm.state.closeBrackets = null; + } + if (val) { + ensureBound(getOption(val, "pairs")); + cm.state.closeBrackets = val; + cm.addKeyMap(keyMap); + } + }); + function getOption(conf, name) { + if (name == "pairs" && typeof conf == "string") return conf; + if (typeof conf == "object" && conf[name] != null) return conf[name]; + return defaults[name]; + } + var keyMap = { + Backspace: handleBackspace, + Enter: handleEnter + }; + function ensureBound(chars) { + for (var i = 0; i < chars.length; i++) { + var ch = chars.charAt(i), + key = "'" + ch + "'"; + if (!keyMap[key]) keyMap[key] = handler(ch); + } + } + ensureBound(defaults.pairs + "`"); + function handler(ch) { + return function (cm) { + return handleChar(cm, ch); + }; + } + function getConfig(cm) { + var deflt = cm.state.closeBrackets; + if (!deflt || deflt.override) return deflt; + var mode = cm.getModeAt(cm.getCursor()); + return mode.closeBrackets || deflt; + } + function handleBackspace(cm) { + var conf = getConfig(cm); + if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass; + var pairs = getOption(conf, "pairs"); + var ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) return CodeMirror.Pass; + var around = charsAround(cm, ranges[i].head); + if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass; + } + for (var i = ranges.length - 1; i >= 0; i--) { + var cur = ranges[i].head; + cm.replaceRange("", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1), "+delete"); + } + } + function handleEnter(cm) { + var conf = getConfig(cm); + var explode = conf && getOption(conf, "explode"); + if (!explode || cm.getOption("disableInput")) return CodeMirror.Pass; + var ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) return CodeMirror.Pass; + var around = charsAround(cm, ranges[i].head); + if (!around || explode.indexOf(around) % 2 != 0) return CodeMirror.Pass; + } + cm.operation(function () { + var linesep = cm.lineSeparator() || "\n"; + cm.replaceSelection(linesep + linesep, null); + moveSel(cm, -1); + ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + var line = ranges[i].head.line; + cm.indentLine(line, null, true); + cm.indentLine(line + 1, null, true); + } + }); + } + function moveSel(cm, dir) { + var newRanges = [], + ranges = cm.listSelections(), + primary = 0; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (range.head == cm.getCursor()) primary = i; + var pos = range.head.ch || dir > 0 ? { + line: range.head.line, + ch: range.head.ch + dir + } : { + line: range.head.line - 1 + }; + newRanges.push({ + anchor: pos, + head: pos + }); + } + cm.setSelections(newRanges, primary); + } + function contractSelection(sel) { + var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0; + return { + anchor: new Pos(sel.anchor.line, sel.anchor.ch + (inverted ? -1 : 1)), + head: new Pos(sel.head.line, sel.head.ch + (inverted ? 1 : -1)) + }; + } + function handleChar(cm, ch) { + var conf = getConfig(cm); + if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass; + var pairs = getOption(conf, "pairs"); + var pos = pairs.indexOf(ch); + if (pos == -1) return CodeMirror.Pass; + var closeBefore = getOption(conf, "closeBefore"); + var triples = getOption(conf, "triples"); + var identical = pairs.charAt(pos + 1) == ch; + var ranges = cm.listSelections(); + var opening = pos % 2 == 0; + var type; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i], + cur = range.head, + curType; + var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1)); + if (opening && !range.empty()) { + curType = "surround"; + } else if ((identical || !opening) && next == ch) { + if (identical && stringStartsAfter(cm, cur)) curType = "both";else if (triples.indexOf(ch) >= 0 && cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == ch + ch + ch) curType = "skipThree";else curType = "skip"; + } else if (identical && cur.ch > 1 && triples.indexOf(ch) >= 0 && cm.getRange(Pos(cur.line, cur.ch - 2), cur) == ch + ch) { + if (cur.ch > 2 && /\bstring/.test(cm.getTokenTypeAt(Pos(cur.line, cur.ch - 2)))) return CodeMirror.Pass; + curType = "addFour"; + } else if (identical) { + var prev = cur.ch == 0 ? " " : cm.getRange(Pos(cur.line, cur.ch - 1), cur); + if (!CodeMirror.isWordChar(next) && prev != ch && !CodeMirror.isWordChar(prev)) curType = "both";else return CodeMirror.Pass; + } else if (opening && (next.length === 0 || /\s/.test(next) || closeBefore.indexOf(next) > -1)) { + curType = "both"; + } else { + return CodeMirror.Pass; + } + if (!type) type = curType;else if (type != curType) return CodeMirror.Pass; + } + var left = pos % 2 ? pairs.charAt(pos - 1) : ch; + var right = pos % 2 ? ch : pairs.charAt(pos + 1); + cm.operation(function () { + if (type == "skip") { + moveSel(cm, 1); + } else if (type == "skipThree") { + moveSel(cm, 3); + } else if (type == "surround") { + var sels = cm.getSelections(); + for (var i = 0; i < sels.length; i++) sels[i] = left + sels[i] + right; + cm.replaceSelections(sels, "around"); + sels = cm.listSelections().slice(); + for (var i = 0; i < sels.length; i++) sels[i] = contractSelection(sels[i]); + cm.setSelections(sels); + } else if (type == "both") { + cm.replaceSelection(left + right, null); + cm.triggerElectric(left + right); + moveSel(cm, -1); + } else if (type == "addFour") { + cm.replaceSelection(left + left + left + left, "before"); + moveSel(cm, 1); + } + }); + } + function charsAround(cm, pos) { + var str = cm.getRange(Pos(pos.line, pos.ch - 1), Pos(pos.line, pos.ch + 1)); + return str.length == 2 ? str : null; + } + function stringStartsAfter(cm, pos) { + var token = cm.getTokenAt(Pos(pos.line, pos.ch + 1)); + return /\bstring/.test(token.type) && token.start == pos.ch && (pos.ch == 0 || !/\bstring/.test(cm.getTokenTypeAt(pos))); + } +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/edit/matchbrackets.js": +/*!********************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/edit/matchbrackets.js ***! + \********************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + var ie_lt8 = /MSIE \d/.test(navigator.userAgent) && (document.documentMode == null || document.documentMode < 8); + var Pos = CodeMirror.Pos; + var matching = { + "(": ")>", + ")": "(<", + "[": "]>", + "]": "[<", + "{": "}>", + "}": "{<", + "<": ">>", + ">": "<<" + }; + function bracketRegex(config) { + return config && config.bracketRegex || /[(){}[\]]/; + } + function findMatchingBracket(cm, where, config) { + var line = cm.getLineHandle(where.line), + pos = where.ch - 1; + var afterCursor = config && config.afterCursor; + if (afterCursor == null) afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className); + var re = bracketRegex(config); + + // A cursor is defined as between two characters, but in in vim command mode + // (i.e. not insert mode), the cursor is visually represented as a + // highlighted box on top of the 2nd character. Otherwise, we allow matches + // from before or after the cursor. + var match = !afterCursor && pos >= 0 && re.test(line.text.charAt(pos)) && matching[line.text.charAt(pos)] || re.test(line.text.charAt(pos + 1)) && matching[line.text.charAt(++pos)]; + if (!match) return null; + var dir = match.charAt(1) == ">" ? 1 : -1; + if (config && config.strict && dir > 0 != (pos == where.ch)) return null; + var style = cm.getTokenTypeAt(Pos(where.line, pos + 1)); + var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style, config); + if (found == null) return null; + return { + from: Pos(where.line, pos), + to: found && found.pos, + match: found && found.ch == match.charAt(0), + forward: dir > 0 + }; + } + + // bracketRegex is used to specify which type of bracket to scan + // should be a regexp, e.g. /[[\]]/ + // + // Note: If "where" is on an open bracket, then this bracket is ignored. + // + // Returns false when no bracket was found, null when it reached + // maxScanLines and gave up + function scanForBracket(cm, where, dir, style, config) { + var maxScanLen = config && config.maxScanLineLength || 10000; + var maxScanLines = config && config.maxScanLines || 1000; + var stack = []; + var re = bracketRegex(config); + var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1) : Math.max(cm.firstLine() - 1, where.line - maxScanLines); + for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) { + var line = cm.getLine(lineNo); + if (!line) continue; + var pos = dir > 0 ? 0 : line.length - 1, + end = dir > 0 ? line.length : -1; + if (line.length > maxScanLen) continue; + if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0); + for (; pos != end; pos += dir) { + var ch = line.charAt(pos); + if (re.test(ch) && (style === undefined || (cm.getTokenTypeAt(Pos(lineNo, pos + 1)) || "") == (style || ""))) { + var match = matching[ch]; + if (match && match.charAt(1) == ">" == dir > 0) stack.push(ch);else if (!stack.length) return { + pos: Pos(lineNo, pos), + ch: ch + };else stack.pop(); + } + } + } + return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null; + } + function matchBrackets(cm, autoclear, config) { + // Disable brace matching in long lines, since it'll cause hugely slow updates + var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000, + highlightNonMatching = config && config.highlightNonMatching; + var marks = [], + ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, config); + if (match && (match.match || highlightNonMatching !== false) && cm.getLine(match.from.line).length <= maxHighlightLen) { + var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; + marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), { + className: style + })); + if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen) marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), { + className: style + })); + } + } + if (marks.length) { + // Kludge to work around the IE bug from issue #1193, where text + // input stops going to the textarea whenever this fires. + if (ie_lt8 && cm.state.focused) cm.focus(); + var clear = function () { + cm.operation(function () { + for (var i = 0; i < marks.length; i++) marks[i].clear(); + }); + }; + if (autoclear) setTimeout(clear, 800);else return clear; + } + } + function doMatchBrackets(cm) { + cm.operation(function () { + if (cm.state.matchBrackets.currentlyHighlighted) { + cm.state.matchBrackets.currentlyHighlighted(); + cm.state.matchBrackets.currentlyHighlighted = null; + } + cm.state.matchBrackets.currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets); + }); + } + function clearHighlighted(cm) { + if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) { + cm.state.matchBrackets.currentlyHighlighted(); + cm.state.matchBrackets.currentlyHighlighted = null; + } + } + CodeMirror.defineOption("matchBrackets", false, function (cm, val, old) { + if (old && old != CodeMirror.Init) { + cm.off("cursorActivity", doMatchBrackets); + cm.off("focus", doMatchBrackets); + cm.off("blur", clearHighlighted); + clearHighlighted(cm); + } + if (val) { + cm.state.matchBrackets = typeof val == "object" ? val : {}; + cm.on("cursorActivity", doMatchBrackets); + cm.on("focus", doMatchBrackets); + cm.on("blur", clearHighlighted); + } + }); + CodeMirror.defineExtension("matchBrackets", function () { + matchBrackets(this, true); + }); + CodeMirror.defineExtension("findMatchingBracket", function (pos, config, oldConfig) { + // Backwards-compatibility kludge + if (oldConfig || typeof config == "boolean") { + if (!oldConfig) { + config = config ? { + strict: true + } : null; + } else { + oldConfig.strict = config; + config = oldConfig; + } + } + return findMatchingBracket(this, pos, config); + }); + CodeMirror.defineExtension("scanForBracket", function (pos, dir, style, config) { + return scanForBracket(this, pos, dir, style, config); + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/fold/brace-fold.js": +/*!*****************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/fold/brace-fold.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + function bracketFolding(pairs) { + return function (cm, start) { + var line = start.line, + lineText = cm.getLine(line); + function findOpening(pair) { + var tokenType; + for (var at = start.ch, pass = 0;;) { + var found = at <= 0 ? -1 : lineText.lastIndexOf(pair[0], at - 1); + if (found == -1) { + if (pass == 1) break; + pass = 1; + at = lineText.length; + continue; + } + if (pass == 1 && found < start.ch) break; + tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)); + if (!/^(comment|string)/.test(tokenType)) return { + ch: found + 1, + tokenType: tokenType, + pair: pair + }; + at = found - 1; + } + } + function findRange(found) { + var count = 1, + lastLine = cm.lastLine(), + end, + startCh = found.ch, + endCh; + outer: for (var i = line; i <= lastLine; ++i) { + var text = cm.getLine(i), + pos = i == line ? startCh : 0; + for (;;) { + var nextOpen = text.indexOf(found.pair[0], pos), + nextClose = text.indexOf(found.pair[1], pos); + if (nextOpen < 0) nextOpen = text.length; + if (nextClose < 0) nextClose = text.length; + pos = Math.min(nextOpen, nextClose); + if (pos == text.length) break; + if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == found.tokenType) { + if (pos == nextOpen) ++count;else if (! --count) { + end = i; + endCh = pos; + break outer; + } + } + ++pos; + } + } + if (end == null || line == end) return null; + return { + from: CodeMirror.Pos(line, startCh), + to: CodeMirror.Pos(end, endCh) + }; + } + var found = []; + for (var i = 0; i < pairs.length; i++) { + var open = findOpening(pairs[i]); + if (open) found.push(open); + } + found.sort(function (a, b) { + return a.ch - b.ch; + }); + for (var i = 0; i < found.length; i++) { + var range = findRange(found[i]); + if (range) return range; + } + return null; + }; + } + CodeMirror.registerHelper("fold", "brace", bracketFolding([["{", "}"], ["[", "]"]])); + CodeMirror.registerHelper("fold", "brace-paren", bracketFolding([["{", "}"], ["[", "]"], ["(", ")"]])); + CodeMirror.registerHelper("fold", "import", function (cm, start) { + function hasImport(line) { + if (line < cm.firstLine() || line > cm.lastLine()) return null; + var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); + if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); + if (start.type != "keyword" || start.string != "import") return null; + // Now find closing semicolon, return its position + for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) { + var text = cm.getLine(i), + semi = text.indexOf(";"); + if (semi != -1) return { + startCh: start.end, + end: CodeMirror.Pos(i, semi) + }; + } + } + var startLine = start.line, + has = hasImport(startLine), + prev; + if (!has || hasImport(startLine - 1) || (prev = hasImport(startLine - 2)) && prev.end.line == startLine - 1) return null; + for (var end = has.end;;) { + var next = hasImport(end.line + 1); + if (next == null) break; + end = next.end; + } + return { + from: cm.clipPos(CodeMirror.Pos(startLine, has.startCh + 1)), + to: end + }; + }); + CodeMirror.registerHelper("fold", "include", function (cm, start) { + function hasInclude(line) { + if (line < cm.firstLine() || line > cm.lastLine()) return null; + var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); + if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); + if (start.type == "meta" && start.string.slice(0, 8) == "#include") return start.start + 8; + } + var startLine = start.line, + has = hasInclude(startLine); + if (has == null || hasInclude(startLine - 1) != null) return null; + for (var end = startLine;;) { + var next = hasInclude(end + 1); + if (next == null) break; + ++end; + } + return { + from: CodeMirror.Pos(startLine, has + 1), + to: cm.clipPos(CodeMirror.Pos(end)) + }; + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/fold/foldcode.js": +/*!***************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/fold/foldcode.js ***! + \***************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + function doFold(cm, pos, options, force) { + if (options && options.call) { + var finder = options; + options = null; + } else { + var finder = getOption(cm, options, "rangeFinder"); + } + if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0); + var minSize = getOption(cm, options, "minFoldSize"); + function getRange(allowFolded) { + var range = finder(cm, pos); + if (!range || range.to.line - range.from.line < minSize) return null; + if (force === "fold") return range; + var marks = cm.findMarksAt(range.from); + for (var i = 0; i < marks.length; ++i) { + if (marks[i].__isFold) { + if (!allowFolded) return null; + range.cleared = true; + marks[i].clear(); + } + } + return range; + } + var range = getRange(true); + if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) { + pos = CodeMirror.Pos(pos.line - 1, 0); + range = getRange(false); + } + if (!range || range.cleared || force === "unfold") return; + var myWidget = makeWidget(cm, options, range); + CodeMirror.on(myWidget, "mousedown", function (e) { + myRange.clear(); + CodeMirror.e_preventDefault(e); + }); + var myRange = cm.markText(range.from, range.to, { + replacedWith: myWidget, + clearOnEnter: getOption(cm, options, "clearOnEnter"), + __isFold: true + }); + myRange.on("clear", function (from, to) { + CodeMirror.signal(cm, "unfold", cm, from, to); + }); + CodeMirror.signal(cm, "fold", cm, range.from, range.to); + } + function makeWidget(cm, options, range) { + var widget = getOption(cm, options, "widget"); + if (typeof widget == "function") { + widget = widget(range.from, range.to); + } + if (typeof widget == "string") { + var text = document.createTextNode(widget); + widget = document.createElement("span"); + widget.appendChild(text); + widget.className = "CodeMirror-foldmarker"; + } else if (widget) { + widget = widget.cloneNode(true); + } + return widget; + } + + // Clumsy backwards-compatible interface + CodeMirror.newFoldFunction = function (rangeFinder, widget) { + return function (cm, pos) { + doFold(cm, pos, { + rangeFinder: rangeFinder, + widget: widget + }); + }; + }; + + // New-style interface + CodeMirror.defineExtension("foldCode", function (pos, options, force) { + doFold(this, pos, options, force); + }); + CodeMirror.defineExtension("isFolded", function (pos) { + var marks = this.findMarksAt(pos); + for (var i = 0; i < marks.length; ++i) if (marks[i].__isFold) return true; + }); + CodeMirror.commands.toggleFold = function (cm) { + cm.foldCode(cm.getCursor()); + }; + CodeMirror.commands.fold = function (cm) { + cm.foldCode(cm.getCursor(), null, "fold"); + }; + CodeMirror.commands.unfold = function (cm) { + cm.foldCode(cm.getCursor(), { + scanUp: false + }, "unfold"); + }; + CodeMirror.commands.foldAll = function (cm) { + cm.operation(function () { + for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) cm.foldCode(CodeMirror.Pos(i, 0), { + scanUp: false + }, "fold"); + }); + }; + CodeMirror.commands.unfoldAll = function (cm) { + cm.operation(function () { + for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) cm.foldCode(CodeMirror.Pos(i, 0), { + scanUp: false + }, "unfold"); + }); + }; + CodeMirror.registerHelper("fold", "combine", function () { + var funcs = Array.prototype.slice.call(arguments, 0); + return function (cm, start) { + for (var i = 0; i < funcs.length; ++i) { + var found = funcs[i](cm, start); + if (found) return found; + } + }; + }); + CodeMirror.registerHelper("fold", "auto", function (cm, start) { + var helpers = cm.getHelpers(start, "fold"); + for (var i = 0; i < helpers.length; i++) { + var cur = helpers[i](cm, start); + if (cur) return cur; + } + }); + var defaultOptions = { + rangeFinder: CodeMirror.fold.auto, + widget: "\u2194", + minFoldSize: 0, + scanUp: false, + clearOnEnter: true + }; + CodeMirror.defineOption("foldOptions", null); + function getOption(cm, options, name) { + if (options && options[name] !== undefined) return options[name]; + var editorOptions = cm.options.foldOptions; + if (editorOptions && editorOptions[name] !== undefined) return editorOptions[name]; + return defaultOptions[name]; + } + CodeMirror.defineExtension("foldOption", function (options, name) { + return getOption(this, options, name); + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/fold/foldgutter.js": +/*!*****************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/fold/foldgutter.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"), __webpack_require__(/*! ./foldcode */ "../../../node_modules/codemirror/addon/fold/foldcode.js"));else {} +})(function (CodeMirror) { + "use strict"; + + CodeMirror.defineOption("foldGutter", false, function (cm, val, old) { + if (old && old != CodeMirror.Init) { + cm.clearGutter(cm.state.foldGutter.options.gutter); + cm.state.foldGutter = null; + cm.off("gutterClick", onGutterClick); + cm.off("changes", onChange); + cm.off("viewportChange", onViewportChange); + cm.off("fold", onFold); + cm.off("unfold", onFold); + cm.off("swapDoc", onChange); + } + if (val) { + cm.state.foldGutter = new State(parseOptions(val)); + updateInViewport(cm); + cm.on("gutterClick", onGutterClick); + cm.on("changes", onChange); + cm.on("viewportChange", onViewportChange); + cm.on("fold", onFold); + cm.on("unfold", onFold); + cm.on("swapDoc", onChange); + } + }); + var Pos = CodeMirror.Pos; + function State(options) { + this.options = options; + this.from = this.to = 0; + } + function parseOptions(opts) { + if (opts === true) opts = {}; + if (opts.gutter == null) opts.gutter = "CodeMirror-foldgutter"; + if (opts.indicatorOpen == null) opts.indicatorOpen = "CodeMirror-foldgutter-open"; + if (opts.indicatorFolded == null) opts.indicatorFolded = "CodeMirror-foldgutter-folded"; + return opts; + } + function isFolded(cm, line) { + var marks = cm.findMarks(Pos(line, 0), Pos(line + 1, 0)); + for (var i = 0; i < marks.length; ++i) { + if (marks[i].__isFold) { + var fromPos = marks[i].find(-1); + if (fromPos && fromPos.line === line) return marks[i]; + } + } + } + function marker(spec) { + if (typeof spec == "string") { + var elt = document.createElement("div"); + elt.className = spec + " CodeMirror-guttermarker-subtle"; + return elt; + } else { + return spec.cloneNode(true); + } + } + function updateFoldInfo(cm, from, to) { + var opts = cm.state.foldGutter.options, + cur = from - 1; + var minSize = cm.foldOption(opts, "minFoldSize"); + var func = cm.foldOption(opts, "rangeFinder"); + // we can reuse the built-in indicator element if its className matches the new state + var clsFolded = typeof opts.indicatorFolded == "string" && classTest(opts.indicatorFolded); + var clsOpen = typeof opts.indicatorOpen == "string" && classTest(opts.indicatorOpen); + cm.eachLine(from, to, function (line) { + ++cur; + var mark = null; + var old = line.gutterMarkers; + if (old) old = old[opts.gutter]; + if (isFolded(cm, cur)) { + if (clsFolded && old && clsFolded.test(old.className)) return; + mark = marker(opts.indicatorFolded); + } else { + var pos = Pos(cur, 0); + var range = func && func(cm, pos); + if (range && range.to.line - range.from.line >= minSize) { + if (clsOpen && old && clsOpen.test(old.className)) return; + mark = marker(opts.indicatorOpen); + } + } + if (!mark && !old) return; + cm.setGutterMarker(line, opts.gutter, mark); + }); + } + + // copied from CodeMirror/src/util/dom.js + function classTest(cls) { + return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); + } + function updateInViewport(cm) { + var vp = cm.getViewport(), + state = cm.state.foldGutter; + if (!state) return; + cm.operation(function () { + updateFoldInfo(cm, vp.from, vp.to); + }); + state.from = vp.from; + state.to = vp.to; + } + function onGutterClick(cm, line, gutter) { + var state = cm.state.foldGutter; + if (!state) return; + var opts = state.options; + if (gutter != opts.gutter) return; + var folded = isFolded(cm, line); + if (folded) folded.clear();else cm.foldCode(Pos(line, 0), opts); + } + function onChange(cm) { + var state = cm.state.foldGutter; + if (!state) return; + var opts = state.options; + state.from = state.to = 0; + clearTimeout(state.changeUpdate); + state.changeUpdate = setTimeout(function () { + updateInViewport(cm); + }, opts.foldOnChangeTimeSpan || 600); + } + function onViewportChange(cm) { + var state = cm.state.foldGutter; + if (!state) return; + var opts = state.options; + clearTimeout(state.changeUpdate); + state.changeUpdate = setTimeout(function () { + var vp = cm.getViewport(); + if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { + updateInViewport(cm); + } else { + cm.operation(function () { + if (vp.from < state.from) { + updateFoldInfo(cm, vp.from, state.from); + state.from = vp.from; + } + if (vp.to > state.to) { + updateFoldInfo(cm, state.to, vp.to); + state.to = vp.to; + } + }); + } + }, opts.updateViewportTimeSpan || 400); + } + function onFold(cm, from) { + var state = cm.state.foldGutter; + if (!state) return; + var line = from.line; + if (line >= state.from && line < state.to) updateFoldInfo(cm, line, line + 1); + } +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/hint/show-hint.js": +/*!****************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/hint/show-hint.js ***! + \****************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// declare global: DOMRect + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + var HINT_ELEMENT_CLASS = "CodeMirror-hint"; + var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active"; + + // This is the old interface, kept around for now to stay + // backwards-compatible. + CodeMirror.showHint = function (cm, getHints, options) { + if (!getHints) return cm.showHint(options); + if (options && options.async) getHints.async = true; + var newOpts = { + hint: getHints + }; + if (options) for (var prop in options) newOpts[prop] = options[prop]; + return cm.showHint(newOpts); + }; + CodeMirror.defineExtension("showHint", function (options) { + options = parseOptions(this, this.getCursor("start"), options); + var selections = this.listSelections(); + if (selections.length > 1) return; + // By default, don't allow completion when something is selected. + // A hint function can have a `supportsSelection` property to + // indicate that it can handle selections. + if (this.somethingSelected()) { + if (!options.hint.supportsSelection) return; + // Don't try with cross-line selections + for (var i = 0; i < selections.length; i++) if (selections[i].head.line != selections[i].anchor.line) return; + } + if (this.state.completionActive) this.state.completionActive.close(); + var completion = this.state.completionActive = new Completion(this, options); + if (!completion.options.hint) return; + CodeMirror.signal(this, "startCompletion", this); + completion.update(true); + }); + CodeMirror.defineExtension("closeHint", function () { + if (this.state.completionActive) this.state.completionActive.close(); + }); + function Completion(cm, options) { + this.cm = cm; + this.options = options; + this.widget = null; + this.debounce = 0; + this.tick = 0; + this.startPos = this.cm.getCursor("start"); + this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length; + if (this.options.updateOnCursorActivity) { + var self = this; + cm.on("cursorActivity", this.activityFunc = function () { + self.cursorActivity(); + }); + } + } + var requestAnimationFrame = window.requestAnimationFrame || function (fn) { + return setTimeout(fn, 1000 / 60); + }; + var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout; + Completion.prototype = { + close: function () { + if (!this.active()) return; + this.cm.state.completionActive = null; + this.tick = null; + if (this.options.updateOnCursorActivity) { + this.cm.off("cursorActivity", this.activityFunc); + } + if (this.widget && this.data) CodeMirror.signal(this.data, "close"); + if (this.widget) this.widget.close(); + CodeMirror.signal(this.cm, "endCompletion", this.cm); + }, + active: function () { + return this.cm.state.completionActive == this; + }, + pick: function (data, i) { + var completion = data.list[i], + self = this; + this.cm.operation(function () { + if (completion.hint) completion.hint(self.cm, data, completion);else self.cm.replaceRange(getText(completion), completion.from || data.from, completion.to || data.to, "complete"); + CodeMirror.signal(data, "pick", completion); + self.cm.scrollIntoView(); + }); + if (this.options.closeOnPick) { + this.close(); + } + }, + cursorActivity: function () { + if (this.debounce) { + cancelAnimationFrame(this.debounce); + this.debounce = 0; + } + var identStart = this.startPos; + if (this.data) { + identStart = this.data.from; + } + var pos = this.cm.getCursor(), + line = this.cm.getLine(pos.line); + if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch || pos.ch < identStart.ch || this.cm.somethingSelected() || !pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1))) { + this.close(); + } else { + var self = this; + this.debounce = requestAnimationFrame(function () { + self.update(); + }); + if (this.widget) this.widget.disable(); + } + }, + update: function (first) { + if (this.tick == null) return; + var self = this, + myTick = ++this.tick; + fetchHints(this.options.hint, this.cm, this.options, function (data) { + if (self.tick == myTick) self.finishUpdate(data, first); + }); + }, + finishUpdate: function (data, first) { + if (this.data) CodeMirror.signal(this.data, "update"); + var picked = this.widget && this.widget.picked || first && this.options.completeSingle; + if (this.widget) this.widget.close(); + this.data = data; + if (data && data.list.length) { + if (picked && data.list.length == 1) { + this.pick(data, 0); + } else { + this.widget = new Widget(this, data); + CodeMirror.signal(data, "shown"); + } + } + } + }; + function parseOptions(cm, pos, options) { + var editor = cm.options.hintOptions; + var out = {}; + for (var prop in defaultOptions) out[prop] = defaultOptions[prop]; + if (editor) for (var prop in editor) if (editor[prop] !== undefined) out[prop] = editor[prop]; + if (options) for (var prop in options) if (options[prop] !== undefined) out[prop] = options[prop]; + if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos); + return out; + } + function getText(completion) { + if (typeof completion == "string") return completion;else return completion.text; + } + function buildKeyMap(completion, handle) { + var baseMap = { + Up: function () { + handle.moveFocus(-1); + }, + Down: function () { + handle.moveFocus(1); + }, + PageUp: function () { + handle.moveFocus(-handle.menuSize() + 1, true); + }, + PageDown: function () { + handle.moveFocus(handle.menuSize() - 1, true); + }, + Home: function () { + handle.setFocus(0); + }, + End: function () { + handle.setFocus(handle.length - 1); + }, + Enter: handle.pick, + Tab: handle.pick, + Esc: handle.close + }; + var mac = /Mac/.test(navigator.platform); + if (mac) { + baseMap["Ctrl-P"] = function () { + handle.moveFocus(-1); + }; + baseMap["Ctrl-N"] = function () { + handle.moveFocus(1); + }; + } + var custom = completion.options.customKeys; + var ourMap = custom ? {} : baseMap; + function addBinding(key, val) { + var bound; + if (typeof val != "string") bound = function (cm) { + return val(cm, handle); + }; + // This mechanism is deprecated + else if (baseMap.hasOwnProperty(val)) bound = baseMap[val];else bound = val; + ourMap[key] = bound; + } + if (custom) for (var key in custom) if (custom.hasOwnProperty(key)) addBinding(key, custom[key]); + var extra = completion.options.extraKeys; + if (extra) for (var key in extra) if (extra.hasOwnProperty(key)) addBinding(key, extra[key]); + return ourMap; + } + function getHintElement(hintsElement, el) { + while (el && el != hintsElement) { + if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el; + el = el.parentNode; + } + } + function Widget(completion, data) { + this.id = "cm-complete-" + Math.floor(Math.random(1e6)); + this.completion = completion; + this.data = data; + this.picked = false; + var widget = this, + cm = completion.cm; + var ownerDocument = cm.getInputField().ownerDocument; + var parentWindow = ownerDocument.defaultView || ownerDocument.parentWindow; + var hints = this.hints = ownerDocument.createElement("ul"); + hints.setAttribute("role", "listbox"); + hints.setAttribute("aria-expanded", "true"); + hints.id = this.id; + var theme = completion.cm.options.theme; + hints.className = "CodeMirror-hints " + theme; + this.selectedHint = data.selectedHint || 0; + var completions = data.list; + for (var i = 0; i < completions.length; ++i) { + var elt = hints.appendChild(ownerDocument.createElement("li")), + cur = completions[i]; + var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS); + if (cur.className != null) className = cur.className + " " + className; + elt.className = className; + if (i == this.selectedHint) elt.setAttribute("aria-selected", "true"); + elt.id = this.id + "-" + i; + elt.setAttribute("role", "option"); + if (cur.render) cur.render(elt, data, cur);else elt.appendChild(ownerDocument.createTextNode(cur.displayText || getText(cur))); + elt.hintId = i; + } + var container = completion.options.container || ownerDocument.body; + var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null); + var left = pos.left, + top = pos.bottom, + below = true; + var offsetLeft = 0, + offsetTop = 0; + if (container !== ownerDocument.body) { + // We offset the cursor position because left and top are relative to the offsetParent's top left corner. + var isContainerPositioned = ['absolute', 'relative', 'fixed'].indexOf(parentWindow.getComputedStyle(container).position) !== -1; + var offsetParent = isContainerPositioned ? container : container.offsetParent; + var offsetParentPosition = offsetParent.getBoundingClientRect(); + var bodyPosition = ownerDocument.body.getBoundingClientRect(); + offsetLeft = offsetParentPosition.left - bodyPosition.left - offsetParent.scrollLeft; + offsetTop = offsetParentPosition.top - bodyPosition.top - offsetParent.scrollTop; + } + hints.style.left = left - offsetLeft + "px"; + hints.style.top = top - offsetTop + "px"; + + // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor. + var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth); + var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight); + container.appendChild(hints); + cm.getInputField().setAttribute("aria-autocomplete", "list"); + cm.getInputField().setAttribute("aria-owns", this.id); + cm.getInputField().setAttribute("aria-activedescendant", this.id + "-" + this.selectedHint); + var box = completion.options.moveOnOverlap ? hints.getBoundingClientRect() : new DOMRect(); + var scrolls = completion.options.paddingForScrollbar ? hints.scrollHeight > hints.clientHeight + 1 : false; + + // Compute in the timeout to avoid reflow on init + var startScroll; + setTimeout(function () { + startScroll = cm.getScrollInfo(); + }); + var overlapY = box.bottom - winH; + if (overlapY > 0) { + var height = box.bottom - box.top, + curTop = pos.top - (pos.bottom - box.top); + if (curTop - height > 0) { + // Fits above cursor + hints.style.top = (top = pos.top - height - offsetTop) + "px"; + below = false; + } else if (height > winH) { + hints.style.height = winH - 5 + "px"; + hints.style.top = (top = pos.bottom - box.top - offsetTop) + "px"; + var cursor = cm.getCursor(); + if (data.from.ch != cursor.ch) { + pos = cm.cursorCoords(cursor); + hints.style.left = (left = pos.left - offsetLeft) + "px"; + box = hints.getBoundingClientRect(); + } + } + } + var overlapX = box.right - winW; + if (scrolls) overlapX += cm.display.nativeBarWidth; + if (overlapX > 0) { + if (box.right - box.left > winW) { + hints.style.width = winW - 5 + "px"; + overlapX -= box.right - box.left - winW; + } + hints.style.left = (left = pos.left - overlapX - offsetLeft) + "px"; + } + if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling) node.style.paddingRight = cm.display.nativeBarWidth + "px"; + cm.addKeyMap(this.keyMap = buildKeyMap(completion, { + moveFocus: function (n, avoidWrap) { + widget.changeActive(widget.selectedHint + n, avoidWrap); + }, + setFocus: function (n) { + widget.changeActive(n); + }, + menuSize: function () { + return widget.screenAmount(); + }, + length: completions.length, + close: function () { + completion.close(); + }, + pick: function () { + widget.pick(); + }, + data: data + })); + if (completion.options.closeOnUnfocus) { + var closingOnBlur; + cm.on("blur", this.onBlur = function () { + closingOnBlur = setTimeout(function () { + completion.close(); + }, 100); + }); + cm.on("focus", this.onFocus = function () { + clearTimeout(closingOnBlur); + }); + } + cm.on("scroll", this.onScroll = function () { + var curScroll = cm.getScrollInfo(), + editor = cm.getWrapperElement().getBoundingClientRect(); + if (!startScroll) startScroll = cm.getScrollInfo(); + var newTop = top + startScroll.top - curScroll.top; + var point = newTop - (parentWindow.pageYOffset || (ownerDocument.documentElement || ownerDocument.body).scrollTop); + if (!below) point += hints.offsetHeight; + if (point <= editor.top || point >= editor.bottom) return completion.close(); + hints.style.top = newTop + "px"; + hints.style.left = left + startScroll.left - curScroll.left + "px"; + }); + CodeMirror.on(hints, "dblclick", function (e) { + var t = getHintElement(hints, e.target || e.srcElement); + if (t && t.hintId != null) { + widget.changeActive(t.hintId); + widget.pick(); + } + }); + CodeMirror.on(hints, "click", function (e) { + var t = getHintElement(hints, e.target || e.srcElement); + if (t && t.hintId != null) { + widget.changeActive(t.hintId); + if (completion.options.completeOnSingleClick) widget.pick(); + } + }); + CodeMirror.on(hints, "mousedown", function () { + setTimeout(function () { + cm.focus(); + }, 20); + }); + + // The first hint doesn't need to be scrolled to on init + var selectedHintRange = this.getSelectedHintRange(); + if (selectedHintRange.from !== 0 || selectedHintRange.to !== 0) { + this.scrollToActive(); + } + CodeMirror.signal(data, "select", completions[this.selectedHint], hints.childNodes[this.selectedHint]); + return true; + } + Widget.prototype = { + close: function () { + if (this.completion.widget != this) return; + this.completion.widget = null; + if (this.hints.parentNode) this.hints.parentNode.removeChild(this.hints); + this.completion.cm.removeKeyMap(this.keyMap); + var input = this.completion.cm.getInputField(); + input.removeAttribute("aria-activedescendant"); + input.removeAttribute("aria-owns"); + var cm = this.completion.cm; + if (this.completion.options.closeOnUnfocus) { + cm.off("blur", this.onBlur); + cm.off("focus", this.onFocus); + } + cm.off("scroll", this.onScroll); + }, + disable: function () { + this.completion.cm.removeKeyMap(this.keyMap); + var widget = this; + this.keyMap = { + Enter: function () { + widget.picked = true; + } + }; + this.completion.cm.addKeyMap(this.keyMap); + }, + pick: function () { + this.completion.pick(this.data, this.selectedHint); + }, + changeActive: function (i, avoidWrap) { + if (i >= this.data.list.length) i = avoidWrap ? this.data.list.length - 1 : 0;else if (i < 0) i = avoidWrap ? 0 : this.data.list.length - 1; + if (this.selectedHint == i) return; + var node = this.hints.childNodes[this.selectedHint]; + if (node) { + node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, ""); + node.removeAttribute("aria-selected"); + } + node = this.hints.childNodes[this.selectedHint = i]; + node.className += " " + ACTIVE_HINT_ELEMENT_CLASS; + node.setAttribute("aria-selected", "true"); + this.completion.cm.getInputField().setAttribute("aria-activedescendant", node.id); + this.scrollToActive(); + CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node); + }, + scrollToActive: function () { + var selectedHintRange = this.getSelectedHintRange(); + var node1 = this.hints.childNodes[selectedHintRange.from]; + var node2 = this.hints.childNodes[selectedHintRange.to]; + var firstNode = this.hints.firstChild; + if (node1.offsetTop < this.hints.scrollTop) this.hints.scrollTop = node1.offsetTop - firstNode.offsetTop;else if (node2.offsetTop + node2.offsetHeight > this.hints.scrollTop + this.hints.clientHeight) this.hints.scrollTop = node2.offsetTop + node2.offsetHeight - this.hints.clientHeight + firstNode.offsetTop; + }, + screenAmount: function () { + return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1; + }, + getSelectedHintRange: function () { + var margin = this.completion.options.scrollMargin || 0; + return { + from: Math.max(0, this.selectedHint - margin), + to: Math.min(this.data.list.length - 1, this.selectedHint + margin) + }; + } + }; + function applicableHelpers(cm, helpers) { + if (!cm.somethingSelected()) return helpers; + var result = []; + for (var i = 0; i < helpers.length; i++) if (helpers[i].supportsSelection) result.push(helpers[i]); + return result; + } + function fetchHints(hint, cm, options, callback) { + if (hint.async) { + hint(cm, callback, options); + } else { + var result = hint(cm, options); + if (result && result.then) result.then(callback);else callback(result); + } + } + function resolveAutoHints(cm, pos) { + var helpers = cm.getHelpers(pos, "hint"), + words; + if (helpers.length) { + var resolved = function (cm, callback, options) { + var app = applicableHelpers(cm, helpers); + function run(i) { + if (i == app.length) return callback(null); + fetchHints(app[i], cm, options, function (result) { + if (result && result.list.length > 0) callback(result);else run(i + 1); + }); + } + run(0); + }; + resolved.async = true; + resolved.supportsSelection = true; + return resolved; + } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) { + return function (cm) { + return CodeMirror.hint.fromList(cm, { + words: words + }); + }; + } else if (CodeMirror.hint.anyword) { + return function (cm, options) { + return CodeMirror.hint.anyword(cm, options); + }; + } else { + return function () {}; + } + } + CodeMirror.registerHelper("hint", "auto", { + resolve: resolveAutoHints + }); + CodeMirror.registerHelper("hint", "fromList", function (cm, options) { + var cur = cm.getCursor(), + token = cm.getTokenAt(cur); + var term, + from = CodeMirror.Pos(cur.line, token.start), + to = cur; + if (token.start < cur.ch && /\w/.test(token.string.charAt(cur.ch - token.start - 1))) { + term = token.string.substr(0, cur.ch - token.start); + } else { + term = ""; + from = cur; + } + var found = []; + for (var i = 0; i < options.words.length; i++) { + var word = options.words[i]; + if (word.slice(0, term.length) == term) found.push(word); + } + if (found.length) return { + list: found, + from: from, + to: to + }; + }); + CodeMirror.commands.autocomplete = CodeMirror.showHint; + var defaultOptions = { + hint: CodeMirror.hint.auto, + completeSingle: true, + alignWithWord: true, + closeCharacters: /[\s()\[\]{};:>,]/, + closeOnPick: true, + closeOnUnfocus: true, + updateOnCursorActivity: true, + completeOnSingleClick: true, + container: null, + customKeys: null, + extraKeys: null, + paddingForScrollbar: true, + moveOnOverlap: true + }; + CodeMirror.defineOption("hintOptions", null); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/lint/lint.js": +/*!***********************************************************!*\ + !*** ../../../node_modules/codemirror/addon/lint/lint.js ***! + \***********************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + var GUTTER_ID = "CodeMirror-lint-markers"; + var LINT_LINE_ID = "CodeMirror-lint-line-"; + function showTooltip(cm, e, content) { + var tt = document.createElement("div"); + tt.className = "CodeMirror-lint-tooltip cm-s-" + cm.options.theme; + tt.appendChild(content.cloneNode(true)); + if (cm.state.lint.options.selfContain) cm.getWrapperElement().appendChild(tt);else document.body.appendChild(tt); + function position(e) { + if (!tt.parentNode) return CodeMirror.off(document, "mousemove", position); + tt.style.top = Math.max(0, e.clientY - tt.offsetHeight - 5) + "px"; + tt.style.left = e.clientX + 5 + "px"; + } + CodeMirror.on(document, "mousemove", position); + position(e); + if (tt.style.opacity != null) tt.style.opacity = 1; + return tt; + } + function rm(elt) { + if (elt.parentNode) elt.parentNode.removeChild(elt); + } + function hideTooltip(tt) { + if (!tt.parentNode) return; + if (tt.style.opacity == null) rm(tt); + tt.style.opacity = 0; + setTimeout(function () { + rm(tt); + }, 600); + } + function showTooltipFor(cm, e, content, node) { + var tooltip = showTooltip(cm, e, content); + function hide() { + CodeMirror.off(node, "mouseout", hide); + if (tooltip) { + hideTooltip(tooltip); + tooltip = null; + } + } + var poll = setInterval(function () { + if (tooltip) for (var n = node;; n = n.parentNode) { + if (n && n.nodeType == 11) n = n.host; + if (n == document.body) return; + if (!n) { + hide(); + break; + } + } + if (!tooltip) return clearInterval(poll); + }, 400); + CodeMirror.on(node, "mouseout", hide); + } + function LintState(cm, conf, hasGutter) { + this.marked = []; + if (conf instanceof Function) conf = { + getAnnotations: conf + }; + if (!conf || conf === true) conf = {}; + this.options = {}; + this.linterOptions = conf.options || {}; + for (var prop in defaults) this.options[prop] = defaults[prop]; + for (var prop in conf) { + if (defaults.hasOwnProperty(prop)) { + if (conf[prop] != null) this.options[prop] = conf[prop]; + } else if (!conf.options) { + this.linterOptions[prop] = conf[prop]; + } + } + this.timeout = null; + this.hasGutter = hasGutter; + this.onMouseOver = function (e) { + onMouseOver(cm, e); + }; + this.waitingFor = 0; + } + var defaults = { + highlightLines: false, + tooltips: true, + delay: 500, + lintOnChange: true, + getAnnotations: null, + async: false, + selfContain: null, + formatAnnotation: null, + onUpdateLinting: null + }; + function clearMarks(cm) { + var state = cm.state.lint; + if (state.hasGutter) cm.clearGutter(GUTTER_ID); + if (state.options.highlightLines) clearErrorLines(cm); + for (var i = 0; i < state.marked.length; ++i) state.marked[i].clear(); + state.marked.length = 0; + } + function clearErrorLines(cm) { + cm.eachLine(function (line) { + var has = line.wrapClass && /\bCodeMirror-lint-line-\w+\b/.exec(line.wrapClass); + if (has) cm.removeLineClass(line, "wrap", has[0]); + }); + } + function makeMarker(cm, labels, severity, multiple, tooltips) { + var marker = document.createElement("div"), + inner = marker; + marker.className = "CodeMirror-lint-marker CodeMirror-lint-marker-" + severity; + if (multiple) { + inner = marker.appendChild(document.createElement("div")); + inner.className = "CodeMirror-lint-marker CodeMirror-lint-marker-multiple"; + } + if (tooltips != false) CodeMirror.on(inner, "mouseover", function (e) { + showTooltipFor(cm, e, labels, inner); + }); + return marker; + } + function getMaxSeverity(a, b) { + if (a == "error") return a;else return b; + } + function groupByLine(annotations) { + var lines = []; + for (var i = 0; i < annotations.length; ++i) { + var ann = annotations[i], + line = ann.from.line; + (lines[line] || (lines[line] = [])).push(ann); + } + return lines; + } + function annotationTooltip(ann) { + var severity = ann.severity; + if (!severity) severity = "error"; + var tip = document.createElement("div"); + tip.className = "CodeMirror-lint-message CodeMirror-lint-message-" + severity; + if (typeof ann.messageHTML != 'undefined') { + tip.innerHTML = ann.messageHTML; + } else { + tip.appendChild(document.createTextNode(ann.message)); + } + return tip; + } + function lintAsync(cm, getAnnotations) { + var state = cm.state.lint; + var id = ++state.waitingFor; + function abort() { + id = -1; + cm.off("change", abort); + } + cm.on("change", abort); + getAnnotations(cm.getValue(), function (annotations, arg2) { + cm.off("change", abort); + if (state.waitingFor != id) return; + if (arg2 && annotations instanceof CodeMirror) annotations = arg2; + cm.operation(function () { + updateLinting(cm, annotations); + }); + }, state.linterOptions, cm); + } + function startLinting(cm) { + var state = cm.state.lint; + if (!state) return; + var options = state.options; + /* + * Passing rules in `options` property prevents JSHint (and other linters) from complaining + * about unrecognized rules like `onUpdateLinting`, `delay`, `lintOnChange`, etc. + */ + var getAnnotations = options.getAnnotations || cm.getHelper(CodeMirror.Pos(0, 0), "lint"); + if (!getAnnotations) return; + if (options.async || getAnnotations.async) { + lintAsync(cm, getAnnotations); + } else { + var annotations = getAnnotations(cm.getValue(), state.linterOptions, cm); + if (!annotations) return; + if (annotations.then) annotations.then(function (issues) { + cm.operation(function () { + updateLinting(cm, issues); + }); + });else cm.operation(function () { + updateLinting(cm, annotations); + }); + } + } + function updateLinting(cm, annotationsNotSorted) { + var state = cm.state.lint; + if (!state) return; + var options = state.options; + clearMarks(cm); + var annotations = groupByLine(annotationsNotSorted); + for (var line = 0; line < annotations.length; ++line) { + var anns = annotations[line]; + if (!anns) continue; + + // filter out duplicate messages + var message = []; + anns = anns.filter(function (item) { + return message.indexOf(item.message) > -1 ? false : message.push(item.message); + }); + var maxSeverity = null; + var tipLabel = state.hasGutter && document.createDocumentFragment(); + for (var i = 0; i < anns.length; ++i) { + var ann = anns[i]; + var severity = ann.severity; + if (!severity) severity = "error"; + maxSeverity = getMaxSeverity(maxSeverity, severity); + if (options.formatAnnotation) ann = options.formatAnnotation(ann); + if (state.hasGutter) tipLabel.appendChild(annotationTooltip(ann)); + if (ann.to) state.marked.push(cm.markText(ann.from, ann.to, { + className: "CodeMirror-lint-mark CodeMirror-lint-mark-" + severity, + __annotation: ann + })); + } + // use original annotations[line] to show multiple messages + if (state.hasGutter) cm.setGutterMarker(line, GUTTER_ID, makeMarker(cm, tipLabel, maxSeverity, annotations[line].length > 1, options.tooltips)); + if (options.highlightLines) cm.addLineClass(line, "wrap", LINT_LINE_ID + maxSeverity); + } + if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm); + } + function onChange(cm) { + var state = cm.state.lint; + if (!state) return; + clearTimeout(state.timeout); + state.timeout = setTimeout(function () { + startLinting(cm); + }, state.options.delay); + } + function popupTooltips(cm, annotations, e) { + var target = e.target || e.srcElement; + var tooltip = document.createDocumentFragment(); + for (var i = 0; i < annotations.length; i++) { + var ann = annotations[i]; + tooltip.appendChild(annotationTooltip(ann)); + } + showTooltipFor(cm, e, tooltip, target); + } + function onMouseOver(cm, e) { + var target = e.target || e.srcElement; + if (!/\bCodeMirror-lint-mark-/.test(target.className)) return; + var box = target.getBoundingClientRect(), + x = (box.left + box.right) / 2, + y = (box.top + box.bottom) / 2; + var spans = cm.findMarksAt(cm.coordsChar({ + left: x, + top: y + }, "client")); + var annotations = []; + for (var i = 0; i < spans.length; ++i) { + var ann = spans[i].__annotation; + if (ann) annotations.push(ann); + } + if (annotations.length) popupTooltips(cm, annotations, e); + } + CodeMirror.defineOption("lint", false, function (cm, val, old) { + if (old && old != CodeMirror.Init) { + clearMarks(cm); + if (cm.state.lint.options.lintOnChange !== false) cm.off("change", onChange); + CodeMirror.off(cm.getWrapperElement(), "mouseover", cm.state.lint.onMouseOver); + clearTimeout(cm.state.lint.timeout); + delete cm.state.lint; + } + if (val) { + var gutters = cm.getOption("gutters"), + hasLintGutter = false; + for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true; + var state = cm.state.lint = new LintState(cm, val, hasLintGutter); + if (state.options.lintOnChange) cm.on("change", onChange); + if (state.options.tooltips != false && state.options.tooltips != "gutter") CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); + startLinting(cm); + } + }); + CodeMirror.defineExtension("performLint", function () { + startLinting(this); + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/search/jump-to-line.js": +/*!*********************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/search/jump-to-line.js ***! + \*********************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Defines jumpToLine command. Uses dialog.js if present. + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"), __webpack_require__(/*! ../dialog/dialog */ "../../../node_modules/codemirror/addon/dialog/dialog.js"));else {} +})(function (CodeMirror) { + "use strict"; + + // default search panel location + CodeMirror.defineOption("search", { + bottom: false + }); + function dialog(cm, text, shortText, deflt, f) { + if (cm.openDialog) cm.openDialog(text, f, { + value: deflt, + selectValueOnOpen: true, + bottom: cm.options.search.bottom + });else f(prompt(shortText, deflt)); + } + function getJumpDialog(cm) { + return cm.phrase("Jump to line:") + ' ' + cm.phrase("(Use line:column or scroll% syntax)") + ''; + } + function interpretLine(cm, string) { + var num = Number(string); + if (/^[-+]/.test(string)) return cm.getCursor().line + num;else return num - 1; + } + CodeMirror.commands.jumpToLine = function (cm) { + var cur = cm.getCursor(); + dialog(cm, getJumpDialog(cm), cm.phrase("Jump to line:"), cur.line + 1 + ":" + cur.ch, function (posStr) { + if (!posStr) return; + var match; + if (match = /^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(posStr)) { + cm.setCursor(interpretLine(cm, match[1]), Number(match[2])); + } else if (match = /^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(posStr)) { + var line = Math.round(cm.lineCount() * Number(match[1]) / 100); + if (/^[-+]/.test(match[1])) line = cur.line + line + 1; + cm.setCursor(line - 1, cur.ch); + } else if (match = /^\s*\:?\s*([\+\-]?\d+)\s*/.exec(posStr)) { + cm.setCursor(interpretLine(cm, match[1]), cur.ch); + } + }); + }; + CodeMirror.keyMap["default"]["Alt-G"] = "jumpToLine"; +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/search/search.js": +/*!***************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/search/search.js ***! + \***************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Define search commands. Depends on dialog.js or another +// implementation of the openDialog method. + +// Replace works a little oddly -- it will do the replace on the next +// Ctrl-G (or whatever is bound to findNext) press. You prevent a +// replace by making sure the match is no longer selected when hitting +// Ctrl-G. + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"), __webpack_require__(/*! ./searchcursor */ "../../../node_modules/codemirror/addon/search/searchcursor.js"), __webpack_require__(/*! ../dialog/dialog */ "../../../node_modules/codemirror/addon/dialog/dialog.js"));else {} +})(function (CodeMirror) { + "use strict"; + + // default search panel location + CodeMirror.defineOption("search", { + bottom: false + }); + function searchOverlay(query, caseInsensitive) { + if (typeof query == "string") query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g");else if (!query.global) query = new RegExp(query.source, query.ignoreCase ? "gi" : "g"); + return { + token: function (stream) { + query.lastIndex = stream.pos; + var match = query.exec(stream.string); + if (match && match.index == stream.pos) { + stream.pos += match[0].length || 1; + return "searching"; + } else if (match) { + stream.pos = match.index; + } else { + stream.skipToEnd(); + } + } + }; + } + function SearchState() { + this.posFrom = this.posTo = this.lastQuery = this.query = null; + this.overlay = null; + } + function getSearchState(cm) { + return cm.state.search || (cm.state.search = new SearchState()); + } + function queryCaseInsensitive(query) { + return typeof query == "string" && query == query.toLowerCase(); + } + function getSearchCursor(cm, query, pos) { + // Heuristic: if the query string is all lowercase, do a case insensitive search. + return cm.getSearchCursor(query, pos, { + caseFold: queryCaseInsensitive(query), + multiline: true + }); + } + function persistentDialog(cm, text, deflt, onEnter, onKeyDown) { + cm.openDialog(text, onEnter, { + value: deflt, + selectValueOnOpen: true, + closeOnEnter: false, + onClose: function () { + clearSearch(cm); + }, + onKeyDown: onKeyDown, + bottom: cm.options.search.bottom + }); + } + function dialog(cm, text, shortText, deflt, f) { + if (cm.openDialog) cm.openDialog(text, f, { + value: deflt, + selectValueOnOpen: true, + bottom: cm.options.search.bottom + });else f(prompt(shortText, deflt)); + } + function confirmDialog(cm, text, shortText, fs) { + if (cm.openConfirm) cm.openConfirm(text, fs);else if (confirm(shortText)) fs[0](); + } + function parseString(string) { + return string.replace(/\\([nrt\\])/g, function (match, ch) { + if (ch == "n") return "\n"; + if (ch == "r") return "\r"; + if (ch == "t") return "\t"; + if (ch == "\\") return "\\"; + return match; + }); + } + function parseQuery(query) { + var isRE = query.match(/^\/(.*)\/([a-z]*)$/); + if (isRE) { + try { + query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); + } catch (e) {} // Not a regular expression after all, do a string search + } else { + query = parseString(query); + } + if (typeof query == "string" ? query == "" : query.test("")) query = /x^/; + return query; + } + function startSearch(cm, state, query) { + state.queryText = query; + state.query = parseQuery(query); + cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query)); + state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query)); + cm.addOverlay(state.overlay); + if (cm.showMatchesOnScrollbar) { + if (state.annotate) { + state.annotate.clear(); + state.annotate = null; + } + state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query)); + } + } + function doSearch(cm, rev, persistent, immediate) { + var state = getSearchState(cm); + if (state.query) return findNext(cm, rev); + var q = cm.getSelection() || state.lastQuery; + if (q instanceof RegExp && q.source == "x^") q = null; + if (persistent && cm.openDialog) { + var hiding = null; + var searchNext = function (query, event) { + CodeMirror.e_stop(event); + if (!query) return; + if (query != state.queryText) { + startSearch(cm, state, query); + state.posFrom = state.posTo = cm.getCursor(); + } + if (hiding) hiding.style.opacity = 1; + findNext(cm, event.shiftKey, function (_, to) { + var dialog; + if (to.line < 3 && document.querySelector && (dialog = cm.display.wrapper.querySelector(".CodeMirror-dialog")) && dialog.getBoundingClientRect().bottom - 4 > cm.cursorCoords(to, "window").top) (hiding = dialog).style.opacity = .4; + }); + }; + persistentDialog(cm, getQueryDialog(cm), q, searchNext, function (event, query) { + var keyName = CodeMirror.keyName(event); + var extra = cm.getOption('extraKeys'), + cmd = extra && extra[keyName] || CodeMirror.keyMap[cm.getOption("keyMap")][keyName]; + if (cmd == "findNext" || cmd == "findPrev" || cmd == "findPersistentNext" || cmd == "findPersistentPrev") { + CodeMirror.e_stop(event); + startSearch(cm, getSearchState(cm), query); + cm.execCommand(cmd); + } else if (cmd == "find" || cmd == "findPersistent") { + CodeMirror.e_stop(event); + searchNext(query, event); + } + }); + if (immediate && q) { + startSearch(cm, state, q); + findNext(cm, rev); + } + } else { + dialog(cm, getQueryDialog(cm), "Search for:", q, function (query) { + if (query && !state.query) cm.operation(function () { + startSearch(cm, state, query); + state.posFrom = state.posTo = cm.getCursor(); + findNext(cm, rev); + }); + }); + } + } + function findNext(cm, rev, callback) { + cm.operation(function () { + var state = getSearchState(cm); + var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo); + if (!cursor.find(rev)) { + cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0)); + if (!cursor.find(rev)) return; + } + cm.setSelection(cursor.from(), cursor.to()); + cm.scrollIntoView({ + from: cursor.from(), + to: cursor.to() + }, 20); + state.posFrom = cursor.from(); + state.posTo = cursor.to(); + if (callback) callback(cursor.from(), cursor.to()); + }); + } + function clearSearch(cm) { + cm.operation(function () { + var state = getSearchState(cm); + state.lastQuery = state.query; + if (!state.query) return; + state.query = state.queryText = null; + cm.removeOverlay(state.overlay); + if (state.annotate) { + state.annotate.clear(); + state.annotate = null; + } + }); + } + function el(tag, attrs) { + var element = tag ? document.createElement(tag) : document.createDocumentFragment(); + for (var key in attrs) { + element[key] = attrs[key]; + } + for (var i = 2; i < arguments.length; i++) { + var child = arguments[i]; + element.appendChild(typeof child == "string" ? document.createTextNode(child) : child); + } + return element; + } + function getQueryDialog(cm) { + return el("", null, el("span", { + className: "CodeMirror-search-label" + }, cm.phrase("Search:")), " ", el("input", { + type: "text", + "style": "width: 10em", + className: "CodeMirror-search-field" + }), " ", el("span", { + style: "color: #888", + className: "CodeMirror-search-hint" + }, cm.phrase("(Use /re/ syntax for regexp search)"))); + } + function getReplaceQueryDialog(cm) { + return el("", null, " ", el("input", { + type: "text", + "style": "width: 10em", + className: "CodeMirror-search-field" + }), " ", el("span", { + style: "color: #888", + className: "CodeMirror-search-hint" + }, cm.phrase("(Use /re/ syntax for regexp search)"))); + } + function getReplacementQueryDialog(cm) { + return el("", null, el("span", { + className: "CodeMirror-search-label" + }, cm.phrase("With:")), " ", el("input", { + type: "text", + "style": "width: 10em", + className: "CodeMirror-search-field" + })); + } + function getDoReplaceConfirm(cm) { + return el("", null, el("span", { + className: "CodeMirror-search-label" + }, cm.phrase("Replace?")), " ", el("button", {}, cm.phrase("Yes")), " ", el("button", {}, cm.phrase("No")), " ", el("button", {}, cm.phrase("All")), " ", el("button", {}, cm.phrase("Stop"))); + } + function replaceAll(cm, query, text) { + cm.operation(function () { + for (var cursor = getSearchCursor(cm, query); cursor.findNext();) { + if (typeof query != "string") { + var match = cm.getRange(cursor.from(), cursor.to()).match(query); + cursor.replace(text.replace(/\$(\d)/g, function (_, i) { + return match[i]; + })); + } else cursor.replace(text); + } + }); + } + function replace(cm, all) { + if (cm.getOption("readOnly")) return; + var query = cm.getSelection() || getSearchState(cm).lastQuery; + var dialogText = all ? cm.phrase("Replace all:") : cm.phrase("Replace:"); + var fragment = el("", null, el("span", { + className: "CodeMirror-search-label" + }, dialogText), getReplaceQueryDialog(cm)); + dialog(cm, fragment, dialogText, query, function (query) { + if (!query) return; + query = parseQuery(query); + dialog(cm, getReplacementQueryDialog(cm), cm.phrase("Replace with:"), "", function (text) { + text = parseString(text); + if (all) { + replaceAll(cm, query, text); + } else { + clearSearch(cm); + var cursor = getSearchCursor(cm, query, cm.getCursor("from")); + var advance = function () { + var start = cursor.from(), + match; + if (!(match = cursor.findNext())) { + cursor = getSearchCursor(cm, query); + if (!(match = cursor.findNext()) || start && cursor.from().line == start.line && cursor.from().ch == start.ch) return; + } + cm.setSelection(cursor.from(), cursor.to()); + cm.scrollIntoView({ + from: cursor.from(), + to: cursor.to() + }); + confirmDialog(cm, getDoReplaceConfirm(cm), cm.phrase("Replace?"), [function () { + doReplace(match); + }, advance, function () { + replaceAll(cm, query, text); + }]); + }; + var doReplace = function (match) { + cursor.replace(typeof query == "string" ? text : text.replace(/\$(\d)/g, function (_, i) { + return match[i]; + })); + advance(); + }; + advance(); + } + }); + }); + } + CodeMirror.commands.find = function (cm) { + clearSearch(cm); + doSearch(cm); + }; + CodeMirror.commands.findPersistent = function (cm) { + clearSearch(cm); + doSearch(cm, false, true); + }; + CodeMirror.commands.findPersistentNext = function (cm) { + doSearch(cm, false, true, true); + }; + CodeMirror.commands.findPersistentPrev = function (cm) { + doSearch(cm, true, true, true); + }; + CodeMirror.commands.findNext = doSearch; + CodeMirror.commands.findPrev = function (cm) { + doSearch(cm, true); + }; + CodeMirror.commands.clearSearch = clearSearch; + CodeMirror.commands.replace = replace; + CodeMirror.commands.replaceAll = function (cm) { + replace(cm, true); + }; +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/search/searchcursor.js": +/*!*********************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/search/searchcursor.js ***! + \*********************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + var Pos = CodeMirror.Pos; + function regexpFlags(regexp) { + var flags = regexp.flags; + return flags != null ? flags : (regexp.ignoreCase ? "i" : "") + (regexp.global ? "g" : "") + (regexp.multiline ? "m" : ""); + } + function ensureFlags(regexp, flags) { + var current = regexpFlags(regexp), + target = current; + for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1) target += flags.charAt(i); + return current == target ? regexp : new RegExp(regexp.source, target); + } + function maybeMultiline(regexp) { + return /\\s|\\n|\n|\\W|\\D|\[\^/.test(regexp.source); + } + function searchRegexpForward(doc, regexp, start) { + regexp = ensureFlags(regexp, "g"); + for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) { + regexp.lastIndex = ch; + var string = doc.getLine(line), + match = regexp.exec(string); + if (match) return { + from: Pos(line, match.index), + to: Pos(line, match.index + match[0].length), + match: match + }; + } + } + function searchRegexpForwardMultiline(doc, regexp, start) { + if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start); + regexp = ensureFlags(regexp, "gm"); + var string, + chunk = 1; + for (var line = start.line, last = doc.lastLine(); line <= last;) { + // This grows the search buffer in exponentially-sized chunks + // between matches, so that nearby matches are fast and don't + // require concatenating the whole document (in case we're + // searching for something that has tons of matches), but at the + // same time, the amount of retries is limited. + for (var i = 0; i < chunk; i++) { + if (line > last) break; + var curLine = doc.getLine(line++); + string = string == null ? curLine : string + "\n" + curLine; + } + chunk = chunk * 2; + regexp.lastIndex = start.ch; + var match = regexp.exec(string); + if (match) { + var before = string.slice(0, match.index).split("\n"), + inside = match[0].split("\n"); + var startLine = start.line + before.length - 1, + startCh = before[before.length - 1].length; + return { + from: Pos(startLine, startCh), + to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), + match: match + }; + } + } + } + function lastMatchIn(string, regexp, endMargin) { + var match, + from = 0; + while (from <= string.length) { + regexp.lastIndex = from; + var newMatch = regexp.exec(string); + if (!newMatch) break; + var end = newMatch.index + newMatch[0].length; + if (end > string.length - endMargin) break; + if (!match || end > match.index + match[0].length) match = newMatch; + from = newMatch.index + 1; + } + return match; + } + function searchRegexpBackward(doc, regexp, start) { + regexp = ensureFlags(regexp, "g"); + for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) { + var string = doc.getLine(line); + var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch); + if (match) return { + from: Pos(line, match.index), + to: Pos(line, match.index + match[0].length), + match: match + }; + } + } + function searchRegexpBackwardMultiline(doc, regexp, start) { + if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start); + regexp = ensureFlags(regexp, "gm"); + var string, + chunkSize = 1, + endMargin = doc.getLine(start.line).length - start.ch; + for (var line = start.line, first = doc.firstLine(); line >= first;) { + for (var i = 0; i < chunkSize && line >= first; i++) { + var curLine = doc.getLine(line--); + string = string == null ? curLine : curLine + "\n" + string; + } + chunkSize *= 2; + var match = lastMatchIn(string, regexp, endMargin); + if (match) { + var before = string.slice(0, match.index).split("\n"), + inside = match[0].split("\n"); + var startLine = line + before.length, + startCh = before[before.length - 1].length; + return { + from: Pos(startLine, startCh), + to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), + match: match + }; + } + } + } + var doFold, noFold; + if (String.prototype.normalize) { + doFold = function (str) { + return str.normalize("NFD").toLowerCase(); + }; + noFold = function (str) { + return str.normalize("NFD"); + }; + } else { + doFold = function (str) { + return str.toLowerCase(); + }; + noFold = function (str) { + return str; + }; + } + + // Maps a position in a case-folded line back to a position in the original line + // (compensating for codepoints increasing in number during folding) + function adjustPos(orig, folded, pos, foldFunc) { + if (orig.length == folded.length) return pos; + for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) { + if (min == max) return min; + var mid = min + max >> 1; + var len = foldFunc(orig.slice(0, mid)).length; + if (len == pos) return mid;else if (len > pos) max = mid;else min = mid + 1; + } + } + function searchStringForward(doc, query, start, caseFold) { + // Empty string would match anything and never progress, so we + // define it to match nothing instead. + if (!query.length) return null; + var fold = caseFold ? doFold : noFold; + var lines = fold(query).split(/\r|\n\r?/); + search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) { + var orig = doc.getLine(line).slice(ch), + string = fold(orig); + if (lines.length == 1) { + var found = string.indexOf(lines[0]); + if (found == -1) continue search; + var start = adjustPos(orig, string, found, fold) + ch; + return { + from: Pos(line, adjustPos(orig, string, found, fold) + ch), + to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch) + }; + } else { + var cutFrom = string.length - lines[0].length; + if (string.slice(cutFrom) != lines[0]) continue search; + for (var i = 1; i < lines.length - 1; i++) if (fold(doc.getLine(line + i)) != lines[i]) continue search; + var end = doc.getLine(line + lines.length - 1), + endString = fold(end), + lastLine = lines[lines.length - 1]; + if (endString.slice(0, lastLine.length) != lastLine) continue search; + return { + from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch), + to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold)) + }; + } + } + } + function searchStringBackward(doc, query, start, caseFold) { + if (!query.length) return null; + var fold = caseFold ? doFold : noFold; + var lines = fold(query).split(/\r|\n\r?/); + search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) { + var orig = doc.getLine(line); + if (ch > -1) orig = orig.slice(0, ch); + var string = fold(orig); + if (lines.length == 1) { + var found = string.lastIndexOf(lines[0]); + if (found == -1) continue search; + return { + from: Pos(line, adjustPos(orig, string, found, fold)), + to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold)) + }; + } else { + var lastLine = lines[lines.length - 1]; + if (string.slice(0, lastLine.length) != lastLine) continue search; + for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++) if (fold(doc.getLine(start + i)) != lines[i]) continue search; + var top = doc.getLine(line + 1 - lines.length), + topString = fold(top); + if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search; + return { + from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)), + to: Pos(line, adjustPos(orig, string, lastLine.length, fold)) + }; + } + } + } + function SearchCursor(doc, query, pos, options) { + this.atOccurrence = false; + this.afterEmptyMatch = false; + this.doc = doc; + pos = pos ? doc.clipPos(pos) : Pos(0, 0); + this.pos = { + from: pos, + to: pos + }; + var caseFold; + if (typeof options == "object") { + caseFold = options.caseFold; + } else { + // Backwards compat for when caseFold was the 4th argument + caseFold = options; + options = null; + } + if (typeof query == "string") { + if (caseFold == null) caseFold = false; + this.matches = function (reverse, pos) { + return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold); + }; + } else { + query = ensureFlags(query, "gm"); + if (!options || options.multiline !== false) this.matches = function (reverse, pos) { + return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos); + };else this.matches = function (reverse, pos) { + return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos); + }; + } + } + SearchCursor.prototype = { + findNext: function () { + return this.find(false); + }, + findPrevious: function () { + return this.find(true); + }, + find: function (reverse) { + var head = this.doc.clipPos(reverse ? this.pos.from : this.pos.to); + if (this.afterEmptyMatch && this.atOccurrence) { + // do not return the same 0 width match twice + head = Pos(head.line, head.ch); + if (reverse) { + head.ch--; + if (head.ch < 0) { + head.line--; + head.ch = (this.doc.getLine(head.line) || "").length; + } + } else { + head.ch++; + if (head.ch > (this.doc.getLine(head.line) || "").length) { + head.ch = 0; + head.line++; + } + } + if (CodeMirror.cmpPos(head, this.doc.clipPos(head)) != 0) { + return this.atOccurrence = false; + } + } + var result = this.matches(reverse, head); + this.afterEmptyMatch = result && CodeMirror.cmpPos(result.from, result.to) == 0; + if (result) { + this.pos = result; + this.atOccurrence = true; + return this.pos.match || true; + } else { + var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0); + this.pos = { + from: end, + to: end + }; + return this.atOccurrence = false; + } + }, + from: function () { + if (this.atOccurrence) return this.pos.from; + }, + to: function () { + if (this.atOccurrence) return this.pos.to; + }, + replace: function (newText, origin) { + if (!this.atOccurrence) return; + var lines = CodeMirror.splitLines(newText); + this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin); + this.pos.to = Pos(this.pos.from.line + lines.length - 1, lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0)); + } + }; + CodeMirror.defineExtension("getSearchCursor", function (query, pos, caseFold) { + return new SearchCursor(this.doc, query, pos, caseFold); + }); + CodeMirror.defineDocExtension("getSearchCursor", function (query, pos, caseFold) { + return new SearchCursor(this, query, pos, caseFold); + }); + CodeMirror.defineExtension("selectMatches", function (query, caseFold) { + var ranges = []; + var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold); + while (cur.findNext()) { + if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break; + ranges.push({ + anchor: cur.from(), + head: cur.to() + }); + } + if (ranges.length) this.setSelections(ranges, 0); + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/keymap/sublime.js": +/*!**********************************************************!*\ + !*** ../../../node_modules/codemirror/keymap/sublime.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// A rough approximation of Sublime Text's keybindings +// Depends on addon/search/searchcursor.js and optionally addon/dialog/dialogs.js + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"), __webpack_require__(/*! ../addon/search/searchcursor */ "../../../node_modules/codemirror/addon/search/searchcursor.js"), __webpack_require__(/*! ../addon/edit/matchbrackets */ "../../../node_modules/codemirror/addon/edit/matchbrackets.js"));else {} +})(function (CodeMirror) { + "use strict"; + + var cmds = CodeMirror.commands; + var Pos = CodeMirror.Pos; + + // This is not exactly Sublime's algorithm. I couldn't make heads or tails of that. + function findPosSubword(doc, start, dir) { + if (dir < 0 && start.ch == 0) return doc.clipPos(Pos(start.line - 1)); + var line = doc.getLine(start.line); + if (dir > 0 && start.ch >= line.length) return doc.clipPos(Pos(start.line + 1, 0)); + var state = "start", + type, + startPos = start.ch; + for (var pos = startPos, e = dir < 0 ? 0 : line.length, i = 0; pos != e; pos += dir, i++) { + var next = line.charAt(dir < 0 ? pos - 1 : pos); + var cat = next != "_" && CodeMirror.isWordChar(next) ? "w" : "o"; + if (cat == "w" && next.toUpperCase() == next) cat = "W"; + if (state == "start") { + if (cat != "o") { + state = "in"; + type = cat; + } else startPos = pos + dir; + } else if (state == "in") { + if (type != cat) { + if (type == "w" && cat == "W" && dir < 0) pos--; + if (type == "W" && cat == "w" && dir > 0) { + // From uppercase to lowercase + if (pos == startPos + 1) { + type = "w"; + continue; + } else pos--; + } + break; + } + } + } + return Pos(start.line, pos); + } + function moveSubword(cm, dir) { + cm.extendSelectionsBy(function (range) { + if (cm.display.shift || cm.doc.extend || range.empty()) return findPosSubword(cm.doc, range.head, dir);else return dir < 0 ? range.from() : range.to(); + }); + } + cmds.goSubwordLeft = function (cm) { + moveSubword(cm, -1); + }; + cmds.goSubwordRight = function (cm) { + moveSubword(cm, 1); + }; + cmds.scrollLineUp = function (cm) { + var info = cm.getScrollInfo(); + if (!cm.somethingSelected()) { + var visibleBottomLine = cm.lineAtHeight(info.top + info.clientHeight, "local"); + if (cm.getCursor().line >= visibleBottomLine) cm.execCommand("goLineUp"); + } + cm.scrollTo(null, info.top - cm.defaultTextHeight()); + }; + cmds.scrollLineDown = function (cm) { + var info = cm.getScrollInfo(); + if (!cm.somethingSelected()) { + var visibleTopLine = cm.lineAtHeight(info.top, "local") + 1; + if (cm.getCursor().line <= visibleTopLine) cm.execCommand("goLineDown"); + } + cm.scrollTo(null, info.top + cm.defaultTextHeight()); + }; + cmds.splitSelectionByLine = function (cm) { + var ranges = cm.listSelections(), + lineRanges = []; + for (var i = 0; i < ranges.length; i++) { + var from = ranges[i].from(), + to = ranges[i].to(); + for (var line = from.line; line <= to.line; ++line) if (!(to.line > from.line && line == to.line && to.ch == 0)) lineRanges.push({ + anchor: line == from.line ? from : Pos(line, 0), + head: line == to.line ? to : Pos(line) + }); + } + cm.setSelections(lineRanges, 0); + }; + cmds.singleSelectionTop = function (cm) { + var range = cm.listSelections()[0]; + cm.setSelection(range.anchor, range.head, { + scroll: false + }); + }; + cmds.selectLine = function (cm) { + var ranges = cm.listSelections(), + extended = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + extended.push({ + anchor: Pos(range.from().line, 0), + head: Pos(range.to().line + 1, 0) + }); + } + cm.setSelections(extended); + }; + function insertLine(cm, above) { + if (cm.isReadOnly()) return CodeMirror.Pass; + cm.operation(function () { + var len = cm.listSelections().length, + newSelection = [], + last = -1; + for (var i = 0; i < len; i++) { + var head = cm.listSelections()[i].head; + if (head.line <= last) continue; + var at = Pos(head.line + (above ? 0 : 1), 0); + cm.replaceRange("\n", at, null, "+insertLine"); + cm.indentLine(at.line, null, true); + newSelection.push({ + head: at, + anchor: at + }); + last = head.line + 1; + } + cm.setSelections(newSelection); + }); + cm.execCommand("indentAuto"); + } + cmds.insertLineAfter = function (cm) { + return insertLine(cm, false); + }; + cmds.insertLineBefore = function (cm) { + return insertLine(cm, true); + }; + function wordAt(cm, pos) { + var start = pos.ch, + end = start, + line = cm.getLine(pos.line); + while (start && CodeMirror.isWordChar(line.charAt(start - 1))) --start; + while (end < line.length && CodeMirror.isWordChar(line.charAt(end))) ++end; + return { + from: Pos(pos.line, start), + to: Pos(pos.line, end), + word: line.slice(start, end) + }; + } + cmds.selectNextOccurrence = function (cm) { + var from = cm.getCursor("from"), + to = cm.getCursor("to"); + var fullWord = cm.state.sublimeFindFullWord == cm.doc.sel; + if (CodeMirror.cmpPos(from, to) == 0) { + var word = wordAt(cm, from); + if (!word.word) return; + cm.setSelection(word.from, word.to); + fullWord = true; + } else { + var text = cm.getRange(from, to); + var query = fullWord ? new RegExp("\\b" + text + "\\b") : text; + var cur = cm.getSearchCursor(query, to); + var found = cur.findNext(); + if (!found) { + cur = cm.getSearchCursor(query, Pos(cm.firstLine(), 0)); + found = cur.findNext(); + } + if (!found || isSelectedRange(cm.listSelections(), cur.from(), cur.to())) return; + cm.addSelection(cur.from(), cur.to()); + } + if (fullWord) cm.state.sublimeFindFullWord = cm.doc.sel; + }; + cmds.skipAndSelectNextOccurrence = function (cm) { + var prevAnchor = cm.getCursor("anchor"), + prevHead = cm.getCursor("head"); + cmds.selectNextOccurrence(cm); + if (CodeMirror.cmpPos(prevAnchor, prevHead) != 0) { + cm.doc.setSelections(cm.doc.listSelections().filter(function (sel) { + return sel.anchor != prevAnchor || sel.head != prevHead; + })); + } + }; + function addCursorToSelection(cm, dir) { + var ranges = cm.listSelections(), + newRanges = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + var newAnchor = cm.findPosV(range.anchor, dir, "line", range.anchor.goalColumn); + var newHead = cm.findPosV(range.head, dir, "line", range.head.goalColumn); + newAnchor.goalColumn = range.anchor.goalColumn != null ? range.anchor.goalColumn : cm.cursorCoords(range.anchor, "div").left; + newHead.goalColumn = range.head.goalColumn != null ? range.head.goalColumn : cm.cursorCoords(range.head, "div").left; + var newRange = { + anchor: newAnchor, + head: newHead + }; + newRanges.push(range); + newRanges.push(newRange); + } + cm.setSelections(newRanges); + } + cmds.addCursorToPrevLine = function (cm) { + addCursorToSelection(cm, -1); + }; + cmds.addCursorToNextLine = function (cm) { + addCursorToSelection(cm, 1); + }; + function isSelectedRange(ranges, from, to) { + for (var i = 0; i < ranges.length; i++) if (CodeMirror.cmpPos(ranges[i].from(), from) == 0 && CodeMirror.cmpPos(ranges[i].to(), to) == 0) return true; + return false; + } + var mirror = "(){}[]"; + function selectBetweenBrackets(cm) { + var ranges = cm.listSelections(), + newRanges = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i], + pos = range.head, + opening = cm.scanForBracket(pos, -1); + if (!opening) return false; + for (;;) { + var closing = cm.scanForBracket(pos, 1); + if (!closing) return false; + if (closing.ch == mirror.charAt(mirror.indexOf(opening.ch) + 1)) { + var startPos = Pos(opening.pos.line, opening.pos.ch + 1); + if (CodeMirror.cmpPos(startPos, range.from()) == 0 && CodeMirror.cmpPos(closing.pos, range.to()) == 0) { + opening = cm.scanForBracket(opening.pos, -1); + if (!opening) return false; + } else { + newRanges.push({ + anchor: startPos, + head: closing.pos + }); + break; + } + } + pos = Pos(closing.pos.line, closing.pos.ch + 1); + } + } + cm.setSelections(newRanges); + return true; + } + cmds.selectScope = function (cm) { + selectBetweenBrackets(cm) || cm.execCommand("selectAll"); + }; + cmds.selectBetweenBrackets = function (cm) { + if (!selectBetweenBrackets(cm)) return CodeMirror.Pass; + }; + function puncType(type) { + return !type ? null : /\bpunctuation\b/.test(type) ? type : undefined; + } + cmds.goToBracket = function (cm) { + cm.extendSelectionsBy(function (range) { + var next = cm.scanForBracket(range.head, 1, puncType(cm.getTokenTypeAt(range.head))); + if (next && CodeMirror.cmpPos(next.pos, range.head) != 0) return next.pos; + var prev = cm.scanForBracket(range.head, -1, puncType(cm.getTokenTypeAt(Pos(range.head.line, range.head.ch + 1)))); + return prev && Pos(prev.pos.line, prev.pos.ch + 1) || range.head; + }); + }; + cmds.swapLineUp = function (cm) { + if (cm.isReadOnly()) return CodeMirror.Pass; + var ranges = cm.listSelections(), + linesToMove = [], + at = cm.firstLine() - 1, + newSels = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i], + from = range.from().line - 1, + to = range.to().line; + newSels.push({ + anchor: Pos(range.anchor.line - 1, range.anchor.ch), + head: Pos(range.head.line - 1, range.head.ch) + }); + if (range.to().ch == 0 && !range.empty()) --to; + if (from > at) linesToMove.push(from, to);else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to; + at = to; + } + cm.operation(function () { + for (var i = 0; i < linesToMove.length; i += 2) { + var from = linesToMove[i], + to = linesToMove[i + 1]; + var line = cm.getLine(from); + cm.replaceRange("", Pos(from, 0), Pos(from + 1, 0), "+swapLine"); + if (to > cm.lastLine()) cm.replaceRange("\n" + line, Pos(cm.lastLine()), null, "+swapLine");else cm.replaceRange(line + "\n", Pos(to, 0), null, "+swapLine"); + } + cm.setSelections(newSels); + cm.scrollIntoView(); + }); + }; + cmds.swapLineDown = function (cm) { + if (cm.isReadOnly()) return CodeMirror.Pass; + var ranges = cm.listSelections(), + linesToMove = [], + at = cm.lastLine() + 1; + for (var i = ranges.length - 1; i >= 0; i--) { + var range = ranges[i], + from = range.to().line + 1, + to = range.from().line; + if (range.to().ch == 0 && !range.empty()) from--; + if (from < at) linesToMove.push(from, to);else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to; + at = to; + } + cm.operation(function () { + for (var i = linesToMove.length - 2; i >= 0; i -= 2) { + var from = linesToMove[i], + to = linesToMove[i + 1]; + var line = cm.getLine(from); + if (from == cm.lastLine()) cm.replaceRange("", Pos(from - 1), Pos(from), "+swapLine");else cm.replaceRange("", Pos(from, 0), Pos(from + 1, 0), "+swapLine"); + cm.replaceRange(line + "\n", Pos(to, 0), null, "+swapLine"); + } + cm.scrollIntoView(); + }); + }; + cmds.toggleCommentIndented = function (cm) { + cm.toggleComment({ + indent: true + }); + }; + cmds.joinLines = function (cm) { + var ranges = cm.listSelections(), + joined = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i], + from = range.from(); + var start = from.line, + end = range.to().line; + while (i < ranges.length - 1 && ranges[i + 1].from().line == end) end = ranges[++i].to().line; + joined.push({ + start: start, + end: end, + anchor: !range.empty() && from + }); + } + cm.operation(function () { + var offset = 0, + ranges = []; + for (var i = 0; i < joined.length; i++) { + var obj = joined[i]; + var anchor = obj.anchor && Pos(obj.anchor.line - offset, obj.anchor.ch), + head; + for (var line = obj.start; line <= obj.end; line++) { + var actual = line - offset; + if (line == obj.end) head = Pos(actual, cm.getLine(actual).length + 1); + if (actual < cm.lastLine()) { + cm.replaceRange(" ", Pos(actual), Pos(actual + 1, /^\s*/.exec(cm.getLine(actual + 1))[0].length)); + ++offset; + } + } + ranges.push({ + anchor: anchor || head, + head: head + }); + } + cm.setSelections(ranges, 0); + }); + }; + cmds.duplicateLine = function (cm) { + cm.operation(function () { + var rangeCount = cm.listSelections().length; + for (var i = 0; i < rangeCount; i++) { + var range = cm.listSelections()[i]; + if (range.empty()) cm.replaceRange(cm.getLine(range.head.line) + "\n", Pos(range.head.line, 0));else cm.replaceRange(cm.getRange(range.from(), range.to()), range.from()); + } + cm.scrollIntoView(); + }); + }; + function sortLines(cm, caseSensitive, direction) { + if (cm.isReadOnly()) return CodeMirror.Pass; + var ranges = cm.listSelections(), + toSort = [], + selected; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (range.empty()) continue; + var from = range.from().line, + to = range.to().line; + while (i < ranges.length - 1 && ranges[i + 1].from().line == to) to = ranges[++i].to().line; + if (!ranges[i].to().ch) to--; + toSort.push(from, to); + } + if (toSort.length) selected = true;else toSort.push(cm.firstLine(), cm.lastLine()); + cm.operation(function () { + var ranges = []; + for (var i = 0; i < toSort.length; i += 2) { + var from = toSort[i], + to = toSort[i + 1]; + var start = Pos(from, 0), + end = Pos(to); + var lines = cm.getRange(start, end, false); + if (caseSensitive) lines.sort(function (a, b) { + return a < b ? -direction : a == b ? 0 : direction; + });else lines.sort(function (a, b) { + var au = a.toUpperCase(), + bu = b.toUpperCase(); + if (au != bu) { + a = au; + b = bu; + } + return a < b ? -direction : a == b ? 0 : direction; + }); + cm.replaceRange(lines, start, end); + if (selected) ranges.push({ + anchor: start, + head: Pos(to + 1, 0) + }); + } + if (selected) cm.setSelections(ranges, 0); + }); + } + cmds.sortLines = function (cm) { + sortLines(cm, true, 1); + }; + cmds.reverseSortLines = function (cm) { + sortLines(cm, true, -1); + }; + cmds.sortLinesInsensitive = function (cm) { + sortLines(cm, false, 1); + }; + cmds.reverseSortLinesInsensitive = function (cm) { + sortLines(cm, false, -1); + }; + cmds.nextBookmark = function (cm) { + var marks = cm.state.sublimeBookmarks; + if (marks) while (marks.length) { + var current = marks.shift(); + var found = current.find(); + if (found) { + marks.push(current); + return cm.setSelection(found.from, found.to); + } + } + }; + cmds.prevBookmark = function (cm) { + var marks = cm.state.sublimeBookmarks; + if (marks) while (marks.length) { + marks.unshift(marks.pop()); + var found = marks[marks.length - 1].find(); + if (!found) marks.pop();else return cm.setSelection(found.from, found.to); + } + }; + cmds.toggleBookmark = function (cm) { + var ranges = cm.listSelections(); + var marks = cm.state.sublimeBookmarks || (cm.state.sublimeBookmarks = []); + for (var i = 0; i < ranges.length; i++) { + var from = ranges[i].from(), + to = ranges[i].to(); + var found = ranges[i].empty() ? cm.findMarksAt(from) : cm.findMarks(from, to); + for (var j = 0; j < found.length; j++) { + if (found[j].sublimeBookmark) { + found[j].clear(); + for (var k = 0; k < marks.length; k++) if (marks[k] == found[j]) marks.splice(k--, 1); + break; + } + } + if (j == found.length) marks.push(cm.markText(from, to, { + sublimeBookmark: true, + clearWhenEmpty: false + })); + } + }; + cmds.clearBookmarks = function (cm) { + var marks = cm.state.sublimeBookmarks; + if (marks) for (var i = 0; i < marks.length; i++) marks[i].clear(); + marks.length = 0; + }; + cmds.selectBookmarks = function (cm) { + var marks = cm.state.sublimeBookmarks, + ranges = []; + if (marks) for (var i = 0; i < marks.length; i++) { + var found = marks[i].find(); + if (!found) marks.splice(i--, 0);else ranges.push({ + anchor: found.from, + head: found.to + }); + } + if (ranges.length) cm.setSelections(ranges, 0); + }; + function modifyWordOrSelection(cm, mod) { + cm.operation(function () { + var ranges = cm.listSelections(), + indices = [], + replacements = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (range.empty()) { + indices.push(i); + replacements.push(""); + } else replacements.push(mod(cm.getRange(range.from(), range.to()))); + } + cm.replaceSelections(replacements, "around", "case"); + for (var i = indices.length - 1, at; i >= 0; i--) { + var range = ranges[indices[i]]; + if (at && CodeMirror.cmpPos(range.head, at) > 0) continue; + var word = wordAt(cm, range.head); + at = word.from; + cm.replaceRange(mod(word.word), word.from, word.to); + } + }); + } + cmds.smartBackspace = function (cm) { + if (cm.somethingSelected()) return CodeMirror.Pass; + cm.operation(function () { + var cursors = cm.listSelections(); + var indentUnit = cm.getOption("indentUnit"); + for (var i = cursors.length - 1; i >= 0; i--) { + var cursor = cursors[i].head; + var toStartOfLine = cm.getRange({ + line: cursor.line, + ch: 0 + }, cursor); + var column = CodeMirror.countColumn(toStartOfLine, null, cm.getOption("tabSize")); + + // Delete by one character by default + var deletePos = cm.findPosH(cursor, -1, "char", false); + if (toStartOfLine && !/\S/.test(toStartOfLine) && column % indentUnit == 0) { + var prevIndent = new Pos(cursor.line, CodeMirror.findColumn(toStartOfLine, column - indentUnit, indentUnit)); + + // Smart delete only if we found a valid prevIndent location + if (prevIndent.ch != cursor.ch) deletePos = prevIndent; + } + cm.replaceRange("", deletePos, cursor, "+delete"); + } + }); + }; + cmds.delLineRight = function (cm) { + cm.operation(function () { + var ranges = cm.listSelections(); + for (var i = ranges.length - 1; i >= 0; i--) cm.replaceRange("", ranges[i].anchor, Pos(ranges[i].to().line), "+delete"); + cm.scrollIntoView(); + }); + }; + cmds.upcaseAtCursor = function (cm) { + modifyWordOrSelection(cm, function (str) { + return str.toUpperCase(); + }); + }; + cmds.downcaseAtCursor = function (cm) { + modifyWordOrSelection(cm, function (str) { + return str.toLowerCase(); + }); + }; + cmds.setSublimeMark = function (cm) { + if (cm.state.sublimeMark) cm.state.sublimeMark.clear(); + cm.state.sublimeMark = cm.setBookmark(cm.getCursor()); + }; + cmds.selectToSublimeMark = function (cm) { + var found = cm.state.sublimeMark && cm.state.sublimeMark.find(); + if (found) cm.setSelection(cm.getCursor(), found); + }; + cmds.deleteToSublimeMark = function (cm) { + var found = cm.state.sublimeMark && cm.state.sublimeMark.find(); + if (found) { + var from = cm.getCursor(), + to = found; + if (CodeMirror.cmpPos(from, to) > 0) { + var tmp = to; + to = from; + from = tmp; + } + cm.state.sublimeKilled = cm.getRange(from, to); + cm.replaceRange("", from, to); + } + }; + cmds.swapWithSublimeMark = function (cm) { + var found = cm.state.sublimeMark && cm.state.sublimeMark.find(); + if (found) { + cm.state.sublimeMark.clear(); + cm.state.sublimeMark = cm.setBookmark(cm.getCursor()); + cm.setCursor(found); + } + }; + cmds.sublimeYank = function (cm) { + if (cm.state.sublimeKilled != null) cm.replaceSelection(cm.state.sublimeKilled, null, "paste"); + }; + cmds.showInCenter = function (cm) { + var pos = cm.cursorCoords(null, "local"); + cm.scrollTo(null, (pos.top + pos.bottom) / 2 - cm.getScrollInfo().clientHeight / 2); + }; + function getTarget(cm) { + var from = cm.getCursor("from"), + to = cm.getCursor("to"); + if (CodeMirror.cmpPos(from, to) == 0) { + var word = wordAt(cm, from); + if (!word.word) return; + from = word.from; + to = word.to; + } + return { + from: from, + to: to, + query: cm.getRange(from, to), + word: word + }; + } + function findAndGoTo(cm, forward) { + var target = getTarget(cm); + if (!target) return; + var query = target.query; + var cur = cm.getSearchCursor(query, forward ? target.to : target.from); + if (forward ? cur.findNext() : cur.findPrevious()) { + cm.setSelection(cur.from(), cur.to()); + } else { + cur = cm.getSearchCursor(query, forward ? Pos(cm.firstLine(), 0) : cm.clipPos(Pos(cm.lastLine()))); + if (forward ? cur.findNext() : cur.findPrevious()) cm.setSelection(cur.from(), cur.to());else if (target.word) cm.setSelection(target.from, target.to); + } + } + ; + cmds.findUnder = function (cm) { + findAndGoTo(cm, true); + }; + cmds.findUnderPrevious = function (cm) { + findAndGoTo(cm, false); + }; + cmds.findAllUnder = function (cm) { + var target = getTarget(cm); + if (!target) return; + var cur = cm.getSearchCursor(target.query); + var matches = []; + var primaryIndex = -1; + while (cur.findNext()) { + matches.push({ + anchor: cur.from(), + head: cur.to() + }); + if (cur.from().line <= target.from.line && cur.from().ch <= target.from.ch) primaryIndex++; + } + cm.setSelections(matches, primaryIndex); + }; + var keyMap = CodeMirror.keyMap; + keyMap.macSublime = { + "Cmd-Left": "goLineStartSmart", + "Shift-Tab": "indentLess", + "Shift-Ctrl-K": "deleteLine", + "Alt-Q": "wrapLines", + "Ctrl-Left": "goSubwordLeft", + "Ctrl-Right": "goSubwordRight", + "Ctrl-Alt-Up": "scrollLineUp", + "Ctrl-Alt-Down": "scrollLineDown", + "Cmd-L": "selectLine", + "Shift-Cmd-L": "splitSelectionByLine", + "Esc": "singleSelectionTop", + "Cmd-Enter": "insertLineAfter", + "Shift-Cmd-Enter": "insertLineBefore", + "Cmd-D": "selectNextOccurrence", + "Shift-Cmd-Space": "selectScope", + "Shift-Cmd-M": "selectBetweenBrackets", + "Cmd-M": "goToBracket", + "Cmd-Ctrl-Up": "swapLineUp", + "Cmd-Ctrl-Down": "swapLineDown", + "Cmd-/": "toggleCommentIndented", + "Cmd-J": "joinLines", + "Shift-Cmd-D": "duplicateLine", + "F5": "sortLines", + "Shift-F5": "reverseSortLines", + "Cmd-F5": "sortLinesInsensitive", + "Shift-Cmd-F5": "reverseSortLinesInsensitive", + "F2": "nextBookmark", + "Shift-F2": "prevBookmark", + "Cmd-F2": "toggleBookmark", + "Shift-Cmd-F2": "clearBookmarks", + "Alt-F2": "selectBookmarks", + "Backspace": "smartBackspace", + "Cmd-K Cmd-D": "skipAndSelectNextOccurrence", + "Cmd-K Cmd-K": "delLineRight", + "Cmd-K Cmd-U": "upcaseAtCursor", + "Cmd-K Cmd-L": "downcaseAtCursor", + "Cmd-K Cmd-Space": "setSublimeMark", + "Cmd-K Cmd-A": "selectToSublimeMark", + "Cmd-K Cmd-W": "deleteToSublimeMark", + "Cmd-K Cmd-X": "swapWithSublimeMark", + "Cmd-K Cmd-Y": "sublimeYank", + "Cmd-K Cmd-C": "showInCenter", + "Cmd-K Cmd-G": "clearBookmarks", + "Cmd-K Cmd-Backspace": "delLineLeft", + "Cmd-K Cmd-1": "foldAll", + "Cmd-K Cmd-0": "unfoldAll", + "Cmd-K Cmd-J": "unfoldAll", + "Ctrl-Shift-Up": "addCursorToPrevLine", + "Ctrl-Shift-Down": "addCursorToNextLine", + "Cmd-F3": "findUnder", + "Shift-Cmd-F3": "findUnderPrevious", + "Alt-F3": "findAllUnder", + "Shift-Cmd-[": "fold", + "Shift-Cmd-]": "unfold", + "Cmd-I": "findIncremental", + "Shift-Cmd-I": "findIncrementalReverse", + "Cmd-H": "replace", + "F3": "findNext", + "Shift-F3": "findPrev", + "fallthrough": "macDefault" + }; + CodeMirror.normalizeKeyMap(keyMap.macSublime); + keyMap.pcSublime = { + "Shift-Tab": "indentLess", + "Shift-Ctrl-K": "deleteLine", + "Alt-Q": "wrapLines", + "Ctrl-T": "transposeChars", + "Alt-Left": "goSubwordLeft", + "Alt-Right": "goSubwordRight", + "Ctrl-Up": "scrollLineUp", + "Ctrl-Down": "scrollLineDown", + "Ctrl-L": "selectLine", + "Shift-Ctrl-L": "splitSelectionByLine", + "Esc": "singleSelectionTop", + "Ctrl-Enter": "insertLineAfter", + "Shift-Ctrl-Enter": "insertLineBefore", + "Ctrl-D": "selectNextOccurrence", + "Shift-Ctrl-Space": "selectScope", + "Shift-Ctrl-M": "selectBetweenBrackets", + "Ctrl-M": "goToBracket", + "Shift-Ctrl-Up": "swapLineUp", + "Shift-Ctrl-Down": "swapLineDown", + "Ctrl-/": "toggleCommentIndented", + "Ctrl-J": "joinLines", + "Shift-Ctrl-D": "duplicateLine", + "F9": "sortLines", + "Shift-F9": "reverseSortLines", + "Ctrl-F9": "sortLinesInsensitive", + "Shift-Ctrl-F9": "reverseSortLinesInsensitive", + "F2": "nextBookmark", + "Shift-F2": "prevBookmark", + "Ctrl-F2": "toggleBookmark", + "Shift-Ctrl-F2": "clearBookmarks", + "Alt-F2": "selectBookmarks", + "Backspace": "smartBackspace", + "Ctrl-K Ctrl-D": "skipAndSelectNextOccurrence", + "Ctrl-K Ctrl-K": "delLineRight", + "Ctrl-K Ctrl-U": "upcaseAtCursor", + "Ctrl-K Ctrl-L": "downcaseAtCursor", + "Ctrl-K Ctrl-Space": "setSublimeMark", + "Ctrl-K Ctrl-A": "selectToSublimeMark", + "Ctrl-K Ctrl-W": "deleteToSublimeMark", + "Ctrl-K Ctrl-X": "swapWithSublimeMark", + "Ctrl-K Ctrl-Y": "sublimeYank", + "Ctrl-K Ctrl-C": "showInCenter", + "Ctrl-K Ctrl-G": "clearBookmarks", + "Ctrl-K Ctrl-Backspace": "delLineLeft", + "Ctrl-K Ctrl-1": "foldAll", + "Ctrl-K Ctrl-0": "unfoldAll", + "Ctrl-K Ctrl-J": "unfoldAll", + "Ctrl-Alt-Up": "addCursorToPrevLine", + "Ctrl-Alt-Down": "addCursorToNextLine", + "Ctrl-F3": "findUnder", + "Shift-Ctrl-F3": "findUnderPrevious", + "Alt-F3": "findAllUnder", + "Shift-Ctrl-[": "fold", + "Shift-Ctrl-]": "unfold", + "Ctrl-I": "findIncremental", + "Shift-Ctrl-I": "findIncrementalReverse", + "Ctrl-H": "replace", + "F3": "findNext", + "Shift-F3": "findPrev", + "fallthrough": "pcDefault" + }; + CodeMirror.normalizeKeyMap(keyMap.pcSublime); + var mac = keyMap.default == keyMap.macDefault; + keyMap.sublime = mac ? keyMap.macSublime : keyMap.pcSublime; +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/lib/codemirror.js": +/*!**********************************************************!*\ + !*** ../../../node_modules/codemirror/lib/codemirror.js ***! + \**********************************************************/ +/***/ (function(module) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// This is CodeMirror (https://codemirror.net), a code editor +// implemented in JavaScript on top of the browser's DOM. +// +// You can find some technical background for some of the code below +// at http://marijnhaverbeke.nl/blog/#cm-internals . + +(function (global, factory) { + true ? module.exports = factory() : 0; +})(void 0, function () { + 'use strict'; + + // Kludges for bugs and behavior differences that can't be feature + // detected are enabled based on userAgent etc sniffing. + var userAgent = navigator.userAgent; + var platform = navigator.platform; + var gecko = /gecko\/\d/i.test(userAgent); + var ie_upto10 = /MSIE \d/.test(userAgent); + var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); + var edge = /Edge\/(\d+)/.exec(userAgent); + var ie = ie_upto10 || ie_11up || edge; + var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); + var webkit = !edge && /WebKit\//.test(userAgent); + var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); + var chrome = !edge && /Chrome\//.test(userAgent); + var presto = /Opera\//.test(userAgent); + var safari = /Apple Computer/.test(navigator.vendor); + var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); + var phantom = /PhantomJS/.test(userAgent); + var ios = safari && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2); + var android = /Android/.test(userAgent); + // This is woefully incomplete. Suggestions for alternative methods welcome. + var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); + var mac = ios || /Mac/.test(platform); + var chromeOS = /\bCrOS\b/.test(userAgent); + var windows = /win/i.test(platform); + var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); + if (presto_version) { + presto_version = Number(presto_version[1]); + } + if (presto_version && presto_version >= 15) { + presto = false; + webkit = true; + } + // Some browsers use the wrong event properties to signal cmd/ctrl on OS X + var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); + var captureRightClick = gecko || ie && ie_version >= 9; + function classTest(cls) { + return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); + } + var rmClass = function (node, cls) { + var current = node.className; + var match = classTest(cls).exec(current); + if (match) { + var after = current.slice(match.index + match[0].length); + node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); + } + }; + function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) { + e.removeChild(e.firstChild); + } + return e; + } + function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e); + } + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) { + e.className = className; + } + if (style) { + e.style.cssText = style; + } + if (typeof content == "string") { + e.appendChild(document.createTextNode(content)); + } else if (content) { + for (var i = 0; i < content.length; ++i) { + e.appendChild(content[i]); + } + } + return e; + } + // wrapper for elt, which removes the elt from the accessibility tree + function eltP(tag, content, className, style) { + var e = elt(tag, content, className, style); + e.setAttribute("role", "presentation"); + return e; + } + var range; + if (document.createRange) { + range = function (node, start, end, endNode) { + var r = document.createRange(); + r.setEnd(endNode || node, end); + r.setStart(node, start); + return r; + }; + } else { + range = function (node, start, end) { + var r = document.body.createTextRange(); + try { + r.moveToElementText(node.parentNode); + } catch (e) { + return r; + } + r.collapse(true); + r.moveEnd("character", end); + r.moveStart("character", start); + return r; + }; + } + function contains(parent, child) { + if (child.nodeType == 3) + // Android browser always returns false when child is a textnode + { + child = child.parentNode; + } + if (parent.contains) { + return parent.contains(child); + } + do { + if (child.nodeType == 11) { + child = child.host; + } + if (child == parent) { + return true; + } + } while (child = child.parentNode); + } + function activeElt() { + // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. + // IE < 10 will throw when accessed while the page is loading or in an iframe. + // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. + var activeElement; + try { + activeElement = document.activeElement; + } catch (e) { + activeElement = document.body || null; + } + while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) { + activeElement = activeElement.shadowRoot.activeElement; + } + return activeElement; + } + function addClass(node, cls) { + var current = node.className; + if (!classTest(cls).test(current)) { + node.className += (current ? " " : "") + cls; + } + } + function joinClasses(a, b) { + var as = a.split(" "); + for (var i = 0; i < as.length; i++) { + if (as[i] && !classTest(as[i]).test(b)) { + b += " " + as[i]; + } + } + return b; + } + var selectInput = function (node) { + node.select(); + }; + if (ios) + // Mobile Safari apparently has a bug where select() is broken. + { + selectInput = function (node) { + node.selectionStart = 0; + node.selectionEnd = node.value.length; + }; + } else if (ie) + // Suppress mysterious IE10 errors + { + selectInput = function (node) { + try { + node.select(); + } catch (_e) {} + }; + } + function bind(f) { + var args = Array.prototype.slice.call(arguments, 1); + return function () { + return f.apply(null, args); + }; + } + function copyObj(obj, target, overwrite) { + if (!target) { + target = {}; + } + for (var prop in obj) { + if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) { + target[prop] = obj[prop]; + } + } + return target; + } + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + function countColumn(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) { + end = string.length; + } + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i); + if (nextTab < 0 || nextTab >= end) { + return n + (end - i); + } + n += nextTab - i; + n += tabSize - n % tabSize; + i = nextTab + 1; + } + } + var Delayed = function () { + this.id = null; + this.f = null; + this.time = 0; + this.handler = bind(this.onTimeout, this); + }; + Delayed.prototype.onTimeout = function (self) { + self.id = 0; + if (self.time <= +new Date()) { + self.f(); + } else { + setTimeout(self.handler, self.time - +new Date()); + } + }; + Delayed.prototype.set = function (ms, f) { + this.f = f; + var time = +new Date() + ms; + if (!this.id || time < this.time) { + clearTimeout(this.id); + this.id = setTimeout(this.handler, ms); + this.time = time; + } + }; + function indexOf(array, elt) { + for (var i = 0; i < array.length; ++i) { + if (array[i] == elt) { + return i; + } + } + return -1; + } + + // Number of pixels added to scroller and sizer to hide scrollbar + var scrollerGap = 50; + + // Returned or thrown by various protocols to signal 'I'm not + // handling this'. + var Pass = { + toString: function () { + return "CodeMirror.Pass"; + } + }; + + // Reused option objects for setSelection & friends + var sel_dontScroll = { + scroll: false + }, + sel_mouse = { + origin: "*mouse" + }, + sel_move = { + origin: "+move" + }; + + // The inverse of countColumn -- find the offset that corresponds to + // a particular column. + function findColumn(string, goal, tabSize) { + for (var pos = 0, col = 0;;) { + var nextTab = string.indexOf("\t", pos); + if (nextTab == -1) { + nextTab = string.length; + } + var skipped = nextTab - pos; + if (nextTab == string.length || col + skipped >= goal) { + return pos + Math.min(skipped, goal - col); + } + col += nextTab - pos; + col += tabSize - col % tabSize; + pos = nextTab + 1; + if (col >= goal) { + return pos; + } + } + } + var spaceStrs = [""]; + function spaceStr(n) { + while (spaceStrs.length <= n) { + spaceStrs.push(lst(spaceStrs) + " "); + } + return spaceStrs[n]; + } + function lst(arr) { + return arr[arr.length - 1]; + } + function map(array, f) { + var out = []; + for (var i = 0; i < array.length; i++) { + out[i] = f(array[i], i); + } + return out; + } + function insertSorted(array, value, score) { + var pos = 0, + priority = score(value); + while (pos < array.length && score(array[pos]) <= priority) { + pos++; + } + array.splice(pos, 0, value); + } + function nothing() {} + function createObj(base, props) { + var inst; + if (Object.create) { + inst = Object.create(base); + } else { + nothing.prototype = base; + inst = new nothing(); + } + if (props) { + copyObj(props, inst); + } + return inst; + } + var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; + function isWordCharBasic(ch) { + return /\w/.test(ch) || ch > "\x80" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); + } + function isWordChar(ch, helper) { + if (!helper) { + return isWordCharBasic(ch); + } + if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { + return true; + } + return helper.test(ch); + } + function isEmpty(obj) { + for (var n in obj) { + if (obj.hasOwnProperty(n) && obj[n]) { + return false; + } + } + return true; + } + + // Extending unicode characters. A series of a non-extending char + + // any number of extending chars is treated as a single unit as far + // as editing and measuring is concerned. This is not fully correct, + // since some scripts/fonts/browsers also treat other configurations + // of code points as a group. + var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; + function isExtendingChar(ch) { + return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); + } + + // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range. + function skipExtendingChars(str, pos, dir) { + while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { + pos += dir; + } + return pos; + } + + // Returns the value from the range [`from`; `to`] that satisfies + // `pred` and is closest to `from`. Assumes that at least `to` + // satisfies `pred`. Supports `from` being greater than `to`. + function findFirst(pred, from, to) { + // At any point we are certain `to` satisfies `pred`, don't know + // whether `from` does. + var dir = from > to ? -1 : 1; + for (;;) { + if (from == to) { + return from; + } + var midF = (from + to) / 2, + mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF); + if (mid == from) { + return pred(mid) ? from : to; + } + if (pred(mid)) { + to = mid; + } else { + from = mid + dir; + } + } + } + + // BIDI HELPERS + + function iterateBidiSections(order, from, to, f) { + if (!order) { + return f(from, to, "ltr", 0); + } + var found = false; + for (var i = 0; i < order.length; ++i) { + var part = order[i]; + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i); + found = true; + } + } + if (!found) { + f(from, to, "ltr"); + } + } + var bidiOther = null; + function getBidiPartAt(order, ch, sticky) { + var found; + bidiOther = null; + for (var i = 0; i < order.length; ++i) { + var cur = order[i]; + if (cur.from < ch && cur.to > ch) { + return i; + } + if (cur.to == ch) { + if (cur.from != cur.to && sticky == "before") { + found = i; + } else { + bidiOther = i; + } + } + if (cur.from == ch) { + if (cur.from != cur.to && sticky != "before") { + found = i; + } else { + bidiOther = i; + } + } + } + return found != null ? found : bidiOther; + } + + // Bidirectional ordering algorithm + // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm + // that this (partially) implements. + + // One-char codes used for character types: + // L (L): Left-to-Right + // R (R): Right-to-Left + // r (AL): Right-to-Left Arabic + // 1 (EN): European Number + // + (ES): European Number Separator + // % (ET): European Number Terminator + // n (AN): Arabic Number + // , (CS): Common Number Separator + // m (NSM): Non-Spacing Mark + // b (BN): Boundary Neutral + // s (B): Paragraph Separator + // t (S): Segment Separator + // w (WS): Whitespace + // N (ON): Other Neutrals + + // Returns null if characters are ordered as they appear + // (left-to-right), or an array of sections ({from, to, level} + // objects) in the order in which they occur visually. + var bidiOrdering = function () { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; + // Character types for codepoints 0x600 to 0x6f9 + var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"; + function charType(code) { + if (code <= 0xf7) { + return lowTypes.charAt(code); + } else if (0x590 <= code && code <= 0x5f4) { + return "R"; + } else if (0x600 <= code && code <= 0x6f9) { + return arabicTypes.charAt(code - 0x600); + } else if (0x6ee <= code && code <= 0x8ac) { + return "r"; + } else if (0x2000 <= code && code <= 0x200b) { + return "w"; + } else if (code == 0x200c) { + return "b"; + } else { + return "L"; + } + } + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; + var isNeutral = /[stwN]/, + isStrong = /[LRr]/, + countsAsLeft = /[Lb1n]/, + countsAsNum = /[1n]/; + function BidiSpan(level, from, to) { + this.level = level; + this.from = from; + this.to = to; + } + return function (str, direction) { + var outerType = direction == "ltr" ? "L" : "R"; + if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { + return false; + } + var len = str.length, + types = []; + for (var i = 0; i < len; ++i) { + types.push(charType(str.charCodeAt(i))); + } + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) { + var type = types[i$1]; + if (type == "m") { + types[i$1] = prev; + } else { + prev = type; + } + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) { + var type$1 = types[i$2]; + if (type$1 == "1" && cur == "r") { + types[i$2] = "n"; + } else if (isStrong.test(type$1)) { + cur = type$1; + if (type$1 == "r") { + types[i$2] = "R"; + } + } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { + var type$2 = types[i$3]; + if (type$2 == "+" && prev$1 == "1" && types[i$3 + 1] == "1") { + types[i$3] = "1"; + } else if (type$2 == "," && prev$1 == types[i$3 + 1] && (prev$1 == "1" || prev$1 == "n")) { + types[i$3] = prev$1; + } + prev$1 = type$2; + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i$4 = 0; i$4 < len; ++i$4) { + var type$3 = types[i$4]; + if (type$3 == ",") { + types[i$4] = "N"; + } else if (type$3 == "%") { + var end = void 0; + for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} + var replace = i$4 && types[i$4 - 1] == "!" || end < len && types[end] == "1" ? "1" : "N"; + for (var j = i$4; j < end; ++j) { + types[j] = replace; + } + i$4 = end - 1; + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { + var type$4 = types[i$5]; + if (cur$1 == "L" && type$4 == "1") { + types[i$5] = "L"; + } else if (isStrong.test(type$4)) { + cur$1 = type$4; + } + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i$6 = 0; i$6 < len; ++i$6) { + if (isNeutral.test(types[i$6])) { + var end$1 = void 0; + for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} + var before = (i$6 ? types[i$6 - 1] : outerType) == "L"; + var after = (end$1 < len ? types[end$1] : outerType) == "L"; + var replace$1 = before == after ? before ? "L" : "R" : outerType; + for (var j$1 = i$6; j$1 < end$1; ++j$1) { + types[j$1] = replace$1; + } + i$6 = end$1 - 1; + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], + m; + for (var i$7 = 0; i$7 < len;) { + if (countsAsLeft.test(types[i$7])) { + var start = i$7; + for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} + order.push(new BidiSpan(0, start, i$7)); + } else { + var pos = i$7, + at = order.length, + isRTL = direction == "rtl" ? 1 : 0; + for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} + for (var j$2 = pos; j$2 < i$7;) { + if (countsAsNum.test(types[j$2])) { + if (pos < j$2) { + order.splice(at, 0, new BidiSpan(1, pos, j$2)); + at += isRTL; + } + var nstart = j$2; + for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} + order.splice(at, 0, new BidiSpan(2, nstart, j$2)); + at += isRTL; + pos = j$2; + } else { + ++j$2; + } + } + if (pos < i$7) { + order.splice(at, 0, new BidiSpan(1, pos, i$7)); + } + } + } + if (direction == "ltr") { + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length; + order.unshift(new BidiSpan(0, 0, m[0].length)); + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length; + order.push(new BidiSpan(0, len - m[0].length, len)); + } + } + return direction == "rtl" ? order.reverse() : order; + }; + }(); + + // Get the bidi ordering for the given line (and cache it). Returns + // false for lines that are fully left-to-right, and an array of + // BidiSpan objects otherwise. + function getOrder(line, direction) { + var order = line.order; + if (order == null) { + order = line.order = bidiOrdering(line.text, direction); + } + return order; + } + + // EVENT HANDLING + + // Lightweight event framework. on/off also work on DOM nodes, + // registering native DOM handlers. + + var noHandlers = []; + var on = function (emitter, type, f) { + if (emitter.addEventListener) { + emitter.addEventListener(type, f, false); + } else if (emitter.attachEvent) { + emitter.attachEvent("on" + type, f); + } else { + var map = emitter._handlers || (emitter._handlers = {}); + map[type] = (map[type] || noHandlers).concat(f); + } + }; + function getHandlers(emitter, type) { + return emitter._handlers && emitter._handlers[type] || noHandlers; + } + function off(emitter, type, f) { + if (emitter.removeEventListener) { + emitter.removeEventListener(type, f, false); + } else if (emitter.detachEvent) { + emitter.detachEvent("on" + type, f); + } else { + var map = emitter._handlers, + arr = map && map[type]; + if (arr) { + var index = indexOf(arr, f); + if (index > -1) { + map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); + } + } + } + } + function signal(emitter, type /*, values...*/) { + var handlers = getHandlers(emitter, type); + if (!handlers.length) { + return; + } + var args = Array.prototype.slice.call(arguments, 2); + for (var i = 0; i < handlers.length; ++i) { + handlers[i].apply(null, args); + } + } + + // The DOM events that CodeMirror handles can be overridden by + // registering a (non-DOM) handler on the editor for the event name, + // and preventDefault-ing the event in that handler. + function signalDOMEvent(cm, e, override) { + if (typeof e == "string") { + e = { + type: e, + preventDefault: function () { + this.defaultPrevented = true; + } + }; + } + signal(cm, override || e.type, cm, e); + return e_defaultPrevented(e) || e.codemirrorIgnore; + } + function signalCursorActivity(cm) { + var arr = cm._handlers && cm._handlers.cursorActivity; + if (!arr) { + return; + } + var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); + for (var i = 0; i < arr.length; ++i) { + if (indexOf(set, arr[i]) == -1) { + set.push(arr[i]); + } + } + } + function hasHandler(emitter, type) { + return getHandlers(emitter, type).length > 0; + } + + // Add on and off methods to a constructor's prototype, to make + // registering events on such objects more convenient. + function eventMixin(ctor) { + ctor.prototype.on = function (type, f) { + on(this, type, f); + }; + ctor.prototype.off = function (type, f) { + off(this, type, f); + }; + } + + // Due to the fact that we still support jurassic IE versions, some + // compatibility wrappers are needed. + + function e_preventDefault(e) { + if (e.preventDefault) { + e.preventDefault(); + } else { + e.returnValue = false; + } + } + function e_stopPropagation(e) { + if (e.stopPropagation) { + e.stopPropagation(); + } else { + e.cancelBubble = true; + } + } + function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; + } + function e_stop(e) { + e_preventDefault(e); + e_stopPropagation(e); + } + function e_target(e) { + return e.target || e.srcElement; + } + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) { + b = 1; + } else if (e.button & 2) { + b = 3; + } else if (e.button & 4) { + b = 2; + } + } + if (mac && e.ctrlKey && b == 1) { + b = 3; + } + return b; + } + + // Detect drag-and-drop + var dragAndDrop = function () { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie && ie_version < 9) { + return false; + } + var div = elt('div'); + return "draggable" in div || "dragDrop" in div; + }(); + var zwspSupported; + function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b"); + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); + if (measure.firstChild.offsetHeight != 0) { + zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); + } + } + var node = zwspSupported ? elt("span", "\u200b") : elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); + node.setAttribute("cm-text", ""); + return node; + } + + // Feature-detect IE's crummy client rect reporting for bidi text + var badBidiRects; + function hasBadBidiRects(measure) { + if (badBidiRects != null) { + return badBidiRects; + } + var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); + var r0 = range(txt, 0, 1).getBoundingClientRect(); + var r1 = range(txt, 1, 2).getBoundingClientRect(); + removeChildren(measure); + if (!r0 || r0.left == r0.right) { + return false; + } // Safari returns null in some cases (#2780) + return badBidiRects = r1.right - r0.right < 3; + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { + var pos = 0, + result = [], + l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) { + nl = string.length; + } + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result; + } : function (string) { + return string.split(/\r\n?|\n/); + }; + var hasSelection = window.getSelection ? function (te) { + try { + return te.selectionStart != te.selectionEnd; + } catch (e) { + return false; + } + } : function (te) { + var range; + try { + range = te.ownerDocument.selection.createRange(); + } catch (e) {} + if (!range || range.parentElement() != te) { + return false; + } + return range.compareEndPoints("StartToEnd", range) != 0; + }; + var hasCopyEvent = function () { + var e = elt("div"); + if ("oncopy" in e) { + return true; + } + e.setAttribute("oncopy", "return;"); + return typeof e.oncopy == "function"; + }(); + var badZoomedRects = null; + function hasBadZoomedRects(measure) { + if (badZoomedRects != null) { + return badZoomedRects; + } + var node = removeChildrenAndAdd(measure, elt("span", "x")); + var normal = node.getBoundingClientRect(); + var fromRange = range(node, 0, 1).getBoundingClientRect(); + return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; + } + + // Known modes, by name and by MIME + var modes = {}, + mimeModes = {}; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + function defineMode(name, mode) { + if (arguments.length > 2) { + mode.dependencies = Array.prototype.slice.call(arguments, 2); + } + modes[name] = mode; + } + function defineMIME(mime, spec) { + mimeModes[mime] = spec; + } + + // Given a MIME type, a {name, ...options} config object, or a name + // string, return a mode config object. + function resolveMode(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name]; + if (typeof found == "string") { + found = { + name: found + }; + } + spec = createObj(found, spec); + spec.name = found.name; + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return resolveMode("application/xml"); + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { + return resolveMode("application/json"); + } + if (typeof spec == "string") { + return { + name: spec + }; + } else { + return spec || { + name: "null" + }; + } + } + + // Given a mode spec (anything that resolveMode accepts), find and + // initialize an actual mode object. + function getMode(options, spec) { + spec = resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) { + return getMode(options, "text/plain"); + } + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) { + continue; + } + if (modeObj.hasOwnProperty(prop)) { + modeObj["_" + prop] = modeObj[prop]; + } + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + if (spec.helperType) { + modeObj.helperType = spec.helperType; + } + if (spec.modeProps) { + for (var prop$1 in spec.modeProps) { + modeObj[prop$1] = spec.modeProps[prop$1]; + } + } + return modeObj; + } + + // This can be used to attach properties to mode objects from + // outside the actual mode definition. + var modeExtensions = {}; + function extendMode(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : modeExtensions[mode] = {}; + copyObj(properties, exts); + } + function copyState(mode, state) { + if (state === true) { + return state; + } + if (mode.copyState) { + return mode.copyState(state); + } + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) { + val = val.concat([]); + } + nstate[n] = val; + } + return nstate; + } + + // Given a mode and a state (for that mode), find the inner mode and + // state at the position that the state refers to. + function innerMode(mode, state) { + var info; + while (mode.innerMode) { + info = mode.innerMode(state); + if (!info || info.mode == mode) { + break; + } + state = info.state; + mode = info.mode; + } + return info || { + mode: mode, + state: state + }; + } + function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; + } + + // STRING STREAM + + // Fed to the mode parsers, provides helper functions to make + // parsers more succinct. + + var StringStream = function (string, tabSize, lineOracle) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + this.lastColumnPos = this.lastColumnValue = 0; + this.lineStart = 0; + this.lineOracle = lineOracle; + }; + StringStream.prototype.eol = function () { + return this.pos >= this.string.length; + }; + StringStream.prototype.sol = function () { + return this.pos == this.lineStart; + }; + StringStream.prototype.peek = function () { + return this.string.charAt(this.pos) || undefined; + }; + StringStream.prototype.next = function () { + if (this.pos < this.string.length) { + return this.string.charAt(this.pos++); + } + }; + StringStream.prototype.eat = function (match) { + var ch = this.string.charAt(this.pos); + var ok; + if (typeof match == "string") { + ok = ch == match; + } else { + ok = ch && (match.test ? match.test(ch) : match(ch)); + } + if (ok) { + ++this.pos; + return ch; + } + }; + StringStream.prototype.eatWhile = function (match) { + var start = this.pos; + while (this.eat(match)) {} + return this.pos > start; + }; + StringStream.prototype.eatSpace = function () { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { + ++this.pos; + } + return this.pos > start; + }; + StringStream.prototype.skipToEnd = function () { + this.pos = this.string.length; + }; + StringStream.prototype.skipTo = function (ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) { + this.pos = found; + return true; + } + }; + StringStream.prototype.backUp = function (n) { + this.pos -= n; + }; + StringStream.prototype.column = function () { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); + this.lastColumnPos = this.start; + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }; + StringStream.prototype.indentation = function () { + return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }; + StringStream.prototype.match = function (pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function (str) { + return caseInsensitive ? str.toLowerCase() : str; + }; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) { + this.pos += pattern.length; + } + return true; + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) { + return null; + } + if (match && consume !== false) { + this.pos += match[0].length; + } + return match; + } + }; + StringStream.prototype.current = function () { + return this.string.slice(this.start, this.pos); + }; + StringStream.prototype.hideFirstChars = function (n, inner) { + this.lineStart += n; + try { + return inner(); + } finally { + this.lineStart -= n; + } + }; + StringStream.prototype.lookAhead = function (n) { + var oracle = this.lineOracle; + return oracle && oracle.lookAhead(n); + }; + StringStream.prototype.baseToken = function () { + var oracle = this.lineOracle; + return oracle && oracle.baseToken(this.pos); + }; + + // Find the line object corresponding to the given line number. + function getLine(doc, n) { + n -= doc.first; + if (n < 0 || n >= doc.size) { + throw new Error("There is no line " + (n + doc.first) + " in the document."); + } + var chunk = doc; + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], + sz = child.chunkSize(); + if (n < sz) { + chunk = child; + break; + } + n -= sz; + } + } + return chunk.lines[n]; + } + + // Get the part of a document between two positions, as an array of + // strings. + function getBetween(doc, start, end) { + var out = [], + n = start.line; + doc.iter(start.line, end.line + 1, function (line) { + var text = line.text; + if (n == end.line) { + text = text.slice(0, end.ch); + } + if (n == start.line) { + text = text.slice(start.ch); + } + out.push(text); + ++n; + }); + return out; + } + // Get the lines between from and to, as array of strings. + function getLines(doc, from, to) { + var out = []; + doc.iter(from, to, function (line) { + out.push(line.text); + }); // iter aborts when callback returns truthy value + return out; + } + + // Update the height of a line, propagating the height change + // upwards to parent nodes. + function updateLineHeight(line, height) { + var diff = height - line.height; + if (diff) { + for (var n = line; n; n = n.parent) { + n.height += diff; + } + } + } + + // Given a line object, find its line number by walking up through + // its parent links. + function lineNo(line) { + if (line.parent == null) { + return null; + } + var cur = line.parent, + no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) { + break; + } + no += chunk.children[i].chunkSize(); + } + } + return no + cur.first; + } + + // Find the line at the given vertical position, using the height + // information in the document tree. + function lineAtHeight(chunk, h) { + var n = chunk.first; + outer: do { + for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) { + var child = chunk.children[i$1], + ch = child.height; + if (h < ch) { + chunk = child; + continue outer; + } + h -= ch; + n += child.chunkSize(); + } + return n; + } while (!chunk.lines); + var i = 0; + for (; i < chunk.lines.length; ++i) { + var line = chunk.lines[i], + lh = line.height; + if (h < lh) { + break; + } + h -= lh; + } + return n + i; + } + function isLine(doc, l) { + return l >= doc.first && l < doc.first + doc.size; + } + function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)); + } + + // A Pos instance represents a position within the text. + function Pos(line, ch, sticky) { + if (sticky === void 0) sticky = null; + if (!(this instanceof Pos)) { + return new Pos(line, ch, sticky); + } + this.line = line; + this.ch = ch; + this.sticky = sticky; + } + + // Compare two positions, return 0 if they are the same, a negative + // number when a is less, and a positive number otherwise. + function cmp(a, b) { + return a.line - b.line || a.ch - b.ch; + } + function equalCursorPos(a, b) { + return a.sticky == b.sticky && cmp(a, b) == 0; + } + function copyPos(x) { + return Pos(x.line, x.ch); + } + function maxPos(a, b) { + return cmp(a, b) < 0 ? b : a; + } + function minPos(a, b) { + return cmp(a, b) < 0 ? a : b; + } + + // Most of the external API clips given positions to make sure they + // actually exist within the document. + function clipLine(doc, n) { + return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1)); + } + function clipPos(doc, pos) { + if (pos.line < doc.first) { + return Pos(doc.first, 0); + } + var last = doc.first + doc.size - 1; + if (pos.line > last) { + return Pos(last, getLine(doc, last).text.length); + } + return clipToLen(pos, getLine(doc, pos.line).text.length); + } + function clipToLen(pos, linelen) { + var ch = pos.ch; + if (ch == null || ch > linelen) { + return Pos(pos.line, linelen); + } else if (ch < 0) { + return Pos(pos.line, 0); + } else { + return pos; + } + } + function clipPosArray(doc, array) { + var out = []; + for (var i = 0; i < array.length; i++) { + out[i] = clipPos(doc, array[i]); + } + return out; + } + var SavedContext = function (state, lookAhead) { + this.state = state; + this.lookAhead = lookAhead; + }; + var Context = function (doc, state, line, lookAhead) { + this.state = state; + this.doc = doc; + this.line = line; + this.maxLookAhead = lookAhead || 0; + this.baseTokens = null; + this.baseTokenPos = 1; + }; + Context.prototype.lookAhead = function (n) { + var line = this.doc.getLine(this.line + n); + if (line != null && n > this.maxLookAhead) { + this.maxLookAhead = n; + } + return line; + }; + Context.prototype.baseToken = function (n) { + if (!this.baseTokens) { + return null; + } + while (this.baseTokens[this.baseTokenPos] <= n) { + this.baseTokenPos += 2; + } + var type = this.baseTokens[this.baseTokenPos + 1]; + return { + type: type && type.replace(/( |^)overlay .*/, ""), + size: this.baseTokens[this.baseTokenPos] - n + }; + }; + Context.prototype.nextLine = function () { + this.line++; + if (this.maxLookAhead > 0) { + this.maxLookAhead--; + } + }; + Context.fromSaved = function (doc, saved, line) { + if (saved instanceof SavedContext) { + return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead); + } else { + return new Context(doc, copyState(doc.mode, saved), line); + } + }; + Context.prototype.save = function (copy) { + var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state; + return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state; + }; + + // Compute a style array (an array starting with a mode generation + // -- for invalidation -- followed by pairs of end positions and + // style strings), which is used to highlight the tokens on the + // line. + function highlightLine(cm, line, context, forceToEnd) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen], + lineClasses = {}; + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, context, function (end, style) { + return st.push(end, style); + }, lineClasses, forceToEnd); + var state = context.state; + + // Run overlays, adjust style array. + var loop = function (o) { + context.baseTokens = st; + var overlay = cm.state.overlays[o], + i = 1, + at = 0; + context.state = true; + runMode(cm, line.text, overlay.mode, context, function (end, style) { + var start = i; + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i]; + if (i_end > end) { + st.splice(i, 1, end, st[i + 1], i_end); + } + i += 2; + at = Math.min(end, i_end); + } + if (!style) { + return; + } + if (overlay.opaque) { + st.splice(start, i - start, end, "overlay " + style); + i = start + 2; + } else { + for (; start < i; start += 2) { + var cur = st[start + 1]; + st[start + 1] = (cur ? cur + " " : "") + "overlay " + style; + } + } + }, lineClasses); + context.state = state; + context.baseTokens = null; + context.baseTokenPos = 1; + }; + for (var o = 0; o < cm.state.overlays.length; ++o) loop(o); + return { + styles: st, + classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null + }; + } + function getLineStyles(cm, line, updateFrontier) { + if (!line.styles || line.styles[0] != cm.state.modeGen) { + var context = getContextBefore(cm, lineNo(line)); + var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state); + var result = highlightLine(cm, line, context); + if (resetState) { + context.state = resetState; + } + line.stateAfter = context.save(!resetState); + line.styles = result.styles; + if (result.classes) { + line.styleClasses = result.classes; + } else if (line.styleClasses) { + line.styleClasses = null; + } + if (updateFrontier === cm.doc.highlightFrontier) { + cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); + } + } + return line.styles; + } + function getContextBefore(cm, n, precise) { + var doc = cm.doc, + display = cm.display; + if (!doc.mode.startState) { + return new Context(doc, true, n); + } + var start = findStartLine(cm, n, precise); + var saved = start > doc.first && getLine(doc, start - 1).stateAfter; + var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start); + doc.iter(start, n, function (line) { + processLine(cm, line.text, context); + var pos = context.line; + line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null; + context.nextLine(); + }); + if (precise) { + doc.modeFrontier = context.line; + } + return context; + } + + // Lightweight form of highlight -- proceed over this line and + // update state, but don't save a style array. Used for lines that + // aren't currently visible. + function processLine(cm, text, context, startAt) { + var mode = cm.doc.mode; + var stream = new StringStream(text, cm.options.tabSize, context); + stream.start = stream.pos = startAt || 0; + if (text == "") { + callBlankLine(mode, context.state); + } + while (!stream.eol()) { + readToken(mode, stream, context.state); + stream.start = stream.pos; + } + } + function callBlankLine(mode, state) { + if (mode.blankLine) { + return mode.blankLine(state); + } + if (!mode.innerMode) { + return; + } + var inner = innerMode(mode, state); + if (inner.mode.blankLine) { + return inner.mode.blankLine(inner.state); + } + } + function readToken(mode, stream, state, inner) { + for (var i = 0; i < 10; i++) { + if (inner) { + inner[0] = innerMode(mode, state).mode; + } + var style = mode.token(stream, state); + if (stream.pos > stream.start) { + return style; + } + } + throw new Error("Mode " + mode.name + " failed to advance stream."); + } + var Token = function (stream, type, state) { + this.start = stream.start; + this.end = stream.pos; + this.string = stream.current(); + this.type = type || null; + this.state = state; + }; + + // Utility for getTokenAt and getLineTokens + function takeToken(cm, pos, precise, asArray) { + var doc = cm.doc, + mode = doc.mode, + style; + pos = clipPos(doc, pos); + var line = getLine(doc, pos.line), + context = getContextBefore(cm, pos.line, precise); + var stream = new StringStream(line.text, cm.options.tabSize, context), + tokens; + if (asArray) { + tokens = []; + } + while ((asArray || stream.pos < pos.ch) && !stream.eol()) { + stream.start = stream.pos; + style = readToken(mode, stream, context.state); + if (asArray) { + tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); + } + } + return asArray ? tokens : new Token(stream, style, context.state); + } + function extractLineClasses(type, output) { + if (type) { + for (;;) { + var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); + if (!lineClass) { + break; + } + type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); + var prop = lineClass[1] ? "bgClass" : "textClass"; + if (output[prop] == null) { + output[prop] = lineClass[2]; + } else if (!new RegExp("(?:^|\\s)" + lineClass[2] + "(?:$|\\s)").test(output[prop])) { + output[prop] += " " + lineClass[2]; + } + } + } + return type; + } + + // Run the given mode's parser over a line, calling f for each token. + function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { + var flattenSpans = mode.flattenSpans; + if (flattenSpans == null) { + flattenSpans = cm.options.flattenSpans; + } + var curStart = 0, + curStyle = null; + var stream = new StringStream(text, cm.options.tabSize, context), + style; + var inner = cm.options.addModeClass && [null]; + if (text == "") { + extractLineClasses(callBlankLine(mode, context.state), lineClasses); + } + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false; + if (forceToEnd) { + processLine(cm, text, context, stream.pos); + } + stream.pos = text.length; + style = null; + } else { + style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses); + } + if (inner) { + var mName = inner[0].name; + if (mName) { + style = "m-" + (style ? mName + " " + style : mName); + } + } + if (!flattenSpans || curStyle != style) { + while (curStart < stream.start) { + curStart = Math.min(stream.start, curStart + 5000); + f(curStart, curStyle); + } + curStyle = style; + } + stream.start = stream.pos; + } + while (curStart < stream.pos) { + // Webkit seems to refuse to render text nodes longer than 57444 + // characters, and returns inaccurate measurements in nodes + // starting around 5000 chars. + var pos = Math.min(stream.pos, curStart + 5000); + f(pos, curStyle); + curStart = pos; + } + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(cm, n, precise) { + var minindent, + minline, + doc = cm.doc; + var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); + for (var search = n; search > lim; --search) { + if (search <= doc.first) { + return doc.first; + } + var line = getLine(doc, search - 1), + after = line.stateAfter; + if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) { + return search; + } + var indented = countColumn(line.text, null, cm.options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline; + } + function retreatFrontier(doc, n) { + doc.modeFrontier = Math.min(doc.modeFrontier, n); + if (doc.highlightFrontier < n - 10) { + return; + } + var start = doc.first; + for (var line = n - 1; line > start; line--) { + var saved = getLine(doc, line).stateAfter; + // change is on 3 + // state on line 1 looked ahead 2 -- so saw 3 + // test 1 + 2 < 3 should cover this + if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) { + start = line + 1; + break; + } + } + doc.highlightFrontier = Math.min(doc.highlightFrontier, start); + } + + // Optimize some code when these features are not used. + var sawReadOnlySpans = false, + sawCollapsedSpans = false; + function seeReadOnlySpans() { + sawReadOnlySpans = true; + } + function seeCollapsedSpans() { + sawCollapsedSpans = true; + } + + // TEXTMARKER SPANS + + function MarkedSpan(marker, from, to) { + this.marker = marker; + this.from = from; + this.to = to; + } + + // Search an array of spans for a span matching the given marker. + function getMarkedSpanFor(spans, marker) { + if (spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) { + return span; + } + } + } + } + + // Remove a span from an array, returning undefined if no spans are + // left (we don't store arrays for lines without spans). + function removeMarkedSpan(spans, span) { + var r; + for (var i = 0; i < spans.length; ++i) { + if (spans[i] != span) { + (r || (r = [])).push(spans[i]); + } + } + return r; + } + + // Add a span to a line. + function addMarkedSpan(line, span, op) { + var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet())); + if (inThisOp && line.markedSpans && inThisOp.has(line.markedSpans)) { + line.markedSpans.push(span); + } else { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; + if (inThisOp) { + inThisOp.add(line.markedSpans); + } + } + span.marker.attachLine(line); + } + + // Used for the algorithm that adjusts markers for a change in the + // document. These functions cut an array of spans at a given + // character position, returning an array of remaining chunks (or + // undefined if nothing remains). + function markedSpansBefore(old, startCh, isInsert) { + var nw; + if (old) { + for (var i = 0; i < old.length; ++i) { + var span = old[i], + marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); + (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); + } + } + } + return nw; + } + function markedSpansAfter(old, endCh, isInsert) { + var nw; + if (old) { + for (var i = 0; i < old.length; ++i) { + var span = old[i], + marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); + (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh)); + } + } + } + return nw; + } + + // Given a change object, compute the new set of marker spans that + // cover the line in which the change took place. Removes spans + // entirely within the change, reconnects spans belonging to the + // same marker that appear on both sides of the change, and cuts off + // spans partially within the change. Returns an array of span + // arrays with one element for each line in (after) the change. + function stretchSpansOverChange(doc, change) { + if (change.full) { + return null; + } + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; + if (!oldFirst && !oldLast) { + return null; + } + var startCh = change.from.ch, + endCh = change.to.ch, + isInsert = cmp(change.from, change.to) == 0; + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert); + var last = markedSpansAfter(oldLast, endCh, isInsert); + + // Next, merge those two ends + var sameLine = change.text.length == 1, + offset = lst(change.text).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) { + span.to = startCh; + } else if (sameLine) { + span.to = found.to == null ? null : found.to + offset; + } + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i$1 = 0; i$1 < last.length; ++i$1) { + var span$1 = last[i$1]; + if (span$1.to != null) { + span$1.to += offset; + } + if (span$1.from == null) { + var found$1 = getMarkedSpanFor(first, span$1.marker); + if (!found$1) { + span$1.from = offset; + if (sameLine) { + (first || (first = [])).push(span$1); + } + } + } else { + span$1.from += offset; + if (sameLine) { + (first || (first = [])).push(span$1); + } + } + } + } + // Make sure we didn't create any zero-length spans + if (first) { + first = clearEmptySpans(first); + } + if (last && last != first) { + last = clearEmptySpans(last); + } + var newMarkers = [first]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, + gapMarkers; + if (gap > 0 && first) { + for (var i$2 = 0; i$2 < first.length; ++i$2) { + if (first[i$2].to == null) { + (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); + } + } + } + for (var i$3 = 0; i$3 < gap; ++i$3) { + newMarkers.push(gapMarkers); + } + newMarkers.push(last); + } + return newMarkers; + } + + // Remove spans that are empty and don't have a clearWhenEmpty + // option of false. + function clearEmptySpans(spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) { + spans.splice(i--, 1); + } + } + if (!spans.length) { + return null; + } + return spans; + } + + // Used to 'clip' out readOnly ranges when making a change. + function removeReadOnlyRanges(doc, from, to) { + var markers = null; + doc.iter(from.line, to.line + 1, function (line) { + if (line.markedSpans) { + for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker; + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) { + (markers || (markers = [])).push(mark); + } + } + } + }); + if (!markers) { + return null; + } + var parts = [{ + from: from, + to: to + }]; + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], + m = mk.find(0); + for (var j = 0; j < parts.length; ++j) { + var p = parts[j]; + if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { + continue; + } + var newParts = [j, 1], + dfrom = cmp(p.from, m.from), + dto = cmp(p.to, m.to); + if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) { + newParts.push({ + from: p.from, + to: m.from + }); + } + if (dto > 0 || !mk.inclusiveRight && !dto) { + newParts.push({ + from: m.to, + to: p.to + }); + } + parts.splice.apply(parts, newParts); + j += newParts.length - 3; + } + } + return parts; + } + + // Connect or disconnect spans from a line. + function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) { + return; + } + for (var i = 0; i < spans.length; ++i) { + spans[i].marker.detachLine(line); + } + line.markedSpans = null; + } + function attachMarkedSpans(line, spans) { + if (!spans) { + return; + } + for (var i = 0; i < spans.length; ++i) { + spans[i].marker.attachLine(line); + } + line.markedSpans = spans; + } + + // Helpers used when computing which overlapping collapsed span + // counts as the larger one. + function extraLeft(marker) { + return marker.inclusiveLeft ? -1 : 0; + } + function extraRight(marker) { + return marker.inclusiveRight ? 1 : 0; + } + + // Returns a number indicating which of two overlapping collapsed + // spans is larger (and thus includes the other). Falls back to + // comparing ids when the spans cover exactly the same range. + function compareCollapsedMarkers(a, b) { + var lenDiff = a.lines.length - b.lines.length; + if (lenDiff != 0) { + return lenDiff; + } + var aPos = a.find(), + bPos = b.find(); + var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); + if (fromCmp) { + return -fromCmp; + } + var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); + if (toCmp) { + return toCmp; + } + return b.id - a.id; + } + + // Find out whether a line ends or starts in a collapsed span. If + // so, return the marker for that span. + function collapsedSpanAtSide(line, start) { + var sps = sawCollapsedSpans && line.markedSpans, + found; + if (sps) { + for (var sp = void 0, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { + found = sp.marker; + } + } + } + return found; + } + function collapsedSpanAtStart(line) { + return collapsedSpanAtSide(line, true); + } + function collapsedSpanAtEnd(line) { + return collapsedSpanAtSide(line, false); + } + function collapsedSpanAround(line, ch) { + var sps = sawCollapsedSpans && line.markedSpans, + found; + if (sps) { + for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { + found = sp.marker; + } + } + } + return found; + } + + // Test whether there exists a collapsed span that partially + // overlaps (covers the start or end, but not both) of a new span. + // Such overlap is not allowed. + function conflictingCollapsedRange(doc, lineNo, from, to, marker) { + var line = getLine(doc, lineNo); + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) { + for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (!sp.marker.collapsed) { + continue; + } + var found = sp.marker.find(0); + var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); + var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); + if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { + continue; + } + if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) { + return true; + } + } + } + } + + // A visual line is a line as drawn on the screen. Folding, for + // example, can cause multiple logical lines to appear on the same + // visual line. This finds the start of the visual line that the + // given line is part of (usually that is the line itself). + function visualLine(line) { + var merged; + while (merged = collapsedSpanAtStart(line)) { + line = merged.find(-1, true).line; + } + return line; + } + function visualLineEnd(line) { + var merged; + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + } + return line; + } + + // Returns an array of logical lines that continue the visual line + // started by the argument, or undefined if there are no such lines. + function visualLineContinued(line) { + var merged, lines; + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + (lines || (lines = [])).push(line); + } + return lines; + } + + // Get the line number of the start of the visual line that the + // given line number is part of. + function visualLineNo(doc, lineN) { + var line = getLine(doc, lineN), + vis = visualLine(line); + if (line == vis) { + return lineN; + } + return lineNo(vis); + } + + // Get the line number of the start of the next visual line after + // the given line. + function visualLineEndNo(doc, lineN) { + if (lineN > doc.lastLine()) { + return lineN; + } + var line = getLine(doc, lineN), + merged; + if (!lineIsHidden(doc, line)) { + return lineN; + } + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + } + return lineNo(line) + 1; + } + + // Compute whether a line is hidden. Lines count as hidden when they + // are part of a visual line that starts with another line, or when + // they are entirely covered by collapsed, non-widget span. + function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) { + for (var sp = void 0, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) { + continue; + } + if (sp.from == null) { + return true; + } + if (sp.marker.widgetNode) { + continue; + } + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) { + return true; + } + } + } + } + function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find(1, true); + return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); + } + if (span.marker.inclusiveRight && span.to == line.text.length) { + return true; + } + for (var sp = void 0, i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i]; + if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) { + return true; + } + } + } + + // Find the height above the given line. + function heightAtLine(lineObj) { + lineObj = visualLine(lineObj); + var h = 0, + chunk = lineObj.parent; + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i]; + if (line == lineObj) { + break; + } else { + h += line.height; + } + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i$1 = 0; i$1 < p.children.length; ++i$1) { + var cur = p.children[i$1]; + if (cur == chunk) { + break; + } else { + h += cur.height; + } + } + } + return h; + } + + // Compute the character length of a line, taking into account + // collapsed ranges (see markText) that might hide parts, and join + // other lines onto it. + function lineLength(line) { + if (line.height == 0) { + return 0; + } + var len = line.text.length, + merged, + cur = line; + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(0, true); + cur = found.from.line; + len += found.from.ch - found.to.ch; + } + cur = line; + while (merged = collapsedSpanAtEnd(cur)) { + var found$1 = merged.find(0, true); + len -= cur.text.length - found$1.from.ch; + cur = found$1.to.line; + len += cur.text.length - found$1.to.ch; + } + return len; + } + + // Find the longest line in the document. + function findMaxLine(cm) { + var d = cm.display, + doc = cm.doc; + d.maxLine = getLine(doc, doc.first); + d.maxLineLength = lineLength(d.maxLine); + d.maxLineChanged = true; + doc.iter(function (line) { + var len = lineLength(line); + if (len > d.maxLineLength) { + d.maxLineLength = len; + d.maxLine = line; + } + }); + } + + // LINE DATA STRUCTURE + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + var Line = function (text, markedSpans, estimateHeight) { + this.text = text; + attachMarkedSpans(this, markedSpans); + this.height = estimateHeight ? estimateHeight(this) : 1; + }; + Line.prototype.lineNo = function () { + return lineNo(this); + }; + eventMixin(Line); + + // Change the content (text, markers) of a line. Automatically + // invalidates cached information and tries to re-estimate the + // line's height. + function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text; + if (line.stateAfter) { + line.stateAfter = null; + } + if (line.styles) { + line.styles = null; + } + if (line.order != null) { + line.order = null; + } + detachMarkedSpans(line); + attachMarkedSpans(line, markedSpans); + var estHeight = estimateHeight ? estimateHeight(line) : 1; + if (estHeight != line.height) { + updateLineHeight(line, estHeight); + } + } + + // Detach a line from the document tree and its markers. + function cleanUpLine(line) { + line.parent = null; + detachMarkedSpans(line); + } + + // Convert a style as returned by a mode (either null, or a string + // containing one or more styles) to a CSS style. This is cached, + // and also looks for line-wide styles. + var styleToClassCache = {}, + styleToClassCacheWithMode = {}; + function interpretTokenStyle(style, options) { + if (!style || /^\s*$/.test(style)) { + return null; + } + var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; + return cache[style] || (cache[style] = style.replace(/\S+/g, "cm-$&")); + } + + // Render the DOM representation of the text of a line. Also builds + // up a 'line map', which points at the DOM nodes that represent + // specific stretches of text, and is used by the measuring code. + // The returned object contains the DOM node, this map, and + // information about line-wide styles that were set by the mode. + function buildLineContent(cm, lineView) { + // The padding-right forces the element to have a 'border', which + // is needed on Webkit to be able to get line-level bounding + // rectangles for it (in measureChar). + var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null); + var builder = { + pre: eltP("pre", [content], "CodeMirror-line"), + content: content, + col: 0, + pos: 0, + cm: cm, + trailingSpace: false, + splitSpaces: cm.getOption("lineWrapping") + }; + lineView.measure = {}; + + // Iterate over the logical lines that make up this visual line. + for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { + var line = i ? lineView.rest[i - 1] : lineView.line, + order = void 0; + builder.pos = 0; + builder.addToken = buildToken; + // Optionally wire in some hacks into the token-rendering + // algorithm, to deal with browser quirks. + if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) { + builder.addToken = buildTokenBadBidi(builder.addToken, order); + } + builder.map = []; + var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); + insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); + if (line.styleClasses) { + if (line.styleClasses.bgClass) { + builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); + } + if (line.styleClasses.textClass) { + builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); + } + } + + // Ensure at least a single node is present, for measuring. + if (builder.map.length == 0) { + builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); + } + + // Store the map and a cache object for the current logical line + if (i == 0) { + lineView.measure.map = builder.map; + lineView.measure.cache = {}; + } else { + (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); + (lineView.measure.caches || (lineView.measure.caches = [])).push({}); + } + } + + // See issue #2901 + if (webkit) { + var last = builder.content.lastChild; + if (/\bcm-tab\b/.test(last.className) || last.querySelector && last.querySelector(".cm-tab")) { + builder.content.className = "cm-tab-wrap-hack"; + } + } + signal(cm, "renderLine", cm, lineView.line, builder.pre); + if (builder.pre.className) { + builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); + } + return builder; + } + function defaultSpecialCharPlaceholder(ch) { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + ch.charCodeAt(0).toString(16); + token.setAttribute("aria-label", token.title); + return token; + } + + // Build up the DOM representation for a single token, and add it to + // the line map. Takes care to render special characters separately. + function buildToken(builder, text, style, startStyle, endStyle, css, attributes) { + if (!text) { + return; + } + var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text; + var special = builder.cm.state.specialChars, + mustWrap = false; + var content; + if (!special.test(text)) { + builder.col += text.length; + content = document.createTextNode(displayText); + builder.map.push(builder.pos, builder.pos + text.length, content); + if (ie && ie_version < 9) { + mustWrap = true; + } + builder.pos += text.length; + } else { + content = document.createDocumentFragment(); + var pos = 0; + while (true) { + special.lastIndex = pos; + var m = special.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); + if (ie && ie_version < 9) { + content.appendChild(elt("span", [txt])); + } else { + content.appendChild(txt); + } + builder.map.push(builder.pos, builder.pos + skipped, txt); + builder.col += skipped; + builder.pos += skipped; + } + if (!m) { + break; + } + pos += skipped + 1; + var txt$1 = void 0; + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, + tabWidth = tabSize - builder.col % tabSize; + txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + txt$1.setAttribute("role", "presentation"); + txt$1.setAttribute("cm-text", "\t"); + builder.col += tabWidth; + } else if (m[0] == "\r" || m[0] == "\n") { + txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")); + txt$1.setAttribute("cm-text", m[0]); + builder.col += 1; + } else { + txt$1 = builder.cm.options.specialCharPlaceholder(m[0]); + txt$1.setAttribute("cm-text", m[0]); + if (ie && ie_version < 9) { + content.appendChild(elt("span", [txt$1])); + } else { + content.appendChild(txt$1); + } + builder.col += 1; + } + builder.map.push(builder.pos, builder.pos + 1, txt$1); + builder.pos++; + } + } + builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32; + if (style || startStyle || endStyle || mustWrap || css || attributes) { + var fullStyle = style || ""; + if (startStyle) { + fullStyle += startStyle; + } + if (endStyle) { + fullStyle += endStyle; + } + var token = elt("span", [content], fullStyle, css); + if (attributes) { + for (var attr in attributes) { + if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class") { + token.setAttribute(attr, attributes[attr]); + } + } + } + return builder.content.appendChild(token); + } + builder.content.appendChild(content); + } + + // Change some spaces to NBSP to prevent the browser from collapsing + // trailing spaces at the end of a line when rendering text (issue #1362). + function splitSpaces(text, trailingBefore) { + if (text.length > 1 && !/ /.test(text)) { + return text; + } + var spaceBefore = trailingBefore, + result = ""; + for (var i = 0; i < text.length; i++) { + var ch = text.charAt(i); + if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) { + ch = "\u00a0"; + } + result += ch; + spaceBefore = ch == " "; + } + return result; + } + + // Work around nonsense dimensions being reported for stretches of + // right-to-left text. + function buildTokenBadBidi(inner, order) { + return function (builder, text, style, startStyle, endStyle, css, attributes) { + style = style ? style + " cm-force-border" : "cm-force-border"; + var start = builder.pos, + end = start + text.length; + for (;;) { + // Find the part that overlaps with the start of this text + var part = void 0; + for (var i = 0; i < order.length; i++) { + part = order[i]; + if (part.to > start && part.from <= start) { + break; + } + } + if (part.to >= end) { + return inner(builder, text, style, startStyle, endStyle, css, attributes); + } + inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes); + startStyle = null; + text = text.slice(part.to - start); + start = part.to; + } + }; + } + function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.widgetNode; + if (widget) { + builder.map.push(builder.pos, builder.pos + size, widget); + } + if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { + if (!widget) { + widget = builder.content.appendChild(document.createElement("span")); + } + widget.setAttribute("cm-marker", marker.id); + } + if (widget) { + builder.cm.display.input.setUneditable(widget); + builder.content.appendChild(widget); + } + builder.pos += size; + builder.trailingSpace = false; + } + + // Outputs a number of spans to make up a line, taking highlighting + // and marked text into account. + function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, + allText = line.text, + at = 0; + if (!spans) { + for (var i$1 = 1; i$1 < styles.length; i$1 += 2) { + builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1 + 1], builder.cm.options)); + } + return; + } + var len = allText.length, + pos = 0, + i = 1, + text = "", + style, + css; + var nextChange = 0, + spanStyle, + spanEndStyle, + spanStartStyle, + collapsed, + attributes; + for (;;) { + if (nextChange == pos) { + // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = css = ""; + attributes = null; + collapsed = null; + nextChange = Infinity; + var foundBookmarks = [], + endStyles = void 0; + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], + m = sp.marker; + if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { + foundBookmarks.push(m); + } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { + if (sp.to != null && sp.to != pos && nextChange > sp.to) { + nextChange = sp.to; + spanEndStyle = ""; + } + if (m.className) { + spanStyle += " " + m.className; + } + if (m.css) { + css = (css ? css + ";" : "") + m.css; + } + if (m.startStyle && sp.from == pos) { + spanStartStyle += " " + m.startStyle; + } + if (m.endStyle && sp.to == nextChange) { + (endStyles || (endStyles = [])).push(m.endStyle, sp.to); + } + // support for the old title property + // https://github.com/codemirror/CodeMirror/pull/5673 + if (m.title) { + (attributes || (attributes = {})).title = m.title; + } + if (m.attributes) { + for (var attr in m.attributes) { + (attributes || (attributes = {}))[attr] = m.attributes[attr]; + } + } + if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) { + collapsed = sp; + } + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from; + } + } + if (endStyles) { + for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) { + if (endStyles[j$1 + 1] == nextChange) { + spanEndStyle += " " + endStyles[j$1]; + } + } + } + if (!collapsed || collapsed.from == pos) { + for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) { + buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); + } + } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null); + if (collapsed.to == null) { + return; + } + if (collapsed.to == pos) { + collapsed = false; + } + } + } + if (pos >= len) { + break; + } + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text; + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes); + } + if (end >= upto) { + text = text.slice(upto - pos); + pos = upto; + break; + } + pos = end; + spanStartStyle = ""; + } + text = allText.slice(at, at = styles[i++]); + style = interpretTokenStyle(styles[i++], builder.cm.options); + } + } + } + + // These objects are used to represent the visible (currently drawn) + // part of the document. A LineView may correspond to multiple + // logical lines, if those are connected by collapsed ranges. + function LineView(doc, line, lineN) { + // The starting line + this.line = line; + // Continuing lines, if any + this.rest = visualLineContinued(line); + // Number of logical lines in this visual line + this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; + this.node = this.text = null; + this.hidden = lineIsHidden(doc, line); + } + + // Create a range of LineView objects for the given lines. + function buildViewArray(cm, from, to) { + var array = [], + nextPos; + for (var pos = from; pos < to; pos = nextPos) { + var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); + nextPos = pos + view.size; + array.push(view); + } + return array; + } + var operationGroup = null; + function pushOperation(op) { + if (operationGroup) { + operationGroup.ops.push(op); + } else { + op.ownsGroup = operationGroup = { + ops: [op], + delayedCallbacks: [] + }; + } + } + function fireCallbacksForOps(group) { + // Calls delayed callbacks and cursorActivity handlers until no + // new ones appear + var callbacks = group.delayedCallbacks, + i = 0; + do { + for (; i < callbacks.length; i++) { + callbacks[i].call(null); + } + for (var j = 0; j < group.ops.length; j++) { + var op = group.ops[j]; + if (op.cursorActivityHandlers) { + while (op.cursorActivityCalled < op.cursorActivityHandlers.length) { + op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); + } + } + } + } while (i < callbacks.length); + } + function finishOperation(op, endCb) { + var group = op.ownsGroup; + if (!group) { + return; + } + try { + fireCallbacksForOps(group); + } finally { + operationGroup = null; + endCb(group); + } + } + var orphanDelayedCallbacks = null; + + // Often, we want to signal events at a point where we are in the + // middle of some work, but don't want the handler to start calling + // other methods on the editor, which might be in an inconsistent + // state or simply not expect any other events to happen. + // signalLater looks whether there are any handlers, and schedules + // them to be executed when the last operation ends, or, if no + // operation is active, when a timeout fires. + function signalLater(emitter, type /*, values...*/) { + var arr = getHandlers(emitter, type); + if (!arr.length) { + return; + } + var args = Array.prototype.slice.call(arguments, 2), + list; + if (operationGroup) { + list = operationGroup.delayedCallbacks; + } else if (orphanDelayedCallbacks) { + list = orphanDelayedCallbacks; + } else { + list = orphanDelayedCallbacks = []; + setTimeout(fireOrphanDelayed, 0); + } + var loop = function (i) { + list.push(function () { + return arr[i].apply(null, args); + }); + }; + for (var i = 0; i < arr.length; ++i) loop(i); + } + function fireOrphanDelayed() { + var delayed = orphanDelayedCallbacks; + orphanDelayedCallbacks = null; + for (var i = 0; i < delayed.length; ++i) { + delayed[i](); + } + } + + // When an aspect of a line changes, a string is added to + // lineView.changes. This updates the relevant part of the line's + // DOM structure. + function updateLineForChanges(cm, lineView, lineN, dims) { + for (var j = 0; j < lineView.changes.length; j++) { + var type = lineView.changes[j]; + if (type == "text") { + updateLineText(cm, lineView); + } else if (type == "gutter") { + updateLineGutter(cm, lineView, lineN, dims); + } else if (type == "class") { + updateLineClasses(cm, lineView); + } else if (type == "widget") { + updateLineWidgets(cm, lineView, dims); + } + } + lineView.changes = null; + } + + // Lines with gutter elements, widgets or a background class need to + // be wrapped, and have the extra elements added to the wrapper div + function ensureLineWrapped(lineView) { + if (lineView.node == lineView.text) { + lineView.node = elt("div", null, null, "position: relative"); + if (lineView.text.parentNode) { + lineView.text.parentNode.replaceChild(lineView.node, lineView.text); + } + lineView.node.appendChild(lineView.text); + if (ie && ie_version < 8) { + lineView.node.style.zIndex = 2; + } + } + return lineView.node; + } + function updateLineBackground(cm, lineView) { + var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; + if (cls) { + cls += " CodeMirror-linebackground"; + } + if (lineView.background) { + if (cls) { + lineView.background.className = cls; + } else { + lineView.background.parentNode.removeChild(lineView.background); + lineView.background = null; + } + } else if (cls) { + var wrap = ensureLineWrapped(lineView); + lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); + cm.display.input.setUneditable(lineView.background); + } + } + + // Wrapper around buildLineContent which will reuse the structure + // in display.externalMeasured when possible. + function getLineContent(cm, lineView) { + var ext = cm.display.externalMeasured; + if (ext && ext.line == lineView.line) { + cm.display.externalMeasured = null; + lineView.measure = ext.measure; + return ext.built; + } + return buildLineContent(cm, lineView); + } + + // Redraw the line's text. Interacts with the background and text + // classes because the mode may output tokens that influence these + // classes. + function updateLineText(cm, lineView) { + var cls = lineView.text.className; + var built = getLineContent(cm, lineView); + if (lineView.text == lineView.node) { + lineView.node = built.pre; + } + lineView.text.parentNode.replaceChild(built.pre, lineView.text); + lineView.text = built.pre; + if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { + lineView.bgClass = built.bgClass; + lineView.textClass = built.textClass; + updateLineClasses(cm, lineView); + } else if (cls) { + lineView.text.className = cls; + } + } + function updateLineClasses(cm, lineView) { + updateLineBackground(cm, lineView); + if (lineView.line.wrapClass) { + ensureLineWrapped(lineView).className = lineView.line.wrapClass; + } else if (lineView.node != lineView.text) { + lineView.node.className = ""; + } + var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; + lineView.text.className = textClass || ""; + } + function updateLineGutter(cm, lineView, lineN, dims) { + if (lineView.gutter) { + lineView.node.removeChild(lineView.gutter); + lineView.gutter = null; + } + if (lineView.gutterBackground) { + lineView.node.removeChild(lineView.gutterBackground); + lineView.gutterBackground = null; + } + if (lineView.line.gutterClass) { + var wrap = ensureLineWrapped(lineView); + lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + dims.gutterTotalWidth + "px"); + cm.display.input.setUneditable(lineView.gutterBackground); + wrap.insertBefore(lineView.gutterBackground, lineView.text); + } + var markers = lineView.line.gutterMarkers; + if (cm.options.lineNumbers || markers) { + var wrap$1 = ensureLineWrapped(lineView); + var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"); + gutterWrap.setAttribute("aria-hidden", "true"); + cm.display.input.setUneditable(gutterWrap); + wrap$1.insertBefore(gutterWrap, lineView.text); + if (lineView.line.gutterClass) { + gutterWrap.className += " " + lineView.line.gutterClass; + } + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) { + lineView.lineNumber = gutterWrap.appendChild(elt("div", lineNumberFor(cm.options, lineN), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + cm.display.lineNumInnerWidth + "px")); + } + if (markers) { + for (var k = 0; k < cm.display.gutterSpecs.length; ++k) { + var id = cm.display.gutterSpecs[k].className, + found = markers.hasOwnProperty(id) && markers[id]; + if (found) { + gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); + } + } + } + } + } + function updateLineWidgets(cm, lineView, dims) { + if (lineView.alignable) { + lineView.alignable = null; + } + var isWidget = classTest("CodeMirror-linewidget"); + for (var node = lineView.node.firstChild, next = void 0; node; node = next) { + next = node.nextSibling; + if (isWidget.test(node.className)) { + lineView.node.removeChild(node); + } + } + insertLineWidgets(cm, lineView, dims); + } + + // Build a line's DOM representation from scratch + function buildLineElement(cm, lineView, lineN, dims) { + var built = getLineContent(cm, lineView); + lineView.text = lineView.node = built.pre; + if (built.bgClass) { + lineView.bgClass = built.bgClass; + } + if (built.textClass) { + lineView.textClass = built.textClass; + } + updateLineClasses(cm, lineView); + updateLineGutter(cm, lineView, lineN, dims); + insertLineWidgets(cm, lineView, dims); + return lineView.node; + } + + // A lineView may contain multiple logical lines (when merged by + // collapsed spans). The widgets for all of them need to be drawn. + function insertLineWidgets(cm, lineView, dims) { + insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); + if (lineView.rest) { + for (var i = 0; i < lineView.rest.length; i++) { + insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); + } + } + } + function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { + if (!line.widgets) { + return; + } + var wrap = ensureLineWrapped(lineView); + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], + node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : "")); + if (!widget.handleMouseEvents) { + node.setAttribute("cm-ignore-events", "true"); + } + positionLineWidget(widget, node, lineView, dims); + cm.display.input.setUneditable(node); + if (allowAbove && widget.above) { + wrap.insertBefore(node, lineView.gutter || lineView.text); + } else { + wrap.appendChild(node); + } + signalLater(widget, "redraw"); + } + } + function positionLineWidget(widget, node, lineView, dims) { + if (widget.noHScroll) { + (lineView.alignable || (lineView.alignable = [])).push(node); + var width = dims.wrapperWidth; + node.style.left = dims.fixedPos + "px"; + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth; + node.style.paddingLeft = dims.gutterTotalWidth + "px"; + } + node.style.width = width + "px"; + } + if (widget.coverGutter) { + node.style.zIndex = 5; + node.style.position = "relative"; + if (!widget.noHScroll) { + node.style.marginLeft = -dims.gutterTotalWidth + "px"; + } + } + } + function widgetHeight(widget) { + if (widget.height != null) { + return widget.height; + } + var cm = widget.doc.cm; + if (!cm) { + return 0; + } + if (!contains(document.body, widget.node)) { + var parentStyle = "position: relative;"; + if (widget.coverGutter) { + parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; + } + if (widget.noHScroll) { + parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; + } + removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); + } + return widget.height = widget.node.parentNode.offsetHeight; + } + + // Return true when the given mouse event happened in a widget + function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true" || n.parentNode == display.sizer && n != display.mover) { + return true; + } + } + } + + // POSITION MEASUREMENT + + function paddingTop(display) { + return display.lineSpace.offsetTop; + } + function paddingVert(display) { + return display.mover.offsetHeight - display.lineSpace.offsetHeight; + } + function paddingH(display) { + if (display.cachedPaddingH) { + return display.cachedPaddingH; + } + var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like")); + var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; + var data = { + left: parseInt(style.paddingLeft), + right: parseInt(style.paddingRight) + }; + if (!isNaN(data.left) && !isNaN(data.right)) { + display.cachedPaddingH = data; + } + return data; + } + function scrollGap(cm) { + return scrollerGap - cm.display.nativeBarWidth; + } + function displayWidth(cm) { + return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; + } + function displayHeight(cm) { + return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; + } + + // Ensure the lineView.wrapping.heights array is populated. This is + // an array of bottom offsets for the lines that make up a drawn + // line. When lineWrapping is on, there might be more than one + // height. + function ensureLineHeights(cm, lineView, rect) { + var wrapping = cm.options.lineWrapping; + var curWidth = wrapping && displayWidth(cm); + if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { + var heights = lineView.measure.heights = []; + if (wrapping) { + lineView.measure.width = curWidth; + var rects = lineView.text.firstChild.getClientRects(); + for (var i = 0; i < rects.length - 1; i++) { + var cur = rects[i], + next = rects[i + 1]; + if (Math.abs(cur.bottom - next.bottom) > 2) { + heights.push((cur.bottom + next.top) / 2 - rect.top); + } + } + } + heights.push(rect.bottom - rect.top); + } + } + + // Find a line map (mapping character offsets to text nodes) and a + // measurement cache for the given line number. (A line view might + // contain multiple lines when collapsed ranges are present.) + function mapFromLineView(lineView, line, lineN) { + if (lineView.line == line) { + return { + map: lineView.measure.map, + cache: lineView.measure.cache + }; + } + if (lineView.rest) { + for (var i = 0; i < lineView.rest.length; i++) { + if (lineView.rest[i] == line) { + return { + map: lineView.measure.maps[i], + cache: lineView.measure.caches[i] + }; + } + } + for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) { + if (lineNo(lineView.rest[i$1]) > lineN) { + return { + map: lineView.measure.maps[i$1], + cache: lineView.measure.caches[i$1], + before: true + }; + } + } + } + } + + // Render a line into the hidden node display.externalMeasured. Used + // when measurement is needed for a line that's not in the viewport. + function updateExternalMeasurement(cm, line) { + line = visualLine(line); + var lineN = lineNo(line); + var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); + view.lineN = lineN; + var built = view.built = buildLineContent(cm, view); + view.text = built.pre; + removeChildrenAndAdd(cm.display.lineMeasure, built.pre); + return view; + } + + // Get a {top, bottom, left, right} box (in line-local coordinates) + // for a given character. + function measureChar(cm, line, ch, bias) { + return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); + } + + // Find a line view that corresponds to the given line number. + function findViewForLine(cm, lineN) { + if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) { + return cm.display.view[findViewIndex(cm, lineN)]; + } + var ext = cm.display.externalMeasured; + if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) { + return ext; + } + } + + // Measurement can be split in two steps, the set-up work that + // applies to the whole line, and the measurement of the actual + // character. Functions like coordsChar, that need to do a lot of + // measurements in a row, can thus ensure that the set-up work is + // only done once. + function prepareMeasureForLine(cm, line) { + var lineN = lineNo(line); + var view = findViewForLine(cm, lineN); + if (view && !view.text) { + view = null; + } else if (view && view.changes) { + updateLineForChanges(cm, view, lineN, getDimensions(cm)); + cm.curOp.forceUpdate = true; + } + if (!view) { + view = updateExternalMeasurement(cm, line); + } + var info = mapFromLineView(view, line, lineN); + return { + line: line, + view: view, + rect: null, + map: info.map, + cache: info.cache, + before: info.before, + hasHeights: false + }; + } + + // Given a prepared measurement object, measures the position of an + // actual character (or fetches it from the cache). + function measureCharPrepared(cm, prepared, ch, bias, varHeight) { + if (prepared.before) { + ch = -1; + } + var key = ch + (bias || ""), + found; + if (prepared.cache.hasOwnProperty(key)) { + found = prepared.cache[key]; + } else { + if (!prepared.rect) { + prepared.rect = prepared.view.text.getBoundingClientRect(); + } + if (!prepared.hasHeights) { + ensureLineHeights(cm, prepared.view, prepared.rect); + prepared.hasHeights = true; + } + found = measureCharInner(cm, prepared, ch, bias); + if (!found.bogus) { + prepared.cache[key] = found; + } + } + return { + left: found.left, + right: found.right, + top: varHeight ? found.rtop : found.top, + bottom: varHeight ? found.rbottom : found.bottom + }; + } + var nullRect = { + left: 0, + right: 0, + top: 0, + bottom: 0 + }; + function nodeAndOffsetInLineMap(map, ch, bias) { + var node, start, end, collapse, mStart, mEnd; + // First, search the line map for the text node corresponding to, + // or closest to, the target character. + for (var i = 0; i < map.length; i += 3) { + mStart = map[i]; + mEnd = map[i + 1]; + if (ch < mStart) { + start = 0; + end = 1; + collapse = "left"; + } else if (ch < mEnd) { + start = ch - mStart; + end = start + 1; + } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { + end = mEnd - mStart; + start = end - 1; + if (ch >= mEnd) { + collapse = "right"; + } + } + if (start != null) { + node = map[i + 2]; + if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) { + collapse = bias; + } + if (bias == "left" && start == 0) { + while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { + node = map[(i -= 3) + 2]; + collapse = "left"; + } + } + if (bias == "right" && start == mEnd - mStart) { + while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { + node = map[(i += 3) + 2]; + collapse = "right"; + } + } + break; + } + } + return { + node: node, + start: start, + end: end, + collapse: collapse, + coverStart: mStart, + coverEnd: mEnd + }; + } + function getUsefulRect(rects, bias) { + var rect = nullRect; + if (bias == "left") { + for (var i = 0; i < rects.length; i++) { + if ((rect = rects[i]).left != rect.right) { + break; + } + } + } else { + for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { + if ((rect = rects[i$1]).left != rect.right) { + break; + } + } + } + return rect; + } + function measureCharInner(cm, prepared, ch, bias) { + var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); + var node = place.node, + start = place.start, + end = place.end, + collapse = place.collapse; + var rect; + if (node.nodeType == 3) { + // If it is a text node, use a range to retrieve the coordinates. + for (var i$1 = 0; i$1 < 4; i$1++) { + // Retry a maximum of 4 times when nonsense rectangles are returned + while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { + --start; + } + while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { + ++end; + } + if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) { + rect = node.parentNode.getBoundingClientRect(); + } else { + rect = getUsefulRect(range(node, start, end).getClientRects(), bias); + } + if (rect.left || rect.right || start == 0) { + break; + } + end = start; + start = start - 1; + collapse = "right"; + } + if (ie && ie_version < 11) { + rect = maybeUpdateRectForZooming(cm.display.measure, rect); + } + } else { + // If it is a widget, simply get the box for the whole widget. + if (start > 0) { + collapse = bias = "right"; + } + var rects; + if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) { + rect = rects[bias == "right" ? rects.length - 1 : 0]; + } else { + rect = node.getBoundingClientRect(); + } + } + if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { + var rSpan = node.parentNode.getClientRects()[0]; + if (rSpan) { + rect = { + left: rSpan.left, + right: rSpan.left + charWidth(cm.display), + top: rSpan.top, + bottom: rSpan.bottom + }; + } else { + rect = nullRect; + } + } + var rtop = rect.top - prepared.rect.top, + rbot = rect.bottom - prepared.rect.top; + var mid = (rtop + rbot) / 2; + var heights = prepared.view.measure.heights; + var i = 0; + for (; i < heights.length - 1; i++) { + if (mid < heights[i]) { + break; + } + } + var top = i ? heights[i - 1] : 0, + bot = heights[i]; + var result = { + left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, + right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, + top: top, + bottom: bot + }; + if (!rect.left && !rect.right) { + result.bogus = true; + } + if (!cm.options.singleCursorHeightPerLine) { + result.rtop = rtop; + result.rbottom = rbot; + } + return result; + } + + // Work around problem with bounding client rects on ranges being + // returned incorrectly when zoomed on IE10 and below. + function maybeUpdateRectForZooming(measure, rect) { + if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) { + return rect; + } + var scaleX = screen.logicalXDPI / screen.deviceXDPI; + var scaleY = screen.logicalYDPI / screen.deviceYDPI; + return { + left: rect.left * scaleX, + right: rect.right * scaleX, + top: rect.top * scaleY, + bottom: rect.bottom * scaleY + }; + } + function clearLineMeasurementCacheFor(lineView) { + if (lineView.measure) { + lineView.measure.cache = {}; + lineView.measure.heights = null; + if (lineView.rest) { + for (var i = 0; i < lineView.rest.length; i++) { + lineView.measure.caches[i] = {}; + } + } + } + } + function clearLineMeasurementCache(cm) { + cm.display.externalMeasure = null; + removeChildren(cm.display.lineMeasure); + for (var i = 0; i < cm.display.view.length; i++) { + clearLineMeasurementCacheFor(cm.display.view[i]); + } + } + function clearCaches(cm) { + clearLineMeasurementCache(cm); + cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; + if (!cm.options.lineWrapping) { + cm.display.maxLineChanged = true; + } + cm.display.lineNumChars = null; + } + function pageScrollX() { + // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 + // which causes page_Offset and bounding client rects to use + // different reference viewports and invalidate our calculations. + if (chrome && android) { + return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)); + } + return window.pageXOffset || (document.documentElement || document.body).scrollLeft; + } + function pageScrollY() { + if (chrome && android) { + return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)); + } + return window.pageYOffset || (document.documentElement || document.body).scrollTop; + } + function widgetTopHeight(lineObj) { + var ref = visualLine(lineObj); + var widgets = ref.widgets; + var height = 0; + if (widgets) { + for (var i = 0; i < widgets.length; ++i) { + if (widgets[i].above) { + height += widgetHeight(widgets[i]); + } + } + } + return height; + } + + // Converts a {top, bottom, left, right} box from line-local + // coordinates into another coordinate system. Context may be one of + // "line", "div" (display.lineDiv), "local"./null (editor), "window", + // or "page". + function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { + if (!includeWidgets) { + var height = widgetTopHeight(lineObj); + rect.top += height; + rect.bottom += height; + } + if (context == "line") { + return rect; + } + if (!context) { + context = "local"; + } + var yOff = heightAtLine(lineObj); + if (context == "local") { + yOff += paddingTop(cm.display); + } else { + yOff -= cm.display.viewOffset; + } + if (context == "page" || context == "window") { + var lOff = cm.display.lineSpace.getBoundingClientRect(); + yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); + rect.left += xOff; + rect.right += xOff; + } + rect.top += yOff; + rect.bottom += yOff; + return rect; + } + + // Coverts a box from "div" coords to another coordinate system. + // Context may be "window", "page", "div", or "local"./null. + function fromCoordSystem(cm, coords, context) { + if (context == "div") { + return coords; + } + var left = coords.left, + top = coords.top; + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX(); + top -= pageScrollY(); + } else if (context == "local" || !context) { + var localBox = cm.display.sizer.getBoundingClientRect(); + left += localBox.left; + top += localBox.top; + } + var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); + return { + left: left - lineSpaceBox.left, + top: top - lineSpaceBox.top + }; + } + function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) { + lineObj = getLine(cm.doc, pos.line); + } + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); + } + + // Returns a box for a given cursor position, which may have an + // 'other' property containing the position of the secondary cursor + // on a bidi boundary. + // A cursor Pos(line, char, "before") is on the same visual line as `char - 1` + // and after `char - 1` in writing order of `char - 1` + // A cursor Pos(line, char, "after") is on the same visual line as `char` + // and before `char` in writing order of `char` + // Examples (upper-case letters are RTL, lower-case are LTR): + // Pos(0, 1, ...) + // before after + // ab a|b a|b + // aB a|B aB| + // Ab |Ab A|b + // AB B|A B|A + // Every position after the last character on a line is considered to stick + // to the last character on the line. + function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { + lineObj = lineObj || getLine(cm.doc, pos.line); + if (!preparedMeasure) { + preparedMeasure = prepareMeasureForLine(cm, lineObj); + } + function get(ch, right) { + var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); + if (right) { + m.left = m.right; + } else { + m.right = m.left; + } + return intoCoordSystem(cm, lineObj, m, context); + } + var order = getOrder(lineObj, cm.doc.direction), + ch = pos.ch, + sticky = pos.sticky; + if (ch >= lineObj.text.length) { + ch = lineObj.text.length; + sticky = "before"; + } else if (ch <= 0) { + ch = 0; + sticky = "after"; + } + if (!order) { + return get(sticky == "before" ? ch - 1 : ch, sticky == "before"); + } + function getBidi(ch, partPos, invert) { + var part = order[partPos], + right = part.level == 1; + return get(invert ? ch - 1 : ch, right != invert); + } + var partPos = getBidiPartAt(order, ch, sticky); + var other = bidiOther; + var val = getBidi(ch, partPos, sticky == "before"); + if (other != null) { + val.other = getBidi(ch, other, sticky != "before"); + } + return val; + } + + // Used to cheaply estimate the coordinates for a position. Used for + // intermediate scroll updates. + function estimateCoords(cm, pos) { + var left = 0; + pos = clipPos(cm.doc, pos); + if (!cm.options.lineWrapping) { + left = charWidth(cm.display) * pos.ch; + } + var lineObj = getLine(cm.doc, pos.line); + var top = heightAtLine(lineObj) + paddingTop(cm.display); + return { + left: left, + right: left, + top: top, + bottom: top + lineObj.height + }; + } + + // Positions returned by coordsChar contain some extra information. + // xRel is the relative x position of the input coordinates compared + // to the found position (so xRel > 0 means the coordinates are to + // the right of the character position, for example). When outside + // is true, that means the coordinates lie outside the line's + // vertical range. + function PosWithInfo(line, ch, sticky, outside, xRel) { + var pos = Pos(line, ch, sticky); + pos.xRel = xRel; + if (outside) { + pos.outside = outside; + } + return pos; + } + + // Compute the character position closest to the given coordinates. + // Input must be lineSpace-local ("div" coordinate system). + function coordsChar(cm, x, y) { + var doc = cm.doc; + y += cm.display.viewOffset; + if (y < 0) { + return PosWithInfo(doc.first, 0, null, -1, -1); + } + var lineN = lineAtHeight(doc, y), + last = doc.first + doc.size - 1; + if (lineN > last) { + return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1); + } + if (x < 0) { + x = 0; + } + var lineObj = getLine(doc, lineN); + for (;;) { + var found = coordsCharInner(cm, lineObj, lineN, x, y); + var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0)); + if (!collapsed) { + return found; + } + var rangeEnd = collapsed.find(1); + if (rangeEnd.line == lineN) { + return rangeEnd; + } + lineObj = getLine(doc, lineN = rangeEnd.line); + } + } + function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { + y -= widgetTopHeight(lineObj); + var end = lineObj.text.length; + var begin = findFirst(function (ch) { + return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; + }, end, 0); + end = findFirst(function (ch) { + return measureCharPrepared(cm, preparedMeasure, ch).top > y; + }, begin, end); + return { + begin: begin, + end: end + }; + } + function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { + if (!preparedMeasure) { + preparedMeasure = prepareMeasureForLine(cm, lineObj); + } + var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top; + return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop); + } + + // Returns true if the given side of a box is after the given + // coordinates, in top-to-bottom, left-to-right order. + function boxIsAfter(box, x, y, left) { + return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x; + } + function coordsCharInner(cm, lineObj, lineNo, x, y) { + // Move y into line-local coordinate space + y -= heightAtLine(lineObj); + var preparedMeasure = prepareMeasureForLine(cm, lineObj); + // When directly calling `measureCharPrepared`, we have to adjust + // for the widgets at this line. + var widgetHeight = widgetTopHeight(lineObj); + var begin = 0, + end = lineObj.text.length, + ltr = true; + var order = getOrder(lineObj, cm.doc.direction); + // If the line isn't plain left-to-right text, first figure out + // which bidi section the coordinates fall into. + if (order) { + var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)(cm, lineObj, lineNo, preparedMeasure, order, x, y); + ltr = part.level != 1; + // The awkward -1 offsets are needed because findFirst (called + // on these below) will treat its first bound as inclusive, + // second as exclusive, but we want to actually address the + // characters in the part's range + begin = ltr ? part.from : part.to - 1; + end = ltr ? part.to : part.from - 1; + } + + // A binary search to find the first character whose bounding box + // starts after the coordinates. If we run across any whose box wrap + // the coordinates, store that. + var chAround = null, + boxAround = null; + var ch = findFirst(function (ch) { + var box = measureCharPrepared(cm, preparedMeasure, ch); + box.top += widgetHeight; + box.bottom += widgetHeight; + if (!boxIsAfter(box, x, y, false)) { + return false; + } + if (box.top <= y && box.left <= x) { + chAround = ch; + boxAround = box; + } + return true; + }, begin, end); + var baseX, + sticky, + outside = false; + // If a box around the coordinates was found, use that + if (boxAround) { + // Distinguish coordinates nearer to the left or right side of the box + var atLeft = x - boxAround.left < boxAround.right - x, + atStart = atLeft == ltr; + ch = chAround + (atStart ? 0 : 1); + sticky = atStart ? "after" : "before"; + baseX = atLeft ? boxAround.left : boxAround.right; + } else { + // (Adjust for extended bound, if necessary.) + if (!ltr && (ch == end || ch == begin)) { + ch++; + } + // To determine which side to associate with, get the box to the + // left of the character and compare it's vertical position to the + // coordinates + sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y == ltr ? "after" : "before"; + // Now get accurate coordinates for this place, in order to get a + // base X position + var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), "line", lineObj, preparedMeasure); + baseX = coords.left; + outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0; + } + ch = skipExtendingChars(lineObj.text, ch, 1); + return PosWithInfo(lineNo, ch, sticky, outside, x - baseX); + } + function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) { + // Bidi parts are sorted left-to-right, and in a non-line-wrapping + // situation, we can take this ordering to correspond to the visual + // ordering. This finds the first part whose end is after the given + // coordinates. + var index = findFirst(function (i) { + var part = order[i], + ltr = part.level != 1; + return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? "before" : "after"), "line", lineObj, preparedMeasure), x, y, true); + }, 0, order.length - 1); + var part = order[index]; + // If this isn't the first part, the part's start is also after + // the coordinates, and the coordinates aren't on the same line as + // that start, move one part back. + if (index > 0) { + var ltr = part.level != 1; + var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? "after" : "before"), "line", lineObj, preparedMeasure); + if (boxIsAfter(start, x, y, true) && start.top > y) { + part = order[index - 1]; + } + } + return part; + } + function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) { + // In a wrapped line, rtl text on wrapping boundaries can do things + // that don't correspond to the ordering in our `order` array at + // all, so a binary search doesn't work, and we want to return a + // part that only spans one line so that the binary search in + // coordsCharInner is safe. As such, we first find the extent of the + // wrapped line, and then do a flat search in which we discard any + // spans that aren't on the line. + var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y); + var begin = ref.begin; + var end = ref.end; + if (/\s/.test(lineObj.text.charAt(end - 1))) { + end--; + } + var part = null, + closestDist = null; + for (var i = 0; i < order.length; i++) { + var p = order[i]; + if (p.from >= end || p.to <= begin) { + continue; + } + var ltr = p.level != 1; + var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; + // Weigh against spans ending before this, so that they are only + // picked if nothing ends after + var dist = endX < x ? x - endX + 1e9 : endX - x; + if (!part || closestDist > dist) { + part = p; + closestDist = dist; + } + } + if (!part) { + part = order[order.length - 1]; + } + // Clip the part to the wrapped line. + if (part.from < begin) { + part = { + from: begin, + to: part.to, + level: part.level + }; + } + if (part.to > end) { + part = { + from: part.from, + to: end, + level: part.level + }; + } + return part; + } + var measureText; + // Compute the default text height. + function textHeight(display) { + if (display.cachedTextHeight != null) { + return display.cachedTextHeight; + } + if (measureText == null) { + measureText = elt("pre", null, "CodeMirror-line-like"); + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")); + measureText.appendChild(elt("br")); + } + measureText.appendChild(document.createTextNode("x")); + } + removeChildrenAndAdd(display.measure, measureText); + var height = measureText.offsetHeight / 50; + if (height > 3) { + display.cachedTextHeight = height; + } + removeChildren(display.measure); + return height || 1; + } + + // Compute the default character width. + function charWidth(display) { + if (display.cachedCharWidth != null) { + return display.cachedCharWidth; + } + var anchor = elt("span", "xxxxxxxxxx"); + var pre = elt("pre", [anchor], "CodeMirror-line-like"); + removeChildrenAndAdd(display.measure, pre); + var rect = anchor.getBoundingClientRect(), + width = (rect.right - rect.left) / 10; + if (width > 2) { + display.cachedCharWidth = width; + } + return width || 10; + } + + // Do a bulk-read of the DOM positions and sizes needed to draw the + // view, so that we don't interleave reading and writing to the DOM. + function getDimensions(cm) { + var d = cm.display, + left = {}, + width = {}; + var gutterLeft = d.gutters.clientLeft; + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + var id = cm.display.gutterSpecs[i].className; + left[id] = n.offsetLeft + n.clientLeft + gutterLeft; + width[id] = n.clientWidth; + } + return { + fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth + }; + } + + // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, + // but using getBoundingClientRect to get a sub-pixel-accurate + // result. + function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; + } + + // Returns a function that estimates the height of a line, to use as + // first approximation until the line becomes visible (and is thus + // properly measurable). + function estimateHeight(cm) { + var th = textHeight(cm.display), + wrapping = cm.options.lineWrapping; + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); + return function (line) { + if (lineIsHidden(cm.doc, line)) { + return 0; + } + var widgetsHeight = 0; + if (line.widgets) { + for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].height) { + widgetsHeight += line.widgets[i].height; + } + } + } + if (wrapping) { + return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; + } else { + return widgetsHeight + th; + } + }; + } + function estimateLineHeights(cm) { + var doc = cm.doc, + est = estimateHeight(cm); + doc.iter(function (line) { + var estHeight = est(line); + if (estHeight != line.height) { + updateLineHeight(line, estHeight); + } + }); + } + + // Given a mouse event, find the corresponding position. If liberal + // is false, it checks whether a gutter or scrollbar was clicked, + // and returns null if it was. forRect is used by rectangular + // selections, and tries to estimate a character position even for + // coordinates beyond the right of the text. + function posFromMouse(cm, e, liberal, forRect) { + var display = cm.display; + if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { + return null; + } + var x, + y, + space = display.lineSpace.getBoundingClientRect(); + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { + x = e.clientX - space.left; + y = e.clientY - space.top; + } catch (e$1) { + return null; + } + var coords = coordsChar(cm, x, y), + line; + if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { + var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; + coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); + } + return coords; + } + + // Find the view element corresponding to a given line. Return null + // when the line isn't visible. + function findViewIndex(cm, n) { + if (n >= cm.display.viewTo) { + return null; + } + n -= cm.display.viewFrom; + if (n < 0) { + return null; + } + var view = cm.display.view; + for (var i = 0; i < view.length; i++) { + n -= view[i].size; + if (n < 0) { + return i; + } + } + } + + // Updates the display.view data structure for a given change to the + // document. From and to are in pre-change coordinates. Lendiff is + // the amount of lines added or subtracted by the change. This is + // used for changes that span multiple lines, or change the way + // lines are divided into visual lines. regLineChange (below) + // registers single-line changes. + function regChange(cm, from, to, lendiff) { + if (from == null) { + from = cm.doc.first; + } + if (to == null) { + to = cm.doc.first + cm.doc.size; + } + if (!lendiff) { + lendiff = 0; + } + var display = cm.display; + if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) { + display.updateLineNumbers = from; + } + cm.curOp.viewChanged = true; + if (from >= display.viewTo) { + // Change after + if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) { + resetView(cm); + } + } else if (to <= display.viewFrom) { + // Change before + if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { + resetView(cm); + } else { + display.viewFrom += lendiff; + display.viewTo += lendiff; + } + } else if (from <= display.viewFrom && to >= display.viewTo) { + // Full overlap + resetView(cm); + } else if (from <= display.viewFrom) { + // Top overlap + var cut = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cut) { + display.view = display.view.slice(cut.index); + display.viewFrom = cut.lineN; + display.viewTo += lendiff; + } else { + resetView(cm); + } + } else if (to >= display.viewTo) { + // Bottom overlap + var cut$1 = viewCuttingPoint(cm, from, from, -1); + if (cut$1) { + display.view = display.view.slice(0, cut$1.index); + display.viewTo = cut$1.lineN; + } else { + resetView(cm); + } + } else { + // Gap in the middle + var cutTop = viewCuttingPoint(cm, from, from, -1); + var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cutTop && cutBot) { + display.view = display.view.slice(0, cutTop.index).concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)).concat(display.view.slice(cutBot.index)); + display.viewTo += lendiff; + } else { + resetView(cm); + } + } + var ext = display.externalMeasured; + if (ext) { + if (to < ext.lineN) { + ext.lineN += lendiff; + } else if (from < ext.lineN + ext.size) { + display.externalMeasured = null; + } + } + } + + // Register a change to a single line. Type must be one of "text", + // "gutter", "class", "widget" + function regLineChange(cm, line, type) { + cm.curOp.viewChanged = true; + var display = cm.display, + ext = cm.display.externalMeasured; + if (ext && line >= ext.lineN && line < ext.lineN + ext.size) { + display.externalMeasured = null; + } + if (line < display.viewFrom || line >= display.viewTo) { + return; + } + var lineView = display.view[findViewIndex(cm, line)]; + if (lineView.node == null) { + return; + } + var arr = lineView.changes || (lineView.changes = []); + if (indexOf(arr, type) == -1) { + arr.push(type); + } + } + + // Clear the view. + function resetView(cm) { + cm.display.viewFrom = cm.display.viewTo = cm.doc.first; + cm.display.view = []; + cm.display.viewOffset = 0; + } + function viewCuttingPoint(cm, oldN, newN, dir) { + var index = findViewIndex(cm, oldN), + diff, + view = cm.display.view; + if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) { + return { + index: index, + lineN: newN + }; + } + var n = cm.display.viewFrom; + for (var i = 0; i < index; i++) { + n += view[i].size; + } + if (n != oldN) { + if (dir > 0) { + if (index == view.length - 1) { + return null; + } + diff = n + view[index].size - oldN; + index++; + } else { + diff = n - oldN; + } + oldN += diff; + newN += diff; + } + while (visualLineNo(cm.doc, newN) != newN) { + if (index == (dir < 0 ? 0 : view.length - 1)) { + return null; + } + newN += dir * view[index - (dir < 0 ? 1 : 0)].size; + index += dir; + } + return { + index: index, + lineN: newN + }; + } + + // Force the view to cover a given range, adding empty view element + // or clipping off existing ones as needed. + function adjustView(cm, from, to) { + var display = cm.display, + view = display.view; + if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { + display.view = buildViewArray(cm, from, to); + display.viewFrom = from; + } else { + if (display.viewFrom > from) { + display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); + } else if (display.viewFrom < from) { + display.view = display.view.slice(findViewIndex(cm, from)); + } + display.viewFrom = from; + if (display.viewTo < to) { + display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); + } else if (display.viewTo > to) { + display.view = display.view.slice(0, findViewIndex(cm, to)); + } + } + display.viewTo = to; + } + + // Count the number of lines in the view whose DOM representation is + // out of date (or nonexistent). + function countDirtyView(cm) { + var view = cm.display.view, + dirty = 0; + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (!lineView.hidden && (!lineView.node || lineView.changes)) { + ++dirty; + } + } + return dirty; + } + function updateSelection(cm) { + cm.display.input.showSelection(cm.display.input.prepareSelection()); + } + function prepareSelection(cm, primary) { + if (primary === void 0) primary = true; + var doc = cm.doc, + result = {}; + var curFragment = result.cursors = document.createDocumentFragment(); + var selFragment = result.selection = document.createDocumentFragment(); + var customCursor = cm.options.$customCursor; + if (customCursor) { + primary = true; + } + for (var i = 0; i < doc.sel.ranges.length; i++) { + if (!primary && i == doc.sel.primIndex) { + continue; + } + var range = doc.sel.ranges[i]; + if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { + continue; + } + var collapsed = range.empty(); + if (customCursor) { + var head = customCursor(cm, range); + if (head) { + drawSelectionCursor(cm, head, curFragment); + } + } else if (collapsed || cm.options.showCursorWhenSelecting) { + drawSelectionCursor(cm, range.head, curFragment); + } + if (!collapsed) { + drawSelectionRange(cm, range, selFragment); + } + } + return result; + } + + // Draws a cursor for the given range + function drawSelectionCursor(cm, head, output) { + var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); + var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); + cursor.style.left = pos.left + "px"; + cursor.style.top = pos.top + "px"; + cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; + if (/\bcm-fat-cursor\b/.test(cm.getWrapperElement().className)) { + var charPos = charCoords(cm, head, "div", null, null); + var width = charPos.right - charPos.left; + cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + "px"; + } + if (pos.other) { + // Secondary cursor, shown when on a 'jump' in bi-directional text + var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); + otherCursor.style.display = ""; + otherCursor.style.left = pos.other.left + "px"; + otherCursor.style.top = pos.other.top + "px"; + otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; + } + } + function cmpCoords(a, b) { + return a.top - b.top || a.left - b.left; + } + + // Draws the given range as a highlighted selection + function drawSelectionRange(cm, range, output) { + var display = cm.display, + doc = cm.doc; + var fragment = document.createDocumentFragment(); + var padding = paddingH(cm.display), + leftSide = padding.left; + var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; + var docLTR = doc.direction == "ltr"; + function add(left, top, width, bottom) { + if (top < 0) { + top = 0; + } + top = Math.round(top); + bottom = Math.round(bottom); + fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px")); + } + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line); + var lineLen = lineObj.text.length; + var start, end; + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias); + } + function wrapX(pos, dir, side) { + var extent = wrappedLineExtentChar(cm, lineObj, null, pos); + var prop = dir == "ltr" == (side == "after") ? "left" : "right"; + var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1); + return coords(ch, prop)[prop]; + } + var order = getOrder(lineObj, doc.direction); + iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) { + var ltr = dir == "ltr"; + var fromPos = coords(from, ltr ? "left" : "right"); + var toPos = coords(to - 1, ltr ? "right" : "left"); + var openStart = fromArg == null && from == 0, + openEnd = toArg == null && to == lineLen; + var first = i == 0, + last = !order || i == order.length - 1; + if (toPos.top - fromPos.top <= 3) { + // Single line + var openLeft = (docLTR ? openStart : openEnd) && first; + var openRight = (docLTR ? openEnd : openStart) && last; + var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left; + var right = openRight ? rightSide : (ltr ? toPos : fromPos).right; + add(left, fromPos.top, right - left, fromPos.bottom); + } else { + // Multiple lines + var topLeft, topRight, botLeft, botRight; + if (ltr) { + topLeft = docLTR && openStart && first ? leftSide : fromPos.left; + topRight = docLTR ? rightSide : wrapX(from, dir, "before"); + botLeft = docLTR ? leftSide : wrapX(to, dir, "after"); + botRight = docLTR && openEnd && last ? rightSide : toPos.right; + } else { + topLeft = !docLTR ? leftSide : wrapX(from, dir, "before"); + topRight = !docLTR && openStart && first ? rightSide : fromPos.right; + botLeft = !docLTR && openEnd && last ? leftSide : toPos.left; + botRight = !docLTR ? rightSide : wrapX(to, dir, "after"); + } + add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom); + if (fromPos.bottom < toPos.top) { + add(leftSide, fromPos.bottom, null, toPos.top); + } + add(botLeft, toPos.top, botRight - botLeft, toPos.bottom); + } + if (!start || cmpCoords(fromPos, start) < 0) { + start = fromPos; + } + if (cmpCoords(toPos, start) < 0) { + start = toPos; + } + if (!end || cmpCoords(fromPos, end) < 0) { + end = fromPos; + } + if (cmpCoords(toPos, end) < 0) { + end = toPos; + } + }); + return { + start: start, + end: end + }; + } + var sFrom = range.from(), + sTo = range.to(); + if (sFrom.line == sTo.line) { + drawForLine(sFrom.line, sFrom.ch, sTo.ch); + } else { + var fromLine = getLine(doc, sFrom.line), + toLine = getLine(doc, sTo.line); + var singleVLine = visualLine(fromLine) == visualLine(toLine); + var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; + var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); + add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); + } + } + if (leftEnd.bottom < rightStart.top) { + add(leftSide, leftEnd.bottom, null, rightStart.top); + } + } + output.appendChild(fragment); + } + + // Cursor-blinking + function restartBlink(cm) { + if (!cm.state.focused) { + return; + } + var display = cm.display; + clearInterval(display.blinker); + var on = true; + display.cursorDiv.style.visibility = ""; + if (cm.options.cursorBlinkRate > 0) { + display.blinker = setInterval(function () { + if (!cm.hasFocus()) { + onBlur(cm); + } + display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; + }, cm.options.cursorBlinkRate); + } else if (cm.options.cursorBlinkRate < 0) { + display.cursorDiv.style.visibility = "hidden"; + } + } + function ensureFocus(cm) { + if (!cm.hasFocus()) { + cm.display.input.focus(); + if (!cm.state.focused) { + onFocus(cm); + } + } + } + function delayBlurEvent(cm) { + cm.state.delayingBlurEvent = true; + setTimeout(function () { + if (cm.state.delayingBlurEvent) { + cm.state.delayingBlurEvent = false; + if (cm.state.focused) { + onBlur(cm); + } + } + }, 100); + } + function onFocus(cm, e) { + if (cm.state.delayingBlurEvent && !cm.state.draggingText) { + cm.state.delayingBlurEvent = false; + } + if (cm.options.readOnly == "nocursor") { + return; + } + if (!cm.state.focused) { + signal(cm, "focus", cm, e); + cm.state.focused = true; + addClass(cm.display.wrapper, "CodeMirror-focused"); + // This test prevents this from firing when a context + // menu is closed (since the input reset would kill the + // select-all detection hack) + if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { + cm.display.input.reset(); + if (webkit) { + setTimeout(function () { + return cm.display.input.reset(true); + }, 20); + } // Issue #1730 + } + cm.display.input.receivedFocus(); + } + restartBlink(cm); + } + function onBlur(cm, e) { + if (cm.state.delayingBlurEvent) { + return; + } + if (cm.state.focused) { + signal(cm, "blur", cm, e); + cm.state.focused = false; + rmClass(cm.display.wrapper, "CodeMirror-focused"); + } + clearInterval(cm.display.blinker); + setTimeout(function () { + if (!cm.state.focused) { + cm.display.shift = false; + } + }, 150); + } + + // Read the actual heights of the rendered lines, and update their + // stored heights to match. + function updateHeightsInViewport(cm) { + var display = cm.display; + var prevBottom = display.lineDiv.offsetTop; + var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top); + var oldHeight = display.lineDiv.getBoundingClientRect().top; + var mustScroll = 0; + for (var i = 0; i < display.view.length; i++) { + var cur = display.view[i], + wrapping = cm.options.lineWrapping; + var height = void 0, + width = 0; + if (cur.hidden) { + continue; + } + oldHeight += cur.line.height; + if (ie && ie_version < 8) { + var bot = cur.node.offsetTop + cur.node.offsetHeight; + height = bot - prevBottom; + prevBottom = bot; + } else { + var box = cur.node.getBoundingClientRect(); + height = box.bottom - box.top; + // Check that lines don't extend past the right of the current + // editor width + if (!wrapping && cur.text.firstChild) { + width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; + } + } + var diff = cur.line.height - height; + if (diff > .005 || diff < -.005) { + if (oldHeight < viewTop) { + mustScroll -= diff; + } + updateLineHeight(cur.line, height); + updateWidgetHeight(cur.line); + if (cur.rest) { + for (var j = 0; j < cur.rest.length; j++) { + updateWidgetHeight(cur.rest[j]); + } + } + } + if (width > cm.display.sizerWidth) { + var chWidth = Math.ceil(width / charWidth(cm.display)); + if (chWidth > cm.display.maxLineLength) { + cm.display.maxLineLength = chWidth; + cm.display.maxLine = cur.line; + cm.display.maxLineChanged = true; + } + } + } + if (Math.abs(mustScroll) > 2) { + display.scroller.scrollTop += mustScroll; + } + } + + // Read and store the height of line widgets associated with the + // given line. + function updateWidgetHeight(line) { + if (line.widgets) { + for (var i = 0; i < line.widgets.length; ++i) { + var w = line.widgets[i], + parent = w.node.parentNode; + if (parent) { + w.height = parent.offsetHeight; + } + } + } + } + + // Compute the lines that are visible in a given viewport (defaults + // the the current scroll position). viewport may contain top, + // height, and ensure (see op.scrollToPos) properties. + function visibleLines(display, doc, viewport) { + var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; + top = Math.floor(top - paddingTop(display)); + var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; + var from = lineAtHeight(doc, top), + to = lineAtHeight(doc, bottom); + // Ensure is a {from: {line, ch}, to: {line, ch}} object, and + // forces those lines into the viewport (if possible). + if (viewport && viewport.ensure) { + var ensureFrom = viewport.ensure.from.line, + ensureTo = viewport.ensure.to.line; + if (ensureFrom < from) { + from = ensureFrom; + to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); + } else if (Math.min(ensureTo, doc.lastLine()) >= to) { + from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); + to = ensureTo; + } + } + return { + from: from, + to: Math.max(to, from + 1) + }; + } + + // SCROLLING THINGS INTO VIEW + + // If an editor sits on the top or bottom of the window, partially + // scrolled out of view, this ensures that the cursor is visible. + function maybeScrollWindow(cm, rect) { + if (signalDOMEvent(cm, "scrollCursorIntoView")) { + return; + } + var display = cm.display, + box = display.sizer.getBoundingClientRect(), + doScroll = null; + if (rect.top + box.top < 0) { + doScroll = true; + } else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { + doScroll = false; + } + if (doScroll != null && !phantom) { + var scrollNode = elt("div", "\u200b", null, "position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + rect.left + "px; width: " + Math.max(2, rect.right - rect.left) + "px;"); + cm.display.lineSpace.appendChild(scrollNode); + scrollNode.scrollIntoView(doScroll); + cm.display.lineSpace.removeChild(scrollNode); + } + } + + // Scroll a given position into view (immediately), verifying that + // it actually became visible (as line heights are accurately + // measured, the position of something may 'drift' during drawing). + function scrollPosIntoView(cm, pos, end, margin) { + if (margin == null) { + margin = 0; + } + var rect; + if (!cm.options.lineWrapping && pos == end) { + // Set pos and end to the cursor positions around the character pos sticks to + // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch + // If pos == Pos(_, 0, "before"), pos and end are unchanged + end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos; + pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos; + } + for (var limit = 0; limit < 5; limit++) { + var changed = false; + var coords = cursorCoords(cm, pos); + var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); + rect = { + left: Math.min(coords.left, endCoords.left), + top: Math.min(coords.top, endCoords.top) - margin, + right: Math.max(coords.left, endCoords.left), + bottom: Math.max(coords.bottom, endCoords.bottom) + margin + }; + var scrollPos = calculateScrollPos(cm, rect); + var startTop = cm.doc.scrollTop, + startLeft = cm.doc.scrollLeft; + if (scrollPos.scrollTop != null) { + updateScrollTop(cm, scrollPos.scrollTop); + if (Math.abs(cm.doc.scrollTop - startTop) > 1) { + changed = true; + } + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { + changed = true; + } + } + if (!changed) { + break; + } + } + return rect; + } + + // Scroll a given set of coordinates into view (immediately). + function scrollIntoView(cm, rect) { + var scrollPos = calculateScrollPos(cm, rect); + if (scrollPos.scrollTop != null) { + updateScrollTop(cm, scrollPos.scrollTop); + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + } + } + + // Calculate a new scroll position needed to scroll the given + // rectangle into view. Returns an object with scrollTop and + // scrollLeft properties. When these are undefined, the + // vertical/horizontal position does not need to be adjusted. + function calculateScrollPos(cm, rect) { + var display = cm.display, + snapMargin = textHeight(cm.display); + if (rect.top < 0) { + rect.top = 0; + } + var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; + var screen = displayHeight(cm), + result = {}; + if (rect.bottom - rect.top > screen) { + rect.bottom = rect.top + screen; + } + var docBottom = cm.doc.height + paddingVert(display); + var atTop = rect.top < snapMargin, + atBottom = rect.bottom > docBottom - snapMargin; + if (rect.top < screentop) { + result.scrollTop = atTop ? 0 : rect.top; + } else if (rect.bottom > screentop + screen) { + var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen); + if (newTop != screentop) { + result.scrollTop = newTop; + } + } + var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth; + var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace; + var screenw = displayWidth(cm) - display.gutters.offsetWidth; + var tooWide = rect.right - rect.left > screenw; + if (tooWide) { + rect.right = rect.left + screenw; + } + if (rect.left < 10) { + result.scrollLeft = 0; + } else if (rect.left < screenleft) { + result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); + } else if (rect.right > screenw + screenleft - 3) { + result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; + } + return result; + } + + // Store a relative adjustment to the scroll position in the current + // operation (to be applied when the operation finishes). + function addToScrollTop(cm, top) { + if (top == null) { + return; + } + resolveScrollToPos(cm); + cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; + } + + // Make sure that at the end of the operation the current cursor is + // shown. + function ensureCursorVisible(cm) { + resolveScrollToPos(cm); + var cur = cm.getCursor(); + cm.curOp.scrollToPos = { + from: cur, + to: cur, + margin: cm.options.cursorScrollMargin + }; + } + function scrollToCoords(cm, x, y) { + if (x != null || y != null) { + resolveScrollToPos(cm); + } + if (x != null) { + cm.curOp.scrollLeft = x; + } + if (y != null) { + cm.curOp.scrollTop = y; + } + } + function scrollToRange(cm, range) { + resolveScrollToPos(cm); + cm.curOp.scrollToPos = range; + } + + // When an operation has its scrollToPos property set, and another + // scroll action is applied before the end of the operation, this + // 'simulates' scrolling that position into view in a cheap way, so + // that the effect of intermediate scroll commands is not ignored. + function resolveScrollToPos(cm) { + var range = cm.curOp.scrollToPos; + if (range) { + cm.curOp.scrollToPos = null; + var from = estimateCoords(cm, range.from), + to = estimateCoords(cm, range.to); + scrollToCoordsRange(cm, from, to, range.margin); + } + } + function scrollToCoordsRange(cm, from, to, margin) { + var sPos = calculateScrollPos(cm, { + left: Math.min(from.left, to.left), + top: Math.min(from.top, to.top) - margin, + right: Math.max(from.right, to.right), + bottom: Math.max(from.bottom, to.bottom) + margin + }); + scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop); + } + + // Sync the scrollable area and scrollbars, ensure the viewport + // covers the visible area. + function updateScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) { + return; + } + if (!gecko) { + updateDisplaySimple(cm, { + top: val + }); + } + setScrollTop(cm, val, true); + if (gecko) { + updateDisplaySimple(cm); + } + startWorker(cm, 100); + } + function setScrollTop(cm, val, forceScroll) { + val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val)); + if (cm.display.scroller.scrollTop == val && !forceScroll) { + return; + } + cm.doc.scrollTop = val; + cm.display.scrollbars.setScrollTop(val); + if (cm.display.scroller.scrollTop != val) { + cm.display.scroller.scrollTop = val; + } + } + + // Sync scroller and scrollbar, ensure the gutter elements are + // aligned. + function setScrollLeft(cm, val, isScroller, forceScroll) { + val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)); + if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { + return; + } + cm.doc.scrollLeft = val; + alignHorizontally(cm); + if (cm.display.scroller.scrollLeft != val) { + cm.display.scroller.scrollLeft = val; + } + cm.display.scrollbars.setScrollLeft(val); + } + + // SCROLLBARS + + // Prepare DOM reads needed to update the scrollbars. Done in one + // shot to minimize update/measure roundtrips. + function measureForScrollbars(cm) { + var d = cm.display, + gutterW = d.gutters.offsetWidth; + var docH = Math.round(cm.doc.height + paddingVert(cm.display)); + return { + clientHeight: d.scroller.clientHeight, + viewHeight: d.wrapper.clientHeight, + scrollWidth: d.scroller.scrollWidth, + clientWidth: d.scroller.clientWidth, + viewWidth: d.wrapper.clientWidth, + barLeft: cm.options.fixedGutter ? gutterW : 0, + docHeight: docH, + scrollHeight: docH + scrollGap(cm) + d.barHeight, + nativeBarWidth: d.nativeBarWidth, + gutterWidth: gutterW + }; + } + var NativeScrollbars = function (place, scroll, cm) { + this.cm = cm; + var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); + var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); + vert.tabIndex = horiz.tabIndex = -1; + place(vert); + place(horiz); + on(vert, "scroll", function () { + if (vert.clientHeight) { + scroll(vert.scrollTop, "vertical"); + } + }); + on(horiz, "scroll", function () { + if (horiz.clientWidth) { + scroll(horiz.scrollLeft, "horizontal"); + } + }); + this.checkedZeroWidth = false; + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + if (ie && ie_version < 8) { + this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; + } + }; + NativeScrollbars.prototype.update = function (measure) { + var needsH = measure.scrollWidth > measure.clientWidth + 1; + var needsV = measure.scrollHeight > measure.clientHeight + 1; + var sWidth = measure.nativeBarWidth; + if (needsV) { + this.vert.style.display = "block"; + this.vert.style.bottom = needsH ? sWidth + "px" : "0"; + var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); + // A bug in IE8 can cause this value to be negative, so guard it. + this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; + } else { + this.vert.scrollTop = 0; + this.vert.style.display = ""; + this.vert.firstChild.style.height = "0"; + } + if (needsH) { + this.horiz.style.display = "block"; + this.horiz.style.right = needsV ? sWidth + "px" : "0"; + this.horiz.style.left = measure.barLeft + "px"; + var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); + this.horiz.firstChild.style.width = Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; + } else { + this.horiz.style.display = ""; + this.horiz.firstChild.style.width = "0"; + } + if (!this.checkedZeroWidth && measure.clientHeight > 0) { + if (sWidth == 0) { + this.zeroWidthHack(); + } + this.checkedZeroWidth = true; + } + return { + right: needsV ? sWidth : 0, + bottom: needsH ? sWidth : 0 + }; + }; + NativeScrollbars.prototype.setScrollLeft = function (pos) { + if (this.horiz.scrollLeft != pos) { + this.horiz.scrollLeft = pos; + } + if (this.disableHoriz) { + this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); + } + }; + NativeScrollbars.prototype.setScrollTop = function (pos) { + if (this.vert.scrollTop != pos) { + this.vert.scrollTop = pos; + } + if (this.disableVert) { + this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); + } + }; + NativeScrollbars.prototype.zeroWidthHack = function () { + var w = mac && !mac_geMountainLion ? "12px" : "18px"; + this.horiz.style.height = this.vert.style.width = w; + this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; + this.disableHoriz = new Delayed(); + this.disableVert = new Delayed(); + }; + NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { + bar.style.pointerEvents = "auto"; + function maybeDisable() { + // To find out whether the scrollbar is still visible, we + // check whether the element under the pixel in the bottom + // right corner of the scrollbar box is the scrollbar box + // itself (when the bar is still visible) or its filler child + // (when the bar is hidden). If it is still visible, we keep + // it enabled, if it's hidden, we disable pointer events. + var box = bar.getBoundingClientRect(); + var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1); + if (elt != bar) { + bar.style.pointerEvents = "none"; + } else { + delay.set(1000, maybeDisable); + } + } + delay.set(1000, maybeDisable); + }; + NativeScrollbars.prototype.clear = function () { + var parent = this.horiz.parentNode; + parent.removeChild(this.horiz); + parent.removeChild(this.vert); + }; + var NullScrollbars = function () {}; + NullScrollbars.prototype.update = function () { + return { + bottom: 0, + right: 0 + }; + }; + NullScrollbars.prototype.setScrollLeft = function () {}; + NullScrollbars.prototype.setScrollTop = function () {}; + NullScrollbars.prototype.clear = function () {}; + function updateScrollbars(cm, measure) { + if (!measure) { + measure = measureForScrollbars(cm); + } + var startWidth = cm.display.barWidth, + startHeight = cm.display.barHeight; + updateScrollbarsInner(cm, measure); + for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { + if (startWidth != cm.display.barWidth && cm.options.lineWrapping) { + updateHeightsInViewport(cm); + } + updateScrollbarsInner(cm, measureForScrollbars(cm)); + startWidth = cm.display.barWidth; + startHeight = cm.display.barHeight; + } + } + + // Re-synchronize the fake scrollbars with the actual size of the + // content. + function updateScrollbarsInner(cm, measure) { + var d = cm.display; + var sizes = d.scrollbars.update(measure); + d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; + d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; + d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"; + if (sizes.right && sizes.bottom) { + d.scrollbarFiller.style.display = "block"; + d.scrollbarFiller.style.height = sizes.bottom + "px"; + d.scrollbarFiller.style.width = sizes.right + "px"; + } else { + d.scrollbarFiller.style.display = ""; + } + if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block"; + d.gutterFiller.style.height = sizes.bottom + "px"; + d.gutterFiller.style.width = measure.gutterWidth + "px"; + } else { + d.gutterFiller.style.display = ""; + } + } + var scrollbarModel = { + "native": NativeScrollbars, + "null": NullScrollbars + }; + function initScrollbars(cm) { + if (cm.display.scrollbars) { + cm.display.scrollbars.clear(); + if (cm.display.scrollbars.addClass) { + rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); + } + } + cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { + cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); + // Prevent clicks in the scrollbars from killing focus + on(node, "mousedown", function () { + if (cm.state.focused) { + setTimeout(function () { + return cm.display.input.focus(); + }, 0); + } + }); + node.setAttribute("cm-not-content", "true"); + }, function (pos, axis) { + if (axis == "horizontal") { + setScrollLeft(cm, pos); + } else { + updateScrollTop(cm, pos); + } + }, cm); + if (cm.display.scrollbars.addClass) { + addClass(cm.display.wrapper, cm.display.scrollbars.addClass); + } + } + + // Operations are used to wrap a series of changes to the editor + // state in such a way that each change won't have to update the + // cursor and display (which would be awkward, slow, and + // error-prone). Instead, display updates are batched and then all + // combined and executed at once. + + var nextOpId = 0; + // Start a new operation. + function startOperation(cm) { + cm.curOp = { + cm: cm, + viewChanged: false, + // Flag that indicates that lines might need to be redrawn + startHeight: cm.doc.height, + // Used to detect need to update scrollbar + forceUpdate: false, + // Used to force a redraw + updateInput: 0, + // Whether to reset the input textarea + typing: false, + // Whether this reset should be careful to leave existing text (for compositing) + changeObjs: null, + // Accumulated changes, for firing change events + cursorActivityHandlers: null, + // Set of handlers to fire cursorActivity on + cursorActivityCalled: 0, + // Tracks which cursorActivity handlers have been called already + selectionChanged: false, + // Whether the selection needs to be redrawn + updateMaxLine: false, + // Set when the widest line needs to be determined anew + scrollLeft: null, + scrollTop: null, + // Intermediate scroll position, not pushed to DOM yet + scrollToPos: null, + // Used to scroll to a specific position + focus: false, + id: ++nextOpId, + // Unique ID + markArrays: null // Used by addMarkedSpan + }; + pushOperation(cm.curOp); + } + + // Finish an operation, updating the display and signalling delayed events + function endOperation(cm) { + var op = cm.curOp; + if (op) { + finishOperation(op, function (group) { + for (var i = 0; i < group.ops.length; i++) { + group.ops[i].cm.curOp = null; + } + endOperations(group); + }); + } + } + + // The DOM updates done when an operation finishes are batched so + // that the minimum number of relayouts are required. + function endOperations(group) { + var ops = group.ops; + for (var i = 0; i < ops.length; i++) + // Read DOM + { + endOperation_R1(ops[i]); + } + for (var i$1 = 0; i$1 < ops.length; i$1++) + // Write DOM (maybe) + { + endOperation_W1(ops[i$1]); + } + for (var i$2 = 0; i$2 < ops.length; i$2++) + // Read DOM + { + endOperation_R2(ops[i$2]); + } + for (var i$3 = 0; i$3 < ops.length; i$3++) + // Write DOM (maybe) + { + endOperation_W2(ops[i$3]); + } + for (var i$4 = 0; i$4 < ops.length; i$4++) + // Read DOM + { + endOperation_finish(ops[i$4]); + } + } + function endOperation_R1(op) { + var cm = op.cm, + display = cm.display; + maybeClipScrollbars(cm); + if (op.updateMaxLine) { + findMaxLine(cm); + } + op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping; + op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && { + top: op.scrollTop, + ensure: op.scrollToPos + }, op.forceUpdate); + } + function endOperation_W1(op) { + op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); + } + function endOperation_R2(op) { + var cm = op.cm, + display = cm.display; + if (op.updatedDisplay) { + updateHeightsInViewport(cm); + } + op.barMeasure = measureForScrollbars(cm); + + // If the max line changed since it was last measured, measure it, + // and ensure the document's width matches it. + // updateDisplay_W2 will use these properties to do the actual resizing + if (display.maxLineChanged && !cm.options.lineWrapping) { + op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; + cm.display.sizerWidth = op.adjustWidthTo; + op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); + op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); + } + if (op.updatedDisplay || op.selectionChanged) { + op.preparedSelection = display.input.prepareSelection(); + } + } + function endOperation_W2(op) { + var cm = op.cm; + if (op.adjustWidthTo != null) { + cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; + if (op.maxScrollLeft < cm.doc.scrollLeft) { + setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); + } + cm.display.maxLineChanged = false; + } + var takeFocus = op.focus && op.focus == activeElt(); + if (op.preparedSelection) { + cm.display.input.showSelection(op.preparedSelection, takeFocus); + } + if (op.updatedDisplay || op.startHeight != cm.doc.height) { + updateScrollbars(cm, op.barMeasure); + } + if (op.updatedDisplay) { + setDocumentHeight(cm, op.barMeasure); + } + if (op.selectionChanged) { + restartBlink(cm); + } + if (cm.state.focused && op.updateInput) { + cm.display.input.reset(op.typing); + } + if (takeFocus) { + ensureFocus(op.cm); + } + } + function endOperation_finish(op) { + var cm = op.cm, + display = cm.display, + doc = cm.doc; + if (op.updatedDisplay) { + postUpdateDisplay(cm, op.update); + } + + // Abort mouse wheel delta measurement, when scrolling explicitly + if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) { + display.wheelStartX = display.wheelStartY = null; + } + + // Propagate the scroll position to the actual DOM scroller + if (op.scrollTop != null) { + setScrollTop(cm, op.scrollTop, op.forceScroll); + } + if (op.scrollLeft != null) { + setScrollLeft(cm, op.scrollLeft, true, true); + } + // If we need to scroll a specific position into view, do so. + if (op.scrollToPos) { + var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); + maybeScrollWindow(cm, rect); + } + + // Fire events for markers that are hidden/unidden by editing or + // undoing + var hidden = op.maybeHiddenMarkers, + unhidden = op.maybeUnhiddenMarkers; + if (hidden) { + for (var i = 0; i < hidden.length; ++i) { + if (!hidden[i].lines.length) { + signal(hidden[i], "hide"); + } + } + } + if (unhidden) { + for (var i$1 = 0; i$1 < unhidden.length; ++i$1) { + if (unhidden[i$1].lines.length) { + signal(unhidden[i$1], "unhide"); + } + } + } + if (display.wrapper.offsetHeight) { + doc.scrollTop = cm.display.scroller.scrollTop; + } + + // Fire change events, and delayed event handlers + if (op.changeObjs) { + signal(cm, "changes", cm, op.changeObjs); + } + if (op.update) { + op.update.finish(); + } + } + + // Run the given function in an operation + function runInOp(cm, f) { + if (cm.curOp) { + return f(); + } + startOperation(cm); + try { + return f(); + } finally { + endOperation(cm); + } + } + // Wraps a function in an operation. Returns the wrapped function. + function operation(cm, f) { + return function () { + if (cm.curOp) { + return f.apply(cm, arguments); + } + startOperation(cm); + try { + return f.apply(cm, arguments); + } finally { + endOperation(cm); + } + }; + } + // Used to add methods to editor and doc instances, wrapping them in + // operations. + function methodOp(f) { + return function () { + if (this.curOp) { + return f.apply(this, arguments); + } + startOperation(this); + try { + return f.apply(this, arguments); + } finally { + endOperation(this); + } + }; + } + function docMethodOp(f) { + return function () { + var cm = this.cm; + if (!cm || cm.curOp) { + return f.apply(this, arguments); + } + startOperation(cm); + try { + return f.apply(this, arguments); + } finally { + endOperation(cm); + } + }; + } + + // HIGHLIGHT WORKER + + function startWorker(cm, time) { + if (cm.doc.highlightFrontier < cm.display.viewTo) { + cm.state.highlight.set(time, bind(highlightWorker, cm)); + } + } + function highlightWorker(cm) { + var doc = cm.doc; + if (doc.highlightFrontier >= cm.display.viewTo) { + return; + } + var end = +new Date() + cm.options.workTime; + var context = getContextBefore(cm, doc.highlightFrontier); + var changedLines = []; + doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { + if (context.line >= cm.display.viewFrom) { + // Visible + var oldStyles = line.styles; + var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null; + var highlighted = highlightLine(cm, line, context, true); + if (resetState) { + context.state = resetState; + } + line.styles = highlighted.styles; + var oldCls = line.styleClasses, + newCls = highlighted.classes; + if (newCls) { + line.styleClasses = newCls; + } else if (oldCls) { + line.styleClasses = null; + } + var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); + for (var i = 0; !ischange && i < oldStyles.length; ++i) { + ischange = oldStyles[i] != line.styles[i]; + } + if (ischange) { + changedLines.push(context.line); + } + line.stateAfter = context.save(); + context.nextLine(); + } else { + if (line.text.length <= cm.options.maxHighlightLength) { + processLine(cm, line.text, context); + } + line.stateAfter = context.line % 5 == 0 ? context.save() : null; + context.nextLine(); + } + if (+new Date() > end) { + startWorker(cm, cm.options.workDelay); + return true; + } + }); + doc.highlightFrontier = context.line; + doc.modeFrontier = Math.max(doc.modeFrontier, context.line); + if (changedLines.length) { + runInOp(cm, function () { + for (var i = 0; i < changedLines.length; i++) { + regLineChange(cm, changedLines[i], "text"); + } + }); + } + } + + // DISPLAY DRAWING + + var DisplayUpdate = function (cm, viewport, force) { + var display = cm.display; + this.viewport = viewport; + // Store some values that we'll need later (but don't want to force a relayout for) + this.visible = visibleLines(display, cm.doc, viewport); + this.editorIsHidden = !display.wrapper.offsetWidth; + this.wrapperHeight = display.wrapper.clientHeight; + this.wrapperWidth = display.wrapper.clientWidth; + this.oldDisplayWidth = displayWidth(cm); + this.force = force; + this.dims = getDimensions(cm); + this.events = []; + }; + DisplayUpdate.prototype.signal = function (emitter, type) { + if (hasHandler(emitter, type)) { + this.events.push(arguments); + } + }; + DisplayUpdate.prototype.finish = function () { + for (var i = 0; i < this.events.length; i++) { + signal.apply(null, this.events[i]); + } + }; + function maybeClipScrollbars(cm) { + var display = cm.display; + if (!display.scrollbarsClipped && display.scroller.offsetWidth) { + display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; + display.heightForcer.style.height = scrollGap(cm) + "px"; + display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; + display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; + display.scrollbarsClipped = true; + } + } + function selectionSnapshot(cm) { + if (cm.hasFocus()) { + return null; + } + var active = activeElt(); + if (!active || !contains(cm.display.lineDiv, active)) { + return null; + } + var result = { + activeElt: active + }; + if (window.getSelection) { + var sel = window.getSelection(); + if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { + result.anchorNode = sel.anchorNode; + result.anchorOffset = sel.anchorOffset; + result.focusNode = sel.focusNode; + result.focusOffset = sel.focusOffset; + } + } + return result; + } + function restoreSelection(snapshot) { + if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { + return; + } + snapshot.activeElt.focus(); + if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { + var sel = window.getSelection(), + range = document.createRange(); + range.setEnd(snapshot.anchorNode, snapshot.anchorOffset); + range.collapse(false); + sel.removeAllRanges(); + sel.addRange(range); + sel.extend(snapshot.focusNode, snapshot.focusOffset); + } + } + + // Does the actual updating of the line display. Bails out + // (returning false) when there is nothing to be done and forced is + // false. + function updateDisplayIfNeeded(cm, update) { + var display = cm.display, + doc = cm.doc; + if (update.editorIsHidden) { + resetView(cm); + return false; + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) { + return false; + } + if (maybeUpdateLineNumberWidth(cm)) { + resetView(cm); + update.dims = getDimensions(cm); + } + + // Compute a suitable new viewport (from & to) + var end = doc.first + doc.size; + var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); + var to = Math.min(end, update.visible.to + cm.options.viewportMargin); + if (display.viewFrom < from && from - display.viewFrom < 20) { + from = Math.max(doc.first, display.viewFrom); + } + if (display.viewTo > to && display.viewTo - to < 20) { + to = Math.min(end, display.viewTo); + } + if (sawCollapsedSpans) { + from = visualLineNo(cm.doc, from); + to = visualLineEndNo(cm.doc, to); + } + var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; + adjustView(cm, from, to); + display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); + // Position the mover div to align with the current scroll position + cm.display.mover.style.top = display.viewOffset + "px"; + var toUpdate = countDirtyView(cm); + if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) { + return false; + } + + // For big changes, we hide the enclosing element during the + // update, since that speeds up the operations on most browsers. + var selSnapshot = selectionSnapshot(cm); + if (toUpdate > 4) { + display.lineDiv.style.display = "none"; + } + patchDisplay(cm, display.updateLineNumbers, update.dims); + if (toUpdate > 4) { + display.lineDiv.style.display = ""; + } + display.renderedView = display.view; + // There might have been a widget with a focused element that got + // hidden or updated, if so re-focus it. + restoreSelection(selSnapshot); + + // Prevent selection and cursors from interfering with the scroll + // width and height. + removeChildren(display.cursorDiv); + removeChildren(display.selectionDiv); + display.gutters.style.height = display.sizer.style.minHeight = 0; + if (different) { + display.lastWrapHeight = update.wrapperHeight; + display.lastWrapWidth = update.wrapperWidth; + startWorker(cm, 400); + } + display.updateLineNumbers = null; + return true; + } + function postUpdateDisplay(cm, update) { + var viewport = update.viewport; + for (var first = true;; first = false) { + if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { + // Clip forced viewport to actual scrollable area. + if (viewport && viewport.top != null) { + viewport = { + top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top) + }; + } + // Updated line heights might result in the drawn area not + // actually covering the viewport. Keep looping until it does. + update.visible = visibleLines(cm.display, cm.doc, viewport); + if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) { + break; + } + } else if (first) { + update.visible = visibleLines(cm.display, cm.doc, viewport); + } + if (!updateDisplayIfNeeded(cm, update)) { + break; + } + updateHeightsInViewport(cm); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + update.force = false; + } + update.signal(cm, "update", cm); + if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { + update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); + cm.display.reportedViewFrom = cm.display.viewFrom; + cm.display.reportedViewTo = cm.display.viewTo; + } + } + function updateDisplaySimple(cm, viewport) { + var update = new DisplayUpdate(cm, viewport); + if (updateDisplayIfNeeded(cm, update)) { + updateHeightsInViewport(cm); + postUpdateDisplay(cm, update); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + update.finish(); + } + } + + // Sync the actual display DOM structure with display.view, removing + // nodes for lines that are no longer in view, and creating the ones + // that are not there yet, and updating the ones that are out of + // date. + function patchDisplay(cm, updateNumbersFrom, dims) { + var display = cm.display, + lineNumbers = cm.options.lineNumbers; + var container = display.lineDiv, + cur = container.firstChild; + function rm(node) { + var next = node.nextSibling; + // Works around a throw-scroll bug in OS X Webkit + if (webkit && mac && cm.display.currentWheelTarget == node) { + node.style.display = "none"; + } else { + node.parentNode.removeChild(node); + } + return next; + } + var view = display.view, + lineN = display.viewFrom; + // Loop over the elements in the view, syncing cur (the DOM nodes + // in display.lineDiv) with the view as we go. + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (lineView.hidden) ;else if (!lineView.node || lineView.node.parentNode != container) { + // Not drawn yet + var node = buildLineElement(cm, lineView, lineN, dims); + container.insertBefore(node, cur); + } else { + // Already drawn + while (cur != lineView.node) { + cur = rm(cur); + } + var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber; + if (lineView.changes) { + if (indexOf(lineView.changes, "gutter") > -1) { + updateNumber = false; + } + updateLineForChanges(cm, lineView, lineN, dims); + } + if (updateNumber) { + removeChildren(lineView.lineNumber); + lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); + } + cur = lineView.node.nextSibling; + } + lineN += lineView.size; + } + while (cur) { + cur = rm(cur); + } + } + function updateGutterSpace(display) { + var width = display.gutters.offsetWidth; + display.sizer.style.marginLeft = width + "px"; + // Send an event to consumers responding to changes in gutter width. + signalLater(display, "gutterChanged", display); + } + function setDocumentHeight(cm, measure) { + cm.display.sizer.style.minHeight = measure.docHeight + "px"; + cm.display.heightForcer.style.top = measure.docHeight + "px"; + cm.display.gutters.style.height = measure.docHeight + cm.display.barHeight + scrollGap(cm) + "px"; + } + + // Re-align line numbers and gutter marks to compensate for + // horizontal scrolling. + function alignHorizontally(cm) { + var display = cm.display, + view = display.view; + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { + return; + } + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; + var gutterW = display.gutters.offsetWidth, + left = comp + "px"; + for (var i = 0; i < view.length; i++) { + if (!view[i].hidden) { + if (cm.options.fixedGutter) { + if (view[i].gutter) { + view[i].gutter.style.left = left; + } + if (view[i].gutterBackground) { + view[i].gutterBackground.style.left = left; + } + } + var align = view[i].alignable; + if (align) { + for (var j = 0; j < align.length; j++) { + align[j].style.left = left; + } + } + } + } + if (cm.options.fixedGutter) { + display.gutters.style.left = comp + gutterW + "px"; + } + } + + // Used to ensure that the line number gutter is still the right + // size for the current document size. Returns true when an update + // is needed. + function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) { + return false; + } + var doc = cm.doc, + last = lineNumberFor(cm.options, doc.first + doc.size - 1), + display = cm.display; + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], "CodeMirror-linenumber CodeMirror-gutter-elt")); + var innerW = test.firstChild.offsetWidth, + padding = test.offsetWidth - innerW; + display.lineGutter.style.width = ""; + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; + display.lineNumWidth = display.lineNumInnerWidth + padding; + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; + display.lineGutter.style.width = display.lineNumWidth + "px"; + updateGutterSpace(cm.display); + return true; + } + return false; + } + function getGutters(gutters, lineNumbers) { + var result = [], + sawLineNumbers = false; + for (var i = 0; i < gutters.length; i++) { + var name = gutters[i], + style = null; + if (typeof name != "string") { + style = name.style; + name = name.className; + } + if (name == "CodeMirror-linenumbers") { + if (!lineNumbers) { + continue; + } else { + sawLineNumbers = true; + } + } + result.push({ + className: name, + style: style + }); + } + if (lineNumbers && !sawLineNumbers) { + result.push({ + className: "CodeMirror-linenumbers", + style: null + }); + } + return result; + } + + // Rebuild the gutter elements, ensure the margin to the left of the + // code matches their width. + function renderGutters(display) { + var gutters = display.gutters, + specs = display.gutterSpecs; + removeChildren(gutters); + display.lineGutter = null; + for (var i = 0; i < specs.length; ++i) { + var ref = specs[i]; + var className = ref.className; + var style = ref.style; + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className)); + if (style) { + gElt.style.cssText = style; + } + if (className == "CodeMirror-linenumbers") { + display.lineGutter = gElt; + gElt.style.width = (display.lineNumWidth || 1) + "px"; + } + } + gutters.style.display = specs.length ? "" : "none"; + updateGutterSpace(display); + } + function updateGutters(cm) { + renderGutters(cm.display); + regChange(cm); + alignHorizontally(cm); + } + + // The display handles the DOM integration, both for input reading + // and content drawing. It holds references to DOM nodes and + // display-related state. + + function Display(place, doc, input, options) { + var d = this; + this.input = input; + + // Covers bottom-right square when both scrollbars are present. + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); + d.scrollbarFiller.setAttribute("cm-not-content", "true"); + // Covers bottom of gutter when coverGutterNextToScrollbar is on + // and h scrollbar is present. + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); + d.gutterFiller.setAttribute("cm-not-content", "true"); + // Will contain the actual code, positioned to cover the viewport. + d.lineDiv = eltP("div", null, "CodeMirror-code"); + // Elements are added to these to represent selection and cursors. + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); + d.cursorDiv = elt("div", null, "CodeMirror-cursors"); + // A visibility: hidden element used to find the size of things. + d.measure = elt("div", null, "CodeMirror-measure"); + // When lines outside of the viewport are measured, they are drawn in this. + d.lineMeasure = elt("div", null, "CodeMirror-measure"); + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, "position: relative; outline: none"); + var lines = eltP("div", [d.lineSpace], "CodeMirror-lines"); + // Moved around its parent to cover visible view. + d.mover = elt("div", [lines], null, "position: relative"); + // Set to the height of the document, allowing scrolling. + d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); + d.sizerWidth = null; + // Behavior of elts with overflow: auto and padding is + // inconsistent across browsers. This is used to ensure the + // scrollable area is big enough. + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); + // Will contain the gutters, if any. + d.gutters = elt("div", null, "CodeMirror-gutters"); + d.lineGutter = null; + // Actual scrollable element. + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); + d.scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); + + // This attribute is respected by automatic translation systems such as Google Translate, + // and may also be respected by tools used by human translators. + d.wrapper.setAttribute('translate', 'no'); + + // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) + if (ie && ie_version < 8) { + d.gutters.style.zIndex = -1; + d.scroller.style.paddingRight = 0; + } + if (!webkit && !(gecko && mobile)) { + d.scroller.draggable = true; + } + if (place) { + if (place.appendChild) { + place.appendChild(d.wrapper); + } else { + place(d.wrapper); + } + } + + // Current rendered range (may be bigger than the view window). + d.viewFrom = d.viewTo = doc.first; + d.reportedViewFrom = d.reportedViewTo = doc.first; + // Information about the rendered lines. + d.view = []; + d.renderedView = null; + // Holds info about a single rendered line when it was rendered + // for measurement, while not in view. + d.externalMeasured = null; + // Empty space (in pixels) above the view + d.viewOffset = 0; + d.lastWrapHeight = d.lastWrapWidth = 0; + d.updateLineNumbers = null; + d.nativeBarWidth = d.barHeight = d.barWidth = 0; + d.scrollbarsClipped = false; + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; + // Set to true when a non-horizontal-scrolling line widget is + // added. As an optimization, line widget aligning is skipped when + // this is false. + d.alignWidgets = false; + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null; + d.maxLineLength = 0; + d.maxLineChanged = false; + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; + + // True when shift is held down. + d.shift = false; + + // Used to track whether anything happened since the context menu + // was opened. + d.selForContextMenu = null; + d.activeTouch = null; + d.gutterSpecs = getGutters(options.gutters, options.lineNumbers); + renderGutters(d); + input.init(d); + } + + // Since the delta values reported on mouse wheel events are + // unstandardized between browsers and even browser versions, and + // generally horribly unpredictable, this code starts by measuring + // the scroll effect that the first few mouse wheel events have, + // and, from that, detects the way it can convert deltas to pixel + // offsets afterwards. + // + // The reason we want to know the amount a wheel event will scroll + // is that it gives us a chance to update the display before the + // actual scrolling happens, reducing flickering. + + var wheelSamples = 0, + wheelPixelsPerUnit = null; + // Fill in a browser-detected starting value on browsers where we + // know one. These don't have to be accurate -- the result of them + // being wrong would just be a slight flicker on the first wheel + // scroll (if it is large enough). + if (ie) { + wheelPixelsPerUnit = -.53; + } else if (gecko) { + wheelPixelsPerUnit = 15; + } else if (chrome) { + wheelPixelsPerUnit = -.7; + } else if (safari) { + wheelPixelsPerUnit = -1 / 3; + } + function wheelEventDelta(e) { + var dx = e.wheelDeltaX, + dy = e.wheelDeltaY; + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { + dx = e.detail; + } + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { + dy = e.detail; + } else if (dy == null) { + dy = e.wheelDelta; + } + return { + x: dx, + y: dy + }; + } + function wheelEventPixels(e) { + var delta = wheelEventDelta(e); + delta.x *= wheelPixelsPerUnit; + delta.y *= wheelPixelsPerUnit; + return delta; + } + function onScrollWheel(cm, e) { + var delta = wheelEventDelta(e), + dx = delta.x, + dy = delta.y; + var pixelsPerUnit = wheelPixelsPerUnit; + if (e.deltaMode === 0) { + dx = e.deltaX; + dy = e.deltaY; + pixelsPerUnit = 1; + } + var display = cm.display, + scroll = display.scroller; + // Quit if there's nothing to scroll here + var canScrollX = scroll.scrollWidth > scroll.clientWidth; + var canScrollY = scroll.scrollHeight > scroll.clientHeight; + if (!(dx && canScrollX || dy && canScrollY)) { + return; + } + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { + for (var i = 0; i < view.length; i++) { + if (view[i].node == cur) { + cm.display.currentWheelTarget = cur; + break outer; + } + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !presto && pixelsPerUnit != null) { + if (dy && canScrollY) { + updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); + } + setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit)); + // Only prevent default scrolling if vertical scrolling is + // actually possible. Otherwise, it causes vertical scroll + // jitter on OSX trackpads when deltaX is small and deltaY + // is large (issue #3579) + if (!dy || dy && canScrollY) { + e_preventDefault(e); + } + display.wheelStartX = null; // Abort measurement, if in progress + return; + } + + // 'Project' the visible viewport to cover the area that is being + // scrolled into view (if we know enough to estimate it). + if (dy && pixelsPerUnit != null) { + var pixels = dy * pixelsPerUnit; + var top = cm.doc.scrollTop, + bot = top + display.wrapper.clientHeight; + if (pixels < 0) { + top = Math.max(0, top + pixels - 50); + } else { + bot = Math.min(cm.doc.height, bot + pixels + 50); + } + updateDisplaySimple(cm, { + top: top, + bottom: bot + }); + } + if (wheelSamples < 20 && e.deltaMode !== 0) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; + display.wheelStartY = scroll.scrollTop; + display.wheelDX = dx; + display.wheelDY = dy; + setTimeout(function () { + if (display.wheelStartX == null) { + return; + } + var movedX = scroll.scrollLeft - display.wheelStartX; + var movedY = scroll.scrollTop - display.wheelStartY; + var sample = movedY && display.wheelDY && movedY / display.wheelDY || movedX && display.wheelDX && movedX / display.wheelDX; + display.wheelStartX = display.wheelStartY = null; + if (!sample) { + return; + } + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); + ++wheelSamples; + }, 200); + } else { + display.wheelDX += dx; + display.wheelDY += dy; + } + } + } + + // Selection objects are immutable. A new one is created every time + // the selection changes. A selection is one or more non-overlapping + // (and non-touching) ranges, sorted, and an integer that indicates + // which one is the primary selection (the one that's scrolled into + // view, that getCursor returns, etc). + var Selection = function (ranges, primIndex) { + this.ranges = ranges; + this.primIndex = primIndex; + }; + Selection.prototype.primary = function () { + return this.ranges[this.primIndex]; + }; + Selection.prototype.equals = function (other) { + if (other == this) { + return true; + } + if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { + return false; + } + for (var i = 0; i < this.ranges.length; i++) { + var here = this.ranges[i], + there = other.ranges[i]; + if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { + return false; + } + } + return true; + }; + Selection.prototype.deepCopy = function () { + var out = []; + for (var i = 0; i < this.ranges.length; i++) { + out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); + } + return new Selection(out, this.primIndex); + }; + Selection.prototype.somethingSelected = function () { + for (var i = 0; i < this.ranges.length; i++) { + if (!this.ranges[i].empty()) { + return true; + } + } + return false; + }; + Selection.prototype.contains = function (pos, end) { + if (!end) { + end = pos; + } + for (var i = 0; i < this.ranges.length; i++) { + var range = this.ranges[i]; + if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) { + return i; + } + } + return -1; + }; + var Range = function (anchor, head) { + this.anchor = anchor; + this.head = head; + }; + Range.prototype.from = function () { + return minPos(this.anchor, this.head); + }; + Range.prototype.to = function () { + return maxPos(this.anchor, this.head); + }; + Range.prototype.empty = function () { + return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; + }; + + // Take an unsorted, potentially overlapping set of ranges, and + // build a selection out of it. 'Consumes' ranges array (modifying + // it). + function normalizeSelection(cm, ranges, primIndex) { + var mayTouch = cm && cm.options.selectionsMayTouch; + var prim = ranges[primIndex]; + ranges.sort(function (a, b) { + return cmp(a.from(), b.from()); + }); + primIndex = indexOf(ranges, prim); + for (var i = 1; i < ranges.length; i++) { + var cur = ranges[i], + prev = ranges[i - 1]; + var diff = cmp(prev.to(), cur.from()); + if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) { + var from = minPos(prev.from(), cur.from()), + to = maxPos(prev.to(), cur.to()); + var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; + if (i <= primIndex) { + --primIndex; + } + ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); + } + } + return new Selection(ranges, primIndex); + } + function simpleSelection(anchor, head) { + return new Selection([new Range(anchor, head || anchor)], 0); + } + + // Compute the position of the end of a change (its 'to' property + // refers to the pre-change end). + function changeEnd(change) { + if (!change.text) { + return change.to; + } + return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); + } + + // Adjust a position to refer to the post-change position of the + // same text, or the end of the change if the change covers it. + function adjustForChange(pos, change) { + if (cmp(pos, change.from) < 0) { + return pos; + } + if (cmp(pos, change.to) <= 0) { + return changeEnd(change); + } + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, + ch = pos.ch; + if (pos.line == change.to.line) { + ch += changeEnd(change).ch - change.to.ch; + } + return Pos(line, ch); + } + function computeSelAfterChange(doc, change) { + var out = []; + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + out.push(new Range(adjustForChange(range.anchor, change), adjustForChange(range.head, change))); + } + return normalizeSelection(doc.cm, out, doc.sel.primIndex); + } + function offsetPos(pos, old, nw) { + if (pos.line == old.line) { + return Pos(nw.line, pos.ch - old.ch + nw.ch); + } else { + return Pos(nw.line + (pos.line - old.line), pos.ch); + } + } + + // Used by replaceSelections to allow moving the selection to the + // start or around the replaced test. Hint may be "start" or "around". + function computeReplacedSel(doc, changes, hint) { + var out = []; + var oldPrev = Pos(doc.first, 0), + newPrev = oldPrev; + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + var from = offsetPos(change.from, oldPrev, newPrev); + var to = offsetPos(changeEnd(change), oldPrev, newPrev); + oldPrev = change.to; + newPrev = to; + if (hint == "around") { + var range = doc.sel.ranges[i], + inv = cmp(range.head, range.anchor) < 0; + out[i] = new Range(inv ? to : from, inv ? from : to); + } else { + out[i] = new Range(from, from); + } + } + return new Selection(out, doc.sel.primIndex); + } + + // Used to get the editor into a consistent state again when options change. + + function loadMode(cm) { + cm.doc.mode = getMode(cm.options, cm.doc.modeOption); + resetModeState(cm); + } + function resetModeState(cm) { + cm.doc.iter(function (line) { + if (line.stateAfter) { + line.stateAfter = null; + } + if (line.styles) { + line.styles = null; + } + }); + cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first; + startWorker(cm, 100); + cm.state.modeGen++; + if (cm.curOp) { + regChange(cm); + } + } + + // DOCUMENT DATA STRUCTURE + + // By default, updates that start and end at the beginning of a line + // are treated specially, in order to make the association of line + // widgets and marker elements with the text behave more intuitive. + function isWholeLineUpdate(doc, change) { + return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore); + } + + // Perform a change on the document data structure. + function updateDoc(doc, change, markedSpans, estimateHeight) { + function spansFor(n) { + return markedSpans ? markedSpans[n] : null; + } + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight); + signalLater(line, "change", line, change); + } + function linesFor(start, end) { + var result = []; + for (var i = start; i < end; ++i) { + result.push(new Line(text[i], spansFor(i), estimateHeight)); + } + return result; + } + var from = change.from, + to = change.to, + text = change.text; + var firstLine = getLine(doc, from.line), + lastLine = getLine(doc, to.line); + var lastText = lst(text), + lastSpans = spansFor(text.length - 1), + nlines = to.line - from.line; + + // Adjust the line structure + if (change.full) { + doc.insert(0, linesFor(0, text.length)); + doc.remove(text.length, doc.size - text.length); + } else if (isWholeLineUpdate(doc, change)) { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = linesFor(0, text.length - 1); + update(lastLine, lastLine.text, lastSpans); + if (nlines) { + doc.remove(from.line, nlines); + } + if (added.length) { + doc.insert(from.line, added); + } + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); + } else { + var added$1 = linesFor(1, text.length - 1); + added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + doc.insert(from.line + 1, added$1); + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); + doc.remove(from.line + 1, nlines); + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); + var added$2 = linesFor(1, text.length - 1); + if (nlines > 1) { + doc.remove(from.line + 1, nlines - 1); + } + doc.insert(from.line + 1, added$2); + } + signalLater(doc, "change", doc, change); + } + + // Call f for all linked documents. + function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) { + for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i]; + if (rel.doc == skip) { + continue; + } + var shared = sharedHist && rel.sharedHist; + if (sharedHistOnly && !shared) { + continue; + } + f(rel.doc, shared); + propagate(rel.doc, doc, shared); + } + } + } + propagate(doc, null, true); + } + + // Attach a document to an editor. + function attachDoc(cm, doc) { + if (doc.cm) { + throw new Error("This document is already in use."); + } + cm.doc = doc; + doc.cm = cm; + estimateLineHeights(cm); + loadMode(cm); + setDirectionClass(cm); + cm.options.direction = doc.direction; + if (!cm.options.lineWrapping) { + findMaxLine(cm); + } + cm.options.mode = doc.modeOption; + regChange(cm); + } + function setDirectionClass(cm) { + (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl"); + } + function directionChanged(cm) { + runInOp(cm, function () { + setDirectionClass(cm); + regChange(cm); + }); + } + function History(prev) { + // Arrays of change events and selections. Doing something adds an + // event to done and clears undo. Undoing moves events from done + // to undone, redoing moves them in the other direction. + this.done = []; + this.undone = []; + this.undoDepth = prev ? prev.undoDepth : Infinity; + // Used to track when changes can be merged into a single undo + // event + this.lastModTime = this.lastSelTime = 0; + this.lastOp = this.lastSelOp = null; + this.lastOrigin = this.lastSelOrigin = null; + // Used by the isClean() method + this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1; + } + + // Create a history change event from an updateDoc-style change + // object. + function historyChangeFromChange(doc, change) { + var histChange = { + from: copyPos(change.from), + to: changeEnd(change), + text: getBetween(doc, change.from, change.to) + }; + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + linkedDocs(doc, function (doc) { + return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + }, true); + return histChange; + } + + // Pop all selection events off the end of a history array. Stop at + // a change event. + function clearSelectionEvents(array) { + while (array.length) { + var last = lst(array); + if (last.ranges) { + array.pop(); + } else { + break; + } + } + } + + // Find the top change event in the history. Pop off selection + // events that are in the way. + function lastChangeEvent(hist, force) { + if (force) { + clearSelectionEvents(hist.done); + return lst(hist.done); + } else if (hist.done.length && !lst(hist.done).ranges) { + return lst(hist.done); + } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { + hist.done.pop(); + return lst(hist.done); + } + } + + // Register a change in the history. Merges changes that are within + // a single operation, or are close together with an origin that + // allows merging (starting with "+") into a single event. + function addChangeToHistory(doc, change, selAfter, opId) { + var hist = doc.history; + hist.undone.length = 0; + var time = +new Date(), + cur; + var last; + if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && (change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500) || change.origin.charAt(0) == "*")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) { + // Merge this change into the last event + last = lst(cur.changes); + if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change); + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)); + } + } else { + // Can not be merged, start a new event. + var before = lst(hist.done); + if (!before || !before.ranges) { + pushSelectionToHistory(doc.sel, hist.done); + } + cur = { + changes: [historyChangeFromChange(doc, change)], + generation: hist.generation + }; + hist.done.push(cur); + while (hist.done.length > hist.undoDepth) { + hist.done.shift(); + if (!hist.done[0].ranges) { + hist.done.shift(); + } + } + } + hist.done.push(selAfter); + hist.generation = ++hist.maxGeneration; + hist.lastModTime = hist.lastSelTime = time; + hist.lastOp = hist.lastSelOp = opId; + hist.lastOrigin = hist.lastSelOrigin = change.origin; + if (!last) { + signal(doc, "historyAdded"); + } + } + function selectionEventCanBeMerged(doc, origin, prev, sel) { + var ch = origin.charAt(0); + return ch == "*" || ch == "+" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date() - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); + } + + // Called whenever the selection changes, sets the new selection as + // the pending selection in the history, and pushes the old pending + // selection into the 'done' array when it was significantly + // different (in number of selected ranges, emptiness, or time). + function addSelectionToHistory(doc, sel, opId, options) { + var hist = doc.history, + origin = options && options.origin; + + // A new event is started when the previous origin does not match + // the current, or the origins don't allow matching. Origins + // starting with * are always merged, those starting with + are + // merged when similar and close together in time. + if (opId == hist.lastSelOp || origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))) { + hist.done[hist.done.length - 1] = sel; + } else { + pushSelectionToHistory(sel, hist.done); + } + hist.lastSelTime = +new Date(); + hist.lastSelOrigin = origin; + hist.lastSelOp = opId; + if (options && options.clearRedo !== false) { + clearSelectionEvents(hist.undone); + } + } + function pushSelectionToHistory(sel, dest) { + var top = lst(dest); + if (!(top && top.ranges && top.equals(sel))) { + dest.push(sel); + } + } + + // Used to store marked span information in the history. + function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], + n = 0; + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { + if (line.markedSpans) { + (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; + } + ++n; + }); + } + + // When un/re-doing restores text containing marked spans, those + // that have been explicitly cleared should not be restored. + function removeClearedSpans(spans) { + if (!spans) { + return null; + } + var out; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { + if (!out) { + out = spans.slice(0, i); + } + } else if (out) { + out.push(spans[i]); + } + } + return !out ? spans : out.length ? out : null; + } + + // Retrieve and filter the old marked spans stored in a change event. + function getOldSpans(doc, change) { + var found = change["spans_" + doc.id]; + if (!found) { + return null; + } + var nw = []; + for (var i = 0; i < change.text.length; ++i) { + nw.push(removeClearedSpans(found[i])); + } + return nw; + } + + // Used for un/re-doing changes from the history. Combines the + // result of computing the existing spans with the set of spans that + // existed in the history (so that deleting around a span and then + // undoing brings back the span). + function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change); + var stretched = stretchSpansOverChange(doc, change); + if (!old) { + return stretched; + } + if (!stretched) { + return old; + } + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], + stretchCur = stretched[i]; + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j]; + for (var k = 0; k < oldCur.length; ++k) { + if (oldCur[k].marker == span.marker) { + continue spans; + } + } + oldCur.push(span); + } + } else if (stretchCur) { + old[i] = stretchCur; + } + } + return old; + } + + // Used both to provide a JSON-safe object in .getHistory, and, when + // detaching a document, to split the history in two + function copyHistoryArray(events, newGroup, instantiateSel) { + var copy = []; + for (var i = 0; i < events.length; ++i) { + var event = events[i]; + if (event.ranges) { + copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); + continue; + } + var changes = event.changes, + newChanges = []; + copy.push({ + changes: newChanges + }); + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], + m = void 0; + newChanges.push({ + from: change.from, + to: change.to, + text: change.text + }); + if (newGroup) { + for (var prop in change) { + if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop]; + delete change[prop]; + } + } + } + } + } + } + return copy; + } + + // The 'scroll' parameter given to many of these indicated whether + // the new cursor position should be scrolled into view after + // modifying the selection. + + // If shift is held or the extend flag is set, extends a range to + // include a given position (and optionally a second position). + // Otherwise, simply returns the range between the given positions. + // Used for cursor motion and such. + function extendRange(range, head, other, extend) { + if (extend) { + var anchor = range.anchor; + if (other) { + var posBefore = cmp(head, anchor) < 0; + if (posBefore != cmp(other, anchor) < 0) { + anchor = head; + head = other; + } else if (posBefore != cmp(head, other) < 0) { + head = other; + } + } + return new Range(anchor, head); + } else { + return new Range(other || head, head); + } + } + + // Extend the primary selection range, discard the rest. + function extendSelection(doc, head, other, options, extend) { + if (extend == null) { + extend = doc.cm && (doc.cm.display.shift || doc.extend); + } + setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options); + } + + // Extend all selections (pos is an array of selections with length + // equal the number of selections) + function extendSelections(doc, heads, options) { + var out = []; + var extend = doc.cm && (doc.cm.display.shift || doc.extend); + for (var i = 0; i < doc.sel.ranges.length; i++) { + out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); + } + var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex); + setSelection(doc, newSel, options); + } + + // Updates a single range in the selection. + function replaceOneSelection(doc, i, range, options) { + var ranges = doc.sel.ranges.slice(0); + ranges[i] = range; + setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options); + } + + // Reset the selection to a single range. + function setSimpleSelection(doc, anchor, head, options) { + setSelection(doc, simpleSelection(anchor, head), options); + } + + // Give beforeSelectionChange handlers a change to influence a + // selection update. + function filterSelectionChange(doc, sel, options) { + var obj = { + ranges: sel.ranges, + update: function (ranges) { + this.ranges = []; + for (var i = 0; i < ranges.length; i++) { + this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), clipPos(doc, ranges[i].head)); + } + }, + origin: options && options.origin + }; + signal(doc, "beforeSelectionChange", doc, obj); + if (doc.cm) { + signal(doc.cm, "beforeSelectionChange", doc.cm, obj); + } + if (obj.ranges != sel.ranges) { + return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1); + } else { + return sel; + } + } + function setSelectionReplaceHistory(doc, sel, options) { + var done = doc.history.done, + last = lst(done); + if (last && last.ranges) { + done[done.length - 1] = sel; + setSelectionNoUndo(doc, sel, options); + } else { + setSelection(doc, sel, options); + } + } + + // Set a new selection. + function setSelection(doc, sel, options) { + setSelectionNoUndo(doc, sel, options); + addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); + } + function setSelectionNoUndo(doc, sel, options) { + if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) { + sel = filterSelectionChange(doc, sel, options); + } + var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); + setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); + if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption("readOnly") != "nocursor") { + ensureCursorVisible(doc.cm); + } + } + function setSelectionInner(doc, sel) { + if (sel.equals(doc.sel)) { + return; + } + doc.sel = sel; + if (doc.cm) { + doc.cm.curOp.updateInput = 1; + doc.cm.curOp.selectionChanged = true; + signalCursorActivity(doc.cm); + } + signalLater(doc, "cursorActivity", doc); + } + + // Verify that the selection does not partially select any atomic + // marked ranges. + function reCheckSelection(doc) { + setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false)); + } + + // Return a selection that does not partially select any atomic + // ranges. + function skipAtomicInSelection(doc, sel, bias, mayClear) { + var out; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; + var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); + var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear); + if (out || newAnchor != range.anchor || newHead != range.head) { + if (!out) { + out = sel.ranges.slice(0, i); + } + out[i] = new Range(newAnchor, newHead); + } + } + return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel; + } + function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { + var line = getLine(doc, pos.line); + if (line.markedSpans) { + for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], + m = sp.marker; + + // Determine if we should prevent the cursor being placed to the left/right of an atomic marker + // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it + // is with selectLeft/Right + var preventCursorLeft = "selectLeft" in m ? !m.selectLeft : m.inclusiveLeft; + var preventCursorRight = "selectRight" in m ? !m.selectRight : m.inclusiveRight; + if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter"); + if (m.explicitlyCleared) { + if (!line.markedSpans) { + break; + } else { + --i; + continue; + } + } + } + if (!m.atomic) { + continue; + } + if (oldPos) { + var near = m.find(dir < 0 ? 1 : -1), + diff = void 0; + if (dir < 0 ? preventCursorRight : preventCursorLeft) { + near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); + } + if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) { + return skipAtomicInner(doc, near, pos, dir, mayClear); + } + } + var far = m.find(dir < 0 ? -1 : 1); + if (dir < 0 ? preventCursorLeft : preventCursorRight) { + far = movePos(doc, far, dir, far.line == pos.line ? line : null); + } + return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null; + } + } + } + return pos; + } + + // Ensure a given position is not inside an atomic range. + function skipAtomic(doc, pos, oldPos, bias, mayClear) { + var dir = bias || 1; + var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, dir, true) || skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true); + if (!found) { + doc.cantEdit = true; + return Pos(doc.first, 0); + } + return found; + } + function movePos(doc, pos, dir, line) { + if (dir < 0 && pos.ch == 0) { + if (pos.line > doc.first) { + return clipPos(doc, Pos(pos.line - 1)); + } else { + return null; + } + } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { + if (pos.line < doc.first + doc.size - 1) { + return Pos(pos.line + 1, 0); + } else { + return null; + } + } else { + return new Pos(pos.line, pos.ch + dir); + } + } + function selectAll(cm) { + cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll); + } + + // UPDATING + + // Allow "beforeChange" event handlers to influence a change + function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function () { + return obj.canceled = true; + } + }; + if (update) { + obj.update = function (from, to, text, origin) { + if (from) { + obj.from = clipPos(doc, from); + } + if (to) { + obj.to = clipPos(doc, to); + } + if (text) { + obj.text = text; + } + if (origin !== undefined) { + obj.origin = origin; + } + }; + } + signal(doc, "beforeChange", doc, obj); + if (doc.cm) { + signal(doc.cm, "beforeChange", doc.cm, obj); + } + if (obj.canceled) { + if (doc.cm) { + doc.cm.curOp.updateInput = 2; + } + return null; + } + return { + from: obj.from, + to: obj.to, + text: obj.text, + origin: obj.origin + }; + } + + // Apply a change to a document, and add it to the document's + // history, and propagating it to all linked documents. + function makeChange(doc, change, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) { + return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); + } + if (doc.cm.state.suppressEdits) { + return; + } + } + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true); + if (!change) { + return; + } + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); + if (split) { + for (var i = split.length - 1; i >= 0; --i) { + makeChangeInner(doc, { + from: split[i].from, + to: split[i].to, + text: i ? [""] : change.text, + origin: change.origin + }); + } + } else { + makeChangeInner(doc, change); + } + } + function makeChangeInner(doc, change) { + if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { + return; + } + var selAfter = computeSelAfterChange(doc, change); + addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); + var rebased = []; + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); + }); + } + + // Revert a change stored in a document's history. + function makeChangeFromHistory(doc, type, allowSelectionOnly) { + var suppress = doc.cm && doc.cm.state.suppressEdits; + if (suppress && !allowSelectionOnly) { + return; + } + var hist = doc.history, + event, + selAfter = doc.sel; + var source = type == "undo" ? hist.done : hist.undone, + dest = type == "undo" ? hist.undone : hist.done; + + // Verify that there is a useable event (so that ctrl-z won't + // needlessly clear selection events) + var i = 0; + for (; i < source.length; i++) { + event = source[i]; + if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) { + break; + } + } + if (i == source.length) { + return; + } + hist.lastOrigin = hist.lastSelOrigin = null; + for (;;) { + event = source.pop(); + if (event.ranges) { + pushSelectionToHistory(event, dest); + if (allowSelectionOnly && !event.equals(doc.sel)) { + setSelection(doc, event, { + clearRedo: false + }); + return; + } + selAfter = event; + } else if (suppress) { + source.push(event); + return; + } else { + break; + } + } + + // Build up a reverse change object to add to the opposite history + // stack (redo when undoing, and vice versa). + var antiChanges = []; + pushSelectionToHistory(selAfter, dest); + dest.push({ + changes: antiChanges, + generation: hist.generation + }); + hist.generation = event.generation || ++hist.maxGeneration; + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); + var loop = function (i) { + var change = event.changes[i]; + change.origin = type; + if (filter && !filterChange(doc, change, false)) { + source.length = 0; + return {}; + } + antiChanges.push(historyChangeFromChange(doc, change)); + var after = i ? computeSelAfterChange(doc, change) : lst(source); + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); + if (!i && doc.cm) { + doc.cm.scrollIntoView({ + from: change.from, + to: changeEnd(change) + }); + } + var rebased = []; + + // Propagate to the linked documents + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); + }); + }; + for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { + var returned = loop(i$1); + if (returned) return returned.v; + } + } + + // Sub-views need their line numbers shifted when text is added + // above or below them in the parent document. + function shiftDoc(doc, distance) { + if (distance == 0) { + return; + } + doc.first += distance; + doc.sel = new Selection(map(doc.sel.ranges, function (range) { + return new Range(Pos(range.anchor.line + distance, range.anchor.ch), Pos(range.head.line + distance, range.head.ch)); + }), doc.sel.primIndex); + if (doc.cm) { + regChange(doc.cm, doc.first, doc.first - distance, distance); + for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) { + regLineChange(doc.cm, l, "gutter"); + } + } + } + + // More lower-level change function, handling only a single document + // (not linked ones). + function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) { + return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); + } + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); + return; + } + if (change.from.line > doc.lastLine()) { + return; + } + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line); + shiftDoc(doc, shift); + change = { + from: Pos(doc.first, 0), + to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], + origin: change.origin + }; + } + var last = doc.lastLine(); + if (change.to.line > last) { + change = { + from: change.from, + to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], + origin: change.origin + }; + } + change.removed = getBetween(doc, change.from, change.to); + if (!selAfter) { + selAfter = computeSelAfterChange(doc, change); + } + if (doc.cm) { + makeChangeSingleDocInEditor(doc.cm, change, spans); + } else { + updateDoc(doc, change, spans); + } + setSelectionNoUndo(doc, selAfter, sel_dontScroll); + if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) { + doc.cantEdit = false; + } + } + + // Handle the interaction of a change to a document with the editor + // that this document is part of. + function makeChangeSingleDocInEditor(cm, change, spans) { + var doc = cm.doc, + display = cm.display, + from = change.from, + to = change.to; + var recomputeMaxLength = false, + checkWidthStart = from.line; + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); + doc.iter(checkWidthStart, to.line + 1, function (line) { + if (line == display.maxLine) { + recomputeMaxLength = true; + return true; + } + }); + } + if (doc.sel.contains(change.from, change.to) > -1) { + signalCursorActivity(cm); + } + updateDoc(doc, change, spans, estimateHeight(cm)); + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function (line) { + var len = lineLength(line); + if (len > display.maxLineLength) { + display.maxLine = line; + display.maxLineLength = len; + display.maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) { + cm.curOp.updateMaxLine = true; + } + } + retreatFrontier(doc, from.line); + startWorker(cm, 400); + var lendiff = change.text.length - (to.line - from.line) - 1; + // Remember that these lines changed, for updating the display + if (change.full) { + regChange(cm); + } else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) { + regLineChange(cm, from.line, "text"); + } else { + regChange(cm, from.line, to.line + 1, lendiff); + } + var changesHandler = hasHandler(cm, "changes"), + changeHandler = hasHandler(cm, "change"); + if (changeHandler || changesHandler) { + var obj = { + from: from, + to: to, + text: change.text, + removed: change.removed, + origin: change.origin + }; + if (changeHandler) { + signalLater(cm, "change", cm, obj); + } + if (changesHandler) { + (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); + } + } + cm.display.selForContextMenu = null; + } + function replaceRange(doc, code, from, to, origin) { + var assign; + if (!to) { + to = from; + } + if (cmp(to, from) < 0) { + assign = [to, from], from = assign[0], to = assign[1]; + } + if (typeof code == "string") { + code = doc.splitLines(code); + } + makeChange(doc, { + from: from, + to: to, + text: code, + origin: origin + }); + } + + // Rebasing/resetting history to deal with externally-sourced changes + + function rebaseHistSelSingle(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff; + } else if (from < pos.line) { + pos.line = from; + pos.ch = 0; + } + } + + // Tries to rebase an array of history events given a change in the + // document. If the change touches the same lines as the event, the + // event, and everything 'behind' it, is discarded. If the change is + // before the event, the event's positions are updated. Uses a + // copy-on-write scheme for the positions, to avoid having to + // reallocate them all on every rebase, but also avoid problems with + // shared position objects being unsafely updated. + function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], + ok = true; + if (sub.ranges) { + if (!sub.copied) { + sub = array[i] = sub.deepCopy(); + sub.copied = true; + } + for (var j = 0; j < sub.ranges.length; j++) { + rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); + rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); + } + continue; + } + for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { + var cur = sub.changes[j$1]; + if (to < cur.from.line) { + cur.from = Pos(cur.from.line + diff, cur.from.ch); + cur.to = Pos(cur.to.line + diff, cur.to.ch); + } else if (from <= cur.to.line) { + ok = false; + break; + } + } + if (!ok) { + array.splice(0, i + 1); + i = 0; + } + } + } + function rebaseHist(hist, change) { + var from = change.from.line, + to = change.to.line, + diff = change.text.length - (to - from) - 1; + rebaseHistArray(hist.done, from, to, diff); + rebaseHistArray(hist.undone, from, to, diff); + } + + // Utility for applying a change to a line by handle or number, + // returning the number and optionally registering the line as + // changed. + function changeLine(doc, handle, changeType, op) { + var no = handle, + line = handle; + if (typeof handle == "number") { + line = getLine(doc, clipLine(doc, handle)); + } else { + no = lineNo(handle); + } + if (no == null) { + return null; + } + if (op(line, no) && doc.cm) { + regLineChange(doc.cm, no, changeType); + } + return line; + } + + // The document is represented as a BTree consisting of leaves, with + // chunk of lines in them, and branches, with up to ten leaves or + // other branch nodes below them. The top node is always a branch + // node, and is the document object itself (meaning it has + // additional methods and properties). + // + // All nodes have parent links. The tree is used both to go from + // line numbers to line objects, and to go from objects to numbers. + // It also indexes by height, and is used to convert between height + // and line object, and to find the total height of the document. + // + // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html + + function LeafChunk(lines) { + this.lines = lines; + this.parent = null; + var height = 0; + for (var i = 0; i < lines.length; ++i) { + lines[i].parent = this; + height += lines[i].height; + } + this.height = height; + } + LeafChunk.prototype = { + chunkSize: function () { + return this.lines.length; + }, + // Remove the n lines at offset 'at'. + removeInner: function (at, n) { + for (var i = at, e = at + n; i < e; ++i) { + var line = this.lines[i]; + this.height -= line.height; + cleanUpLine(line); + signalLater(line, "delete"); + } + this.lines.splice(at, n); + }, + // Helper used to collapse a small branch into a single leaf. + collapse: function (lines) { + lines.push.apply(lines, this.lines); + }, + // Insert the given array of lines at offset 'at', count them as + // having the given height. + insertInner: function (at, lines, height) { + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0; i < lines.length; ++i) { + lines[i].parent = this; + } + }, + // Used to iterate over a part of the tree. + iterN: function (at, n, op) { + for (var e = at + n; at < e; ++at) { + if (op(this.lines[at])) { + return true; + } + } + } + }; + function BranchChunk(children) { + this.children = children; + var size = 0, + height = 0; + for (var i = 0; i < children.length; ++i) { + var ch = children[i]; + size += ch.chunkSize(); + height += ch.height; + ch.parent = this; + } + this.size = size; + this.height = height; + this.parent = null; + } + BranchChunk.prototype = { + chunkSize: function () { + return this.size; + }, + removeInner: function (at, n) { + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], + sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), + oldHeight = child.height; + child.removeInner(at, rm); + this.height -= oldHeight - child.height; + if (sz == rm) { + this.children.splice(i--, 1); + child.parent = null; + } + if ((n -= rm) == 0) { + break; + } + at = 0; + } else { + at -= sz; + } + } + // If the result is smaller than 25 lines, ensure that it is a + // single leaf node. + if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + collapse: function (lines) { + for (var i = 0; i < this.children.length; ++i) { + this.children[i].collapse(lines); + } + }, + insertInner: function (at, lines, height) { + this.size += lines.length; + this.height += height; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], + sz = child.chunkSize(); + if (at <= sz) { + child.insertInner(at, lines, height); + if (child.lines && child.lines.length > 50) { + // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. + // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. + var remaining = child.lines.length % 25 + 25; + for (var pos = remaining; pos < child.lines.length;) { + var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); + child.height -= leaf.height; + this.children.splice(++i, 0, leaf); + leaf.parent = this; + } + child.lines = child.lines.slice(0, remaining); + this.maybeSpill(); + } + break; + } + at -= sz; + } + }, + // When a node has grown, check whether it should be split. + maybeSpill: function () { + if (this.children.length <= 10) { + return; + } + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { + // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10); + me.parent.maybeSpill(); + }, + iterN: function (at, n, op) { + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], + sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) { + return true; + } + if ((n -= used) == 0) { + break; + } + at = 0; + } else { + at -= sz; + } + } + } + }; + + // Line widgets are block elements displayed above or below a line. + + var LineWidget = function (doc, node, options) { + if (options) { + for (var opt in options) { + if (options.hasOwnProperty(opt)) { + this[opt] = options[opt]; + } + } + } + this.doc = doc; + this.node = node; + }; + LineWidget.prototype.clear = function () { + var cm = this.doc.cm, + ws = this.line.widgets, + line = this.line, + no = lineNo(line); + if (no == null || !ws) { + return; + } + for (var i = 0; i < ws.length; ++i) { + if (ws[i] == this) { + ws.splice(i--, 1); + } + } + if (!ws.length) { + line.widgets = null; + } + var height = widgetHeight(this); + updateLineHeight(line, Math.max(0, line.height - height)); + if (cm) { + runInOp(cm, function () { + adjustScrollWhenAboveVisible(cm, line, -height); + regLineChange(cm, no, "widget"); + }); + signalLater(cm, "lineWidgetCleared", cm, this, no); + } + }; + LineWidget.prototype.changed = function () { + var this$1 = this; + var oldH = this.height, + cm = this.doc.cm, + line = this.line; + this.height = null; + var diff = widgetHeight(this) - oldH; + if (!diff) { + return; + } + if (!lineIsHidden(this.doc, line)) { + updateLineHeight(line, line.height + diff); + } + if (cm) { + runInOp(cm, function () { + cm.curOp.forceUpdate = true; + adjustScrollWhenAboveVisible(cm, line, diff); + signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)); + }); + } + }; + eventMixin(LineWidget); + function adjustScrollWhenAboveVisible(cm, line, diff) { + if (heightAtLine(line) < (cm.curOp && cm.curOp.scrollTop || cm.doc.scrollTop)) { + addToScrollTop(cm, diff); + } + } + function addLineWidget(doc, handle, node, options) { + var widget = new LineWidget(doc, node, options); + var cm = doc.cm; + if (cm && widget.noHScroll) { + cm.display.alignWidgets = true; + } + changeLine(doc, handle, "widget", function (line) { + var widgets = line.widgets || (line.widgets = []); + if (widget.insertAt == null) { + widgets.push(widget); + } else { + widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); + } + widget.line = line; + if (cm && !lineIsHidden(doc, line)) { + var aboveVisible = heightAtLine(line) < doc.scrollTop; + updateLineHeight(line, line.height + widgetHeight(widget)); + if (aboveVisible) { + addToScrollTop(cm, widget.height); + } + cm.curOp.forceUpdate = true; + } + return true; + }); + if (cm) { + signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); + } + return widget; + } + + // TEXTMARKERS + + // Created with markText and setBookmark methods. A TextMarker is a + // handle that can be used to clear or find a marked position in the + // document. Line objects hold arrays (markedSpans) containing + // {from, to, marker} object pointing to such marker objects, and + // indicating that such a marker is present on that line. Multiple + // lines may point to the same marker when it spans across lines. + // The spans will have null for their from/to properties when the + // marker continues beyond the start/end of the line. Markers have + // links back to the lines they currently touch. + + // Collapsed markers have unique ids, in order to be able to order + // them, which is needed for uniquely determining an outer marker + // when they overlap (they may nest, but not partially overlap). + var nextMarkerId = 0; + var TextMarker = function (doc, type) { + this.lines = []; + this.type = type; + this.doc = doc; + this.id = ++nextMarkerId; + }; + + // Clear the marker. + TextMarker.prototype.clear = function () { + if (this.explicitlyCleared) { + return; + } + var cm = this.doc.cm, + withOp = cm && !cm.curOp; + if (withOp) { + startOperation(cm); + } + if (hasHandler(this, "clear")) { + var found = this.find(); + if (found) { + signalLater(this, "clear", found.from, found.to); + } + } + var min = null, + max = null; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (cm && !this.collapsed) { + regLineChange(cm, lineNo(line), "text"); + } else if (cm) { + if (span.to != null) { + max = lineNo(line); + } + if (span.from != null) { + min = lineNo(line); + } + } + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) { + updateLineHeight(line, textHeight(cm.display)); + } + } + if (cm && this.collapsed && !cm.options.lineWrapping) { + for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { + var visual = visualLine(this.lines[i$1]), + len = lineLength(visual); + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual; + cm.display.maxLineLength = len; + cm.display.maxLineChanged = true; + } + } + } + if (min != null && cm && this.collapsed) { + regChange(cm, min, max + 1); + } + this.lines.length = 0; + this.explicitlyCleared = true; + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false; + if (cm) { + reCheckSelection(cm.doc); + } + } + if (cm) { + signalLater(cm, "markerCleared", cm, this, min, max); + } + if (withOp) { + endOperation(cm); + } + if (this.parent) { + this.parent.clear(); + } + }; + + // Find the position of the marker in the document. Returns a {from, + // to} object by default. Side can be passed to get a specific side + // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the + // Pos objects returned contain a line object, rather than a line + // number (used to prevent looking up the same line twice). + TextMarker.prototype.find = function (side, lineObj) { + if (side == null && this.type == "bookmark") { + side = 1; + } + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null) { + from = Pos(lineObj ? line : lineNo(line), span.from); + if (side == -1) { + return from; + } + } + if (span.to != null) { + to = Pos(lineObj ? line : lineNo(line), span.to); + if (side == 1) { + return to; + } + } + } + return from && { + from: from, + to: to + }; + }; + + // Signals that the marker's widget changed, and surrounding layout + // should be recomputed. + TextMarker.prototype.changed = function () { + var this$1 = this; + var pos = this.find(-1, true), + widget = this, + cm = this.doc.cm; + if (!pos || !cm) { + return; + } + runInOp(cm, function () { + var line = pos.line, + lineN = lineNo(pos.line); + var view = findViewForLine(cm, lineN); + if (view) { + clearLineMeasurementCacheFor(view); + cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; + } + cm.curOp.updateMaxLine = true; + if (!lineIsHidden(widget.doc, line) && widget.height != null) { + var oldHeight = widget.height; + widget.height = null; + var dHeight = widgetHeight(widget) - oldHeight; + if (dHeight) { + updateLineHeight(line, line.height + dHeight); + } + } + signalLater(cm, "markerChanged", cm, this$1); + }); + }; + TextMarker.prototype.attachLine = function (line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) { + (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); + } + } + this.lines.push(line); + }; + TextMarker.prototype.detachLine = function (line) { + this.lines.splice(indexOf(this.lines, line), 1); + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); + } + }; + eventMixin(TextMarker); + + // Create a marker, wire it up to the right lines, and + function markText(doc, from, to, options, type) { + // Shared markers (across linked documents) are handled separately + // (markTextShared will call out to this again, once per + // document). + if (options && options.shared) { + return markTextShared(doc, from, to, options, type); + } + // Ensure we are in an operation. + if (doc.cm && !doc.cm.curOp) { + return operation(doc.cm, markText)(doc, from, to, options, type); + } + var marker = new TextMarker(doc, type), + diff = cmp(from, to); + if (options) { + copyObj(options, marker, false); + } + // Don't connect empty markers unless clearWhenEmpty is false + if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) { + return marker; + } + if (marker.replacedWith) { + // Showing up as a widget implies collapsed (widget replaces text) + marker.collapsed = true; + marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget"); + if (!options.handleMouseEvents) { + marker.widgetNode.setAttribute("cm-ignore-events", "true"); + } + if (options.insertLeft) { + marker.widgetNode.insertLeft = true; + } + } + if (marker.collapsed) { + if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) { + throw new Error("Inserting collapsed marker partially overlapping an existing one"); + } + seeCollapsedSpans(); + } + if (marker.addToHistory) { + addChangeToHistory(doc, { + from: from, + to: to, + origin: "markText" + }, doc.sel, NaN); + } + var curLine = from.line, + cm = doc.cm, + updateMaxLine; + doc.iter(curLine, to.line + 1, function (line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) { + updateMaxLine = true; + } + if (marker.collapsed && curLine != from.line) { + updateLineHeight(line, 0); + } + addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp); + ++curLine; + }); + // lineIsHidden depends on the presence of the spans, so needs a second pass + if (marker.collapsed) { + doc.iter(from.line, to.line + 1, function (line) { + if (lineIsHidden(doc, line)) { + updateLineHeight(line, 0); + } + }); + } + if (marker.clearOnEnter) { + on(marker, "beforeCursorEnter", function () { + return marker.clear(); + }); + } + if (marker.readOnly) { + seeReadOnlySpans(); + if (doc.history.done.length || doc.history.undone.length) { + doc.clearHistory(); + } + } + if (marker.collapsed) { + marker.id = ++nextMarkerId; + marker.atomic = true; + } + if (cm) { + // Sync editor state + if (updateMaxLine) { + cm.curOp.updateMaxLine = true; + } + if (marker.collapsed) { + regChange(cm, from.line, to.line + 1); + } else if (marker.className || marker.startStyle || marker.endStyle || marker.css || marker.attributes || marker.title) { + for (var i = from.line; i <= to.line; i++) { + regLineChange(cm, i, "text"); + } + } + if (marker.atomic) { + reCheckSelection(cm.doc); + } + signalLater(cm, "markerAdded", cm, marker); + } + return marker; + } + + // SHARED TEXTMARKERS + + // A shared marker spans multiple linked documents. It is + // implemented as a meta-marker-object controlling multiple normal + // markers. + var SharedTextMarker = function (markers, primary) { + this.markers = markers; + this.primary = primary; + for (var i = 0; i < markers.length; ++i) { + markers[i].parent = this; + } + }; + SharedTextMarker.prototype.clear = function () { + if (this.explicitlyCleared) { + return; + } + this.explicitlyCleared = true; + for (var i = 0; i < this.markers.length; ++i) { + this.markers[i].clear(); + } + signalLater(this, "clear"); + }; + SharedTextMarker.prototype.find = function (side, lineObj) { + return this.primary.find(side, lineObj); + }; + eventMixin(SharedTextMarker); + function markTextShared(doc, from, to, options, type) { + options = copyObj(options); + options.shared = false; + var markers = [markText(doc, from, to, options, type)], + primary = markers[0]; + var widget = options.widgetNode; + linkedDocs(doc, function (doc) { + if (widget) { + options.widgetNode = widget.cloneNode(true); + } + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); + for (var i = 0; i < doc.linked.length; ++i) { + if (doc.linked[i].isParent) { + return; + } + } + primary = lst(markers); + }); + return new SharedTextMarker(markers, primary); + } + function findSharedMarkers(doc) { + return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { + return m.parent; + }); + } + function copySharedMarkers(doc, markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], + pos = marker.find(); + var mFrom = doc.clipPos(pos.from), + mTo = doc.clipPos(pos.to); + if (cmp(mFrom, mTo)) { + var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); + marker.markers.push(subMark); + subMark.parent = marker; + } + } + } + function detachSharedMarkers(markers) { + var loop = function (i) { + var marker = markers[i], + linked = [marker.primary.doc]; + linkedDocs(marker.primary.doc, function (d) { + return linked.push(d); + }); + for (var j = 0; j < marker.markers.length; j++) { + var subMarker = marker.markers[j]; + if (indexOf(linked, subMarker.doc) == -1) { + subMarker.parent = null; + marker.markers.splice(j--, 1); + } + } + }; + for (var i = 0; i < markers.length; i++) loop(i); + } + var nextDocId = 0; + var Doc = function (text, mode, firstLine, lineSep, direction) { + if (!(this instanceof Doc)) { + return new Doc(text, mode, firstLine, lineSep, direction); + } + if (firstLine == null) { + firstLine = 0; + } + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); + this.first = firstLine; + this.scrollTop = this.scrollLeft = 0; + this.cantEdit = false; + this.cleanGeneration = 1; + this.modeFrontier = this.highlightFrontier = firstLine; + var start = Pos(firstLine, 0); + this.sel = simpleSelection(start); + this.history = new History(null); + this.id = ++nextDocId; + this.modeOption = mode; + this.lineSep = lineSep; + this.direction = direction == "rtl" ? "rtl" : "ltr"; + this.extend = false; + if (typeof text == "string") { + text = this.splitLines(text); + } + updateDoc(this, { + from: start, + to: start, + text: text + }); + setSelection(this, simpleSelection(start), sel_dontScroll); + }; + Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + // Iterate over the document. Supports two forms -- with only one + // argument, it calls that for each line in the document. With + // three, it iterates over the range given by the first two (with + // the second being non-inclusive). + iter: function (from, to, op) { + if (op) { + this.iterN(from - this.first, to - from, op); + } else { + this.iterN(this.first, this.first + this.size, from); + } + }, + // Non-public interface for adding and removing lines. + insert: function (at, lines) { + var height = 0; + for (var i = 0; i < lines.length; ++i) { + height += lines[i].height; + } + this.insertInner(at - this.first, lines, height); + }, + remove: function (at, n) { + this.removeInner(at - this.first, n); + }, + // From here, the methods are part of the public interface. Most + // are also available from CodeMirror (editor) instances. + + getValue: function (lineSep) { + var lines = getLines(this, this.first, this.first + this.size); + if (lineSep === false) { + return lines; + } + return lines.join(lineSep || this.lineSeparator()); + }, + setValue: docMethodOp(function (code) { + var top = Pos(this.first, 0), + last = this.first + this.size - 1; + makeChange(this, { + from: top, + to: Pos(last, getLine(this, last).text.length), + text: this.splitLines(code), + origin: "setValue", + full: true + }, true); + if (this.cm) { + scrollToCoords(this.cm, 0, 0); + } + setSelection(this, simpleSelection(top), sel_dontScroll); + }), + replaceRange: function (code, from, to, origin) { + from = clipPos(this, from); + to = to ? clipPos(this, to) : from; + replaceRange(this, code, from, to, origin); + }, + getRange: function (from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); + if (lineSep === false) { + return lines; + } + if (lineSep === '') { + return lines.join(''); + } + return lines.join(lineSep || this.lineSeparator()); + }, + getLine: function (line) { + var l = this.getLineHandle(line); + return l && l.text; + }, + getLineHandle: function (line) { + if (isLine(this, line)) { + return getLine(this, line); + } + }, + getLineNumber: function (line) { + return lineNo(line); + }, + getLineHandleVisualStart: function (line) { + if (typeof line == "number") { + line = getLine(this, line); + } + return visualLine(line); + }, + lineCount: function () { + return this.size; + }, + firstLine: function () { + return this.first; + }, + lastLine: function () { + return this.first + this.size - 1; + }, + clipPos: function (pos) { + return clipPos(this, pos); + }, + getCursor: function (start) { + var range = this.sel.primary(), + pos; + if (start == null || start == "head") { + pos = range.head; + } else if (start == "anchor") { + pos = range.anchor; + } else if (start == "end" || start == "to" || start === false) { + pos = range.to(); + } else { + pos = range.from(); + } + return pos; + }, + listSelections: function () { + return this.sel.ranges; + }, + somethingSelected: function () { + return this.sel.somethingSelected(); + }, + setCursor: docMethodOp(function (line, ch, options) { + setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); + }), + setSelection: docMethodOp(function (anchor, head, options) { + setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); + }), + extendSelection: docMethodOp(function (head, other, options) { + extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); + }), + extendSelections: docMethodOp(function (heads, options) { + extendSelections(this, clipPosArray(this, heads), options); + }), + extendSelectionsBy: docMethodOp(function (f, options) { + var heads = map(this.sel.ranges, f); + extendSelections(this, clipPosArray(this, heads), options); + }), + setSelections: docMethodOp(function (ranges, primary, options) { + if (!ranges.length) { + return; + } + var out = []; + for (var i = 0; i < ranges.length; i++) { + out[i] = new Range(clipPos(this, ranges[i].anchor), clipPos(this, ranges[i].head || ranges[i].anchor)); + } + if (primary == null) { + primary = Math.min(ranges.length - 1, this.sel.primIndex); + } + setSelection(this, normalizeSelection(this.cm, out, primary), options); + }), + addSelection: docMethodOp(function (anchor, head, options) { + var ranges = this.sel.ranges.slice(0); + ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); + setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options); + }), + getSelection: function (lineSep) { + var ranges = this.sel.ranges, + lines; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + lines = lines ? lines.concat(sel) : sel; + } + if (lineSep === false) { + return lines; + } else { + return lines.join(lineSep || this.lineSeparator()); + } + }, + getSelections: function (lineSep) { + var parts = [], + ranges = this.sel.ranges; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + if (lineSep !== false) { + sel = sel.join(lineSep || this.lineSeparator()); + } + parts[i] = sel; + } + return parts; + }, + replaceSelection: function (code, collapse, origin) { + var dup = []; + for (var i = 0; i < this.sel.ranges.length; i++) { + dup[i] = code; + } + this.replaceSelections(dup, collapse, origin || "+input"); + }, + replaceSelections: docMethodOp(function (code, collapse, origin) { + var changes = [], + sel = this.sel; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + changes[i] = { + from: range.from(), + to: range.to(), + text: this.splitLines(code[i]), + origin: origin + }; + } + var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); + for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) { + makeChange(this, changes[i$1]); + } + if (newSel) { + setSelectionReplaceHistory(this, newSel); + } else if (this.cm) { + ensureCursorVisible(this.cm); + } + }), + undo: docMethodOp(function () { + makeChangeFromHistory(this, "undo"); + }), + redo: docMethodOp(function () { + makeChangeFromHistory(this, "redo"); + }), + undoSelection: docMethodOp(function () { + makeChangeFromHistory(this, "undo", true); + }), + redoSelection: docMethodOp(function () { + makeChangeFromHistory(this, "redo", true); + }), + setExtending: function (val) { + this.extend = val; + }, + getExtending: function () { + return this.extend; + }, + historySize: function () { + var hist = this.history, + done = 0, + undone = 0; + for (var i = 0; i < hist.done.length; i++) { + if (!hist.done[i].ranges) { + ++done; + } + } + for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { + if (!hist.undone[i$1].ranges) { + ++undone; + } + } + return { + undo: done, + redo: undone + }; + }, + clearHistory: function () { + var this$1 = this; + this.history = new History(this.history); + linkedDocs(this, function (doc) { + return doc.history = this$1.history; + }, true); + }, + markClean: function () { + this.cleanGeneration = this.changeGeneration(true); + }, + changeGeneration: function (forceSplit) { + if (forceSplit) { + this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; + } + return this.history.generation; + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration); + }, + getHistory: function () { + return { + done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone) + }; + }, + setHistory: function (histData) { + var hist = this.history = new History(this.history); + hist.done = copyHistoryArray(histData.done.slice(0), null, true); + hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); + }, + setGutterMarker: docMethodOp(function (line, gutterID, value) { + return changeLine(this, line, "gutter", function (line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}); + markers[gutterID] = value; + if (!value && isEmpty(markers)) { + line.gutterMarkers = null; + } + return true; + }); + }), + clearGutter: docMethodOp(function (gutterID) { + var this$1 = this; + this.iter(function (line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + changeLine(this$1, line, "gutter", function () { + line.gutterMarkers[gutterID] = null; + if (isEmpty(line.gutterMarkers)) { + line.gutterMarkers = null; + } + return true; + }); + } + }); + }), + lineInfo: function (line) { + var n; + if (typeof line == "number") { + if (!isLine(this, line)) { + return null; + } + n = line; + line = getLine(this, line); + if (!line) { + return null; + } + } else { + n = lineNo(line); + if (n == null) { + return null; + } + } + return { + line: n, + handle: line, + text: line.text, + gutterMarkers: line.gutterMarkers, + textClass: line.textClass, + bgClass: line.bgClass, + wrapClass: line.wrapClass, + widgets: line.widgets + }; + }, + addLineClass: docMethodOp(function (handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; + if (!line[prop]) { + line[prop] = cls; + } else if (classTest(cls).test(line[prop])) { + return false; + } else { + line[prop] += " " + cls; + } + return true; + }); + }), + removeLineClass: docMethodOp(function (handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; + var cur = line[prop]; + if (!cur) { + return false; + } else if (cls == null) { + line[prop] = null; + } else { + var found = cur.match(classTest(cls)); + if (!found) { + return false; + } + var end = found.index + found[0].length; + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; + } + return true; + }); + }), + addLineWidget: docMethodOp(function (handle, node, options) { + return addLineWidget(this, handle, node, options); + }), + removeLineWidget: function (widget) { + widget.clear(); + }, + markText: function (from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range"); + }, + setBookmark: function (pos, options) { + var realOpts = { + replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft, + clearWhenEmpty: false, + shared: options && options.shared, + handleMouseEvents: options && options.handleMouseEvents + }; + pos = clipPos(this, pos); + return markText(this, pos, pos, realOpts, "bookmark"); + }, + findMarksAt: function (pos) { + pos = clipPos(this, pos); + var markers = [], + spans = getLine(this, pos.line).markedSpans; + if (spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) { + markers.push(span.marker.parent || span.marker); + } + } + } + return markers; + }, + findMarks: function (from, to, filter) { + from = clipPos(this, from); + to = clipPos(this, to); + var found = [], + lineNo = from.line; + this.iter(from.line, to.line + 1, function (line) { + var spans = line.markedSpans; + if (spans) { + for (var i = 0; i < spans.length; i++) { + var span = spans[i]; + if (!(span.to != null && lineNo == from.line && from.ch >= span.to || span.from == null && lineNo != from.line || span.from != null && lineNo == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) { + found.push(span.marker.parent || span.marker); + } + } + } + ++lineNo; + }); + return found; + }, + getAllMarks: function () { + var markers = []; + this.iter(function (line) { + var sps = line.markedSpans; + if (sps) { + for (var i = 0; i < sps.length; ++i) { + if (sps[i].from != null) { + markers.push(sps[i].marker); + } + } + } + }); + return markers; + }, + posFromIndex: function (off) { + var ch, + lineNo = this.first, + sepSize = this.lineSeparator().length; + this.iter(function (line) { + var sz = line.text.length + sepSize; + if (sz > off) { + ch = off; + return true; + } + off -= sz; + ++lineNo; + }); + return clipPos(this, Pos(lineNo, ch)); + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords); + var index = coords.ch; + if (coords.line < this.first || coords.ch < 0) { + return 0; + } + var sepSize = this.lineSeparator().length; + this.iter(this.first, coords.line, function (line) { + // iter aborts when callback returns a truthy value + index += line.text.length + sepSize; + }); + return index; + }, + copy: function (copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction); + doc.scrollTop = this.scrollTop; + doc.scrollLeft = this.scrollLeft; + doc.sel = this.sel; + doc.extend = false; + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth; + doc.setHistory(this.getHistory()); + } + return doc; + }, + linkedDoc: function (options) { + if (!options) { + options = {}; + } + var from = this.first, + to = this.first + this.size; + if (options.from != null && options.from > from) { + from = options.from; + } + if (options.to != null && options.to < to) { + to = options.to; + } + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction); + if (options.sharedHist) { + copy.history = this.history; + } + (this.linked || (this.linked = [])).push({ + doc: copy, + sharedHist: options.sharedHist + }); + copy.linked = [{ + doc: this, + isParent: true, + sharedHist: options.sharedHist + }]; + copySharedMarkers(copy, findSharedMarkers(this)); + return copy; + }, + unlinkDoc: function (other) { + if (other instanceof CodeMirror) { + other = other.doc; + } + if (this.linked) { + for (var i = 0; i < this.linked.length; ++i) { + var link = this.linked[i]; + if (link.doc != other) { + continue; + } + this.linked.splice(i, 1); + other.unlinkDoc(this); + detachSharedMarkers(findSharedMarkers(this)); + break; + } + } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id]; + linkedDocs(other, function (doc) { + return splitIds.push(doc.id); + }, true); + other.history = new History(null); + other.history.done = copyHistoryArray(this.history.done, splitIds); + other.history.undone = copyHistoryArray(this.history.undone, splitIds); + } + }, + iterLinkedDocs: function (f) { + linkedDocs(this, f); + }, + getMode: function () { + return this.mode; + }, + getEditor: function () { + return this.cm; + }, + splitLines: function (str) { + if (this.lineSep) { + return str.split(this.lineSep); + } + return splitLinesAuto(str); + }, + lineSeparator: function () { + return this.lineSep || "\n"; + }, + setDirection: docMethodOp(function (dir) { + if (dir != "rtl") { + dir = "ltr"; + } + if (dir == this.direction) { + return; + } + this.direction = dir; + this.iter(function (line) { + return line.order = null; + }); + if (this.cm) { + directionChanged(this.cm); + } + }) + }); + + // Public alias. + Doc.prototype.eachLine = Doc.prototype.iter; + + // Kludge to work around strange IE behavior where it'll sometimes + // re-fire a series of drag-related events right after the drop (#1551) + var lastDrop = 0; + function onDrop(e) { + var cm = this; + clearDragCursor(cm); + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { + return; + } + e_preventDefault(e); + if (ie) { + lastDrop = +new Date(); + } + var pos = posFromMouse(cm, e, true), + files = e.dataTransfer.files; + if (!pos || cm.isReadOnly()) { + return; + } + // Might be a file drop, in which case we simply extract the text + // and insert it. + if (files && files.length && window.FileReader && window.File) { + var n = files.length, + text = Array(n), + read = 0; + var markAsReadAndPasteIfAllFilesAreRead = function () { + if (++read == n) { + operation(cm, function () { + pos = clipPos(cm.doc, pos); + var change = { + from: pos, + to: pos, + text: cm.doc.splitLines(text.filter(function (t) { + return t != null; + }).join(cm.doc.lineSeparator())), + origin: "paste" + }; + makeChange(cm.doc, change); + setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change)))); + })(); + } + }; + var readTextFromFile = function (file, i) { + if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) { + markAsReadAndPasteIfAllFilesAreRead(); + return; + } + var reader = new FileReader(); + reader.onerror = function () { + return markAsReadAndPasteIfAllFilesAreRead(); + }; + reader.onload = function () { + var content = reader.result; + if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { + markAsReadAndPasteIfAllFilesAreRead(); + return; + } + text[i] = content; + markAsReadAndPasteIfAllFilesAreRead(); + }; + reader.readAsText(file); + }; + for (var i = 0; i < files.length; i++) { + readTextFromFile(files[i], i); + } + } else { + // Normal drop + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { + cm.state.draggingText(e); + // Ensure the editor is re-focused + setTimeout(function () { + return cm.display.input.focus(); + }, 20); + return; + } + try { + var text$1 = e.dataTransfer.getData("Text"); + if (text$1) { + var selected; + if (cm.state.draggingText && !cm.state.draggingText.copy) { + selected = cm.listSelections(); + } + setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); + if (selected) { + for (var i$1 = 0; i$1 < selected.length; ++i$1) { + replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); + } + } + cm.replaceSelection(text$1, "around", "paste"); + cm.display.input.focus(); + } + } catch (e$1) {} + } + } + function onDragStart(cm, e) { + if (ie && (!cm.state.draggingText || +new Date() - lastDrop < 100)) { + e_stop(e); + return; + } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { + return; + } + e.dataTransfer.setData("Text", cm.getSelection()); + e.dataTransfer.effectAllowed = "copyMove"; + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; + if (presto) { + img.width = img.height = 1; + cm.display.wrapper.appendChild(img); + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop; + } + e.dataTransfer.setDragImage(img, 0, 0); + if (presto) { + img.parentNode.removeChild(img); + } + } + } + function onDragOver(cm, e) { + var pos = posFromMouse(cm, e); + if (!pos) { + return; + } + var frag = document.createDocumentFragment(); + drawSelectionCursor(cm, pos, frag); + if (!cm.display.dragCursor) { + cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); + cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); + } + removeChildrenAndAdd(cm.display.dragCursor, frag); + } + function clearDragCursor(cm) { + if (cm.display.dragCursor) { + cm.display.lineSpace.removeChild(cm.display.dragCursor); + cm.display.dragCursor = null; + } + } + + // These must be handled carefully, because naively registering a + // handler for each editor will cause the editors to never be + // garbage collected. + + function forEachCodeMirror(f) { + if (!document.getElementsByClassName) { + return; + } + var byClass = document.getElementsByClassName("CodeMirror"), + editors = []; + for (var i = 0; i < byClass.length; i++) { + var cm = byClass[i].CodeMirror; + if (cm) { + editors.push(cm); + } + } + if (editors.length) { + editors[0].operation(function () { + for (var i = 0; i < editors.length; i++) { + f(editors[i]); + } + }); + } + } + var globalsRegistered = false; + function ensureGlobalHandlers() { + if (globalsRegistered) { + return; + } + registerGlobalHandlers(); + globalsRegistered = true; + } + function registerGlobalHandlers() { + // When the window resizes, we need to refresh active editors. + var resizeTimer; + on(window, "resize", function () { + if (resizeTimer == null) { + resizeTimer = setTimeout(function () { + resizeTimer = null; + forEachCodeMirror(onResize); + }, 100); + } + }); + // When the window loses focus, we want to show the editor as blurred + on(window, "blur", function () { + return forEachCodeMirror(onBlur); + }); + } + // Called when the window resizes + function onResize(cm) { + var d = cm.display; + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + d.scrollbarsClipped = false; + cm.setSize(); + } + var keyNames = { + 3: "Pause", + 8: "Backspace", + 9: "Tab", + 13: "Enter", + 16: "Shift", + 17: "Ctrl", + 18: "Alt", + 19: "Pause", + 20: "CapsLock", + 27: "Esc", + 32: "Space", + 33: "PageUp", + 34: "PageDown", + 35: "End", + 36: "Home", + 37: "Left", + 38: "Up", + 39: "Right", + 40: "Down", + 44: "PrintScrn", + 45: "Insert", + 46: "Delete", + 59: ";", + 61: "=", + 91: "Mod", + 92: "Mod", + 93: "Mod", + 106: "*", + 107: "=", + 109: "-", + 110: ".", + 111: "/", + 145: "ScrollLock", + 173: "-", + 186: ";", + 187: "=", + 188: ",", + 189: "-", + 190: ".", + 191: "/", + 192: "`", + 219: "[", + 220: "\\", + 221: "]", + 222: "'", + 224: "Mod", + 63232: "Up", + 63233: "Down", + 63234: "Left", + 63235: "Right", + 63272: "Delete", + 63273: "Home", + 63275: "End", + 63276: "PageUp", + 63277: "PageDown", + 63302: "Insert" + }; + + // Number keys + for (var i = 0; i < 10; i++) { + keyNames[i + 48] = keyNames[i + 96] = String(i); + } + // Alphabetic keys + for (var i$1 = 65; i$1 <= 90; i$1++) { + keyNames[i$1] = String.fromCharCode(i$1); + } + // Function keys + for (var i$2 = 1; i$2 <= 12; i$2++) { + keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; + } + var keyMap = {}; + keyMap.basic = { + "Left": "goCharLeft", + "Right": "goCharRight", + "Up": "goLineUp", + "Down": "goLineDown", + "End": "goLineEnd", + "Home": "goLineStartSmart", + "PageUp": "goPageUp", + "PageDown": "goPageDown", + "Delete": "delCharAfter", + "Backspace": "delCharBefore", + "Shift-Backspace": "delCharBefore", + "Tab": "defaultTab", + "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", + "Insert": "toggleOverwrite", + "Esc": "singleSelection" + }; + // Note that the save and find-related commands aren't defined by + // default. User code or addons can define them. Unknown commands + // are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", + "Ctrl-D": "deleteLine", + "Ctrl-Z": "undo", + "Shift-Ctrl-Z": "redo", + "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", + "Ctrl-End": "goDocEnd", + "Ctrl-Up": "goLineUp", + "Ctrl-Down": "goLineDown", + "Ctrl-Left": "goGroupLeft", + "Ctrl-Right": "goGroupRight", + "Alt-Left": "goLineStart", + "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", + "Ctrl-Delete": "delGroupAfter", + "Ctrl-S": "save", + "Ctrl-F": "find", + "Ctrl-G": "findNext", + "Shift-Ctrl-G": "findPrev", + "Shift-Ctrl-F": "replace", + "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", + "Ctrl-]": "indentMore", + "Ctrl-U": "undoSelection", + "Shift-Ctrl-U": "redoSelection", + "Alt-U": "redoSelection", + "fallthrough": "basic" + }; + // Very basic readline/emacs-style bindings, which are standard on Mac. + keyMap.emacsy = { + "Ctrl-F": "goCharRight", + "Ctrl-B": "goCharLeft", + "Ctrl-P": "goLineUp", + "Ctrl-N": "goLineDown", + "Ctrl-A": "goLineStart", + "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", + "Shift-Ctrl-V": "goPageUp", + "Ctrl-D": "delCharAfter", + "Ctrl-H": "delCharBefore", + "Alt-Backspace": "delWordBefore", + "Ctrl-K": "killLine", + "Ctrl-T": "transposeChars", + "Ctrl-O": "openLine" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", + "Cmd-D": "deleteLine", + "Cmd-Z": "undo", + "Shift-Cmd-Z": "redo", + "Cmd-Y": "redo", + "Cmd-Home": "goDocStart", + "Cmd-Up": "goDocStart", + "Cmd-End": "goDocEnd", + "Cmd-Down": "goDocEnd", + "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", + "Cmd-Left": "goLineLeft", + "Cmd-Right": "goLineRight", + "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", + "Alt-Delete": "delGroupAfter", + "Cmd-S": "save", + "Cmd-F": "find", + "Cmd-G": "findNext", + "Shift-Cmd-G": "findPrev", + "Cmd-Alt-F": "replace", + "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", + "Cmd-]": "indentMore", + "Cmd-Backspace": "delWrappedLineLeft", + "Cmd-Delete": "delWrappedLineRight", + "Cmd-U": "undoSelection", + "Shift-Cmd-U": "redoSelection", + "Ctrl-Up": "goDocStart", + "Ctrl-Down": "goDocEnd", + "fallthrough": ["basic", "emacsy"] + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + + // KEYMAP DISPATCH + + function normalizeKeyName(name) { + var parts = name.split(/-(?!$)/); + name = parts[parts.length - 1]; + var alt, ctrl, shift, cmd; + for (var i = 0; i < parts.length - 1; i++) { + var mod = parts[i]; + if (/^(cmd|meta|m)$/i.test(mod)) { + cmd = true; + } else if (/^a(lt)?$/i.test(mod)) { + alt = true; + } else if (/^(c|ctrl|control)$/i.test(mod)) { + ctrl = true; + } else if (/^s(hift)?$/i.test(mod)) { + shift = true; + } else { + throw new Error("Unrecognized modifier name: " + mod); + } + } + if (alt) { + name = "Alt-" + name; + } + if (ctrl) { + name = "Ctrl-" + name; + } + if (cmd) { + name = "Cmd-" + name; + } + if (shift) { + name = "Shift-" + name; + } + return name; + } + + // This is a kludge to keep keymaps mostly working as raw objects + // (backwards compatibility) while at the same time support features + // like normalization and multi-stroke key bindings. It compiles a + // new normalized keymap, and then updates the old object to reflect + // this. + function normalizeKeyMap(keymap) { + var copy = {}; + for (var keyname in keymap) { + if (keymap.hasOwnProperty(keyname)) { + var value = keymap[keyname]; + if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { + continue; + } + if (value == "...") { + delete keymap[keyname]; + continue; + } + var keys = map(keyname.split(" "), normalizeKeyName); + for (var i = 0; i < keys.length; i++) { + var val = void 0, + name = void 0; + if (i == keys.length - 1) { + name = keys.join(" "); + val = value; + } else { + name = keys.slice(0, i + 1).join(" "); + val = "..."; + } + var prev = copy[name]; + if (!prev) { + copy[name] = val; + } else if (prev != val) { + throw new Error("Inconsistent bindings for " + name); + } + } + delete keymap[keyname]; + } + } + for (var prop in copy) { + keymap[prop] = copy[prop]; + } + return keymap; + } + function lookupKey(key, map, handle, context) { + map = getKeyMap(map); + var found = map.call ? map.call(key, context) : map[key]; + if (found === false) { + return "nothing"; + } + if (found === "...") { + return "multi"; + } + if (found != null && handle(found)) { + return "handled"; + } + if (map.fallthrough) { + if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") { + return lookupKey(key, map.fallthrough, handle, context); + } + for (var i = 0; i < map.fallthrough.length; i++) { + var result = lookupKey(key, map.fallthrough[i], handle, context); + if (result) { + return result; + } + } + } + } + + // Modifier key presses don't count as 'real' key presses for the + // purpose of keymap fallthrough. + function isModifierKey(value) { + var name = typeof value == "string" ? value : keyNames[value.keyCode]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; + } + function addModifierNames(name, event, noShift) { + var base = name; + if (event.altKey && base != "Alt") { + name = "Alt-" + name; + } + if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { + name = "Ctrl-" + name; + } + if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") { + name = "Cmd-" + name; + } + if (!noShift && event.shiftKey && base != "Shift") { + name = "Shift-" + name; + } + return name; + } + + // Look up the name of a key as indicated by an event object. + function keyName(event, noShift) { + if (presto && event.keyCode == 34 && event["char"]) { + return false; + } + var name = keyNames[event.keyCode]; + if (name == null || event.altGraphKey) { + return false; + } + // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause, + // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+) + if (event.keyCode == 3 && event.code) { + name = event.code; + } + return addModifierNames(name, event, noShift); + } + function getKeyMap(val) { + return typeof val == "string" ? keyMap[val] : val; + } + + // Helper for deleting text near the selection(s), used to implement + // backspace, delete, and similar functionality. + function deleteNearSelection(cm, compute) { + var ranges = cm.doc.sel.ranges, + kill = []; + // Build up a set of ranges to kill first, merging overlapping + // ranges. + for (var i = 0; i < ranges.length; i++) { + var toKill = compute(ranges[i]); + while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { + var replaced = kill.pop(); + if (cmp(replaced.from, toKill.from) < 0) { + toKill.from = replaced.from; + break; + } + } + kill.push(toKill); + } + // Next, remove those actual ranges. + runInOp(cm, function () { + for (var i = kill.length - 1; i >= 0; i--) { + replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); + } + ensureCursorVisible(cm); + }); + } + function moveCharLogically(line, ch, dir) { + var target = skipExtendingChars(line.text, ch + dir, dir); + return target < 0 || target > line.text.length ? null : target; + } + function moveLogically(line, start, dir) { + var ch = moveCharLogically(line, start.ch, dir); + return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before"); + } + function endOfLine(visually, cm, lineObj, lineNo, dir) { + if (visually) { + if (cm.doc.direction == "rtl") { + dir = -dir; + } + var order = getOrder(lineObj, cm.doc.direction); + if (order) { + var part = dir < 0 ? lst(order) : order[0]; + var moveInStorageOrder = dir < 0 == (part.level == 1); + var sticky = moveInStorageOrder ? "after" : "before"; + var ch; + // With a wrapped rtl chunk (possibly spanning multiple bidi parts), + // it could be that the last bidi part is not on the last visual line, + // since visual lines contain content order-consecutive chunks. + // Thus, in rtl, we are looking for the first (content-order) character + // in the rtl chunk that is on the last line (that is, the same line + // as the last (content-order) character). + if (part.level > 0 || cm.doc.direction == "rtl") { + var prep = prepareMeasureForLine(cm, lineObj); + ch = dir < 0 ? lineObj.text.length - 1 : 0; + var targetTop = measureCharPrepared(cm, prep, ch).top; + ch = findFirst(function (ch) { + return measureCharPrepared(cm, prep, ch).top == targetTop; + }, dir < 0 == (part.level == 1) ? part.from : part.to - 1, ch); + if (sticky == "before") { + ch = moveCharLogically(lineObj, ch, 1); + } + } else { + ch = dir < 0 ? part.to : part.from; + } + return new Pos(lineNo, ch, sticky); + } + } + return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after"); + } + function moveVisually(cm, line, start, dir) { + var bidi = getOrder(line, cm.doc.direction); + if (!bidi) { + return moveLogically(line, start, dir); + } + if (start.ch >= line.text.length) { + start.ch = line.text.length; + start.sticky = "before"; + } else if (start.ch <= 0) { + start.ch = 0; + start.sticky = "after"; + } + var partPos = getBidiPartAt(bidi, start.ch, start.sticky), + part = bidi[partPos]; + if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { + // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines, + // nothing interesting happens. + return moveLogically(line, start, dir); + } + var mv = function (pos, dir) { + return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); + }; + var prep; + var getWrappedLineExtent = function (ch) { + if (!cm.options.lineWrapping) { + return { + begin: 0, + end: line.text.length + }; + } + prep = prep || prepareMeasureForLine(cm, line); + return wrappedLineExtentChar(cm, line, prep, ch); + }; + var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch); + if (cm.doc.direction == "rtl" || part.level == 1) { + var moveInStorageOrder = part.level == 1 == dir < 0; + var ch = mv(start, moveInStorageOrder ? 1 : -1); + if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) { + // Case 2: We move within an rtl part or in an rtl editor on the same visual line + var sticky = moveInStorageOrder ? "before" : "after"; + return new Pos(start.line, ch, sticky); + } + } + + // Case 3: Could not move within this bidi part in this visual line, so leave + // the current bidi part + + var searchInVisualLine = function (partPos, dir, wrappedLineExtent) { + var getRes = function (ch, moveInStorageOrder) { + return moveInStorageOrder ? new Pos(start.line, mv(ch, 1), "before") : new Pos(start.line, ch, "after"); + }; + for (; partPos >= 0 && partPos < bidi.length; partPos += dir) { + var part = bidi[partPos]; + var moveInStorageOrder = dir > 0 == (part.level != 1); + var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1); + if (part.from <= ch && ch < part.to) { + return getRes(ch, moveInStorageOrder); + } + ch = moveInStorageOrder ? part.from : mv(part.to, -1); + if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { + return getRes(ch, moveInStorageOrder); + } + } + }; + + // Case 3a: Look for other bidi parts on the same visual line + var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent); + if (res) { + return res; + } + + // Case 3b: Look for other bidi parts on the next visual line + var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1); + if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { + res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)); + if (res) { + return res; + } + } + + // Case 4: Nowhere to move + return null; + } + + // Commands are parameter-less actions that can be performed on an + // editor, mostly used for keybindings. + var commands = { + selectAll: selectAll, + singleSelection: function (cm) { + return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); + }, + killLine: function (cm) { + return deleteNearSelection(cm, function (range) { + if (range.empty()) { + var len = getLine(cm.doc, range.head.line).text.length; + if (range.head.ch == len && range.head.line < cm.lastLine()) { + return { + from: range.head, + to: Pos(range.head.line + 1, 0) + }; + } else { + return { + from: range.head, + to: Pos(range.head.line, len) + }; + } + } else { + return { + from: range.from(), + to: range.to() + }; + } + }); + }, + deleteLine: function (cm) { + return deleteNearSelection(cm, function (range) { + return { + from: Pos(range.from().line, 0), + to: clipPos(cm.doc, Pos(range.to().line + 1, 0)) + }; + }); + }, + delLineLeft: function (cm) { + return deleteNearSelection(cm, function (range) { + return { + from: Pos(range.from().line, 0), + to: range.from() + }; + }); + }, + delWrappedLineLeft: function (cm) { + return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5; + var leftPos = cm.coordsChar({ + left: 0, + top: top + }, "div"); + return { + from: leftPos, + to: range.from() + }; + }); + }, + delWrappedLineRight: function (cm) { + return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5; + var rightPos = cm.coordsChar({ + left: cm.display.lineDiv.offsetWidth + 100, + top: top + }, "div"); + return { + from: range.from(), + to: rightPos + }; + }); + }, + undo: function (cm) { + return cm.undo(); + }, + redo: function (cm) { + return cm.redo(); + }, + undoSelection: function (cm) { + return cm.undoSelection(); + }, + redoSelection: function (cm) { + return cm.redoSelection(); + }, + goDocStart: function (cm) { + return cm.extendSelection(Pos(cm.firstLine(), 0)); + }, + goDocEnd: function (cm) { + return cm.extendSelection(Pos(cm.lastLine())); + }, + goLineStart: function (cm) { + return cm.extendSelectionsBy(function (range) { + return lineStart(cm, range.head.line); + }, { + origin: "+move", + bias: 1 + }); + }, + goLineStartSmart: function (cm) { + return cm.extendSelectionsBy(function (range) { + return lineStartSmart(cm, range.head); + }, { + origin: "+move", + bias: 1 + }); + }, + goLineEnd: function (cm) { + return cm.extendSelectionsBy(function (range) { + return lineEnd(cm, range.head.line); + }, { + origin: "+move", + bias: -1 + }); + }, + goLineRight: function (cm) { + return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + return cm.coordsChar({ + left: cm.display.lineDiv.offsetWidth + 100, + top: top + }, "div"); + }, sel_move); + }, + goLineLeft: function (cm) { + return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + return cm.coordsChar({ + left: 0, + top: top + }, "div"); + }, sel_move); + }, + goLineLeftSmart: function (cm) { + return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + var pos = cm.coordsChar({ + left: 0, + top: top + }, "div"); + if (pos.ch < cm.getLine(pos.line).search(/\S/)) { + return lineStartSmart(cm, range.head); + } + return pos; + }, sel_move); + }, + goLineUp: function (cm) { + return cm.moveV(-1, "line"); + }, + goLineDown: function (cm) { + return cm.moveV(1, "line"); + }, + goPageUp: function (cm) { + return cm.moveV(-1, "page"); + }, + goPageDown: function (cm) { + return cm.moveV(1, "page"); + }, + goCharLeft: function (cm) { + return cm.moveH(-1, "char"); + }, + goCharRight: function (cm) { + return cm.moveH(1, "char"); + }, + goColumnLeft: function (cm) { + return cm.moveH(-1, "column"); + }, + goColumnRight: function (cm) { + return cm.moveH(1, "column"); + }, + goWordLeft: function (cm) { + return cm.moveH(-1, "word"); + }, + goGroupRight: function (cm) { + return cm.moveH(1, "group"); + }, + goGroupLeft: function (cm) { + return cm.moveH(-1, "group"); + }, + goWordRight: function (cm) { + return cm.moveH(1, "word"); + }, + delCharBefore: function (cm) { + return cm.deleteH(-1, "codepoint"); + }, + delCharAfter: function (cm) { + return cm.deleteH(1, "char"); + }, + delWordBefore: function (cm) { + return cm.deleteH(-1, "word"); + }, + delWordAfter: function (cm) { + return cm.deleteH(1, "word"); + }, + delGroupBefore: function (cm) { + return cm.deleteH(-1, "group"); + }, + delGroupAfter: function (cm) { + return cm.deleteH(1, "group"); + }, + indentAuto: function (cm) { + return cm.indentSelection("smart"); + }, + indentMore: function (cm) { + return cm.indentSelection("add"); + }, + indentLess: function (cm) { + return cm.indentSelection("subtract"); + }, + insertTab: function (cm) { + return cm.replaceSelection("\t"); + }, + insertSoftTab: function (cm) { + var spaces = [], + ranges = cm.listSelections(), + tabSize = cm.options.tabSize; + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].from(); + var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); + spaces.push(spaceStr(tabSize - col % tabSize)); + } + cm.replaceSelections(spaces); + }, + defaultTab: function (cm) { + if (cm.somethingSelected()) { + cm.indentSelection("add"); + } else { + cm.execCommand("insertTab"); + } + }, + // Swap the two chars left and right of each selection's head. + // Move cursor behind the two swapped characters afterwards. + // + // Doesn't consider line feeds a character. + // Doesn't scan more than one line above to find a character. + // Doesn't do anything on an empty line. + // Doesn't do anything with non-empty selections. + transposeChars: function (cm) { + return runInOp(cm, function () { + var ranges = cm.listSelections(), + newSel = []; + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) { + continue; + } + var cur = ranges[i].head, + line = getLine(cm.doc, cur.line).text; + if (line) { + if (cur.ch == line.length) { + cur = new Pos(cur.line, cur.ch - 1); + } + if (cur.ch > 0) { + cur = new Pos(cur.line, cur.ch + 1); + cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, "+transpose"); + } else if (cur.line > cm.doc.first) { + var prev = getLine(cm.doc, cur.line - 1).text; + if (prev) { + cur = new Pos(cur.line, 1); + cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), cur, "+transpose"); + } + } + } + newSel.push(new Range(cur, cur)); + } + cm.setSelections(newSel); + }); + }, + newlineAndIndent: function (cm) { + return runInOp(cm, function () { + var sels = cm.listSelections(); + for (var i = sels.length - 1; i >= 0; i--) { + cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); + } + sels = cm.listSelections(); + for (var i$1 = 0; i$1 < sels.length; i$1++) { + cm.indentLine(sels[i$1].from().line, null, true); + } + ensureCursorVisible(cm); + }); + }, + openLine: function (cm) { + return cm.replaceSelection("\n", "start"); + }, + toggleOverwrite: function (cm) { + return cm.toggleOverwrite(); + } + }; + function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLine(line); + if (visual != line) { + lineN = lineNo(visual); + } + return endOfLine(true, cm, visual, lineN, 1); + } + function lineEnd(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLineEnd(line); + if (visual != line) { + lineN = lineNo(visual); + } + return endOfLine(true, cm, line, lineN, -1); + } + function lineStartSmart(cm, pos) { + var start = lineStart(cm, pos.line); + var line = getLine(cm.doc, start.line); + var order = getOrder(line, cm.doc.direction); + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(start.ch, line.text.search(/\S/)); + var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; + return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky); + } + return start; + } + + // Run a handler that was bound to a key. + function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) { + return false; + } + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + cm.display.input.ensurePolled(); + var prevShift = cm.display.shift, + done = false; + try { + if (cm.isReadOnly()) { + cm.state.suppressEdits = true; + } + if (dropShift) { + cm.display.shift = false; + } + done = bound(cm) != Pass; + } finally { + cm.display.shift = prevShift; + cm.state.suppressEdits = false; + } + return done; + } + function lookupKeyForEditor(cm, name, handle) { + for (var i = 0; i < cm.state.keyMaps.length; i++) { + var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); + if (result) { + return result; + } + } + return cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm) || lookupKey(name, cm.options.keyMap, handle, cm); + } + + // Note that, despite the name, this function is also used to check + // for bound mouse clicks. + + var stopSeq = new Delayed(); + function dispatchKey(cm, name, e, handle) { + var seq = cm.state.keySeq; + if (seq) { + if (isModifierKey(name)) { + return "handled"; + } + if (/\'$/.test(name)) { + cm.state.keySeq = null; + } else { + stopSeq.set(50, function () { + if (cm.state.keySeq == seq) { + cm.state.keySeq = null; + cm.display.input.reset(); + } + }); + } + if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { + return true; + } + } + return dispatchKeyInner(cm, name, e, handle); + } + function dispatchKeyInner(cm, name, e, handle) { + var result = lookupKeyForEditor(cm, name, handle); + if (result == "multi") { + cm.state.keySeq = name; + } + if (result == "handled") { + signalLater(cm, "keyHandled", cm, name, e); + } + if (result == "handled" || result == "multi") { + e_preventDefault(e); + restartBlink(cm); + } + return !!result; + } + + // Handle a key from the keydown event. + function handleKeyBinding(cm, e) { + var name = keyName(e, true); + if (!name) { + return false; + } + if (e.shiftKey && !cm.state.keySeq) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + return dispatchKey(cm, "Shift-" + name, e, function (b) { + return doHandleBinding(cm, b, true); + }) || dispatchKey(cm, name, e, function (b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) { + return doHandleBinding(cm, b); + } + }); + } else { + return dispatchKey(cm, name, e, function (b) { + return doHandleBinding(cm, b); + }); + } + } + + // Handle a key from the keypress event + function handleCharBinding(cm, e, ch) { + return dispatchKey(cm, "'" + ch + "'", e, function (b) { + return doHandleBinding(cm, b, true); + }); + } + var lastStoppedKey = null; + function onKeyDown(e) { + var cm = this; + if (e.target && e.target != cm.display.input.getField()) { + return; + } + cm.curOp.focus = activeElt(); + if (signalDOMEvent(cm, e)) { + return; + } + // IE does strange things with escape. + if (ie && ie_version < 11 && e.keyCode == 27) { + e.returnValue = false; + } + var code = e.keyCode; + cm.display.shift = code == 16 || e.shiftKey; + var handled = handleKeyBinding(cm, e); + if (presto) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) { + cm.replaceSelection("", null, "cut"); + } + } + if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) { + document.execCommand("cut"); + } + + // Turn mouse into crosshair when Alt is held on Mac. + if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) { + showCrossHair(cm); + } + } + function showCrossHair(cm) { + var lineDiv = cm.display.lineDiv; + addClass(lineDiv, "CodeMirror-crosshair"); + function up(e) { + if (e.keyCode == 18 || !e.altKey) { + rmClass(lineDiv, "CodeMirror-crosshair"); + off(document, "keyup", up); + off(document, "mouseover", up); + } + } + on(document, "keyup", up); + on(document, "mouseover", up); + } + function onKeyUp(e) { + if (e.keyCode == 16) { + this.doc.sel.shift = false; + } + signalDOMEvent(this, e); + } + function onKeyPress(e) { + var cm = this; + if (e.target && e.target != cm.display.input.getField()) { + return; + } + if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { + return; + } + var keyCode = e.keyCode, + charCode = e.charCode; + if (presto && keyCode == lastStoppedKey) { + lastStoppedKey = null; + e_preventDefault(e); + return; + } + if (presto && (!e.which || e.which < 10) && handleKeyBinding(cm, e)) { + return; + } + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + // Some browsers fire keypress events for backspace + if (ch == "\x08") { + return; + } + if (handleCharBinding(cm, e, ch)) { + return; + } + cm.display.input.onKeyPress(e); + } + var DOUBLECLICK_DELAY = 400; + var PastClick = function (time, pos, button) { + this.time = time; + this.pos = pos; + this.button = button; + }; + PastClick.prototype.compare = function (time, pos, button) { + return this.time + DOUBLECLICK_DELAY > time && cmp(pos, this.pos) == 0 && button == this.button; + }; + var lastClick, lastDoubleClick; + function clickRepeat(pos, button) { + var now = +new Date(); + if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { + lastClick = lastDoubleClick = null; + return "triple"; + } else if (lastClick && lastClick.compare(now, pos, button)) { + lastDoubleClick = new PastClick(now, pos, button); + lastClick = null; + return "double"; + } else { + lastClick = new PastClick(now, pos, button); + lastDoubleClick = null; + return "single"; + } + } + + // A mouse down can be a single click, double click, triple click, + // start of selection drag, start of text drag, new cursor + // (ctrl-click), rectangle drag (alt-drag), or xwin + // middle-click-paste. Or it might be a click on something we should + // not interfere with, such as a scrollbar or widget. + function onMouseDown(e) { + var cm = this, + display = cm.display; + if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { + return; + } + display.input.ensurePolled(); + display.shift = e.shiftKey; + if (eventInWidget(display, e)) { + if (!webkit) { + // Briefly turn off draggability, to allow widgets to do + // normal dragging things. + display.scroller.draggable = false; + setTimeout(function () { + return display.scroller.draggable = true; + }, 100); + } + return; + } + if (clickInGutter(cm, e)) { + return; + } + var pos = posFromMouse(cm, e), + button = e_button(e), + repeat = pos ? clickRepeat(pos, button) : "single"; + window.focus(); + + // #3261: make sure, that we're not starting a second selection + if (button == 1 && cm.state.selectingText) { + cm.state.selectingText(e); + } + if (pos && handleMappedButton(cm, button, pos, repeat, e)) { + return; + } + if (button == 1) { + if (pos) { + leftButtonDown(cm, pos, repeat, e); + } else if (e_target(e) == display.scroller) { + e_preventDefault(e); + } + } else if (button == 2) { + if (pos) { + extendSelection(cm.doc, pos); + } + setTimeout(function () { + return display.input.focus(); + }, 20); + } else if (button == 3) { + if (captureRightClick) { + cm.display.input.onContextMenu(e); + } else { + delayBlurEvent(cm); + } + } + } + function handleMappedButton(cm, button, pos, repeat, event) { + var name = "Click"; + if (repeat == "double") { + name = "Double" + name; + } else if (repeat == "triple") { + name = "Triple" + name; + } + name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name; + return dispatchKey(cm, addModifierNames(name, event), event, function (bound) { + if (typeof bound == "string") { + bound = commands[bound]; + } + if (!bound) { + return false; + } + var done = false; + try { + if (cm.isReadOnly()) { + cm.state.suppressEdits = true; + } + done = bound(cm, pos) != Pass; + } finally { + cm.state.suppressEdits = false; + } + return done; + }); + } + function configureMouse(cm, repeat, event) { + var option = cm.getOption("configureMouse"); + var value = option ? option(cm, repeat, event) : {}; + if (value.unit == null) { + var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey; + value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"; + } + if (value.extend == null || cm.doc.extend) { + value.extend = cm.doc.extend || event.shiftKey; + } + if (value.addNew == null) { + value.addNew = mac ? event.metaKey : event.ctrlKey; + } + if (value.moveOnDrag == null) { + value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); + } + return value; + } + function leftButtonDown(cm, pos, repeat, event) { + if (ie) { + setTimeout(bind(ensureFocus, cm), 0); + } else { + cm.curOp.focus = activeElt(); + } + var behavior = configureMouse(cm, repeat, event); + var sel = cm.doc.sel, + contained; + if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && repeat == "single" && (contained = sel.contains(pos)) > -1 && (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) { + leftButtonStartDrag(cm, event, pos, behavior); + } else { + leftButtonSelect(cm, event, pos, behavior); + } + } + + // Start a text drag. When it ends, see if any dragging actually + // happen, and treat as a click if it didn't. + function leftButtonStartDrag(cm, event, pos, behavior) { + var display = cm.display, + moved = false; + var dragEnd = operation(cm, function (e) { + if (webkit) { + display.scroller.draggable = false; + } + cm.state.draggingText = false; + if (cm.state.delayingBlurEvent) { + if (cm.hasFocus()) { + cm.state.delayingBlurEvent = false; + } else { + delayBlurEvent(cm); + } + } + off(display.wrapper.ownerDocument, "mouseup", dragEnd); + off(display.wrapper.ownerDocument, "mousemove", mouseMove); + off(display.scroller, "dragstart", dragStart); + off(display.scroller, "drop", dragEnd); + if (!moved) { + e_preventDefault(e); + if (!behavior.addNew) { + extendSelection(cm.doc, pos, null, null, behavior.extend); + } + // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) + if (webkit && !safari || ie && ie_version == 9) { + setTimeout(function () { + display.wrapper.ownerDocument.body.focus({ + preventScroll: true + }); + display.input.focus(); + }, 20); + } else { + display.input.focus(); + } + } + }); + var mouseMove = function (e2) { + moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10; + }; + var dragStart = function () { + return moved = true; + }; + // Let the drag handler handle this. + if (webkit) { + display.scroller.draggable = true; + } + cm.state.draggingText = dragEnd; + dragEnd.copy = !behavior.moveOnDrag; + on(display.wrapper.ownerDocument, "mouseup", dragEnd); + on(display.wrapper.ownerDocument, "mousemove", mouseMove); + on(display.scroller, "dragstart", dragStart); + on(display.scroller, "drop", dragEnd); + cm.state.delayingBlurEvent = true; + setTimeout(function () { + return display.input.focus(); + }, 20); + // IE's approach to draggable + if (display.scroller.dragDrop) { + display.scroller.dragDrop(); + } + } + function rangeForUnit(cm, pos, unit) { + if (unit == "char") { + return new Range(pos, pos); + } + if (unit == "word") { + return cm.findWordAt(pos); + } + if (unit == "line") { + return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); + } + var result = unit(cm, pos); + return new Range(result.from, result.to); + } + + // Normal selection, as opposed to text dragging. + function leftButtonSelect(cm, event, start, behavior) { + if (ie) { + delayBlurEvent(cm); + } + var display = cm.display, + doc = cm.doc; + e_preventDefault(event); + var ourRange, + ourIndex, + startSel = doc.sel, + ranges = startSel.ranges; + if (behavior.addNew && !behavior.extend) { + ourIndex = doc.sel.contains(start); + if (ourIndex > -1) { + ourRange = ranges[ourIndex]; + } else { + ourRange = new Range(start, start); + } + } else { + ourRange = doc.sel.primary(); + ourIndex = doc.sel.primIndex; + } + if (behavior.unit == "rectangle") { + if (!behavior.addNew) { + ourRange = new Range(start, start); + } + start = posFromMouse(cm, event, true, true); + ourIndex = -1; + } else { + var range = rangeForUnit(cm, start, behavior.unit); + if (behavior.extend) { + ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); + } else { + ourRange = range; + } + } + if (!behavior.addNew) { + ourIndex = 0; + setSelection(doc, new Selection([ourRange], 0), sel_mouse); + startSel = doc.sel; + } else if (ourIndex == -1) { + ourIndex = ranges.length; + setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), { + scroll: false, + origin: "*mouse" + }); + } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { + setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), { + scroll: false, + origin: "*mouse" + }); + startSel = doc.sel; + } else { + replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); + } + var lastPos = start; + function extendTo(pos) { + if (cmp(lastPos, pos) == 0) { + return; + } + lastPos = pos; + if (behavior.unit == "rectangle") { + var ranges = [], + tabSize = cm.options.tabSize; + var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); + var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); + var left = Math.min(startCol, posCol), + right = Math.max(startCol, posCol); + for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) { + var text = getLine(doc, line).text, + leftPos = findColumn(text, left, tabSize); + if (left == right) { + ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); + } else if (text.length > leftPos) { + ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); + } + } + if (!ranges.length) { + ranges.push(new Range(start, start)); + } + setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), { + origin: "*mouse", + scroll: false + }); + cm.scrollIntoView(pos); + } else { + var oldRange = ourRange; + var range = rangeForUnit(cm, pos, behavior.unit); + var anchor = oldRange.anchor, + head; + if (cmp(range.anchor, anchor) > 0) { + head = range.head; + anchor = minPos(oldRange.from(), range.anchor); + } else { + head = range.anchor; + anchor = maxPos(oldRange.to(), range.head); + } + var ranges$1 = startSel.ranges.slice(0); + ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head)); + setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse); + } + } + var editorSize = display.wrapper.getBoundingClientRect(); + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0; + function extend(e) { + var curCount = ++counter; + var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); + if (!cur) { + return; + } + if (cmp(cur, lastPos) != 0) { + cm.curOp.focus = activeElt(); + extendTo(cur); + var visible = visibleLines(display, doc); + if (cur.line >= visible.to || cur.line < visible.from) { + setTimeout(operation(cm, function () { + if (counter == curCount) { + extend(e); + } + }), 150); + } + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; + if (outside) { + setTimeout(operation(cm, function () { + if (counter != curCount) { + return; + } + display.scroller.scrollTop += outside; + extend(e); + }), 50); + } + } + } + function done(e) { + cm.state.selectingText = false; + counter = Infinity; + // If e is null or undefined we interpret this as someone trying + // to explicitly cancel the selection rather than the user + // letting go of the mouse button. + if (e) { + e_preventDefault(e); + display.input.focus(); + } + off(display.wrapper.ownerDocument, "mousemove", move); + off(display.wrapper.ownerDocument, "mouseup", up); + doc.history.lastSelOrigin = null; + } + var move = operation(cm, function (e) { + if (e.buttons === 0 || !e_button(e)) { + done(e); + } else { + extend(e); + } + }); + var up = operation(cm, done); + cm.state.selectingText = up; + on(display.wrapper.ownerDocument, "mousemove", move); + on(display.wrapper.ownerDocument, "mouseup", up); + } + + // Used when mouse-selecting to adjust the anchor to the proper side + // of a bidi jump depending on the visual position of the head. + function bidiSimplify(cm, range) { + var anchor = range.anchor; + var head = range.head; + var anchorLine = getLine(cm.doc, anchor.line); + if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { + return range; + } + var order = getOrder(anchorLine); + if (!order) { + return range; + } + var index = getBidiPartAt(order, anchor.ch, anchor.sticky), + part = order[index]; + if (part.from != anchor.ch && part.to != anchor.ch) { + return range; + } + var boundary = index + (part.from == anchor.ch == (part.level != 1) ? 0 : 1); + if (boundary == 0 || boundary == order.length) { + return range; + } + + // Compute the relative visual position of the head compared to the + // anchor (<0 is to the left, >0 to the right) + var leftSide; + if (head.line != anchor.line) { + leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0; + } else { + var headIndex = getBidiPartAt(order, head.ch, head.sticky); + var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1); + if (headIndex == boundary - 1 || headIndex == boundary) { + leftSide = dir < 0; + } else { + leftSide = dir > 0; + } + } + var usePart = order[boundary + (leftSide ? -1 : 0)]; + var from = leftSide == (usePart.level == 1); + var ch = from ? usePart.from : usePart.to, + sticky = from ? "after" : "before"; + return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head); + } + + // Determines whether an event happened in the gutter, and fires the + // handlers for the corresponding event. + function gutterEvent(cm, e, type, prevent) { + var mX, mY; + if (e.touches) { + mX = e.touches[0].clientX; + mY = e.touches[0].clientY; + } else { + try { + mX = e.clientX; + mY = e.clientY; + } catch (e$1) { + return false; + } + } + if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { + return false; + } + if (prevent) { + e_preventDefault(e); + } + var display = cm.display; + var lineBox = display.lineDiv.getBoundingClientRect(); + if (mY > lineBox.bottom || !hasHandler(cm, type)) { + return e_defaultPrevented(e); + } + mY -= lineBox.top - display.viewOffset; + for (var i = 0; i < cm.display.gutterSpecs.length; ++i) { + var g = display.gutters.childNodes[i]; + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.doc, mY); + var gutter = cm.display.gutterSpecs[i]; + signal(cm, type, cm, line, gutter.className, e); + return e_defaultPrevented(e); + } + } + } + function clickInGutter(cm, e) { + return gutterEvent(cm, e, "gutterClick", true); + } + + // CONTEXT MENU HANDLING + + // To make the context menu work, we need to briefly unhide the + // textarea (making it as unobtrusive as possible) to let the + // right-click take effect on it. + function onContextMenu(cm, e) { + if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { + return; + } + if (signalDOMEvent(cm, e, "contextmenu")) { + return; + } + if (!captureRightClick) { + cm.display.input.onContextMenu(e); + } + } + function contextMenuInGutter(cm, e) { + if (!hasHandler(cm, "gutterContextMenu")) { + return false; + } + return gutterEvent(cm, e, "gutterContextMenu", false); + } + function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + clearCaches(cm); + } + var Init = { + toString: function () { + return "CodeMirror.Init"; + } + }; + var defaults = {}; + var optionHandlers = {}; + function defineOptions(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers; + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt; + if (handle) { + optionHandlers[name] = notOnInit ? function (cm, val, old) { + if (old != Init) { + handle(cm, val, old); + } + } : handle; + } + } + CodeMirror.defineOption = option; + + // Passed to option handlers when there is no old value. + CodeMirror.Init = Init; + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function (cm, val) { + return cm.setValue(val); + }, true); + option("mode", null, function (cm, val) { + cm.doc.modeOption = val; + loadMode(cm); + }, true); + option("indentUnit", 2, loadMode, true); + option("indentWithTabs", false); + option("smartIndent", true); + option("tabSize", 4, function (cm) { + resetModeState(cm); + clearCaches(cm); + regChange(cm); + }, true); + option("lineSeparator", null, function (cm, val) { + cm.doc.lineSep = val; + if (!val) { + return; + } + var newBreaks = [], + lineNo = cm.doc.first; + cm.doc.iter(function (line) { + for (var pos = 0;;) { + var found = line.text.indexOf(val, pos); + if (found == -1) { + break; + } + pos = found + val.length; + newBreaks.push(Pos(lineNo, found)); + } + lineNo++; + }); + for (var i = newBreaks.length - 1; i >= 0; i--) { + replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); + } + }); + option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) { + cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); + if (old != Init) { + cm.refresh(); + } + }); + option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { + return cm.refresh(); + }, true); + option("electricChars", true); + option("inputStyle", mobile ? "contenteditable" : "textarea", function () { + throw new Error("inputStyle can not (yet) be changed in a running editor"); // FIXME + }, true); + option("spellcheck", false, function (cm, val) { + return cm.getInputField().spellcheck = val; + }, true); + option("autocorrect", false, function (cm, val) { + return cm.getInputField().autocorrect = val; + }, true); + option("autocapitalize", false, function (cm, val) { + return cm.getInputField().autocapitalize = val; + }, true); + option("rtlMoveVisually", !windows); + option("wholeLineUpdateBefore", true); + option("theme", "default", function (cm) { + themeChanged(cm); + updateGutters(cm); + }, true); + option("keyMap", "default", function (cm, val, old) { + var next = getKeyMap(val); + var prev = old != Init && getKeyMap(old); + if (prev && prev.detach) { + prev.detach(cm, next); + } + if (next.attach) { + next.attach(cm, prev || null); + } + }); + option("extraKeys", null); + option("configureMouse", null); + option("lineWrapping", false, wrappingChanged, true); + option("gutters", [], function (cm, val) { + cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers); + updateGutters(cm); + }, true); + option("fixedGutter", true, function (cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; + cm.refresh(); + }, true); + option("coverGutterNextToScrollbar", false, function (cm) { + return updateScrollbars(cm); + }, true); + option("scrollbarStyle", "native", function (cm) { + initScrollbars(cm); + updateScrollbars(cm); + cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); + cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); + }, true); + option("lineNumbers", false, function (cm, val) { + cm.display.gutterSpecs = getGutters(cm.options.gutters, val); + updateGutters(cm); + }, true); + option("firstLineNumber", 1, updateGutters, true); + option("lineNumberFormatter", function (integer) { + return integer; + }, updateGutters, true); + option("showCursorWhenSelecting", false, updateSelection, true); + option("resetSelectionOnContextMenu", true); + option("lineWiseCopyCut", true); + option("pasteLinesPerSelection", true); + option("selectionsMayTouch", false); + option("readOnly", false, function (cm, val) { + if (val == "nocursor") { + onBlur(cm); + cm.display.input.blur(); + } + cm.display.input.readOnlyChanged(val); + }); + option("screenReaderLabel", null, function (cm, val) { + val = val === '' ? null : val; + cm.display.input.screenReaderLabelChanged(val); + }); + option("disableInput", false, function (cm, val) { + if (!val) { + cm.display.input.reset(); + } + }, true); + option("dragDrop", true, dragDropChanged); + option("allowDropFileTypes", null); + option("cursorBlinkRate", 530); + option("cursorScrollMargin", 0); + option("cursorHeight", 1, updateSelection, true); + option("singleCursorHeightPerLine", true, updateSelection, true); + option("workTime", 100); + option("workDelay", 100); + option("flattenSpans", true, resetModeState, true); + option("addModeClass", false, resetModeState, true); + option("pollInterval", 100); + option("undoDepth", 200, function (cm, val) { + return cm.doc.history.undoDepth = val; + }); + option("historyEventDelay", 1250); + option("viewportMargin", 10, function (cm) { + return cm.refresh(); + }, true); + option("maxHighlightLength", 10000, resetModeState, true); + option("moveInputWithCursor", true, function (cm, val) { + if (!val) { + cm.display.input.resetPosition(); + } + }); + option("tabindex", null, function (cm, val) { + return cm.display.input.getField().tabIndex = val || ""; + }); + option("autofocus", null); + option("direction", "ltr", function (cm, val) { + return cm.doc.setDirection(val); + }, true); + option("phrases", null); + } + function dragDropChanged(cm, value, old) { + var wasOn = old && old != Init; + if (!value != !wasOn) { + var funcs = cm.display.dragFunctions; + var toggle = value ? on : off; + toggle(cm.display.scroller, "dragstart", funcs.start); + toggle(cm.display.scroller, "dragenter", funcs.enter); + toggle(cm.display.scroller, "dragover", funcs.over); + toggle(cm.display.scroller, "dragleave", funcs.leave); + toggle(cm.display.scroller, "drop", funcs.drop); + } + } + function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + addClass(cm.display.wrapper, "CodeMirror-wrap"); + cm.display.sizer.style.minWidth = ""; + cm.display.sizerWidth = null; + } else { + rmClass(cm.display.wrapper, "CodeMirror-wrap"); + findMaxLine(cm); + } + estimateLineHeights(cm); + regChange(cm); + clearCaches(cm); + setTimeout(function () { + return updateScrollbars(cm); + }, 100); + } + + // A CodeMirror instance represents an editor. This is the object + // that user code is usually dealing with. + + function CodeMirror(place, options) { + var this$1 = this; + if (!(this instanceof CodeMirror)) { + return new CodeMirror(place, options); + } + this.options = options = options ? copyObj(options) : {}; + // Determine effective options based on given values and defaults. + copyObj(defaults, options, false); + var doc = options.value; + if (typeof doc == "string") { + doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); + } else if (options.mode) { + doc.modeOption = options.mode; + } + this.doc = doc; + var input = new CodeMirror.inputStyles[options.inputStyle](this); + var display = this.display = new Display(place, doc, input, options); + display.wrapper.CodeMirror = this; + themeChanged(this); + if (options.lineWrapping) { + this.display.wrapper.className += " CodeMirror-wrap"; + } + initScrollbars(this); + this.state = { + keyMaps: [], + // stores maps added by addKeyMap + overlays: [], + // highlighting overlays, as added by addOverlay + modeGen: 0, + // bumped when mode/overlay changes, used to invalidate highlighting info + overwrite: false, + delayingBlurEvent: false, + focused: false, + suppressEdits: false, + // used to disable editing during key handlers when in readOnly mode + pasteIncoming: -1, + cutIncoming: -1, + // help recognize paste/cut edits in input.poll + selectingText: false, + draggingText: false, + highlight: new Delayed(), + // stores highlight worker timeout + keySeq: null, + // Unfinished key sequence + specialChars: null + }; + if (options.autofocus && !mobile) { + display.input.focus(); + } + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie && ie_version < 11) { + setTimeout(function () { + return this$1.display.input.reset(true); + }, 20); + } + registerEventHandlers(this); + ensureGlobalHandlers(); + startOperation(this); + this.curOp.forceUpdate = true; + attachDoc(this, doc); + if (options.autofocus && !mobile || this.hasFocus()) { + setTimeout(function () { + if (this$1.hasFocus() && !this$1.state.focused) { + onFocus(this$1); + } + }, 20); + } else { + onBlur(this); + } + for (var opt in optionHandlers) { + if (optionHandlers.hasOwnProperty(opt)) { + optionHandlers[opt](this, options[opt], Init); + } + } + maybeUpdateLineNumberWidth(this); + if (options.finishInit) { + options.finishInit(this); + } + for (var i = 0; i < initHooks.length; ++i) { + initHooks[i](this); + } + endOperation(this); + // Suppress optimizelegibility in Webkit, since it breaks text + // measuring on line wrapping boundaries. + if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") { + display.lineDiv.style.textRendering = "auto"; + } + } + + // The default configuration options. + CodeMirror.defaults = defaults; + // Functions to run when options are changed. + CodeMirror.optionHandlers = optionHandlers; + + // Attach the necessary event handlers when initializing the editor + function registerEventHandlers(cm) { + var d = cm.display; + on(d.scroller, "mousedown", operation(cm, onMouseDown)); + // Older IE's will not fire a second mousedown for a double click + if (ie && ie_version < 11) { + on(d.scroller, "dblclick", operation(cm, function (e) { + if (signalDOMEvent(cm, e)) { + return; + } + var pos = posFromMouse(cm, e); + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { + return; + } + e_preventDefault(e); + var word = cm.findWordAt(pos); + extendSelection(cm.doc, word.anchor, word.head); + })); + } else { + on(d.scroller, "dblclick", function (e) { + return signalDOMEvent(cm, e) || e_preventDefault(e); + }); + } + // Some browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for these browsers. + on(d.scroller, "contextmenu", function (e) { + return onContextMenu(cm, e); + }); + on(d.input.getField(), "contextmenu", function (e) { + if (!d.scroller.contains(e.target)) { + onContextMenu(cm, e); + } + }); + + // Used to suppress mouse event handling when a touch happens + var touchFinished, + prevTouch = { + end: 0 + }; + function finishTouch() { + if (d.activeTouch) { + touchFinished = setTimeout(function () { + return d.activeTouch = null; + }, 1000); + prevTouch = d.activeTouch; + prevTouch.end = +new Date(); + } + } + function isMouseLikeTouchEvent(e) { + if (e.touches.length != 1) { + return false; + } + var touch = e.touches[0]; + return touch.radiusX <= 1 && touch.radiusY <= 1; + } + function farAway(touch, other) { + if (other.left == null) { + return true; + } + var dx = other.left - touch.left, + dy = other.top - touch.top; + return dx * dx + dy * dy > 20 * 20; + } + on(d.scroller, "touchstart", function (e) { + if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) { + d.input.ensurePolled(); + clearTimeout(touchFinished); + var now = +new Date(); + d.activeTouch = { + start: now, + moved: false, + prev: now - prevTouch.end <= 300 ? prevTouch : null + }; + if (e.touches.length == 1) { + d.activeTouch.left = e.touches[0].pageX; + d.activeTouch.top = e.touches[0].pageY; + } + } + }); + on(d.scroller, "touchmove", function () { + if (d.activeTouch) { + d.activeTouch.moved = true; + } + }); + on(d.scroller, "touchend", function (e) { + var touch = d.activeTouch; + if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date() - touch.start < 300) { + var pos = cm.coordsChar(d.activeTouch, "page"), + range; + if (!touch.prev || farAway(touch, touch.prev)) + // Single tap + { + range = new Range(pos, pos); + } else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) + // Double tap + { + range = cm.findWordAt(pos); + } else + // Triple tap + { + range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); + } + cm.setSelection(range.anchor, range.head); + cm.focus(); + e_preventDefault(e); + } + finishTouch(); + }); + on(d.scroller, "touchcancel", finishTouch); + + // Sync scrolling between fake scrollbars and real scrollable + // area, ensure viewport is updated when scrolling. + on(d.scroller, "scroll", function () { + if (d.scroller.clientHeight) { + updateScrollTop(cm, d.scroller.scrollTop); + setScrollLeft(cm, d.scroller.scrollLeft, true); + signal(cm, "scroll", cm); + } + }); + + // Listen to wheel events in order to try and update the viewport on time. + on(d.scroller, "mousewheel", function (e) { + return onScrollWheel(cm, e); + }); + on(d.scroller, "DOMMouseScroll", function (e) { + return onScrollWheel(cm, e); + }); + + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function () { + return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; + }); + d.dragFunctions = { + enter: function (e) { + if (!signalDOMEvent(cm, e)) { + e_stop(e); + } + }, + over: function (e) { + if (!signalDOMEvent(cm, e)) { + onDragOver(cm, e); + e_stop(e); + } + }, + start: function (e) { + return onDragStart(cm, e); + }, + drop: operation(cm, onDrop), + leave: function (e) { + if (!signalDOMEvent(cm, e)) { + clearDragCursor(cm); + } + } + }; + var inp = d.input.getField(); + on(inp, "keyup", function (e) { + return onKeyUp.call(cm, e); + }); + on(inp, "keydown", operation(cm, onKeyDown)); + on(inp, "keypress", operation(cm, onKeyPress)); + on(inp, "focus", function (e) { + return onFocus(cm, e); + }); + on(inp, "blur", function (e) { + return onBlur(cm, e); + }); + } + var initHooks = []; + CodeMirror.defineInitHook = function (f) { + return initHooks.push(f); + }; + + // Indent the given line. The how parameter can be "smart", + // "add"/null, "subtract", or "prev". When aggressive is false + // (typically set to true for forced single-line indents), empty + // lines are not indented, and places where the mode returns Pass + // are left alone. + function indentLine(cm, n, how, aggressive) { + var doc = cm.doc, + state; + if (how == null) { + how = "add"; + } + if (how == "smart") { + // Fall back to "prev" when the mode doesn't have an indentation + // method. + if (!doc.mode.indent) { + how = "prev"; + } else { + state = getContextBefore(cm, n).state; + } + } + var tabSize = cm.options.tabSize; + var line = getLine(doc, n), + curSpace = countColumn(line.text, null, tabSize); + if (line.stateAfter) { + line.stateAfter = null; + } + var curSpaceString = line.text.match(/^\s*/)[0], + indentation; + if (!aggressive && !/\S/.test(line.text)) { + indentation = 0; + how = "not"; + } else if (how == "smart") { + indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass || indentation > 150) { + if (!aggressive) { + return; + } + how = "prev"; + } + } + if (how == "prev") { + if (n > doc.first) { + indentation = countColumn(getLine(doc, n - 1).text, null, tabSize); + } else { + indentation = 0; + } + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit; + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit; + } else if (typeof how == "number") { + indentation = curSpace + how; + } + indentation = Math.max(0, indentation); + var indentString = "", + pos = 0; + if (cm.options.indentWithTabs) { + for (var i = Math.floor(indentation / tabSize); i; --i) { + pos += tabSize; + indentString += "\t"; + } + } + if (pos < indentation) { + indentString += spaceStr(indentation - pos); + } + if (indentString != curSpaceString) { + replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); + line.stateAfter = null; + return true; + } else { + // Ensure that, if the cursor was in the whitespace at the start + // of the line, it is moved to the end of that space. + for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { + var range = doc.sel.ranges[i$1]; + if (range.head.line == n && range.head.ch < curSpaceString.length) { + var pos$1 = Pos(n, curSpaceString.length); + replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)); + break; + } + } + } + } + + // This will be set to a {lineWise: bool, text: [string]} object, so + // that, when pasting, we know what kind of selections the copied + // text was made out of. + var lastCopied = null; + function setLastCopied(newLastCopied) { + lastCopied = newLastCopied; + } + function applyTextInput(cm, inserted, deleted, sel, origin) { + var doc = cm.doc; + cm.display.shift = false; + if (!sel) { + sel = doc.sel; + } + var recent = +new Date() - 200; + var paste = origin == "paste" || cm.state.pasteIncoming > recent; + var textLines = splitLinesAuto(inserted), + multiPaste = null; + // When pasting N lines into N selections, insert one line per selection + if (paste && sel.ranges.length > 1) { + if (lastCopied && lastCopied.text.join("\n") == inserted) { + if (sel.ranges.length % lastCopied.text.length == 0) { + multiPaste = []; + for (var i = 0; i < lastCopied.text.length; i++) { + multiPaste.push(doc.splitLines(lastCopied.text[i])); + } + } + } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) { + multiPaste = map(textLines, function (l) { + return [l]; + }); + } + } + var updateInput = cm.curOp.updateInput; + // Normal behavior is to insert the new text into every selection + for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { + var range = sel.ranges[i$1]; + var from = range.from(), + to = range.to(); + if (range.empty()) { + if (deleted && deleted > 0) + // Handle deletion + { + from = Pos(from.line, from.ch - deleted); + } else if (cm.state.overwrite && !paste) + // Handle overwrite + { + to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); + } else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == textLines.join("\n")) { + from = to = Pos(from.line, 0); + } + } + var changeEvent = { + from: from, + to: to, + text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, + origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input") + }; + makeChange(cm.doc, changeEvent); + signalLater(cm, "inputRead", cm, changeEvent); + } + if (inserted && !paste) { + triggerElectric(cm, inserted); + } + ensureCursorVisible(cm); + if (cm.curOp.updateInput < 2) { + cm.curOp.updateInput = updateInput; + } + cm.curOp.typing = true; + cm.state.pasteIncoming = cm.state.cutIncoming = -1; + } + function handlePaste(e, cm) { + var pasted = e.clipboardData && e.clipboardData.getData("Text"); + if (pasted) { + e.preventDefault(); + if (!cm.isReadOnly() && !cm.options.disableInput) { + runInOp(cm, function () { + return applyTextInput(cm, pasted, 0, null, "paste"); + }); + } + return true; + } + } + function triggerElectric(cm, inserted) { + // When an 'electric' character is inserted, immediately trigger a reindent + if (!cm.options.electricChars || !cm.options.smartIndent) { + return; + } + var sel = cm.doc.sel; + for (var i = sel.ranges.length - 1; i >= 0; i--) { + var range = sel.ranges[i]; + if (range.head.ch > 100 || i && sel.ranges[i - 1].head.line == range.head.line) { + continue; + } + var mode = cm.getModeAt(range.head); + var indented = false; + if (mode.electricChars) { + for (var j = 0; j < mode.electricChars.length; j++) { + if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { + indented = indentLine(cm, range.head.line, "smart"); + break; + } + } + } else if (mode.electricInput) { + if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) { + indented = indentLine(cm, range.head.line, "smart"); + } + } + if (indented) { + signalLater(cm, "electricInput", cm, range.head.line); + } + } + } + function copyableRanges(cm) { + var text = [], + ranges = []; + for (var i = 0; i < cm.doc.sel.ranges.length; i++) { + var line = cm.doc.sel.ranges[i].head.line; + var lineRange = { + anchor: Pos(line, 0), + head: Pos(line + 1, 0) + }; + ranges.push(lineRange); + text.push(cm.getRange(lineRange.anchor, lineRange.head)); + } + return { + text: text, + ranges: ranges + }; + } + function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) { + field.setAttribute("autocorrect", autocorrect ? "" : "off"); + field.setAttribute("autocapitalize", autocapitalize ? "" : "off"); + field.setAttribute("spellcheck", !!spellcheck); + } + function hiddenTextarea() { + var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none"); + var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The textarea is kept positioned near the cursor to prevent the + // fact that it'll be scrolled into view on input from scrolling + // our fake cursor out of view. On webkit, when wrap=off, paste is + // very slow. So make the area wide instead. + if (webkit) { + te.style.width = "1000px"; + } else { + te.setAttribute("wrap", "off"); + } + // If border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) { + te.style.border = "1px solid black"; + } + disableBrowserMagic(te); + return div; + } + + // The publicly visible API. Note that methodOp(f) means + // 'wrap f in an operation, performed on its `this` parameter'. + + // This is not the complete set of editor methods. Most of the + // methods defined on the Doc type are also injected into + // CodeMirror.prototype, for backwards compatibility and + // convenience. + + function addEditorMethods(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers; + var helpers = CodeMirror.helpers = {}; + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function () { + window.focus(); + this.display.input.focus(); + }, + setOption: function (option, value) { + var options = this.options, + old = options[option]; + if (options[option] == value && option != "mode") { + return; + } + options[option] = value; + if (optionHandlers.hasOwnProperty(option)) { + operation(this, optionHandlers[option])(this, value, old); + } + signal(this, "optionChange", this, option); + }, + getOption: function (option) { + return this.options[option]; + }, + getDoc: function () { + return this.doc; + }, + addKeyMap: function (map, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); + }, + removeKeyMap: function (map) { + var maps = this.state.keyMaps; + for (var i = 0; i < maps.length; ++i) { + if (maps[i] == map || maps[i].name == map) { + maps.splice(i, 1); + return true; + } + } + }, + addOverlay: methodOp(function (spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); + if (mode.startState) { + throw new Error("Overlays may not be stateful."); + } + insertSorted(this.state.overlays, { + mode: mode, + modeSpec: spec, + opaque: options && options.opaque, + priority: options && options.priority || 0 + }, function (overlay) { + return overlay.priority; + }); + this.state.modeGen++; + regChange(this); + }), + removeOverlay: methodOp(function (spec) { + var overlays = this.state.overlays; + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec; + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1); + this.state.modeGen++; + regChange(this); + return; + } + } + }), + indentLine: methodOp(function (n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) { + dir = this.options.smartIndent ? "smart" : "prev"; + } else { + dir = dir ? "add" : "subtract"; + } + } + if (isLine(this.doc, n)) { + indentLine(this, n, dir, aggressive); + } + }), + indentSelection: methodOp(function (how) { + var ranges = this.doc.sel.ranges, + end = -1; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (!range.empty()) { + var from = range.from(), + to = range.to(); + var start = Math.max(end, from.line); + end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; + for (var j = start; j < end; ++j) { + indentLine(this, j, how); + } + var newRanges = this.doc.sel.ranges; + if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) { + replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); + } + } else if (range.head.line > end) { + indentLine(this, range.head.line, how, true); + end = range.head.line; + if (i == this.doc.sel.primIndex) { + ensureCursorVisible(this); + } + } + } + }), + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function (pos, precise) { + return takeToken(this, pos, precise); + }, + getLineTokens: function (line, precise) { + return takeToken(this, Pos(line), precise, true); + }, + getTokenTypeAt: function (pos) { + pos = clipPos(this.doc, pos); + var styles = getLineStyles(this, getLine(this.doc, pos.line)); + var before = 0, + after = (styles.length - 1) / 2, + ch = pos.ch; + var type; + if (ch == 0) { + type = styles[2]; + } else { + for (;;) { + var mid = before + after >> 1; + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { + after = mid; + } else if (styles[mid * 2 + 1] < ch) { + before = mid + 1; + } else { + type = styles[mid * 2 + 2]; + break; + } + } + } + var cut = type ? type.indexOf("overlay ") : -1; + return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); + }, + getModeAt: function (pos) { + var mode = this.doc.mode; + if (!mode.innerMode) { + return mode; + } + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; + }, + getHelper: function (pos, type) { + return this.getHelpers(pos, type)[0]; + }, + getHelpers: function (pos, type) { + var found = []; + if (!helpers.hasOwnProperty(type)) { + return found; + } + var help = helpers[type], + mode = this.getModeAt(pos); + if (typeof mode[type] == "string") { + if (help[mode[type]]) { + found.push(help[mode[type]]); + } + } else if (mode[type]) { + for (var i = 0; i < mode[type].length; i++) { + var val = help[mode[type][i]]; + if (val) { + found.push(val); + } + } + } else if (mode.helperType && help[mode.helperType]) { + found.push(help[mode.helperType]); + } else if (help[mode.name]) { + found.push(help[mode.name]); + } + for (var i$1 = 0; i$1 < help._global.length; i$1++) { + var cur = help._global[i$1]; + if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) { + found.push(cur.val); + } + } + return found; + }, + getStateAfter: function (line, precise) { + var doc = this.doc; + line = clipLine(doc, line == null ? doc.first + doc.size - 1 : line); + return getContextBefore(this, line + 1, precise).state; + }, + cursorCoords: function (start, mode) { + var pos, + range = this.doc.sel.primary(); + if (start == null) { + pos = range.head; + } else if (typeof start == "object") { + pos = clipPos(this.doc, start); + } else { + pos = start ? range.from() : range.to(); + } + return cursorCoords(this, pos, mode || "page"); + }, + charCoords: function (pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page"); + }, + coordsChar: function (coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page"); + return coordsChar(this, coords.left, coords.top); + }, + lineAtHeight: function (height, mode) { + height = fromCoordSystem(this, { + top: height, + left: 0 + }, mode || "page").top; + return lineAtHeight(this.doc, height + this.display.viewOffset); + }, + heightAtLine: function (line, mode, includeWidgets) { + var end = false, + lineObj; + if (typeof line == "number") { + var last = this.doc.first + this.doc.size - 1; + if (line < this.doc.first) { + line = this.doc.first; + } else if (line > last) { + line = last; + end = true; + } + lineObj = getLine(this.doc, line); + } else { + lineObj = line; + } + return intoCoordSystem(this, lineObj, { + top: 0, + left: 0 + }, mode || "page", includeWidgets || end).top + (end ? this.doc.height - heightAtLine(lineObj) : 0); + }, + defaultTextHeight: function () { + return textHeight(this.display); + }, + defaultCharWidth: function () { + return charWidth(this.display); + }, + getViewport: function () { + return { + from: this.display.viewFrom, + to: this.display.viewTo + }; + }, + addWidget: function (pos, node, scroll, vert, horiz) { + var display = this.display; + pos = cursorCoords(this, clipPos(this.doc, pos)); + var top = pos.bottom, + left = pos.left; + node.style.position = "absolute"; + node.setAttribute("cm-ignore-events", "true"); + this.display.input.setUneditable(node); + display.sizer.appendChild(node); + if (vert == "over") { + top = pos.top; + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) { + top = pos.top - node.offsetHeight; + } else if (pos.bottom + node.offsetHeight <= vspace) { + top = pos.bottom; + } + if (left + node.offsetWidth > hspace) { + left = hspace - node.offsetWidth; + } + } + node.style.top = top + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") { + left = 0; + } else if (horiz == "middle") { + left = (display.sizer.clientWidth - node.offsetWidth) / 2; + } + node.style.left = left + "px"; + } + if (scroll) { + scrollIntoView(this, { + left: left, + top: top, + right: left + node.offsetWidth, + bottom: top + node.offsetHeight + }); + } + }, + triggerOnKeyDown: methodOp(onKeyDown), + triggerOnKeyPress: methodOp(onKeyPress), + triggerOnKeyUp: onKeyUp, + triggerOnMouseDown: methodOp(onMouseDown), + execCommand: function (cmd) { + if (commands.hasOwnProperty(cmd)) { + return commands[cmd].call(null, this); + } + }, + triggerElectric: methodOp(function (text) { + triggerElectric(this, text); + }), + findPosH: function (from, amount, unit, visually) { + var dir = 1; + if (amount < 0) { + dir = -1; + amount = -amount; + } + var cur = clipPos(this.doc, from); + for (var i = 0; i < amount; ++i) { + cur = findPosH(this.doc, cur, dir, unit, visually); + if (cur.hitSide) { + break; + } + } + return cur; + }, + moveH: methodOp(function (dir, unit) { + var this$1 = this; + this.extendSelectionsBy(function (range) { + if (this$1.display.shift || this$1.doc.extend || range.empty()) { + return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually); + } else { + return dir < 0 ? range.from() : range.to(); + } + }, sel_move); + }), + deleteH: methodOp(function (dir, unit) { + var sel = this.doc.sel, + doc = this.doc; + if (sel.somethingSelected()) { + doc.replaceSelection("", null, "+delete"); + } else { + deleteNearSelection(this, function (range) { + var other = findPosH(doc, range.head, dir, unit, false); + return dir < 0 ? { + from: other, + to: range.head + } : { + from: range.head, + to: other + }; + }); + } + }), + findPosV: function (from, amount, unit, goalColumn) { + var dir = 1, + x = goalColumn; + if (amount < 0) { + dir = -1; + amount = -amount; + } + var cur = clipPos(this.doc, from); + for (var i = 0; i < amount; ++i) { + var coords = cursorCoords(this, cur, "div"); + if (x == null) { + x = coords.left; + } else { + coords.left = x; + } + cur = findPosV(this, coords, dir, unit); + if (cur.hitSide) { + break; + } + } + return cur; + }, + moveV: methodOp(function (dir, unit) { + var this$1 = this; + var doc = this.doc, + goals = []; + var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected(); + doc.extendSelectionsBy(function (range) { + if (collapse) { + return dir < 0 ? range.from() : range.to(); + } + var headPos = cursorCoords(this$1, range.head, "div"); + if (range.goalColumn != null) { + headPos.left = range.goalColumn; + } + goals.push(headPos.left); + var pos = findPosV(this$1, headPos, dir, unit); + if (unit == "page" && range == doc.sel.primary()) { + addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); + } + return pos; + }, sel_move); + if (goals.length) { + for (var i = 0; i < doc.sel.ranges.length; i++) { + doc.sel.ranges[i].goalColumn = goals[i]; + } + } + }), + // Find the word at the given position (as returned by coordsChar). + findWordAt: function (pos) { + var doc = this.doc, + line = getLine(doc, pos.line).text; + var start = pos.ch, + end = pos.ch; + if (line) { + var helper = this.getHelper(pos, "wordChars"); + if ((pos.sticky == "before" || end == line.length) && start) { + --start; + } else { + ++end; + } + var startChar = line.charAt(start); + var check = isWordChar(startChar, helper) ? function (ch) { + return isWordChar(ch, helper); + } : /\s/.test(startChar) ? function (ch) { + return /\s/.test(ch); + } : function (ch) { + return !/\s/.test(ch) && !isWordChar(ch); + }; + while (start > 0 && check(line.charAt(start - 1))) { + --start; + } + while (end < line.length && check(line.charAt(end))) { + ++end; + } + } + return new Range(Pos(pos.line, start), Pos(pos.line, end)); + }, + toggleOverwrite: function (value) { + if (value != null && value == this.state.overwrite) { + return; + } + if (this.state.overwrite = !this.state.overwrite) { + addClass(this.display.cursorDiv, "CodeMirror-overwrite"); + } else { + rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); + } + signal(this, "overwriteToggle", this, this.state.overwrite); + }, + hasFocus: function () { + return this.display.input.getField() == activeElt(); + }, + isReadOnly: function () { + return !!(this.options.readOnly || this.doc.cantEdit); + }, + scrollTo: methodOp(function (x, y) { + scrollToCoords(this, x, y); + }), + getScrollInfo: function () { + var scroller = this.display.scroller; + return { + left: scroller.scrollLeft, + top: scroller.scrollTop, + height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, + width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, + clientHeight: displayHeight(this), + clientWidth: displayWidth(this) + }; + }, + scrollIntoView: methodOp(function (range, margin) { + if (range == null) { + range = { + from: this.doc.sel.primary().head, + to: null + }; + if (margin == null) { + margin = this.options.cursorScrollMargin; + } + } else if (typeof range == "number") { + range = { + from: Pos(range, 0), + to: null + }; + } else if (range.from == null) { + range = { + from: range, + to: null + }; + } + if (!range.to) { + range.to = range.from; + } + range.margin = margin || 0; + if (range.from.line != null) { + scrollToRange(this, range); + } else { + scrollToCoordsRange(this, range.from, range.to, range.margin); + } + }), + setSize: methodOp(function (width, height) { + var this$1 = this; + var interpret = function (val) { + return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; + }; + if (width != null) { + this.display.wrapper.style.width = interpret(width); + } + if (height != null) { + this.display.wrapper.style.height = interpret(height); + } + if (this.options.lineWrapping) { + clearLineMeasurementCache(this); + } + var lineNo = this.display.viewFrom; + this.doc.iter(lineNo, this.display.viewTo, function (line) { + if (line.widgets) { + for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].noHScroll) { + regLineChange(this$1, lineNo, "widget"); + break; + } + } + } + ++lineNo; + }); + this.curOp.forceUpdate = true; + signal(this, "refresh", this); + }), + operation: function (f) { + return runInOp(this, f); + }, + startOperation: function () { + return startOperation(this); + }, + endOperation: function () { + return endOperation(this); + }, + refresh: methodOp(function () { + var oldHeight = this.display.cachedTextHeight; + regChange(this); + this.curOp.forceUpdate = true; + clearCaches(this); + scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop); + updateGutterSpace(this.display); + if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping) { + estimateLineHeights(this); + } + signal(this, "refresh", this); + }), + swapDoc: methodOp(function (doc) { + var old = this.doc; + old.cm = null; + // Cancel the current text selection if any (#5821) + if (this.state.selectingText) { + this.state.selectingText(); + } + attachDoc(this, doc); + clearCaches(this); + this.display.input.reset(); + scrollToCoords(this, doc.scrollLeft, doc.scrollTop); + this.curOp.forceScroll = true; + signalLater(this, "swapDoc", this, old); + return old; + }), + phrase: function (phraseText) { + var phrases = this.options.phrases; + return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText; + }, + getInputField: function () { + return this.display.input.getField(); + }, + getWrapperElement: function () { + return this.display.wrapper; + }, + getScrollerElement: function () { + return this.display.scroller; + }, + getGutterElement: function () { + return this.display.gutters; + } + }; + eventMixin(CodeMirror); + CodeMirror.registerHelper = function (type, name, value) { + if (!helpers.hasOwnProperty(type)) { + helpers[type] = CodeMirror[type] = { + _global: [] + }; + } + helpers[type][name] = value; + }; + CodeMirror.registerGlobalHelper = function (type, name, predicate, value) { + CodeMirror.registerHelper(type, name, value); + helpers[type]._global.push({ + pred: predicate, + val: value + }); + }; + } + + // Used for horizontal relative motion. Dir is -1 or 1 (left or + // right), unit can be "codepoint", "char", "column" (like char, but + // doesn't cross line boundaries), "word" (across next word), or + // "group" (to the start of next group of word or + // non-word-non-whitespace chars). The visually param controls + // whether, in right-to-left text, direction 1 means to move towards + // the next index in the string, or towards the character to the right + // of the current position. The resulting position will have a + // hitSide=true property if it reached the end of the document. + function findPosH(doc, pos, dir, unit, visually) { + var oldPos = pos; + var origDir = dir; + var lineObj = getLine(doc, pos.line); + var lineDir = visually && doc.direction == "rtl" ? -dir : dir; + function findNextLine() { + var l = pos.line + lineDir; + if (l < doc.first || l >= doc.first + doc.size) { + return false; + } + pos = new Pos(l, pos.ch, pos.sticky); + return lineObj = getLine(doc, l); + } + function moveOnce(boundToLine) { + var next; + if (unit == "codepoint") { + var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1)); + if (isNaN(ch)) { + next = null; + } else { + var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF; + next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir); + } + } else if (visually) { + next = moveVisually(doc.cm, lineObj, pos, dir); + } else { + next = moveLogically(lineObj, pos, dir); + } + if (next == null) { + if (!boundToLine && findNextLine()) { + pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); + } else { + return false; + } + } else { + pos = next; + } + return true; + } + if (unit == "char" || unit == "codepoint") { + moveOnce(); + } else if (unit == "column") { + moveOnce(true); + } else if (unit == "word" || unit == "group") { + var sawType = null, + group = unit == "group"; + var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) { + break; + } + var cur = lineObj.text.charAt(pos.ch) || "\n"; + var type = isWordChar(cur, helper) ? "w" : group && cur == "\n" ? "n" : !group || /\s/.test(cur) ? null : "p"; + if (group && !first && !type) { + type = "s"; + } + if (sawType && sawType != type) { + if (dir < 0) { + dir = 1; + moveOnce(); + pos.sticky = "after"; + } + break; + } + if (type) { + sawType = type; + } + if (dir > 0 && !moveOnce(!first)) { + break; + } + } + } + var result = skipAtomic(doc, pos, oldPos, origDir, true); + if (equalCursorPos(oldPos, result)) { + result.hitSide = true; + } + return result; + } + + // For relative vertical movement. Dir may be -1 or 1. Unit can be + // "page" or "line". The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, + x = pos.left, + y; + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); + var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3); + y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3; + } + var target; + for (;;) { + target = coordsChar(cm, x, y); + if (!target.outside) { + break; + } + if (dir < 0 ? y <= 0 : y >= doc.height) { + target.hitSide = true; + break; + } + y += dir * 5; + } + return target; + } + + // CONTENTEDITABLE INPUT STYLE + + var ContentEditableInput = function (cm) { + this.cm = cm; + this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; + this.polling = new Delayed(); + this.composing = null; + this.gracePeriod = false; + this.readDOMTimeout = null; + }; + ContentEditableInput.prototype.init = function (display) { + var this$1 = this; + var input = this, + cm = input.cm; + var div = input.div = display.lineDiv; + div.contentEditable = true; + disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize); + function belongsToInput(e) { + for (var t = e.target; t; t = t.parentNode) { + if (t == div) { + return true; + } + if (/\bCodeMirror-(?:line)?widget\b/.test(t.className)) { + break; + } + } + return false; + } + on(div, "paste", function (e) { + if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { + return; + } + // IE doesn't fire input events, so we schedule a read for the pasted content in this way + if (ie_version <= 11) { + setTimeout(operation(cm, function () { + return this$1.updateFromDOM(); + }), 20); + } + }); + on(div, "compositionstart", function (e) { + this$1.composing = { + data: e.data, + done: false + }; + }); + on(div, "compositionupdate", function (e) { + if (!this$1.composing) { + this$1.composing = { + data: e.data, + done: false + }; + } + }); + on(div, "compositionend", function (e) { + if (this$1.composing) { + if (e.data != this$1.composing.data) { + this$1.readFromDOMSoon(); + } + this$1.composing.done = true; + } + }); + on(div, "touchstart", function () { + return input.forceCompositionEnd(); + }); + on(div, "input", function () { + if (!this$1.composing) { + this$1.readFromDOMSoon(); + } + }); + function onCopyCut(e) { + if (!belongsToInput(e) || signalDOMEvent(cm, e)) { + return; + } + if (cm.somethingSelected()) { + setLastCopied({ + lineWise: false, + text: cm.getSelections() + }); + if (e.type == "cut") { + cm.replaceSelection("", null, "cut"); + } + } else if (!cm.options.lineWiseCopyCut) { + return; + } else { + var ranges = copyableRanges(cm); + setLastCopied({ + lineWise: true, + text: ranges.text + }); + if (e.type == "cut") { + cm.operation(function () { + cm.setSelections(ranges.ranges, 0, sel_dontScroll); + cm.replaceSelection("", null, "cut"); + }); + } + } + if (e.clipboardData) { + e.clipboardData.clearData(); + var content = lastCopied.text.join("\n"); + // iOS exposes the clipboard API, but seems to discard content inserted into it + e.clipboardData.setData("Text", content); + if (e.clipboardData.getData("Text") == content) { + e.preventDefault(); + return; + } + } + // Old-fashioned briefly-focus-a-textarea hack + var kludge = hiddenTextarea(), + te = kludge.firstChild; + cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); + te.value = lastCopied.text.join("\n"); + var hadFocus = activeElt(); + selectInput(te); + setTimeout(function () { + cm.display.lineSpace.removeChild(kludge); + hadFocus.focus(); + if (hadFocus == div) { + input.showPrimarySelection(); + } + }, 50); + } + on(div, "copy", onCopyCut); + on(div, "cut", onCopyCut); + }; + ContentEditableInput.prototype.screenReaderLabelChanged = function (label) { + // Label for screenreaders, accessibility + if (label) { + this.div.setAttribute('aria-label', label); + } else { + this.div.removeAttribute('aria-label'); + } + }; + ContentEditableInput.prototype.prepareSelection = function () { + var result = prepareSelection(this.cm, false); + result.focus = activeElt() == this.div; + return result; + }; + ContentEditableInput.prototype.showSelection = function (info, takeFocus) { + if (!info || !this.cm.display.view.length) { + return; + } + if (info.focus || takeFocus) { + this.showPrimarySelection(); + } + this.showMultipleSelections(info); + }; + ContentEditableInput.prototype.getSelection = function () { + return this.cm.display.wrapper.ownerDocument.getSelection(); + }; + ContentEditableInput.prototype.showPrimarySelection = function () { + var sel = this.getSelection(), + cm = this.cm, + prim = cm.doc.sel.primary(); + var from = prim.from(), + to = prim.to(); + if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { + sel.removeAllRanges(); + return; + } + var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset); + if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), from) == 0 && cmp(maxPos(curAnchor, curFocus), to) == 0) { + return; + } + var view = cm.display.view; + var start = from.line >= cm.display.viewFrom && posToDOM(cm, from) || { + node: view[0].measure.map[2], + offset: 0 + }; + var end = to.line < cm.display.viewTo && posToDOM(cm, to); + if (!end) { + var measure = view[view.length - 1].measure; + var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; + end = { + node: map[map.length - 1], + offset: map[map.length - 2] - map[map.length - 3] + }; + } + if (!start || !end) { + sel.removeAllRanges(); + return; + } + var old = sel.rangeCount && sel.getRangeAt(0), + rng; + try { + rng = range(start.node, start.offset, end.offset, end.node); + } catch (e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible + if (rng) { + if (!gecko && cm.state.focused) { + sel.collapse(start.node, start.offset); + if (!rng.collapsed) { + sel.removeAllRanges(); + sel.addRange(rng); + } + } else { + sel.removeAllRanges(); + sel.addRange(rng); + } + if (old && sel.anchorNode == null) { + sel.addRange(old); + } else if (gecko) { + this.startGracePeriod(); + } + } + this.rememberSelection(); + }; + ContentEditableInput.prototype.startGracePeriod = function () { + var this$1 = this; + clearTimeout(this.gracePeriod); + this.gracePeriod = setTimeout(function () { + this$1.gracePeriod = false; + if (this$1.selectionChanged()) { + this$1.cm.operation(function () { + return this$1.cm.curOp.selectionChanged = true; + }); + } + }, 20); + }; + ContentEditableInput.prototype.showMultipleSelections = function (info) { + removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); + removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); + }; + ContentEditableInput.prototype.rememberSelection = function () { + var sel = this.getSelection(); + this.lastAnchorNode = sel.anchorNode; + this.lastAnchorOffset = sel.anchorOffset; + this.lastFocusNode = sel.focusNode; + this.lastFocusOffset = sel.focusOffset; + }; + ContentEditableInput.prototype.selectionInEditor = function () { + var sel = this.getSelection(); + if (!sel.rangeCount) { + return false; + } + var node = sel.getRangeAt(0).commonAncestorContainer; + return contains(this.div, node); + }; + ContentEditableInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor") { + if (!this.selectionInEditor() || activeElt() != this.div) { + this.showSelection(this.prepareSelection(), true); + } + this.div.focus(); + } + }; + ContentEditableInput.prototype.blur = function () { + this.div.blur(); + }; + ContentEditableInput.prototype.getField = function () { + return this.div; + }; + ContentEditableInput.prototype.supportsTouch = function () { + return true; + }; + ContentEditableInput.prototype.receivedFocus = function () { + var this$1 = this; + var input = this; + if (this.selectionInEditor()) { + setTimeout(function () { + return this$1.pollSelection(); + }, 20); + } else { + runInOp(this.cm, function () { + return input.cm.curOp.selectionChanged = true; + }); + } + function poll() { + if (input.cm.state.focused) { + input.pollSelection(); + input.polling.set(input.cm.options.pollInterval, poll); + } + } + this.polling.set(this.cm.options.pollInterval, poll); + }; + ContentEditableInput.prototype.selectionChanged = function () { + var sel = this.getSelection(); + return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset; + }; + ContentEditableInput.prototype.pollSelection = function () { + if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { + return; + } + var sel = this.getSelection(), + cm = this.cm; + // On Android Chrome (version 56, at least), backspacing into an + // uneditable block element will put the cursor in that element, + // and then, because it's not editable, hide the virtual keyboard. + // Because Android doesn't allow us to actually detect backspace + // presses in a sane way, this code checks for when that happens + // and simulates a backspace press in this case. + if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) { + this.cm.triggerOnKeyDown({ + type: "keydown", + keyCode: 8, + preventDefault: Math.abs + }); + this.blur(); + this.focus(); + return; + } + if (this.composing) { + return; + } + this.rememberSelection(); + var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var head = domToPos(cm, sel.focusNode, sel.focusOffset); + if (anchor && head) { + runInOp(cm, function () { + setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); + if (anchor.bad || head.bad) { + cm.curOp.selectionChanged = true; + } + }); + } + }; + ContentEditableInput.prototype.pollContent = function () { + if (this.readDOMTimeout != null) { + clearTimeout(this.readDOMTimeout); + this.readDOMTimeout = null; + } + var cm = this.cm, + display = cm.display, + sel = cm.doc.sel.primary(); + var from = sel.from(), + to = sel.to(); + if (from.ch == 0 && from.line > cm.firstLine()) { + from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); + } + if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) { + to = Pos(to.line + 1, 0); + } + if (from.line < display.viewFrom || to.line > display.viewTo - 1) { + return false; + } + var fromIndex, fromLine, fromNode; + if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { + fromLine = lineNo(display.view[0].line); + fromNode = display.view[0].node; + } else { + fromLine = lineNo(display.view[fromIndex].line); + fromNode = display.view[fromIndex - 1].node.nextSibling; + } + var toIndex = findViewIndex(cm, to.line); + var toLine, toNode; + if (toIndex == display.view.length - 1) { + toLine = display.viewTo - 1; + toNode = display.lineDiv.lastChild; + } else { + toLine = lineNo(display.view[toIndex + 1].line) - 1; + toNode = display.view[toIndex + 1].node.previousSibling; + } + if (!fromNode) { + return false; + } + var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); + var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); + while (newText.length > 1 && oldText.length > 1) { + if (lst(newText) == lst(oldText)) { + newText.pop(); + oldText.pop(); + toLine--; + } else if (newText[0] == oldText[0]) { + newText.shift(); + oldText.shift(); + fromLine++; + } else { + break; + } + } + var cutFront = 0, + cutEnd = 0; + var newTop = newText[0], + oldTop = oldText[0], + maxCutFront = Math.min(newTop.length, oldTop.length); + while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) { + ++cutFront; + } + var newBot = lst(newText), + oldBot = lst(oldText); + var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0)); + while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { + ++cutEnd; + } + // Try to move start of change to start of selection if ambiguous + if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { + while (cutFront && cutFront > from.ch && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { + cutFront--; + cutEnd++; + } + } + newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, ""); + newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, ""); + var chFrom = Pos(fromLine, cutFront); + var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); + if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { + replaceRange(cm.doc, newText, chFrom, chTo, "+input"); + return true; + } + }; + ContentEditableInput.prototype.ensurePolled = function () { + this.forceCompositionEnd(); + }; + ContentEditableInput.prototype.reset = function () { + this.forceCompositionEnd(); + }; + ContentEditableInput.prototype.forceCompositionEnd = function () { + if (!this.composing) { + return; + } + clearTimeout(this.readDOMTimeout); + this.composing = null; + this.updateFromDOM(); + this.div.blur(); + this.div.focus(); + }; + ContentEditableInput.prototype.readFromDOMSoon = function () { + var this$1 = this; + if (this.readDOMTimeout != null) { + return; + } + this.readDOMTimeout = setTimeout(function () { + this$1.readDOMTimeout = null; + if (this$1.composing) { + if (this$1.composing.done) { + this$1.composing = null; + } else { + return; + } + } + this$1.updateFromDOM(); + }, 80); + }; + ContentEditableInput.prototype.updateFromDOM = function () { + var this$1 = this; + if (this.cm.isReadOnly() || !this.pollContent()) { + runInOp(this.cm, function () { + return regChange(this$1.cm); + }); + } + }; + ContentEditableInput.prototype.setUneditable = function (node) { + node.contentEditable = "false"; + }; + ContentEditableInput.prototype.onKeyPress = function (e) { + if (e.charCode == 0 || this.composing) { + return; + } + e.preventDefault(); + if (!this.cm.isReadOnly()) { + operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); + } + }; + ContentEditableInput.prototype.readOnlyChanged = function (val) { + this.div.contentEditable = String(val != "nocursor"); + }; + ContentEditableInput.prototype.onContextMenu = function () {}; + ContentEditableInput.prototype.resetPosition = function () {}; + ContentEditableInput.prototype.needsContentAttribute = true; + function posToDOM(cm, pos) { + var view = findViewForLine(cm, pos.line); + if (!view || view.hidden) { + return null; + } + var line = getLine(cm.doc, pos.line); + var info = mapFromLineView(view, line, pos.line); + var order = getOrder(line, cm.doc.direction), + side = "left"; + if (order) { + var partPos = getBidiPartAt(order, pos.ch); + side = partPos % 2 ? "right" : "left"; + } + var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); + result.offset = result.collapse == "right" ? result.end : result.start; + return result; + } + function isInGutter(node) { + for (var scan = node; scan; scan = scan.parentNode) { + if (/CodeMirror-gutter-wrapper/.test(scan.className)) { + return true; + } + } + return false; + } + function badPos(pos, bad) { + if (bad) { + pos.bad = true; + } + return pos; + } + function domTextBetween(cm, from, to, fromLine, toLine) { + var text = "", + closing = false, + lineSep = cm.doc.lineSeparator(), + extraLinebreak = false; + function recognizeMarker(id) { + return function (marker) { + return marker.id == id; + }; + } + function close() { + if (closing) { + text += lineSep; + if (extraLinebreak) { + text += lineSep; + } + closing = extraLinebreak = false; + } + } + function addText(str) { + if (str) { + close(); + text += str; + } + } + function walk(node) { + if (node.nodeType == 1) { + var cmText = node.getAttribute("cm-text"); + if (cmText) { + addText(cmText); + return; + } + var markerID = node.getAttribute("cm-marker"), + range; + if (markerID) { + var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); + if (found.length && (range = found[0].find(0))) { + addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); + } + return; + } + if (node.getAttribute("contenteditable") == "false") { + return; + } + var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName); + if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { + return; + } + if (isBlock) { + close(); + } + for (var i = 0; i < node.childNodes.length; i++) { + walk(node.childNodes[i]); + } + if (/^(pre|p)$/i.test(node.nodeName)) { + extraLinebreak = true; + } + if (isBlock) { + closing = true; + } + } else if (node.nodeType == 3) { + addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")); + } + } + for (;;) { + walk(from); + if (from == to) { + break; + } + from = from.nextSibling; + extraLinebreak = false; + } + return text; + } + function domToPos(cm, node, offset) { + var lineNode; + if (node == cm.display.lineDiv) { + lineNode = cm.display.lineDiv.childNodes[offset]; + if (!lineNode) { + return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); + } + node = null; + offset = 0; + } else { + for (lineNode = node;; lineNode = lineNode.parentNode) { + if (!lineNode || lineNode == cm.display.lineDiv) { + return null; + } + if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { + break; + } + } + } + for (var i = 0; i < cm.display.view.length; i++) { + var lineView = cm.display.view[i]; + if (lineView.node == lineNode) { + return locateNodeInLineView(lineView, node, offset); + } + } + } + function locateNodeInLineView(lineView, node, offset) { + var wrapper = lineView.text.firstChild, + bad = false; + if (!node || !contains(wrapper, node)) { + return badPos(Pos(lineNo(lineView.line), 0), true); + } + if (node == wrapper) { + bad = true; + node = wrapper.childNodes[offset]; + offset = 0; + if (!node) { + var line = lineView.rest ? lst(lineView.rest) : lineView.line; + return badPos(Pos(lineNo(line), line.text.length), bad); + } + } + var textNode = node.nodeType == 3 ? node : null, + topNode = node; + if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { + textNode = node.firstChild; + if (offset) { + offset = textNode.nodeValue.length; + } + } + while (topNode.parentNode != wrapper) { + topNode = topNode.parentNode; + } + var measure = lineView.measure, + maps = measure.maps; + function find(textNode, topNode, offset) { + for (var i = -1; i < (maps ? maps.length : 0); i++) { + var map = i < 0 ? measure.map : maps[i]; + for (var j = 0; j < map.length; j += 3) { + var curNode = map[j + 2]; + if (curNode == textNode || curNode == topNode) { + var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); + var ch = map[j] + offset; + if (offset < 0 || curNode != textNode) { + ch = map[j + (offset ? 1 : 0)]; + } + return Pos(line, ch); + } + } + } + } + var found = find(textNode, topNode, offset); + if (found) { + return badPos(found, bad); + } + + // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems + for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { + found = find(after, after.firstChild, 0); + if (found) { + return badPos(Pos(found.line, found.ch - dist), bad); + } else { + dist += after.textContent.length; + } + } + for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { + found = find(before, before.firstChild, -1); + if (found) { + return badPos(Pos(found.line, found.ch + dist$1), bad); + } else { + dist$1 += before.textContent.length; + } + } + } + + // TEXTAREA INPUT STYLE + + var TextareaInput = function (cm) { + this.cm = cm; + // See input.poll and input.reset + this.prevInput = ""; + + // Flag that indicates whether we expect input to appear real soon + // now (after some event like 'keypress' or 'input') and are + // polling intensively. + this.pollingFast = false; + // Self-resetting timeout for the poller + this.polling = new Delayed(); + // Used to work around IE issue with selection being forgotten when focus moves away from textarea + this.hasSelection = false; + this.composing = null; + }; + TextareaInput.prototype.init = function (display) { + var this$1 = this; + var input = this, + cm = this.cm; + this.createField(display); + var te = this.textarea; + display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); + + // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) + if (ios) { + te.style.width = "0px"; + } + on(te, "input", function () { + if (ie && ie_version >= 9 && this$1.hasSelection) { + this$1.hasSelection = null; + } + input.poll(); + }); + on(te, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { + return; + } + cm.state.pasteIncoming = +new Date(); + input.fastPoll(); + }); + function prepareCopyCut(e) { + if (signalDOMEvent(cm, e)) { + return; + } + if (cm.somethingSelected()) { + setLastCopied({ + lineWise: false, + text: cm.getSelections() + }); + } else if (!cm.options.lineWiseCopyCut) { + return; + } else { + var ranges = copyableRanges(cm); + setLastCopied({ + lineWise: true, + text: ranges.text + }); + if (e.type == "cut") { + cm.setSelections(ranges.ranges, null, sel_dontScroll); + } else { + input.prevInput = ""; + te.value = ranges.text.join("\n"); + selectInput(te); + } + } + if (e.type == "cut") { + cm.state.cutIncoming = +new Date(); + } + } + on(te, "cut", prepareCopyCut); + on(te, "copy", prepareCopyCut); + on(display.scroller, "paste", function (e) { + if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { + return; + } + if (!te.dispatchEvent) { + cm.state.pasteIncoming = +new Date(); + input.focus(); + return; + } + + // Pass the `paste` event to the textarea so it's handled by its event listener. + var event = new Event("paste"); + event.clipboardData = e.clipboardData; + te.dispatchEvent(event); + }); + + // Prevent normal selection in the editor (we handle our own) + on(display.lineSpace, "selectstart", function (e) { + if (!eventInWidget(display, e)) { + e_preventDefault(e); + } + }); + on(te, "compositionstart", function () { + var start = cm.getCursor("from"); + if (input.composing) { + input.composing.range.clear(); + } + input.composing = { + start: start, + range: cm.markText(start, cm.getCursor("to"), { + className: "CodeMirror-composing" + }) + }; + }); + on(te, "compositionend", function () { + if (input.composing) { + input.poll(); + input.composing.range.clear(); + input.composing = null; + } + }); + }; + TextareaInput.prototype.createField = function (_display) { + // Wraps and hides input textarea + this.wrapper = hiddenTextarea(); + // The semihidden textarea that is focused when the editor is + // focused, and receives input. + this.textarea = this.wrapper.firstChild; + }; + TextareaInput.prototype.screenReaderLabelChanged = function (label) { + // Label for screenreaders, accessibility + if (label) { + this.textarea.setAttribute('aria-label', label); + } else { + this.textarea.removeAttribute('aria-label'); + } + }; + TextareaInput.prototype.prepareSelection = function () { + // Redraw the selection and/or cursor + var cm = this.cm, + display = cm.display, + doc = cm.doc; + var result = prepareSelection(cm); + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); + var wrapOff = display.wrapper.getBoundingClientRect(), + lineOff = display.lineDiv.getBoundingClientRect(); + result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top)); + result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left)); + } + return result; + }; + TextareaInput.prototype.showSelection = function (drawn) { + var cm = this.cm, + display = cm.display; + removeChildrenAndAdd(display.cursorDiv, drawn.cursors); + removeChildrenAndAdd(display.selectionDiv, drawn.selection); + if (drawn.teTop != null) { + this.wrapper.style.top = drawn.teTop + "px"; + this.wrapper.style.left = drawn.teLeft + "px"; + } + }; + + // Reset the input to correspond to the selection (or to be empty, + // when not typing and nothing is selected) + TextareaInput.prototype.reset = function (typing) { + if (this.contextMenuPending || this.composing) { + return; + } + var cm = this.cm; + if (cm.somethingSelected()) { + this.prevInput = ""; + var content = cm.getSelection(); + this.textarea.value = content; + if (cm.state.focused) { + selectInput(this.textarea); + } + if (ie && ie_version >= 9) { + this.hasSelection = content; + } + } else if (!typing) { + this.prevInput = this.textarea.value = ""; + if (ie && ie_version >= 9) { + this.hasSelection = null; + } + } + }; + TextareaInput.prototype.getField = function () { + return this.textarea; + }; + TextareaInput.prototype.supportsTouch = function () { + return false; + }; + TextareaInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { + try { + this.textarea.focus(); + } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM + } + }; + TextareaInput.prototype.blur = function () { + this.textarea.blur(); + }; + TextareaInput.prototype.resetPosition = function () { + this.wrapper.style.top = this.wrapper.style.left = 0; + }; + TextareaInput.prototype.receivedFocus = function () { + this.slowPoll(); + }; + + // Poll for input changes, using the normal rate of polling. This + // runs as long as the editor is focused. + TextareaInput.prototype.slowPoll = function () { + var this$1 = this; + if (this.pollingFast) { + return; + } + this.polling.set(this.cm.options.pollInterval, function () { + this$1.poll(); + if (this$1.cm.state.focused) { + this$1.slowPoll(); + } + }); + }; + + // When an event has just come in that is likely to add or change + // something in the input textarea, we poll faster, to ensure that + // the change appears on the screen quickly. + TextareaInput.prototype.fastPoll = function () { + var missed = false, + input = this; + input.pollingFast = true; + function p() { + var changed = input.poll(); + if (!changed && !missed) { + missed = true; + input.polling.set(60, p); + } else { + input.pollingFast = false; + input.slowPoll(); + } + } + input.polling.set(20, p); + }; + + // Read input from the textarea, and update the document to match. + // When something is selected, it is present in the textarea, and + // selected (unless it is huge, in which case a placeholder is + // used). When nothing is selected, the cursor sits after previously + // seen text (can be empty), which is stored in prevInput (we must + // not reset the textarea when typing, because that breaks IME). + TextareaInput.prototype.poll = function () { + var this$1 = this; + var cm = this.cm, + input = this.textarea, + prevInput = this.prevInput; + // Since this is called a *lot*, try to bail out as cheaply as + // possible when it is clear that nothing happened. hasSelection + // will be the case when there is a lot of text in the textarea, + // in which case reading its value would be expensive. + if (this.contextMenuPending || !cm.state.focused || hasSelection(input) && !prevInput && !this.composing || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) { + return false; + } + var text = input.value; + // If nothing changed, bail. + if (text == prevInput && !cm.somethingSelected()) { + return false; + } + // Work around nonsensical selection resetting in IE9/10, and + // inexplicable appearance of private area unicode characters on + // some key combos in Mac (#2689). + if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\uf700-\uf7ff]/.test(text)) { + cm.display.input.reset(); + return false; + } + if (cm.doc.sel == cm.display.selForContextMenu) { + var first = text.charCodeAt(0); + if (first == 0x200b && !prevInput) { + prevInput = "\u200b"; + } + if (first == 0x21da) { + this.reset(); + return this.cm.execCommand("undo"); + } + } + // Find the part of the input that is actually new + var same = 0, + l = Math.min(prevInput.length, text.length); + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { + ++same; + } + runInOp(cm, function () { + applyTextInput(cm, text.slice(same), prevInput.length - same, null, this$1.composing ? "*compose" : null); + + // Don't leave long text in the textarea, since it makes further polling slow + if (text.length > 1000 || text.indexOf("\n") > -1) { + input.value = this$1.prevInput = ""; + } else { + this$1.prevInput = text; + } + if (this$1.composing) { + this$1.composing.range.clear(); + this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), { + className: "CodeMirror-composing" + }); + } + }); + return true; + }; + TextareaInput.prototype.ensurePolled = function () { + if (this.pollingFast && this.poll()) { + this.pollingFast = false; + } + }; + TextareaInput.prototype.onKeyPress = function () { + if (ie && ie_version >= 9) { + this.hasSelection = null; + } + this.fastPoll(); + }; + TextareaInput.prototype.onContextMenu = function (e) { + var input = this, + cm = input.cm, + display = cm.display, + te = input.textarea; + if (input.contextMenuPending) { + input.contextMenuPending(); + } + var pos = posFromMouse(cm, e), + scrollPos = display.scroller.scrollTop; + if (!pos || presto) { + return; + } // Opera is difficult. + + // Reset the current text selection only if the click is done outside of the selection + // and 'resetSelectionOnContextMenu' option is true. + var reset = cm.options.resetSelectionOnContextMenu; + if (reset && cm.doc.sel.contains(pos) == -1) { + operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); + } + var oldCSS = te.style.cssText, + oldWrapperCSS = input.wrapper.style.cssText; + var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect(); + input.wrapper.style.cssText = "position: static"; + te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; + var oldScrollY; + if (webkit) { + oldScrollY = window.scrollY; + } // Work around Chrome issue (#2712) + display.input.focus(); + if (webkit) { + window.scrollTo(null, oldScrollY); + } + display.input.reset(); + // Adds "Select all" to context menu in FF + if (!cm.somethingSelected()) { + te.value = input.prevInput = " "; + } + input.contextMenuPending = rehide; + display.selForContextMenu = cm.doc.sel; + clearTimeout(display.detectingSelectAll); + + // Select-all will be greyed out if there's nothing to select, so + // this adds a zero-width space so that we can later check whether + // it got selected. + function prepareSelectAllHack() { + if (te.selectionStart != null) { + var selected = cm.somethingSelected(); + var extval = "\u200b" + (selected ? te.value : ""); + te.value = "\u21da"; // Used to catch context-menu undo + te.value = extval; + input.prevInput = selected ? "" : "\u200b"; + te.selectionStart = 1; + te.selectionEnd = extval.length; + // Re-set this, in case some other handler touched the + // selection in the meantime. + display.selForContextMenu = cm.doc.sel; + } + } + function rehide() { + if (input.contextMenuPending != rehide) { + return; + } + input.contextMenuPending = false; + input.wrapper.style.cssText = oldWrapperCSS; + te.style.cssText = oldCSS; + if (ie && ie_version < 9) { + display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); + } + + // Try to detect the user choosing select-all + if (te.selectionStart != null) { + if (!ie || ie && ie_version < 9) { + prepareSelectAllHack(); + } + var i = 0, + poll = function () { + if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == "\u200b") { + operation(cm, selectAll)(cm); + } else if (i++ < 10) { + display.detectingSelectAll = setTimeout(poll, 500); + } else { + display.selForContextMenu = null; + display.input.reset(); + } + }; + display.detectingSelectAll = setTimeout(poll, 200); + } + } + if (ie && ie_version >= 9) { + prepareSelectAllHack(); + } + if (captureRightClick) { + e_stop(e); + var mouseup = function () { + off(window, "mouseup", mouseup); + setTimeout(rehide, 20); + }; + on(window, "mouseup", mouseup); + } else { + setTimeout(rehide, 50); + } + }; + TextareaInput.prototype.readOnlyChanged = function (val) { + if (!val) { + this.reset(); + } + this.textarea.disabled = val == "nocursor"; + this.textarea.readOnly = !!val; + }; + TextareaInput.prototype.setUneditable = function () {}; + TextareaInput.prototype.needsContentAttribute = false; + function fromTextArea(textarea, options) { + options = options ? copyObj(options) : {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabIndex) { + options.tabindex = textarea.tabIndex; + } + if (!options.placeholder && textarea.placeholder) { + options.placeholder = textarea.placeholder; + } + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = activeElt(); + options.autofocus = hasFocus == textarea || textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + function save() { + textarea.value = cm.getValue(); + } + var realSubmit; + if (textarea.form) { + on(textarea.form, "submit", save); + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form; + realSubmit = form.submit; + try { + var wrappedSubmit = form.submit = function () { + save(); + form.submit = realSubmit; + form.submit(); + form.submit = wrappedSubmit; + }; + } catch (e) {} + } + } + options.finishInit = function (cm) { + cm.save = save; + cm.getTextArea = function () { + return textarea; + }; + cm.toTextArea = function () { + cm.toTextArea = isNaN; // Prevent this from being ran twice + save(); + textarea.parentNode.removeChild(cm.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + off(textarea.form, "submit", save); + if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == "function") { + textarea.form.submit = realSubmit; + } + } + }; + }; + textarea.style.display = "none"; + var cm = CodeMirror(function (node) { + return textarea.parentNode.insertBefore(node, textarea.nextSibling); + }, options); + return cm; + } + function addLegacyProps(CodeMirror) { + CodeMirror.off = off; + CodeMirror.on = on; + CodeMirror.wheelEventPixels = wheelEventPixels; + CodeMirror.Doc = Doc; + CodeMirror.splitLines = splitLinesAuto; + CodeMirror.countColumn = countColumn; + CodeMirror.findColumn = findColumn; + CodeMirror.isWordChar = isWordCharBasic; + CodeMirror.Pass = Pass; + CodeMirror.signal = signal; + CodeMirror.Line = Line; + CodeMirror.changeEnd = changeEnd; + CodeMirror.scrollbarModel = scrollbarModel; + CodeMirror.Pos = Pos; + CodeMirror.cmpPos = cmp; + CodeMirror.modes = modes; + CodeMirror.mimeModes = mimeModes; + CodeMirror.resolveMode = resolveMode; + CodeMirror.getMode = getMode; + CodeMirror.modeExtensions = modeExtensions; + CodeMirror.extendMode = extendMode; + CodeMirror.copyState = copyState; + CodeMirror.startState = startState; + CodeMirror.innerMode = innerMode; + CodeMirror.commands = commands; + CodeMirror.keyMap = keyMap; + CodeMirror.keyName = keyName; + CodeMirror.isModifierKey = isModifierKey; + CodeMirror.lookupKey = lookupKey; + CodeMirror.normalizeKeyMap = normalizeKeyMap; + CodeMirror.StringStream = StringStream; + CodeMirror.SharedTextMarker = SharedTextMarker; + CodeMirror.TextMarker = TextMarker; + CodeMirror.LineWidget = LineWidget; + CodeMirror.e_preventDefault = e_preventDefault; + CodeMirror.e_stopPropagation = e_stopPropagation; + CodeMirror.e_stop = e_stop; + CodeMirror.addClass = addClass; + CodeMirror.contains = contains; + CodeMirror.rmClass = rmClass; + CodeMirror.keyNames = keyNames; + } + + // EDITOR CONSTRUCTOR + + defineOptions(CodeMirror); + addEditorMethods(CodeMirror); + + // Set up methods on CodeMirror's prototype to redirect to the editor's document. + var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); + for (var prop in Doc.prototype) { + if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) { + CodeMirror.prototype[prop] = function (method) { + return function () { + return method.apply(this.doc, arguments); + }; + }(Doc.prototype[prop]); + } + } + eventMixin(Doc); + CodeMirror.inputStyles = { + "textarea": TextareaInput, + "contenteditable": ContentEditableInput + }; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + CodeMirror.defineMode = function (name /*, mode, …*/) { + if (!CodeMirror.defaults.mode && name != "null") { + CodeMirror.defaults.mode = name; + } + defineMode.apply(this, arguments); + }; + CodeMirror.defineMIME = defineMIME; + + // Minimal default mode. + CodeMirror.defineMode("null", function () { + return { + token: function (stream) { + return stream.skipToEnd(); + } + }; + }); + CodeMirror.defineMIME("text/plain", "null"); + + // EXTENSIONS + + CodeMirror.defineExtension = function (name, func) { + CodeMirror.prototype[name] = func; + }; + CodeMirror.defineDocExtension = function (name, func) { + Doc.prototype[name] = func; + }; + CodeMirror.fromTextArea = fromTextArea; + addLegacyProps(CodeMirror); + CodeMirror.version = "5.65.3"; + return CodeMirror; +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/mode/javascript/javascript.js": +/*!**********************************************************************!*\ + !*** ../../../node_modules/codemirror/mode/javascript/javascript.js ***! + \**********************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + CodeMirror.defineMode("javascript", function (config, parserConfig) { + var indentUnit = config.indentUnit; + var statementIndent = parserConfig.statementIndent; + var jsonldMode = parserConfig.jsonld; + var jsonMode = parserConfig.json || jsonldMode; + var trackScope = parserConfig.trackScope !== false; + var isTS = parserConfig.typescript; + var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; + + // Tokenizer + + var keywords = function () { + function kw(type) { + return { + type: type, + style: "keyword" + }; + } + var A = kw("keyword a"), + B = kw("keyword b"), + C = kw("keyword c"), + D = kw("keyword d"); + var operator = kw("operator"), + atom = { + type: "atom", + style: "atom" + }; + return { + "if": kw("if"), + "while": A, + "with": A, + "else": B, + "do": B, + "try": B, + "finally": B, + "return": D, + "break": D, + "continue": D, + "new": kw("new"), + "delete": C, + "void": C, + "throw": C, + "debugger": kw("debugger"), + "var": kw("var"), + "const": kw("var"), + "let": kw("var"), + "function": kw("function"), + "catch": kw("catch"), + "for": kw("for"), + "switch": kw("switch"), + "case": kw("case"), + "default": kw("default"), + "in": operator, + "typeof": operator, + "instanceof": operator, + "true": atom, + "false": atom, + "null": atom, + "undefined": atom, + "NaN": atom, + "Infinity": atom, + "this": kw("this"), + "class": kw("class"), + "super": kw("atom"), + "yield": C, + "export": kw("export"), + "import": kw("import"), + "extends": C, + "await": C + }; + }(); + var isOperatorChar = /[+\-*&%=<>!?|~^@]/; + var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; + function readRegexp(stream) { + var escaped = false, + next, + inSet = false; + while ((next = stream.next()) != null) { + if (!escaped) { + if (next == "/" && !inSet) return; + if (next == "[") inSet = true;else if (inSet && next == "]") inSet = false; + } + escaped = !escaped && next == "\\"; + } + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + function ret(tp, style, cont) { + type = tp; + content = cont; + return style; + } + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "." && stream.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/)) { + return ret("number", "number"); + } else if (ch == "." && stream.match("..")) { + return ret("spread", "meta"); + } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + return ret(ch); + } else if (ch == "=" && stream.eat(">")) { + return ret("=>", "operator"); + } else if (ch == "0" && stream.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) { + return ret("number", "number"); + } else if (/\d/.test(ch)) { + stream.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/); + return ret("number", "number"); + } else if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } else if (stream.eat("/")) { + stream.skipToEnd(); + return ret("comment", "comment"); + } else if (expressionAllowed(stream, state, 1)) { + readRegexp(stream); + stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/); + return ret("regexp", "string-2"); + } else { + stream.eat("="); + return ret("operator", "operator", stream.current()); + } + } else if (ch == "`") { + state.tokenize = tokenQuasi; + return tokenQuasi(stream, state); + } else if (ch == "#" && stream.peek() == "!") { + stream.skipToEnd(); + return ret("meta", "meta"); + } else if (ch == "#" && stream.eatWhile(wordRE)) { + return ret("variable", "property"); + } else if (ch == "<" && stream.match("!--") || ch == "-" && stream.match("->") && !/\S/.test(stream.string.slice(0, stream.start))) { + stream.skipToEnd(); + return ret("comment", "comment"); + } else if (isOperatorChar.test(ch)) { + if (ch != ">" || !state.lexical || state.lexical.type != ">") { + if (stream.eat("=")) { + if (ch == "!" || ch == "=") stream.eat("="); + } else if (/[<>*+\-|&?]/.test(ch)) { + stream.eat(ch); + if (ch == ">") stream.eat(ch); + } + } + if (ch == "?" && stream.eat(".")) return ret("."); + return ret("operator", "operator", stream.current()); + } else if (wordRE.test(ch)) { + stream.eatWhile(wordRE); + var word = stream.current(); + if (state.lastType != ".") { + if (keywords.propertyIsEnumerable(word)) { + var kw = keywords[word]; + return ret(kw.type, kw.style, word); + } + if (word == "async" && stream.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/, false)) return ret("async", "keyword", word); + } + return ret("variable", "variable", word); + } + } + function tokenString(quote) { + return function (stream, state) { + var escaped = false, + next; + if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)) { + state.tokenize = tokenBase; + return ret("jsonld-keyword", "meta"); + } + while ((next = stream.next()) != null) { + if (next == quote && !escaped) break; + escaped = !escaped && next == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return ret("string", "string"); + }; + } + function tokenComment(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = ch == "*"; + } + return ret("comment", "comment"); + } + function tokenQuasi(stream, state) { + var escaped = false, + next; + while ((next = stream.next()) != null) { + if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && next == "\\"; + } + return ret("quasi", "string-2", stream.current()); + } + var brackets = "([{}])"; + // This is a crude lookahead trick to try and notice that we're + // parsing the argument patterns for a fat-arrow function before we + // actually hit the arrow token. It only works if the arrow is on + // the same line as the arguments and there's no strange noise + // (comments) in between. Fallback is to only notice when we hit the + // arrow, and not declare the arguments as locals for the arrow + // body. + function findFatArrow(stream, state) { + if (state.fatArrowAt) state.fatArrowAt = null; + var arrow = stream.string.indexOf("=>", stream.start); + if (arrow < 0) return; + if (isTS) { + // Try to skip TypeScript return type declarations after the arguments + var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow)); + if (m) arrow = m.index; + } + var depth = 0, + sawSomething = false; + for (var pos = arrow - 1; pos >= 0; --pos) { + var ch = stream.string.charAt(pos); + var bracket = brackets.indexOf(ch); + if (bracket >= 0 && bracket < 3) { + if (!depth) { + ++pos; + break; + } + if (--depth == 0) { + if (ch == "(") sawSomething = true; + break; + } + } else if (bracket >= 3 && bracket < 6) { + ++depth; + } else if (wordRE.test(ch)) { + sawSomething = true; + } else if (/["'\/`]/.test(ch)) { + for (;; --pos) { + if (pos == 0) return; + var next = stream.string.charAt(pos - 1); + if (next == ch && stream.string.charAt(pos - 2) != "\\") { + pos--; + break; + } + } + } else if (sawSomething && !depth) { + ++pos; + break; + } + } + if (sawSomething && !depth) state.fatArrowAt = pos; + } + + // Parser + + var atomicTypes = { + "atom": true, + "number": true, + "variable": true, + "string": true, + "regexp": true, + "this": true, + "import": true, + "jsonld-keyword": true + }; + function JSLexical(indented, column, type, align, prev, info) { + this.indented = indented; + this.column = column; + this.type = type; + this.prev = prev; + this.info = info; + if (align != null) this.align = align; + } + function inScope(state, varname) { + if (!trackScope) return false; + for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; + for (var cx = state.context; cx; cx = cx.prev) { + for (var v = cx.vars; v; v = v.next) if (v.name == varname) return true; + } + } + function parseJS(state, style, type, content, stream) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; + cx.stream = stream; + cx.marked = null, cx.cc = cc; + cx.style = style; + if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; + while (true) { + var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; + if (combinator(type, content)) { + while (cc.length && cc[cc.length - 1].lex) cc.pop()(); + if (cx.marked) return cx.marked; + if (type == "variable" && inScope(state, content)) return "variable-2"; + return style; + } + } + } + + // Combinator utils + + var cx = { + state: null, + column: null, + marked: null, + cc: null + }; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + function inList(name, list) { + for (var v = list; v; v = v.next) if (v.name == name) return true; + return false; + } + function register(varname) { + var state = cx.state; + cx.marked = "def"; + if (!trackScope) return; + if (state.context) { + if (state.lexical.info == "var" && state.context && state.context.block) { + // FIXME function decls are also not block scoped + var newContext = registerVarScoped(varname, state.context); + if (newContext != null) { + state.context = newContext; + return; + } + } else if (!inList(varname, state.localVars)) { + state.localVars = new Var(varname, state.localVars); + return; + } + } + // Fall through means this is global + if (parserConfig.globalVars && !inList(varname, state.globalVars)) state.globalVars = new Var(varname, state.globalVars); + } + function registerVarScoped(varname, context) { + if (!context) { + return null; + } else if (context.block) { + var inner = registerVarScoped(varname, context.prev); + if (!inner) return null; + if (inner == context.prev) return context; + return new Context(inner, context.vars, true); + } else if (inList(varname, context.vars)) { + return context; + } else { + return new Context(context.prev, new Var(varname, context.vars), false); + } + } + function isModifier(name) { + return name == "public" || name == "private" || name == "protected" || name == "abstract" || name == "readonly"; + } + + // Combinators + + function Context(prev, vars, block) { + this.prev = prev; + this.vars = vars; + this.block = block; + } + function Var(name, next) { + this.name = name; + this.next = next; + } + var defaultVars = new Var("this", new Var("arguments", null)); + function pushcontext() { + cx.state.context = new Context(cx.state.context, cx.state.localVars, false); + cx.state.localVars = defaultVars; + } + function pushblockcontext() { + cx.state.context = new Context(cx.state.context, cx.state.localVars, true); + cx.state.localVars = null; + } + pushcontext.lex = pushblockcontext.lex = true; + function popcontext() { + cx.state.localVars = cx.state.context.vars; + cx.state.context = cx.state.context.prev; + } + popcontext.lex = true; + function pushlex(type, info) { + var result = function () { + var state = cx.state, + indent = state.indented; + if (state.lexical.type == "stat") indent = state.lexical.indented;else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) indent = outer.indented; + state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + poplex.lex = true; + function expect(wanted) { + function exp(type) { + if (type == wanted) return cont();else if (wanted == ";" || type == "}" || type == ")" || type == "]") return pass();else return cont(exp); + } + ; + return exp; + } + function statement(type, value) { + if (type == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex); + if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex); + if (type == "keyword b") return cont(pushlex("form"), statement, poplex); + if (type == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex); + if (type == "debugger") return cont(expect(";")); + if (type == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext); + if (type == ";") return cont(); + if (type == "if") { + if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) cx.state.cc.pop()(); + return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse); + } + if (type == "function") return cont(functiondef); + if (type == "for") return cont(pushlex("form"), pushblockcontext, forspec, statement, popcontext, poplex); + if (type == "class" || isTS && value == "interface") { + cx.marked = "keyword"; + return cont(pushlex("form", type == "class" ? type : value), className, poplex); + } + if (type == "variable") { + if (isTS && value == "declare") { + cx.marked = "keyword"; + return cont(statement); + } else if (isTS && (value == "module" || value == "enum" || value == "type") && cx.stream.match(/^\s*\w/, false)) { + cx.marked = "keyword"; + if (value == "enum") return cont(enumdef);else if (value == "type") return cont(typename, expect("operator"), typeexpr, expect(";"));else return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex); + } else if (isTS && value == "namespace") { + cx.marked = "keyword"; + return cont(pushlex("form"), expression, statement, poplex); + } else if (isTS && value == "abstract") { + cx.marked = "keyword"; + return cont(statement); + } else { + return cont(pushlex("stat"), maybelabel); + } + } + if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext, block, poplex, poplex, popcontext); + if (type == "case") return cont(expression, expect(":")); + if (type == "default") return cont(expect(":")); + if (type == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext); + if (type == "export") return cont(pushlex("stat"), afterExport, poplex); + if (type == "import") return cont(pushlex("stat"), afterImport, poplex); + if (type == "async") return cont(statement); + if (value == "@") return cont(expression, statement); + return pass(pushlex("stat"), expression, expect(";"), poplex); + } + function maybeCatchBinding(type) { + if (type == "(") return cont(funarg, expect(")")); + } + function expression(type, value) { + return expressionInner(type, value, false); + } + function expressionNoComma(type, value) { + return expressionInner(type, value, true); + } + function parenExpr(type) { + if (type != "(") return pass(); + return cont(pushlex(")"), maybeexpression, expect(")"), poplex); + } + function expressionInner(type, value, noComma) { + if (cx.state.fatArrowAt == cx.stream.start) { + var body = noComma ? arrowBodyNoComma : arrowBody; + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext);else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); + } + var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; + if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); + if (type == "function") return cont(functiondef, maybeop); + if (type == "class" || isTS && value == "interface") { + cx.marked = "keyword"; + return cont(pushlex("form"), classExpression, poplex); + } + if (type == "keyword c" || type == "async") return cont(noComma ? expressionNoComma : expression); + if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); + if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); + if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); + if (type == "{") return contCommasep(objprop, "}", null, maybeop); + if (type == "quasi") return pass(quasi, maybeop); + if (type == "new") return cont(maybeTarget(noComma)); + return cont(); + } + function maybeexpression(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expression); + } + function maybeoperatorComma(type, value) { + if (type == ",") return cont(maybeexpression); + return maybeoperatorNoComma(type, value, false); + } + function maybeoperatorNoComma(type, value, noComma) { + var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; + var expr = noComma == false ? expression : expressionNoComma; + if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); + if (type == "operator") { + if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me); + if (isTS && value == "<" && cx.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/, false)) return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me); + if (value == "?") return cont(expression, expect(":"), expr); + return cont(expr); + } + if (type == "quasi") { + return pass(quasi, me); + } + if (type == ";") return; + if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); + if (type == ".") return cont(property, me); + if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); + if (isTS && value == "as") { + cx.marked = "keyword"; + return cont(typeexpr, me); + } + if (type == "regexp") { + cx.state.lastType = cx.marked = "operator"; + cx.stream.backUp(cx.stream.pos - cx.stream.start - 1); + return cont(expr); + } + } + function quasi(type, value) { + if (type != "quasi") return pass(); + if (value.slice(value.length - 2) != "${") return cont(quasi); + return cont(maybeexpression, continueQuasi); + } + function continueQuasi(type) { + if (type == "}") { + cx.marked = "string-2"; + cx.state.tokenize = tokenQuasi; + return cont(quasi); + } + } + function arrowBody(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expression); + } + function arrowBodyNoComma(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expressionNoComma); + } + function maybeTarget(noComma) { + return function (type) { + if (type == ".") return cont(noComma ? targetNoComma : target);else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma);else return pass(noComma ? expressionNoComma : expression); + }; + } + function target(_, value) { + if (value == "target") { + cx.marked = "keyword"; + return cont(maybeoperatorComma); + } + } + function targetNoComma(_, value) { + if (value == "target") { + cx.marked = "keyword"; + return cont(maybeoperatorNoComma); + } + } + function maybelabel(type) { + if (type == ":") return cont(poplex, statement); + return pass(maybeoperatorComma, expect(";"), poplex); + } + function property(type) { + if (type == "variable") { + cx.marked = "property"; + return cont(); + } + } + function objprop(type, value) { + if (type == "async") { + cx.marked = "property"; + return cont(objprop); + } else if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + if (value == "get" || value == "set") return cont(getterSetter); + var m; // Work around fat-arrow-detection complication for detecting typescript typed arrow params + if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false))) cx.state.fatArrowAt = cx.stream.pos + m[0].length; + return cont(afterprop); + } else if (type == "number" || type == "string") { + cx.marked = jsonldMode ? "property" : cx.style + " property"; + return cont(afterprop); + } else if (type == "jsonld-keyword") { + return cont(afterprop); + } else if (isTS && isModifier(value)) { + cx.marked = "keyword"; + return cont(objprop); + } else if (type == "[") { + return cont(expression, maybetype, expect("]"), afterprop); + } else if (type == "spread") { + return cont(expressionNoComma, afterprop); + } else if (value == "*") { + cx.marked = "keyword"; + return cont(objprop); + } else if (type == ":") { + return pass(afterprop); + } + } + function getterSetter(type) { + if (type != "variable") return pass(afterprop); + cx.marked = "property"; + return cont(functiondef); + } + function afterprop(type) { + if (type == ":") return cont(expressionNoComma); + if (type == "(") return pass(functiondef); + } + function commasep(what, end, sep) { + function proceed(type, value) { + if (sep ? sep.indexOf(type) > -1 : type == ",") { + var lex = cx.state.lexical; + if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; + return cont(function (type, value) { + if (type == end || value == end) return pass(); + return pass(what); + }, proceed); + } + if (type == end || value == end) return cont(); + if (sep && sep.indexOf(";") > -1) return pass(what); + return cont(expect(end)); + } + return function (type, value) { + if (type == end || value == end) return cont(); + return pass(what, proceed); + }; + } + function contCommasep(what, end, info) { + for (var i = 3; i < arguments.length; i++) cx.cc.push(arguments[i]); + return cont(pushlex(end, info), commasep(what, end), poplex); + } + function block(type) { + if (type == "}") return cont(); + return pass(statement, block); + } + function maybetype(type, value) { + if (isTS) { + if (type == ":") return cont(typeexpr); + if (value == "?") return cont(maybetype); + } + } + function maybetypeOrIn(type, value) { + if (isTS && (type == ":" || value == "in")) return cont(typeexpr); + } + function mayberettype(type) { + if (isTS && type == ":") { + if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr);else return cont(typeexpr); + } + } + function isKW(_, value) { + if (value == "is") { + cx.marked = "keyword"; + return cont(); + } + } + function typeexpr(type, value) { + if (value == "keyof" || value == "typeof" || value == "infer" || value == "readonly") { + cx.marked = "keyword"; + return cont(value == "typeof" ? expressionNoComma : typeexpr); + } + if (type == "variable" || value == "void") { + cx.marked = "type"; + return cont(afterType); + } + if (value == "|" || value == "&") return cont(typeexpr); + if (type == "string" || type == "number" || type == "atom") return cont(afterType); + if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType); + if (type == "{") return cont(pushlex("}"), typeprops, poplex, afterType); + if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType, afterType); + if (type == "<") return cont(commasep(typeexpr, ">"), typeexpr); + if (type == "quasi") { + return pass(quasiType, afterType); + } + } + function maybeReturnType(type) { + if (type == "=>") return cont(typeexpr); + } + function typeprops(type) { + if (type.match(/[\}\)\]]/)) return cont(); + if (type == "," || type == ";") return cont(typeprops); + return pass(typeprop, typeprops); + } + function typeprop(type, value) { + if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + return cont(typeprop); + } else if (value == "?" || type == "number" || type == "string") { + return cont(typeprop); + } else if (type == ":") { + return cont(typeexpr); + } else if (type == "[") { + return cont(expect("variable"), maybetypeOrIn, expect("]"), typeprop); + } else if (type == "(") { + return pass(functiondecl, typeprop); + } else if (!type.match(/[;\}\)\],]/)) { + return cont(); + } + } + function quasiType(type, value) { + if (type != "quasi") return pass(); + if (value.slice(value.length - 2) != "${") return cont(quasiType); + return cont(typeexpr, continueQuasiType); + } + function continueQuasiType(type) { + if (type == "}") { + cx.marked = "string-2"; + cx.state.tokenize = tokenQuasi; + return cont(quasiType); + } + } + function typearg(type, value) { + if (type == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg); + if (type == ":") return cont(typeexpr); + if (type == "spread") return cont(typearg); + return pass(typeexpr); + } + function afterType(type, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType); + if (value == "|" || type == "." || value == "&") return cont(typeexpr); + if (type == "[") return cont(typeexpr, expect("]"), afterType); + if (value == "extends" || value == "implements") { + cx.marked = "keyword"; + return cont(typeexpr); + } + if (value == "?") return cont(typeexpr, expect(":"), typeexpr); + } + function maybeTypeArgs(_, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType); + } + function typeparam() { + return pass(typeexpr, maybeTypeDefault); + } + function maybeTypeDefault(_, value) { + if (value == "=") return cont(typeexpr); + } + function vardef(_, value) { + if (value == "enum") { + cx.marked = "keyword"; + return cont(enumdef); + } + return pass(pattern, maybetype, maybeAssign, vardefCont); + } + function pattern(type, value) { + if (isTS && isModifier(value)) { + cx.marked = "keyword"; + return cont(pattern); + } + if (type == "variable") { + register(value); + return cont(); + } + if (type == "spread") return cont(pattern); + if (type == "[") return contCommasep(eltpattern, "]"); + if (type == "{") return contCommasep(proppattern, "}"); + } + function proppattern(type, value) { + if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { + register(value); + return cont(maybeAssign); + } + if (type == "variable") cx.marked = "property"; + if (type == "spread") return cont(pattern); + if (type == "}") return pass(); + if (type == "[") return cont(expression, expect(']'), expect(':'), proppattern); + return cont(expect(":"), pattern, maybeAssign); + } + function eltpattern() { + return pass(pattern, maybeAssign); + } + function maybeAssign(_type, value) { + if (value == "=") return cont(expressionNoComma); + } + function vardefCont(type) { + if (type == ",") return cont(vardef); + } + function maybeelse(type, value) { + if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); + } + function forspec(type, value) { + if (value == "await") return cont(forspec); + if (type == "(") return cont(pushlex(")"), forspec1, poplex); + } + function forspec1(type) { + if (type == "var") return cont(vardef, forspec2); + if (type == "variable") return cont(forspec2); + return pass(forspec2); + } + function forspec2(type, value) { + if (type == ")") return cont(); + if (type == ";") return cont(forspec2); + if (value == "in" || value == "of") { + cx.marked = "keyword"; + return cont(expression, forspec2); + } + return pass(expression, forspec2); + } + function functiondef(type, value) { + if (value == "*") { + cx.marked = "keyword"; + return cont(functiondef); + } + if (type == "variable") { + register(value); + return cont(functiondef); + } + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext); + if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef); + } + function functiondecl(type, value) { + if (value == "*") { + cx.marked = "keyword"; + return cont(functiondecl); + } + if (type == "variable") { + register(value); + return cont(functiondecl); + } + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, popcontext); + if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondecl); + } + function typename(type, value) { + if (type == "keyword" || type == "variable") { + cx.marked = "type"; + return cont(typename); + } else if (value == "<") { + return cont(pushlex(">"), commasep(typeparam, ">"), poplex); + } + } + function funarg(type, value) { + if (value == "@") cont(expression, funarg); + if (type == "spread") return cont(funarg); + if (isTS && isModifier(value)) { + cx.marked = "keyword"; + return cont(funarg); + } + if (isTS && type == "this") return cont(maybetype, maybeAssign); + return pass(pattern, maybetype, maybeAssign); + } + function classExpression(type, value) { + // Class expressions may have an optional name. + if (type == "variable") return className(type, value); + return classNameAfter(type, value); + } + function className(type, value) { + if (type == "variable") { + register(value); + return cont(classNameAfter); + } + } + function classNameAfter(type, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter); + if (value == "extends" || value == "implements" || isTS && type == ",") { + if (value == "implements") cx.marked = "keyword"; + return cont(isTS ? typeexpr : expression, classNameAfter); + } + if (type == "{") return cont(pushlex("}"), classBody, poplex); + } + function classBody(type, value) { + if (type == "async" || type == "variable" && (value == "static" || value == "get" || value == "set" || isTS && isModifier(value)) && cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false)) { + cx.marked = "keyword"; + return cont(classBody); + } + if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + return cont(classfield, classBody); + } + if (type == "number" || type == "string") return cont(classfield, classBody); + if (type == "[") return cont(expression, maybetype, expect("]"), classfield, classBody); + if (value == "*") { + cx.marked = "keyword"; + return cont(classBody); + } + if (isTS && type == "(") return pass(functiondecl, classBody); + if (type == ";" || type == ",") return cont(classBody); + if (type == "}") return cont(); + if (value == "@") return cont(expression, classBody); + } + function classfield(type, value) { + if (value == "!") return cont(classfield); + if (value == "?") return cont(classfield); + if (type == ":") return cont(typeexpr, maybeAssign); + if (value == "=") return cont(expressionNoComma); + var context = cx.state.lexical.prev, + isInterface = context && context.info == "interface"; + return pass(isInterface ? functiondecl : functiondef); + } + function afterExport(type, value) { + if (value == "*") { + cx.marked = "keyword"; + return cont(maybeFrom, expect(";")); + } + if (value == "default") { + cx.marked = "keyword"; + return cont(expression, expect(";")); + } + if (type == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";")); + return pass(statement); + } + function exportField(type, value) { + if (value == "as") { + cx.marked = "keyword"; + return cont(expect("variable")); + } + if (type == "variable") return pass(expressionNoComma, exportField); + } + function afterImport(type) { + if (type == "string") return cont(); + if (type == "(") return pass(expression); + if (type == ".") return pass(maybeoperatorComma); + return pass(importSpec, maybeMoreImports, maybeFrom); + } + function importSpec(type, value) { + if (type == "{") return contCommasep(importSpec, "}"); + if (type == "variable") register(value); + if (value == "*") cx.marked = "keyword"; + return cont(maybeAs); + } + function maybeMoreImports(type) { + if (type == ",") return cont(importSpec, maybeMoreImports); + } + function maybeAs(_type, value) { + if (value == "as") { + cx.marked = "keyword"; + return cont(importSpec); + } + } + function maybeFrom(_type, value) { + if (value == "from") { + cx.marked = "keyword"; + return cont(expression); + } + } + function arrayLiteral(type) { + if (type == "]") return cont(); + return pass(commasep(expressionNoComma, "]")); + } + function enumdef() { + return pass(pushlex("form"), pattern, expect("{"), pushlex("}"), commasep(enummember, "}"), poplex, poplex); + } + function enummember() { + return pass(pattern, maybeAssign); + } + function isContinuedStatement(state, textAfter) { + return state.lastType == "operator" || state.lastType == "," || isOperatorChar.test(textAfter.charAt(0)) || /[,.]/.test(textAfter.charAt(0)); + } + function expressionAllowed(stream, state, backUp) { + return state.tokenize == tokenBase && /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) || state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))); + } + + // Interface + + return { + startState: function (basecolumn) { + var state = { + tokenize: tokenBase, + lastType: "sof", + cc: [], + lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), + localVars: parserConfig.localVars, + context: parserConfig.localVars && new Context(null, null, false), + indented: basecolumn || 0 + }; + if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars; + return state; + }, + token: function (stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; + state.indented = stream.indentation(); + findFatArrow(stream, state); + } + if (state.tokenize != tokenComment && stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (type == "comment") return style; + state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; + return parseJS(state, style, type, content, stream); + }, + indent: function (state, textAfter) { + if (state.tokenize == tokenComment || state.tokenize == tokenQuasi) return CodeMirror.Pass; + if (state.tokenize != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), + lexical = state.lexical, + top; + // Kludge to prevent 'maybelse' from blocking lexical scope pops + if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { + var c = state.cc[i]; + if (c == poplex) lexical = lexical.prev;else if (c != maybeelse && c != popcontext) break; + } + while ((lexical.type == "stat" || lexical.type == "form") && (firstChar == "}" || (top = state.cc[state.cc.length - 1]) && (top == maybeoperatorComma || top == maybeoperatorNoComma) && !/^[,\.=+\-*:?[\(]/.test(textAfter))) lexical = lexical.prev; + if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") lexical = lexical.prev; + var type = lexical.type, + closing = firstChar == type; + if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0);else if (type == "form" && firstChar == "{") return lexical.indented;else if (type == "form") return lexical.indented + indentUnit;else if (type == "stat") return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);else if (lexical.align) return lexical.column + (closing ? 0 : 1);else return lexical.indented + (closing ? 0 : indentUnit); + }, + electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, + blockCommentStart: jsonMode ? null : "/*", + blockCommentEnd: jsonMode ? null : "*/", + blockCommentContinue: jsonMode ? null : " * ", + lineComment: jsonMode ? null : "//", + fold: "brace", + closeBrackets: "()[]{}''\"\"``", + helperType: jsonMode ? "json" : "javascript", + jsonldMode: jsonldMode, + jsonMode: jsonMode, + expressionAllowed: expressionAllowed, + skipExpression: function (state) { + parseJS(state, "atom", "atom", "true", new CodeMirror.StringStream("", 2, null)); + } + }; + }); + CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); + CodeMirror.defineMIME("text/javascript", "javascript"); + CodeMirror.defineMIME("text/ecmascript", "javascript"); + CodeMirror.defineMIME("application/javascript", "javascript"); + CodeMirror.defineMIME("application/x-javascript", "javascript"); + CodeMirror.defineMIME("application/ecmascript", "javascript"); + CodeMirror.defineMIME("application/json", { + name: "javascript", + json: true + }); + CodeMirror.defineMIME("application/x-json", { + name: "javascript", + json: true + }); + CodeMirror.defineMIME("application/manifest+json", { + name: "javascript", + json: true + }); + CodeMirror.defineMIME("application/ld+json", { + name: "javascript", + jsonld: true + }); + CodeMirror.defineMIME("text/typescript", { + name: "javascript", + typescript: true + }); + CodeMirror.defineMIME("application/typescript", { + name: "javascript", + typescript: true + }); +}); + +/***/ }), + /***/ "../../../node_modules/copy-to-clipboard/index.js": /*!********************************************************!*\ !*** ../../../node_modules/copy-to-clipboard/index.js ***! \********************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var deselectCurrent = __webpack_require__(/*! toggle-selection */ "../../../node_modules/toggle-selection/index.js"); @@ -11488,6 +28739,7 @@ module.exports = copy; \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -11504,6 +28756,7 @@ const isNode = exports.isNode = false; \****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) { @@ -12065,6 +29318,7 @@ exports.decodeXML = decodeXML; \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; // Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134 @@ -12124,6 +29378,7 @@ exports["default"] = decodeCodePoint; \****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; var __importDefault = void 0 && (void 0).__importDefault || function (mod) { @@ -12209,6 +29464,7 @@ function encodeHTMLTrieRe(regExp, str) { \****************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -12322,6 +29578,7 @@ exports.escapeText = getEscaper(/[&<>\u00A0]/g, new Map([[38, "&"], [60, "&l \************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; // Generated using scripts/write-decode-map.ts @@ -12342,6 +29599,7 @@ exports["default"] = new Uint16Array( \***********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; // Generated using scripts/write-decode-map.ts @@ -12362,6 +29620,7 @@ exports["default"] = new Uint16Array( \*******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; // Generated using scripts/write-encode-map.ts @@ -12636,6 +29895,7 @@ exports["default"] = new Map( /* #__PURE__ */restoreDiff([[9, " "], [0, "&Ne \***************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -12880,6 +30140,7 @@ Object.defineProperty(exports, "decodeXMLStrict", ({ \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -21547,6 +38808,7 @@ exports.wrapHandler = wrapHandler; \*************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -21667,6 +38929,7 @@ exports.getFrameData = getFrameData; \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -21697,6 +38960,7 @@ exports.getNonce = getNonce; \************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; /*! @@ -21799,6 +39063,7 @@ function isValidObject(val) { \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -22367,6 +39632,7 @@ function isWebSocket(val) { \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -22568,6 +39834,7 @@ function stringifyMessage(msg, replacer) { \*****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) { @@ -22604,6 +39871,7 @@ __exportStar(__webpack_require__(/*! ./common */ "../../../node_modules/graphql- \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -22917,6 +40185,7 @@ function handleProtocols(protocols) { \******************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -22980,6 +40249,7 @@ function limitCloseReason(reason, whenTooLong) { \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23195,6 +40465,7 @@ function formatError(error) { \*****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23242,6 +40513,7 @@ var _locatedError = __webpack_require__(/*! ./locatedError.mjs */ "../../../node \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23283,6 +40555,7 @@ function isLocatedGraphQLError(error) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23310,6 +40583,7 @@ function syntaxError(source, position, description) { \*****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23450,6 +40724,7 @@ function getFieldEntryKey(node) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -24127,6 +41402,7 @@ function getFieldDef(schema, parentType, fieldNode) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -24205,6 +41481,7 @@ var _values = __webpack_require__(/*! ./values.mjs */ "../../../node_modules/gra \********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -24271,6 +41548,7 @@ function mapAsyncIterator(iterable, callback) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -24470,6 +41748,7 @@ async function executeSubscription(exeContext) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -24661,6 +41940,7 @@ function hasOwnProperty(obj, prop) { \*************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -24790,6 +42070,7 @@ function graphqlImpl(args) { \***********************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26078,6 +43359,7 @@ var _index6 = __webpack_require__(/*! ./utilities/index.mjs */ "../../../node_mo \******************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26117,6 +43399,7 @@ function pathToArray(path) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26138,6 +43421,7 @@ function devAssert(condition, message) { \************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26177,6 +43461,7 @@ function didYouMean(firstArg, secondArg) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26208,6 +43493,7 @@ function groupBy(list, keyFn) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26229,6 +43515,7 @@ function identityFunc(x) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26328,6 +43615,7 @@ function getObjectTag(object) { \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26391,6 +43679,7 @@ spurious results.`); \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26412,6 +43701,7 @@ function invariant(condition, message) { \*****************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26434,6 +43724,7 @@ function isAsyncIterable(maybeAsyncIterable) { \******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26469,6 +43760,7 @@ function isIterableObject(maybeIterable) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26491,6 +43783,7 @@ function isObjectLike(value) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26513,6 +43806,7 @@ function isPromise(value) { \********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26562,6 +43856,7 @@ function keyMap(list, keyFn) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26601,6 +43896,7 @@ function keyValMap(list, keyFn, valFn) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26627,6 +43923,7 @@ function mapValue(map, fn) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26669,6 +43966,7 @@ function memoize3(fn) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26734,6 +44032,7 @@ function isDigit(code) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26755,6 +44054,7 @@ function printPathArray(path) { \******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26786,6 +44086,7 @@ function promiseForObject(object) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26816,6 +44117,7 @@ function promiseReduce(values, callbackFn, initialValue) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26938,6 +44240,7 @@ function stringToArray(str) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26968,6 +44271,7 @@ class NonErrorThrown extends Error { \**********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26996,6 +44300,7 @@ function toObjMap(obj) { \******************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27186,6 +44491,7 @@ var OperationTypeNode; \**************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27341,6 +44647,7 @@ function printBlockString(value, options) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27424,6 +44731,7 @@ function isNameContinue(code) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27470,6 +44778,7 @@ var DirectiveLocation; \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27682,6 +44991,7 @@ var _directiveLocation = __webpack_require__(/*! ./directiveLocation.mjs */ "../ \********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27752,6 +45062,7 @@ var Kind; \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -28480,6 +45791,7 @@ function readName(lexer, start) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -28521,6 +45833,7 @@ function getLocation(source, position) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -29871,6 +47184,7 @@ function getTokenKindDesc(kind) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -29926,6 +47240,7 @@ function isTypeExtensionNode(node) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -29983,6 +47298,7 @@ function printPrefixedLines(lines) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30022,6 +47338,7 @@ const escapeSequences = ['\\u0000', '\\u0001', '\\u0002', '\\u0003', '\\u0004', \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30380,6 +47697,7 @@ function hasMultilineItems(maybeArray) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30431,6 +47749,7 @@ function isSource(source) { \************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30481,6 +47800,7 @@ var TokenKind; \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30807,6 +48127,7 @@ function getVisitFn(visitor, kind, isLeaving) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30858,6 +48179,7 @@ function assertEnumValueName(name) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -31823,6 +49145,7 @@ function isRequiredInputField(field) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -32000,6 +49323,7 @@ function isSpecifiedDirective(directive) { \****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -32555,6 +49879,7 @@ var _assertName = __webpack_require__(/*! ./assertName.mjs */ "../../../node_mod \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -33073,6 +50398,7 @@ function isIntrospectionType(type) { \******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -33297,6 +50623,7 @@ function serializeObject(outputValue) { \*****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -33617,6 +50944,7 @@ function collectReferencedTypes(type, typeSet) { \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34024,6 +51352,7 @@ function getDeprecatedDirectiveNode(definitionNode) { \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34322,6 +51651,7 @@ function visitWithTypeInfo(typeInfo, visitor) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34372,6 +51702,7 @@ function isValidNameError(name) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34537,6 +51868,7 @@ const integerStringRegExp = /^-?(?:0|[1-9][0-9]*)$/; \******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34628,6 +51960,7 @@ function buildSchema(source, options) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34888,6 +52221,7 @@ function buildClientSchema(introspection, options) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35017,6 +52351,7 @@ function coerceInputValueImpl(inputValue, type, onError, path) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35049,6 +52384,7 @@ function concatAST(documents) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35595,6 +52931,7 @@ function isOneOf(node) { \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35991,6 +53328,7 @@ function diff(oldArray, newArray) { \*************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36136,6 +53474,7 @@ function getIntrospectionQuery(options) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36178,6 +53517,7 @@ function getOperationAST(documentAST, operationName) { \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36231,6 +53571,7 @@ function getOperationRootType(schema, operation) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36452,6 +53793,7 @@ var _findBreakingChanges = __webpack_require__(/*! ./findBreakingChanges.mjs */ \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36498,6 +53840,7 @@ function introspectionFromSchema(schema, options) { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36649,6 +53992,7 @@ function sortBy(array, mapToKey) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36856,6 +54200,7 @@ function printDescription(def, indentation = '', firstInBlock = true) { \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36937,6 +54282,7 @@ function collectDependencies(selectionSet) { \*****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36990,6 +54336,7 @@ function sortFields(fields) { \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37103,6 +54450,7 @@ function stripIgnoredCharacters(source) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37207,6 +54555,7 @@ function doTypesOverlap(schema, typeA, typeB) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37240,6 +54589,7 @@ function typeFromAST(schema, typeNode) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37398,6 +54748,7 @@ function isMissingVariable(valueNode, variables) { \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37452,6 +54803,7 @@ function valueFromASTUntyped(valueNode, variables) { \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37636,6 +54988,7 @@ exports.ValidationContext = ValidationContext; \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37936,6 +55289,7 @@ var _NoSchemaIntrospectionCustomRule = __webpack_require__(/*! ./rules/custom/No \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37977,6 +55331,7 @@ function ExecutableDefinitionsRule(context) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38089,6 +55444,7 @@ function getSuggestedFieldNames(type, fieldName) { \****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38142,6 +55498,7 @@ function FragmentsOnCompositeTypesRule(context) { \*********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38233,6 +55590,7 @@ function KnownArgumentNamesOnDirectivesRule(context) { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38360,6 +55718,7 @@ function getDirectiveLocationForOperation(operation) { \*********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38397,6 +55756,7 @@ function KnownFragmentNamesRule(context) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38458,6 +55818,7 @@ function isSDLNode(value) { \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38498,6 +55859,7 @@ function LoneAnonymousOperationRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38541,6 +55903,7 @@ function LoneSchemaDefinitionRule(context) { \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38620,6 +55983,7 @@ function MaxIntrospectionDepthRule(context) { \*******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38694,6 +56058,7 @@ function NoFragmentCyclesRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38744,6 +56109,7 @@ function NoUndefinedVariablesRule(context) { \********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38800,6 +56166,7 @@ function NoUnusedFragmentsRule(context) { \********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38854,6 +56221,7 @@ function NoUnusedVariablesRule(context) { \*******************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39318,6 +56686,7 @@ class PairSet { \**************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39381,6 +56750,7 @@ function getFragmentType(context, name) { \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39508,6 +56878,7 @@ function extensionKindToTypeName(kind) { \****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39619,6 +56990,7 @@ function isRequiredArgumentNode(arg) { \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39668,6 +57040,7 @@ function ScalarLeafsRule(context) { \***************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39733,6 +57106,7 @@ function SingleFieldSubscriptionsRule(context) { \********************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39802,6 +57176,7 @@ function UniqueArgumentDefinitionNamesRule(context) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39849,6 +57224,7 @@ function UniqueArgumentNamesRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39893,6 +57269,7 @@ function UniqueDirectiveNamesRule(context) { \******************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39970,6 +57347,7 @@ function UniqueDirectivesPerLocationRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40029,6 +57407,7 @@ function UniqueEnumValueNamesRule(context) { \*****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40097,6 +57476,7 @@ function hasField(type, fieldName) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40137,6 +57517,7 @@ function UniqueFragmentNamesRule(context) { \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40189,6 +57570,7 @@ function UniqueInputFieldNamesRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40231,6 +57613,7 @@ function UniqueOperationNamesRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40289,6 +57672,7 @@ function UniqueOperationTypesRule(context) { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40339,6 +57723,7 @@ function UniqueTypeNamesRule(context) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40381,6 +57766,7 @@ function UniqueVariableNamesRule(context) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40550,6 +57936,7 @@ function validateOneOfInputObject(context, node, type, fieldNodeMap, variableDef \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40591,6 +57978,7 @@ function VariablesAreInputTypesRule(context) { \*****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40677,6 +58065,7 @@ function allowedVariableUsage(schema, varType, varDefaultValue, locationType, lo \****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40762,6 +58151,7 @@ function NoDeprecatedCustomRule(context) { \*************************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40802,6 +58192,7 @@ function NoSchemaIntrospectionCustomRule(context) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40925,6 +58316,7 @@ const specifiedSDLRules = exports.specifiedSDLRules = Object.freeze([_LoneSchema \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41040,6 +58432,7 @@ function assertValidSDLExtension(documentAST, schema) { \*************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41072,6 +58465,7 @@ const versionInfo = exports.versionInfo = Object.freeze({ \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41103,6 +58497,7 @@ if (true) { \******************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; /*! * is-plain-object * @@ -41145,6 +58540,7 @@ module.exports = function isPlainObject(o) { \***************************************************/ /***/ (function(module) { +"use strict"; /*! * is-primitive * @@ -41169,6 +58565,7 @@ module.exports = function isPrimitive(val) { \**********************************************/ /***/ (function(module) { +"use strict"; var toString = {}.toString; @@ -41184,6 +58581,7 @@ module.exports = Array.isArray || function (arr) { \***********************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; /*! * isobject * @@ -41206,6 +58604,7 @@ module.exports = function isObject(val) { \***********************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var uc_micro = __webpack_require__(/*! uc.micro */ "../../../node_modules/uc.micro/build/index.cjs.js"); @@ -41899,6 +59298,7 @@ module.exports = LinkifyIt; \***********************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var mdurl = __webpack_require__(/*! mdurl */ "../../../node_modules/mdurl/build/index.cjs.js"); @@ -47438,6 +64838,7 @@ module.exports = MarkdownIt; \******************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; /* eslint-disable no-bitwise */ @@ -47934,6 +65335,7 @@ exports.parse = urlParse; \****************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; var e = new TextDecoder(); @@ -48003,6 +65405,7 @@ exports.meros = t; \******************************************************/ /***/ (function(module) { +"use strict"; function nullthrows(x, message) { @@ -48027,6 +65430,7 @@ Object.defineProperty(module.exports, "__esModule", ({ \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -48981,6 +66385,7 @@ exports.wrap = wrap; \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; /** Highest positive signed 32-bit float value */ @@ -49415,12 +66820,293 @@ var _default = exports["default"] = punycode; /***/ }), +/***/ "../../../node_modules/react-compiler-runtime/dist/index.js": +/*!******************************************************************!*\ + !*** ../../../node_modules/react-compiler-runtime/dist/index.js ***! + \******************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @lightSyntaxTransform + * @noflow + * @nolint + * @preventMunge + * @preserve-invariant-messages + */ + +"use no memo"; +'use strict'; + +var React = __webpack_require__(/*! react */ "react"); +function _interopNamespaceDefault(e) { + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { + return e[k]; + } + }); + } + }); + } + n.default = e; + return Object.freeze(n); +} +var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React); +var _a, _b; +const { + useRef, + useEffect, + isValidElement +} = React__namespace; +const ReactSecretInternals = (_a = React__namespace.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE) !== null && _a !== void 0 ? _a : React__namespace.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; +const $empty = Symbol.for('react.memo_cache_sentinel'); +const c = typeof ((_b = React__namespace.__COMPILER_RUNTIME) === null || _b === void 0 ? void 0 : _b.c) === 'function' ? React__namespace.__COMPILER_RUNTIME.c : function c(size) { + return React__namespace.useMemo(() => { + const $ = new Array(size); + for (let ii = 0; ii < size; ii++) { + $[ii] = $empty; + } + $[$empty] = true; + return $; + }, []); +}; +const LazyGuardDispatcher = {}; +['readContext', 'useCallback', 'useContext', 'useEffect', 'useImperativeHandle', 'useInsertionEffect', 'useLayoutEffect', 'useMemo', 'useReducer', 'useRef', 'useState', 'useDebugValue', 'useDeferredValue', 'useTransition', 'useMutableSource', 'useSyncExternalStore', 'useId', 'unstable_isNewReconciler', 'getCacheSignal', 'getCacheForType', 'useCacheRefresh'].forEach(name => { + LazyGuardDispatcher[name] = () => { + throw new Error(`[React] Unexpected React hook call (${name}) from a React compiled function. ` + "Check that all hooks are called directly and named according to convention ('use[A-Z]') "); + }; +}); +let originalDispatcher = null; +LazyGuardDispatcher['useMemoCache'] = count => { + if (originalDispatcher == null) { + throw new Error('React Compiler internal invariant violation: unexpected null dispatcher'); + } else { + return originalDispatcher.useMemoCache(count); + } +}; +var GuardKind; +(function (GuardKind) { + GuardKind[GuardKind["PushGuardContext"] = 0] = "PushGuardContext"; + GuardKind[GuardKind["PopGuardContext"] = 1] = "PopGuardContext"; + GuardKind[GuardKind["PushExpectHook"] = 2] = "PushExpectHook"; + GuardKind[GuardKind["PopExpectHook"] = 3] = "PopExpectHook"; +})(GuardKind || (GuardKind = {})); +function setCurrent(newDispatcher) { + ReactSecretInternals.ReactCurrentDispatcher.current = newDispatcher; + return ReactSecretInternals.ReactCurrentDispatcher.current; +} +const guardFrames = []; +function $dispatcherGuard(kind) { + const curr = ReactSecretInternals.ReactCurrentDispatcher.current; + if (kind === GuardKind.PushGuardContext) { + guardFrames.push(curr); + if (guardFrames.length === 1) { + originalDispatcher = curr; + } + if (curr === LazyGuardDispatcher) { + throw new Error(`[React] Unexpected call to custom hook or component from a React compiled function. ` + "Check that (1) all hooks are called directly and named according to convention ('use[A-Z]') " + 'and (2) components are returned as JSX instead of being directly invoked.'); + } + setCurrent(LazyGuardDispatcher); + } else if (kind === GuardKind.PopGuardContext) { + const lastFrame = guardFrames.pop(); + if (lastFrame == null) { + throw new Error('React Compiler internal error: unexpected null in guard stack'); + } + if (guardFrames.length === 0) { + originalDispatcher = null; + } + setCurrent(lastFrame); + } else if (kind === GuardKind.PushExpectHook) { + guardFrames.push(curr); + setCurrent(originalDispatcher); + } else if (kind === GuardKind.PopExpectHook) { + const lastFrame = guardFrames.pop(); + if (lastFrame == null) { + throw new Error('React Compiler internal error: unexpected null in guard stack'); + } + setCurrent(lastFrame); + } else { + throw new Error('React Compiler internal error: unreachable block' + kind); + } +} +function $reset($) { + for (let ii = 0; ii < $.length; ii++) { + $[ii] = $empty; + } +} +function $makeReadOnly() { + throw new Error('TODO: implement $makeReadOnly in react-compiler-runtime'); +} +const renderCounterRegistry = new Map(); +function clearRenderCounterRegistry() { + for (const counters of renderCounterRegistry.values()) { + counters.forEach(counter => { + counter.count = 0; + }); + } +} +function registerRenderCounter(name, val) { + let counters = renderCounterRegistry.get(name); + if (counters == null) { + counters = new Set(); + renderCounterRegistry.set(name, counters); + } + counters.add(val); +} +function removeRenderCounter(name, val) { + const counters = renderCounterRegistry.get(name); + if (counters == null) { + return; + } + counters.delete(val); +} +function useRenderCounter(name) { + const val = useRef(null); + if (val.current != null) { + val.current.count += 1; + } + useEffect(() => { + if (val.current == null) { + const counter = { + count: 0 + }; + registerRenderCounter(name, counter); + val.current = counter; + } + return () => { + if (val.current !== null) { + removeRenderCounter(name, val.current); + } + }; + }); +} +const seenErrors = new Set(); +function $structuralCheck(oldValue, newValue, variableName, fnName, kind, loc) { + function error(l, r, path, depth) { + const str = `${fnName}:${loc} [${kind}] ${variableName}${path} changed from ${l} to ${r} at depth ${depth}`; + if (seenErrors.has(str)) { + return; + } + seenErrors.add(str); + console.error(str); + } + const depthLimit = 2; + function recur(oldValue, newValue, path, depth) { + if (depth > depthLimit) { + return; + } else if (oldValue === newValue) { + return; + } else if (typeof oldValue !== typeof newValue) { + error(`type ${typeof oldValue}`, `type ${typeof newValue}`, path, depth); + } else if (typeof oldValue === 'object') { + const oldArray = Array.isArray(oldValue); + const newArray = Array.isArray(newValue); + if (oldValue === null && newValue !== null) { + error('null', `type ${typeof newValue}`, path, depth); + } else if (newValue === null) { + error(`type ${typeof oldValue}`, 'null', path, depth); + } else if (oldValue instanceof Map) { + if (!(newValue instanceof Map)) { + error(`Map instance`, `other value`, path, depth); + } else if (oldValue.size !== newValue.size) { + error(`Map instance with size ${oldValue.size}`, `Map instance with size ${newValue.size}`, path, depth); + } else { + for (const [k, v] of oldValue) { + if (!newValue.has(k)) { + error(`Map instance with key ${k}`, `Map instance without key ${k}`, path, depth); + } else { + recur(v, newValue.get(k), `${path}.get(${k})`, depth + 1); + } + } + } + } else if (newValue instanceof Map) { + error('other value', `Map instance`, path, depth); + } else if (oldValue instanceof Set) { + if (!(newValue instanceof Set)) { + error(`Set instance`, `other value`, path, depth); + } else if (oldValue.size !== newValue.size) { + error(`Set instance with size ${oldValue.size}`, `Set instance with size ${newValue.size}`, path, depth); + } else { + for (const v of newValue) { + if (!oldValue.has(v)) { + error(`Set instance without element ${v}`, `Set instance with element ${v}`, path, depth); + } + } + } + } else if (newValue instanceof Set) { + error('other value', `Set instance`, path, depth); + } else if (oldArray || newArray) { + if (oldArray !== newArray) { + error(`type ${oldArray ? 'array' : 'object'}`, `type ${newArray ? 'array' : 'object'}`, path, depth); + } else if (oldValue.length !== newValue.length) { + error(`array with length ${oldValue.length}`, `array with length ${newValue.length}`, path, depth); + } else { + for (let ii = 0; ii < oldValue.length; ii++) { + recur(oldValue[ii], newValue[ii], `${path}[${ii}]`, depth + 1); + } + } + } else if (isValidElement(oldValue) || isValidElement(newValue)) { + if (isValidElement(oldValue) !== isValidElement(newValue)) { + error(`type ${isValidElement(oldValue) ? 'React element' : 'object'}`, `type ${isValidElement(newValue) ? 'React element' : 'object'}`, path, depth); + } else if (oldValue.type !== newValue.type) { + error(`React element of type ${oldValue.type}`, `React element of type ${newValue.type}`, path, depth); + } else { + recur(oldValue.props, newValue.props, `[props of ${path}]`, depth + 1); + } + } else { + for (const key in newValue) { + if (!(key in oldValue)) { + error(`object without key ${key}`, `object with key ${key}`, path, depth); + } + } + for (const key in oldValue) { + if (!(key in newValue)) { + error(`object with key ${key}`, `object without key ${key}`, path, depth); + } else { + recur(oldValue[key], newValue[key], `${path}.${key}`, depth + 1); + } + } + } + } else if (typeof oldValue === 'function') { + return; + } else if (isNaN(oldValue) || isNaN(newValue)) { + if (isNaN(oldValue) !== isNaN(newValue)) { + error(`${isNaN(oldValue) ? 'NaN' : 'non-NaN value'}`, `${isNaN(newValue) ? 'NaN' : 'non-NaN value'}`, path, depth); + } + } else if (oldValue !== newValue) { + error(oldValue, newValue, path, depth); + } + } + recur(oldValue, newValue, '', 0); +} +exports.$dispatcherGuard = $dispatcherGuard; +exports.$makeReadOnly = $makeReadOnly; +exports.$reset = $reset; +exports.$structuralCheck = $structuralCheck; +exports.c = c; +exports.clearRenderCounterRegistry = clearRenderCounterRegistry; +exports.renderCounterRegistry = renderCounterRegistry; +exports.useRenderCounter = useRenderCounter; + +/***/ }), + /***/ "../../../node_modules/react-remove-scroll-bar/dist/es2015/component.js": /*!******************************************************************************!*\ !*** ../../../node_modules/react-remove-scroll-bar/dist/es2015/component.js ***! \******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49472,6 +67158,7 @@ exports.RemoveScrollBar = RemoveScrollBar; \******************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49495,6 +67182,7 @@ var removedBarSizeVariable = exports.removedBarSizeVariable = '--removed-body-sc \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49548,6 +67236,7 @@ var _utils = __webpack_require__(/*! ./utils */ "../../../node_modules/react-rem \**************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49602,6 +67291,7 @@ exports.getGapWidth = getGapWidth; \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49632,6 +67322,7 @@ var _default = exports["default"] = ReactRemoveScroll; \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49822,6 +67513,7 @@ function RemoveScrollSideCar(props) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49900,6 +67592,7 @@ RemoveScroll.classNames = { \*********************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49935,6 +67628,7 @@ var nonPassive = exports.nonPassive = passiveSupported ? { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50052,6 +67746,7 @@ exports.handleScroll = handleScroll; \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50074,6 +67769,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50091,6 +67787,7 @@ var effectCar = exports.effectCar = (0, _useSidecar.createSidecarMedium)(); \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50110,6 +67807,7 @@ var _default = exports["default"] = (0, _useSidecar.exportSidecar)(_medium.effec \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50143,6 +67841,7 @@ exports.styleSingleton = styleSingleton; \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50183,6 +67882,7 @@ exports.styleHookSingleton = styleHookSingleton; \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50218,6 +67918,7 @@ var _hook = __webpack_require__(/*! ./hook */ "../../../node_modules/react-style \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50280,6 +67981,7 @@ exports.stylesheetSingleton = stylesheetSingleton; \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; /** * @license React * react-jsx-runtime.development.js @@ -51418,6 +69120,7 @@ if (true) { \**************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; if (false) {} else { @@ -51432,6 +69135,7 @@ if (false) {} else { \************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; /*! * set-value * @@ -51578,6 +69282,7 @@ module.exports = setValue; \**********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -51802,6 +69507,7 @@ exports.vw = vw; \*******************************************************/ /***/ (function(module) { +"use strict"; module.exports = function () { @@ -51844,6 +69550,7 @@ module.exports = function () { \*************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52412,6 +70119,7 @@ var _default = exports["default"] = { \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; var regex$5 = /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; @@ -52435,6 +70143,7 @@ exports.Z = regex; \***********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52471,6 +70180,7 @@ function assignRef(ref, value) { \***********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52509,6 +70219,7 @@ function createCallbackRef(callback) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52585,6 +70296,7 @@ var _refToCallback = __webpack_require__(/*! ./refToCallback */ "../../../node_m \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52622,6 +70334,7 @@ function mergeRefs(refs) { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52687,6 +70400,7 @@ function useRefToCallback(ref) { \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52718,6 +70432,7 @@ function transformRef(ref, transformer) { \*************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52756,6 +70471,7 @@ function useMergeRefs(refs, defaultValue) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52812,6 +70528,7 @@ function useCallbackRef(initialValue, callback) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52847,6 +70564,7 @@ function useTransformRef(ref, transformer) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52871,6 +70589,7 @@ exports.setConfig = setConfig; \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52891,6 +70610,7 @@ var env = exports.env = { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52927,6 +70647,7 @@ function exportSidecar(medium, exported) { \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52963,6 +70684,7 @@ function sidecar(importer, errorComponent) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53032,6 +70754,7 @@ function useRealSidecar(importer, effect) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53094,6 +70817,7 @@ var _exports = __webpack_require__(/*! ./exports */ "../../../node_modules/use-s \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53205,6 +70929,7 @@ function createSidecarMedium(options) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53273,6 +70998,7 @@ function renderCar(WrappedComponent, defaults) { \*************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; /* -------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. @@ -55541,12584 +73267,20 @@ var Is; /***/ }), -/***/ "../../graphiql-react/dist/SchemaReference.cjs.js": -/*!********************************************************!*\ - !*** ../../graphiql-react/dist/SchemaReference.cjs.js ***! - \********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -const forEachState = __webpack_require__(/*! ./forEachState.cjs.js */ "../../graphiql-react/dist/forEachState.cjs.js"); -function getTypeInfo(schema, tokenState) { - const info = { - schema, - type: null, - parentType: null, - inputType: null, - directiveDef: null, - fieldDef: null, - argDef: null, - argDefs: null, - objectFieldDefs: null - }; - forEachState.forEachState(tokenState, state => { - var _a, _b; - switch (state.kind) { - case "Query": - case "ShortQuery": - info.type = schema.getQueryType(); - break; - case "Mutation": - info.type = schema.getMutationType(); - break; - case "Subscription": - info.type = schema.getSubscriptionType(); - break; - case "InlineFragment": - case "FragmentDefinition": - if (state.type) { - info.type = schema.getType(state.type); - } - break; - case "Field": - case "AliasedField": - info.fieldDef = info.type && state.name ? getFieldDef(schema, info.parentType, state.name) : null; - info.type = (_a = info.fieldDef) === null || _a === void 0 ? void 0 : _a.type; - break; - case "SelectionSet": - info.parentType = info.type ? graphql.getNamedType(info.type) : null; - break; - case "Directive": - info.directiveDef = state.name ? schema.getDirective(state.name) : null; - break; - case "Arguments": - const parentDef = state.prevState ? state.prevState.kind === "Field" ? info.fieldDef : state.prevState.kind === "Directive" ? info.directiveDef : state.prevState.kind === "AliasedField" ? state.prevState.name && getFieldDef(schema, info.parentType, state.prevState.name) : null : null; - info.argDefs = parentDef ? parentDef.args : null; - break; - case "Argument": - info.argDef = null; - if (info.argDefs) { - for (let i = 0; i < info.argDefs.length; i++) { - if (info.argDefs[i].name === state.name) { - info.argDef = info.argDefs[i]; - break; - } - } - } - info.inputType = (_b = info.argDef) === null || _b === void 0 ? void 0 : _b.type; - break; - case "EnumValue": - const enumType = info.inputType ? graphql.getNamedType(info.inputType) : null; - info.enumValue = enumType instanceof graphql.GraphQLEnumType ? find(enumType.getValues(), val => val.value === state.name) : null; - break; - case "ListValue": - const nullableType = info.inputType ? graphql.getNullableType(info.inputType) : null; - info.inputType = nullableType instanceof graphql.GraphQLList ? nullableType.ofType : null; - break; - case "ObjectValue": - const objectType = info.inputType ? graphql.getNamedType(info.inputType) : null; - info.objectFieldDefs = objectType instanceof graphql.GraphQLInputObjectType ? objectType.getFields() : null; - break; - case "ObjectField": - const objectField = state.name && info.objectFieldDefs ? info.objectFieldDefs[state.name] : null; - info.inputType = objectField === null || objectField === void 0 ? void 0 : objectField.type; - info.fieldDef = objectField; - break; - case "NamedType": - info.type = state.name ? schema.getType(state.name) : null; - break; - } - }); - return info; -} -function getFieldDef(schema, type, fieldName) { - if (fieldName === graphql.SchemaMetaFieldDef.name && schema.getQueryType() === type) { - return graphql.SchemaMetaFieldDef; - } - if (fieldName === graphql.TypeMetaFieldDef.name && schema.getQueryType() === type) { - return graphql.TypeMetaFieldDef; - } - if (fieldName === graphql.TypeNameMetaFieldDef.name && graphql.isCompositeType(type)) { - return graphql.TypeNameMetaFieldDef; - } - if (type && type.getFields) { - return type.getFields()[fieldName]; - } -} -function find(array, predicate) { - for (let i = 0; i < array.length; i++) { - if (predicate(array[i])) { - return array[i]; - } - } -} -function getFieldReference(typeInfo) { - return { - kind: "Field", - schema: typeInfo.schema, - field: typeInfo.fieldDef, - type: isMetaField(typeInfo.fieldDef) ? null : typeInfo.parentType - }; -} -function getDirectiveReference(typeInfo) { - return { - kind: "Directive", - schema: typeInfo.schema, - directive: typeInfo.directiveDef - }; -} -function getArgumentReference(typeInfo) { - return typeInfo.directiveDef ? { - kind: "Argument", - schema: typeInfo.schema, - argument: typeInfo.argDef, - directive: typeInfo.directiveDef - } : { - kind: "Argument", - schema: typeInfo.schema, - argument: typeInfo.argDef, - field: typeInfo.fieldDef, - type: isMetaField(typeInfo.fieldDef) ? null : typeInfo.parentType - }; -} -function getEnumValueReference(typeInfo) { - return { - kind: "EnumValue", - value: typeInfo.enumValue || void 0, - type: typeInfo.inputType ? graphql.getNamedType(typeInfo.inputType) : void 0 - }; -} -function getTypeReference(typeInfo, type) { - return { - kind: "Type", - schema: typeInfo.schema, - type: type || typeInfo.type - }; -} -function isMetaField(fieldDef) { - return fieldDef.name.slice(0, 2) === "__"; -} -exports.getArgumentReference = getArgumentReference; -exports.getDirectiveReference = getDirectiveReference; -exports.getEnumValueReference = getEnumValueReference; -exports.getFieldReference = getFieldReference; -exports.getTypeInfo = getTypeInfo; -exports.getTypeReference = getTypeReference; - -/***/ }), - -/***/ "../../graphiql-react/dist/brace-fold.cjs.js": -/*!***************************************************!*\ - !*** ../../graphiql-react/dist/brace-fold.cjs.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var braceFold$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - function bracketFolding(pairs) { - return function (cm, start) { - var line = start.line, - lineText = cm.getLine(line); - function findOpening(pair) { - var tokenType; - for (var at = start.ch, pass = 0;;) { - var found2 = at <= 0 ? -1 : lineText.lastIndexOf(pair[0], at - 1); - if (found2 == -1) { - if (pass == 1) break; - pass = 1; - at = lineText.length; - continue; - } - if (pass == 1 && found2 < start.ch) break; - tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found2 + 1)); - if (!/^(comment|string)/.test(tokenType)) return { - ch: found2 + 1, - tokenType, - pair - }; - at = found2 - 1; - } - } - function findRange(found2) { - var count = 1, - lastLine = cm.lastLine(), - end, - startCh = found2.ch, - endCh; - outer: for (var i2 = line; i2 <= lastLine; ++i2) { - var text = cm.getLine(i2), - pos = i2 == line ? startCh : 0; - for (;;) { - var nextOpen = text.indexOf(found2.pair[0], pos), - nextClose = text.indexOf(found2.pair[1], pos); - if (nextOpen < 0) nextOpen = text.length; - if (nextClose < 0) nextClose = text.length; - pos = Math.min(nextOpen, nextClose); - if (pos == text.length) break; - if (cm.getTokenTypeAt(CodeMirror.Pos(i2, pos + 1)) == found2.tokenType) { - if (pos == nextOpen) ++count;else if (! --count) { - end = i2; - endCh = pos; - break outer; - } - } - ++pos; - } - } - if (end == null || line == end) return null; - return { - from: CodeMirror.Pos(line, startCh), - to: CodeMirror.Pos(end, endCh) - }; - } - var found = []; - for (var i = 0; i < pairs.length; i++) { - var open = findOpening(pairs[i]); - if (open) found.push(open); - } - found.sort(function (a, b) { - return a.ch - b.ch; - }); - for (var i = 0; i < found.length; i++) { - var range = findRange(found[i]); - if (range) return range; - } - return null; - }; - } - CodeMirror.registerHelper("fold", "brace", bracketFolding([["{", "}"], ["[", "]"]])); - CodeMirror.registerHelper("fold", "brace-paren", bracketFolding([["{", "}"], ["[", "]"], ["(", ")"]])); - CodeMirror.registerHelper("fold", "import", function (cm, start) { - function hasImport(line) { - if (line < cm.firstLine() || line > cm.lastLine()) return null; - var start2 = cm.getTokenAt(CodeMirror.Pos(line, 1)); - if (!/\S/.test(start2.string)) start2 = cm.getTokenAt(CodeMirror.Pos(line, start2.end + 1)); - if (start2.type != "keyword" || start2.string != "import") return null; - for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) { - var text = cm.getLine(i), - semi = text.indexOf(";"); - if (semi != -1) return { - startCh: start2.end, - end: CodeMirror.Pos(i, semi) - }; - } - } - var startLine = start.line, - has = hasImport(startLine), - prev; - if (!has || hasImport(startLine - 1) || (prev = hasImport(startLine - 2)) && prev.end.line == startLine - 1) return null; - for (var end = has.end;;) { - var next = hasImport(end.line + 1); - if (next == null) break; - end = next.end; - } - return { - from: cm.clipPos(CodeMirror.Pos(startLine, has.startCh + 1)), - to: end - }; - }); - CodeMirror.registerHelper("fold", "include", function (cm, start) { - function hasInclude(line) { - if (line < cm.firstLine() || line > cm.lastLine()) return null; - var start2 = cm.getTokenAt(CodeMirror.Pos(line, 1)); - if (!/\S/.test(start2.string)) start2 = cm.getTokenAt(CodeMirror.Pos(line, start2.end + 1)); - if (start2.type == "meta" && start2.string.slice(0, 8) == "#include") return start2.start + 8; - } - var startLine = start.line, - has = hasInclude(startLine); - if (has == null || hasInclude(startLine - 1) != null) return null; - for (var end = startLine;;) { - var next = hasInclude(end + 1); - if (next == null) break; - ++end; - } - return { - from: CodeMirror.Pos(startLine, has + 1), - to: cm.clipPos(CodeMirror.Pos(end)) - }; - }); - }); -})(); -var braceFoldExports = braceFold$2.exports; -const braceFold = /* @__PURE__ */codemirror.getDefaultExportFromCjs(braceFoldExports); -const braceFold$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: braceFold -}, [braceFoldExports]); -exports.braceFold = braceFold$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/closebrackets.cjs.js": -/*!******************************************************!*\ - !*** ../../graphiql-react/dist/closebrackets.cjs.js ***! - \******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var closebrackets$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - var defaults = { - pairs: `()[]{}''""`, - closeBefore: `)]}'":;>`, - triples: "", - explode: "[]{}" - }; - var Pos = CodeMirror.Pos; - CodeMirror.defineOption("autoCloseBrackets", false, function (cm, val, old) { - if (old && old != CodeMirror.Init) { - cm.removeKeyMap(keyMap); - cm.state.closeBrackets = null; - } - if (val) { - ensureBound(getOption(val, "pairs")); - cm.state.closeBrackets = val; - cm.addKeyMap(keyMap); - } - }); - function getOption(conf, name) { - if (name == "pairs" && typeof conf == "string") return conf; - if (typeof conf == "object" && conf[name] != null) return conf[name]; - return defaults[name]; - } - var keyMap = { - Backspace: handleBackspace, - Enter: handleEnter - }; - function ensureBound(chars) { - for (var i = 0; i < chars.length; i++) { - var ch = chars.charAt(i), - key = "'" + ch + "'"; - if (!keyMap[key]) keyMap[key] = handler(ch); - } - } - ensureBound(defaults.pairs + "`"); - function handler(ch) { - return function (cm) { - return handleChar(cm, ch); - }; - } - function getConfig(cm) { - var deflt = cm.state.closeBrackets; - if (!deflt || deflt.override) return deflt; - var mode = cm.getModeAt(cm.getCursor()); - return mode.closeBrackets || deflt; - } - function handleBackspace(cm) { - var conf = getConfig(cm); - if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass; - var pairs = getOption(conf, "pairs"); - var ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) { - if (!ranges[i].empty()) return CodeMirror.Pass; - var around = charsAround(cm, ranges[i].head); - if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass; - } - for (var i = ranges.length - 1; i >= 0; i--) { - var cur = ranges[i].head; - cm.replaceRange("", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1), "+delete"); - } - } - function handleEnter(cm) { - var conf = getConfig(cm); - var explode = conf && getOption(conf, "explode"); - if (!explode || cm.getOption("disableInput")) return CodeMirror.Pass; - var ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) { - if (!ranges[i].empty()) return CodeMirror.Pass; - var around = charsAround(cm, ranges[i].head); - if (!around || explode.indexOf(around) % 2 != 0) return CodeMirror.Pass; - } - cm.operation(function () { - var linesep = cm.lineSeparator() || "\n"; - cm.replaceSelection(linesep + linesep, null); - moveSel(cm, -1); - ranges = cm.listSelections(); - for (var i2 = 0; i2 < ranges.length; i2++) { - var line = ranges[i2].head.line; - cm.indentLine(line, null, true); - cm.indentLine(line + 1, null, true); - } - }); - } - function moveSel(cm, dir) { - var newRanges = [], - ranges = cm.listSelections(), - primary = 0; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (range.head == cm.getCursor()) primary = i; - var pos = range.head.ch || dir > 0 ? { - line: range.head.line, - ch: range.head.ch + dir - } : { - line: range.head.line - 1 - }; - newRanges.push({ - anchor: pos, - head: pos - }); - } - cm.setSelections(newRanges, primary); - } - function contractSelection(sel) { - var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0; - return { - anchor: new Pos(sel.anchor.line, sel.anchor.ch + (inverted ? -1 : 1)), - head: new Pos(sel.head.line, sel.head.ch + (inverted ? 1 : -1)) - }; - } - function handleChar(cm, ch) { - var conf = getConfig(cm); - if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass; - var pairs = getOption(conf, "pairs"); - var pos = pairs.indexOf(ch); - if (pos == -1) return CodeMirror.Pass; - var closeBefore = getOption(conf, "closeBefore"); - var triples = getOption(conf, "triples"); - var identical = pairs.charAt(pos + 1) == ch; - var ranges = cm.listSelections(); - var opening = pos % 2 == 0; - var type; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i], - cur = range.head, - curType; - var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1)); - if (opening && !range.empty()) { - curType = "surround"; - } else if ((identical || !opening) && next == ch) { - if (identical && stringStartsAfter(cm, cur)) curType = "both";else if (triples.indexOf(ch) >= 0 && cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == ch + ch + ch) curType = "skipThree";else curType = "skip"; - } else if (identical && cur.ch > 1 && triples.indexOf(ch) >= 0 && cm.getRange(Pos(cur.line, cur.ch - 2), cur) == ch + ch) { - if (cur.ch > 2 && /\bstring/.test(cm.getTokenTypeAt(Pos(cur.line, cur.ch - 2)))) return CodeMirror.Pass; - curType = "addFour"; - } else if (identical) { - var prev = cur.ch == 0 ? " " : cm.getRange(Pos(cur.line, cur.ch - 1), cur); - if (!CodeMirror.isWordChar(next) && prev != ch && !CodeMirror.isWordChar(prev)) curType = "both";else return CodeMirror.Pass; - } else if (opening && (next.length === 0 || /\s/.test(next) || closeBefore.indexOf(next) > -1)) { - curType = "both"; - } else { - return CodeMirror.Pass; - } - if (!type) type = curType;else if (type != curType) return CodeMirror.Pass; - } - var left = pos % 2 ? pairs.charAt(pos - 1) : ch; - var right = pos % 2 ? ch : pairs.charAt(pos + 1); - cm.operation(function () { - if (type == "skip") { - moveSel(cm, 1); - } else if (type == "skipThree") { - moveSel(cm, 3); - } else if (type == "surround") { - var sels = cm.getSelections(); - for (var i2 = 0; i2 < sels.length; i2++) sels[i2] = left + sels[i2] + right; - cm.replaceSelections(sels, "around"); - sels = cm.listSelections().slice(); - for (var i2 = 0; i2 < sels.length; i2++) sels[i2] = contractSelection(sels[i2]); - cm.setSelections(sels); - } else if (type == "both") { - cm.replaceSelection(left + right, null); - cm.triggerElectric(left + right); - moveSel(cm, -1); - } else if (type == "addFour") { - cm.replaceSelection(left + left + left + left, "before"); - moveSel(cm, 1); - } - }); - } - function charsAround(cm, pos) { - var str = cm.getRange(Pos(pos.line, pos.ch - 1), Pos(pos.line, pos.ch + 1)); - return str.length == 2 ? str : null; - } - function stringStartsAfter(cm, pos) { - var token = cm.getTokenAt(Pos(pos.line, pos.ch + 1)); - return /\bstring/.test(token.type) && token.start == pos.ch && (pos.ch == 0 || !/\bstring/.test(cm.getTokenTypeAt(pos))); - } - }); -})(); -var closebracketsExports = closebrackets$2.exports; -const closebrackets = /* @__PURE__ */codemirror.getDefaultExportFromCjs(closebracketsExports); -const closebrackets$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: closebrackets -}, [closebracketsExports]); -exports.closebrackets = closebrackets$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/codemirror.cjs.js": -/*!***************************************************!*\ - !*** ../../graphiql-react/dist/codemirror.cjs.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror$1 = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var codemirrorExports = codemirror$1.requireCodemirror(); -const CodeMirror = /* @__PURE__ */codemirror$1.getDefaultExportFromCjs(codemirrorExports); -const codemirror = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: CodeMirror -}, [codemirrorExports]); -exports.CodeMirror = CodeMirror; -exports.codemirror = codemirror; - -/***/ }), - -/***/ "../../graphiql-react/dist/codemirror.cjs2.js": -/*!****************************************************!*\ - !*** ../../graphiql-react/dist/codemirror.cjs2.js ***! - \****************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof __webpack_require__.g !== "undefined" ? __webpack_require__.g : typeof self !== "undefined" ? self : {}; -function getDefaultExportFromCjs(x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; -} -var codemirror = { - exports: {} -}; -var hasRequiredCodemirror; -function requireCodemirror() { - if (hasRequiredCodemirror) return codemirror.exports; - hasRequiredCodemirror = 1; - (function (module2, exports2) { - (function (global2, factory) { - module2.exports = factory(); - })(commonjsGlobal, function () { - var userAgent = navigator.userAgent; - var platform = navigator.platform; - var gecko = /gecko\/\d/i.test(userAgent); - var ie_upto10 = /MSIE \d/.test(userAgent); - var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); - var edge = /Edge\/(\d+)/.exec(userAgent); - var ie = ie_upto10 || ie_11up || edge; - var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); - var webkit = !edge && /WebKit\//.test(userAgent); - var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); - var chrome = !edge && /Chrome\//.test(userAgent); - var presto = /Opera\//.test(userAgent); - var safari = /Apple Computer/.test(navigator.vendor); - var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); - var phantom = /PhantomJS/.test(userAgent); - var ios = safari && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2); - var android = /Android/.test(userAgent); - var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); - var mac = ios || /Mac/.test(platform); - var chromeOS = /\bCrOS\b/.test(userAgent); - var windows = /win/i.test(platform); - var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); - if (presto_version) { - presto_version = Number(presto_version[1]); - } - if (presto_version && presto_version >= 15) { - presto = false; - webkit = true; - } - var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); - var captureRightClick = gecko || ie && ie_version >= 9; - function classTest(cls) { - return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); - } - var rmClass = function (node, cls) { - var current = node.className; - var match = classTest(cls).exec(current); - if (match) { - var after = current.slice(match.index + match[0].length); - node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); - } - }; - function removeChildren(e) { - for (var count = e.childNodes.length; count > 0; --count) { - e.removeChild(e.firstChild); - } - return e; - } - function removeChildrenAndAdd(parent, e) { - return removeChildren(parent).appendChild(e); - } - function elt(tag, content, className, style) { - var e = document.createElement(tag); - if (className) { - e.className = className; - } - if (style) { - e.style.cssText = style; - } - if (typeof content == "string") { - e.appendChild(document.createTextNode(content)); - } else if (content) { - for (var i2 = 0; i2 < content.length; ++i2) { - e.appendChild(content[i2]); - } - } - return e; - } - function eltP(tag, content, className, style) { - var e = elt(tag, content, className, style); - e.setAttribute("role", "presentation"); - return e; - } - var range; - if (document.createRange) { - range = function (node, start, end, endNode) { - var r = document.createRange(); - r.setEnd(endNode || node, end); - r.setStart(node, start); - return r; - }; - } else { - range = function (node, start, end) { - var r = document.body.createTextRange(); - try { - r.moveToElementText(node.parentNode); - } catch (e) { - return r; - } - r.collapse(true); - r.moveEnd("character", end); - r.moveStart("character", start); - return r; - }; - } - function contains(parent, child) { - if (child.nodeType == 3) { - child = child.parentNode; - } - if (parent.contains) { - return parent.contains(child); - } - do { - if (child.nodeType == 11) { - child = child.host; - } - if (child == parent) { - return true; - } - } while (child = child.parentNode); - } - function activeElt() { - var activeElement; - try { - activeElement = document.activeElement; - } catch (e) { - activeElement = document.body || null; - } - while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) { - activeElement = activeElement.shadowRoot.activeElement; - } - return activeElement; - } - function addClass(node, cls) { - var current = node.className; - if (!classTest(cls).test(current)) { - node.className += (current ? " " : "") + cls; - } - } - function joinClasses(a, b) { - var as = a.split(" "); - for (var i2 = 0; i2 < as.length; i2++) { - if (as[i2] && !classTest(as[i2]).test(b)) { - b += " " + as[i2]; - } - } - return b; - } - var selectInput = function (node) { - node.select(); - }; - if (ios) { - selectInput = function (node) { - node.selectionStart = 0; - node.selectionEnd = node.value.length; - }; - } else if (ie) { - selectInput = function (node) { - try { - node.select(); - } catch (_e) {} - }; - } - function bind(f) { - var args = Array.prototype.slice.call(arguments, 1); - return function () { - return f.apply(null, args); - }; - } - function copyObj(obj, target, overwrite) { - if (!target) { - target = {}; - } - for (var prop2 in obj) { - if (obj.hasOwnProperty(prop2) && (overwrite !== false || !target.hasOwnProperty(prop2))) { - target[prop2] = obj[prop2]; - } - } - return target; - } - function countColumn(string, end, tabSize, startIndex, startValue) { - if (end == null) { - end = string.search(/[^\s\u00a0]/); - if (end == -1) { - end = string.length; - } - } - for (var i2 = startIndex || 0, n = startValue || 0;;) { - var nextTab = string.indexOf(" ", i2); - if (nextTab < 0 || nextTab >= end) { - return n + (end - i2); - } - n += nextTab - i2; - n += tabSize - n % tabSize; - i2 = nextTab + 1; - } - } - var Delayed = function () { - this.id = null; - this.f = null; - this.time = 0; - this.handler = bind(this.onTimeout, this); - }; - Delayed.prototype.onTimeout = function (self2) { - self2.id = 0; - if (self2.time <= + /* @__PURE__ */new Date()) { - self2.f(); - } else { - setTimeout(self2.handler, self2.time - + /* @__PURE__ */new Date()); - } - }; - Delayed.prototype.set = function (ms, f) { - this.f = f; - var time = + /* @__PURE__ */new Date() + ms; - if (!this.id || time < this.time) { - clearTimeout(this.id); - this.id = setTimeout(this.handler, ms); - this.time = time; - } - }; - function indexOf(array, elt2) { - for (var i2 = 0; i2 < array.length; ++i2) { - if (array[i2] == elt2) { - return i2; - } - } - return -1; - } - var scrollerGap = 50; - var Pass = { - toString: function () { - return "CodeMirror.Pass"; - } - }; - var sel_dontScroll = { - scroll: false - }, - sel_mouse = { - origin: "*mouse" - }, - sel_move = { - origin: "+move" - }; - function findColumn(string, goal, tabSize) { - for (var pos = 0, col = 0;;) { - var nextTab = string.indexOf(" ", pos); - if (nextTab == -1) { - nextTab = string.length; - } - var skipped = nextTab - pos; - if (nextTab == string.length || col + skipped >= goal) { - return pos + Math.min(skipped, goal - col); - } - col += nextTab - pos; - col += tabSize - col % tabSize; - pos = nextTab + 1; - if (col >= goal) { - return pos; - } - } - } - var spaceStrs = [""]; - function spaceStr(n) { - while (spaceStrs.length <= n) { - spaceStrs.push(lst(spaceStrs) + " "); - } - return spaceStrs[n]; - } - function lst(arr) { - return arr[arr.length - 1]; - } - function map(array, f) { - var out = []; - for (var i2 = 0; i2 < array.length; i2++) { - out[i2] = f(array[i2], i2); - } - return out; - } - function insertSorted(array, value, score) { - var pos = 0, - priority = score(value); - while (pos < array.length && score(array[pos]) <= priority) { - pos++; - } - array.splice(pos, 0, value); - } - function nothing() {} - function createObj(base, props) { - var inst; - if (Object.create) { - inst = Object.create(base); - } else { - nothing.prototype = base; - inst = new nothing(); - } - if (props) { - copyObj(props, inst); - } - return inst; - } - var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; - function isWordCharBasic(ch) { - return /\w/.test(ch) || ch > "€" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); - } - function isWordChar(ch, helper) { - if (!helper) { - return isWordCharBasic(ch); - } - if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { - return true; - } - return helper.test(ch); - } - function isEmpty(obj) { - for (var n in obj) { - if (obj.hasOwnProperty(n) && obj[n]) { - return false; - } - } - return true; - } - var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; - function isExtendingChar(ch) { - return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); - } - function skipExtendingChars(str, pos, dir) { - while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { - pos += dir; - } - return pos; - } - function findFirst(pred, from, to) { - var dir = from > to ? -1 : 1; - for (;;) { - if (from == to) { - return from; - } - var midF = (from + to) / 2, - mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF); - if (mid == from) { - return pred(mid) ? from : to; - } - if (pred(mid)) { - to = mid; - } else { - from = mid + dir; - } - } - } - function iterateBidiSections(order, from, to, f) { - if (!order) { - return f(from, to, "ltr", 0); - } - var found = false; - for (var i2 = 0; i2 < order.length; ++i2) { - var part = order[i2]; - if (part.from < to && part.to > from || from == to && part.to == from) { - f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i2); - found = true; - } - } - if (!found) { - f(from, to, "ltr"); - } - } - var bidiOther = null; - function getBidiPartAt(order, ch, sticky) { - var found; - bidiOther = null; - for (var i2 = 0; i2 < order.length; ++i2) { - var cur = order[i2]; - if (cur.from < ch && cur.to > ch) { - return i2; - } - if (cur.to == ch) { - if (cur.from != cur.to && sticky == "before") { - found = i2; - } else { - bidiOther = i2; - } - } - if (cur.from == ch) { - if (cur.from != cur.to && sticky != "before") { - found = i2; - } else { - bidiOther = i2; - } - } - } - return found != null ? found : bidiOther; - } - var bidiOrdering = /* @__PURE__ */function () { - var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; - var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"; - function charType(code) { - if (code <= 247) { - return lowTypes.charAt(code); - } else if (1424 <= code && code <= 1524) { - return "R"; - } else if (1536 <= code && code <= 1785) { - return arabicTypes.charAt(code - 1536); - } else if (1774 <= code && code <= 2220) { - return "r"; - } else if (8192 <= code && code <= 8203) { - return "w"; - } else if (code == 8204) { - return "b"; - } else { - return "L"; - } - } - var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; - var isNeutral = /[stwN]/, - isStrong = /[LRr]/, - countsAsLeft = /[Lb1n]/, - countsAsNum = /[1n]/; - function BidiSpan(level, from, to) { - this.level = level; - this.from = from; - this.to = to; - } - return function (str, direction) { - var outerType = direction == "ltr" ? "L" : "R"; - if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { - return false; - } - var len = str.length, - types = []; - for (var i2 = 0; i2 < len; ++i2) { - types.push(charType(str.charCodeAt(i2))); - } - for (var i$12 = 0, prev = outerType; i$12 < len; ++i$12) { - var type = types[i$12]; - if (type == "m") { - types[i$12] = prev; - } else { - prev = type; - } - } - for (var i$22 = 0, cur = outerType; i$22 < len; ++i$22) { - var type$1 = types[i$22]; - if (type$1 == "1" && cur == "r") { - types[i$22] = "n"; - } else if (isStrong.test(type$1)) { - cur = type$1; - if (type$1 == "r") { - types[i$22] = "R"; - } - } - } - for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { - var type$2 = types[i$3]; - if (type$2 == "+" && prev$1 == "1" && types[i$3 + 1] == "1") { - types[i$3] = "1"; - } else if (type$2 == "," && prev$1 == types[i$3 + 1] && (prev$1 == "1" || prev$1 == "n")) { - types[i$3] = prev$1; - } - prev$1 = type$2; - } - for (var i$4 = 0; i$4 < len; ++i$4) { - var type$3 = types[i$4]; - if (type$3 == ",") { - types[i$4] = "N"; - } else if (type$3 == "%") { - var end = void 0; - for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} - var replace = i$4 && types[i$4 - 1] == "!" || end < len && types[end] == "1" ? "1" : "N"; - for (var j = i$4; j < end; ++j) { - types[j] = replace; - } - i$4 = end - 1; - } - } - for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { - var type$4 = types[i$5]; - if (cur$1 == "L" && type$4 == "1") { - types[i$5] = "L"; - } else if (isStrong.test(type$4)) { - cur$1 = type$4; - } - } - for (var i$6 = 0; i$6 < len; ++i$6) { - if (isNeutral.test(types[i$6])) { - var end$1 = void 0; - for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} - var before = (i$6 ? types[i$6 - 1] : outerType) == "L"; - var after = (end$1 < len ? types[end$1] : outerType) == "L"; - var replace$1 = before == after ? before ? "L" : "R" : outerType; - for (var j$1 = i$6; j$1 < end$1; ++j$1) { - types[j$1] = replace$1; - } - i$6 = end$1 - 1; - } - } - var order = [], - m; - for (var i$7 = 0; i$7 < len;) { - if (countsAsLeft.test(types[i$7])) { - var start = i$7; - for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} - order.push(new BidiSpan(0, start, i$7)); - } else { - var pos = i$7, - at = order.length, - isRTL = direction == "rtl" ? 1 : 0; - for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} - for (var j$2 = pos; j$2 < i$7;) { - if (countsAsNum.test(types[j$2])) { - if (pos < j$2) { - order.splice(at, 0, new BidiSpan(1, pos, j$2)); - at += isRTL; - } - var nstart = j$2; - for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} - order.splice(at, 0, new BidiSpan(2, nstart, j$2)); - at += isRTL; - pos = j$2; - } else { - ++j$2; - } - } - if (pos < i$7) { - order.splice(at, 0, new BidiSpan(1, pos, i$7)); - } - } - } - if (direction == "ltr") { - if (order[0].level == 1 && (m = str.match(/^\s+/))) { - order[0].from = m[0].length; - order.unshift(new BidiSpan(0, 0, m[0].length)); - } - if (lst(order).level == 1 && (m = str.match(/\s+$/))) { - lst(order).to -= m[0].length; - order.push(new BidiSpan(0, len - m[0].length, len)); - } - } - return direction == "rtl" ? order.reverse() : order; - }; - }(); - function getOrder(line, direction) { - var order = line.order; - if (order == null) { - order = line.order = bidiOrdering(line.text, direction); - } - return order; - } - var noHandlers = []; - var on = function (emitter, type, f) { - if (emitter.addEventListener) { - emitter.addEventListener(type, f, false); - } else if (emitter.attachEvent) { - emitter.attachEvent("on" + type, f); - } else { - var map2 = emitter._handlers || (emitter._handlers = {}); - map2[type] = (map2[type] || noHandlers).concat(f); - } - }; - function getHandlers(emitter, type) { - return emitter._handlers && emitter._handlers[type] || noHandlers; - } - function off(emitter, type, f) { - if (emitter.removeEventListener) { - emitter.removeEventListener(type, f, false); - } else if (emitter.detachEvent) { - emitter.detachEvent("on" + type, f); - } else { - var map2 = emitter._handlers, - arr = map2 && map2[type]; - if (arr) { - var index = indexOf(arr, f); - if (index > -1) { - map2[type] = arr.slice(0, index).concat(arr.slice(index + 1)); - } - } - } - } - function signal(emitter, type) { - var handlers = getHandlers(emitter, type); - if (!handlers.length) { - return; - } - var args = Array.prototype.slice.call(arguments, 2); - for (var i2 = 0; i2 < handlers.length; ++i2) { - handlers[i2].apply(null, args); - } - } - function signalDOMEvent(cm, e, override) { - if (typeof e == "string") { - e = { - type: e, - preventDefault: function () { - this.defaultPrevented = true; - } - }; - } - signal(cm, override || e.type, cm, e); - return e_defaultPrevented(e) || e.codemirrorIgnore; - } - function signalCursorActivity(cm) { - var arr = cm._handlers && cm._handlers.cursorActivity; - if (!arr) { - return; - } - var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); - for (var i2 = 0; i2 < arr.length; ++i2) { - if (indexOf(set, arr[i2]) == -1) { - set.push(arr[i2]); - } - } - } - function hasHandler(emitter, type) { - return getHandlers(emitter, type).length > 0; - } - function eventMixin(ctor) { - ctor.prototype.on = function (type, f) { - on(this, type, f); - }; - ctor.prototype.off = function (type, f) { - off(this, type, f); - }; - } - function e_preventDefault(e) { - if (e.preventDefault) { - e.preventDefault(); - } else { - e.returnValue = false; - } - } - function e_stopPropagation(e) { - if (e.stopPropagation) { - e.stopPropagation(); - } else { - e.cancelBubble = true; - } - } - function e_defaultPrevented(e) { - return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; - } - function e_stop(e) { - e_preventDefault(e); - e_stopPropagation(e); - } - function e_target(e) { - return e.target || e.srcElement; - } - function e_button(e) { - var b = e.which; - if (b == null) { - if (e.button & 1) { - b = 1; - } else if (e.button & 2) { - b = 3; - } else if (e.button & 4) { - b = 2; - } - } - if (mac && e.ctrlKey && b == 1) { - b = 3; - } - return b; - } - var dragAndDrop = function () { - if (ie && ie_version < 9) { - return false; - } - var div = elt("div"); - return "draggable" in div || "dragDrop" in div; - }(); - var zwspSupported; - function zeroWidthElement(measure) { - if (zwspSupported == null) { - var test = elt("span", "​"); - removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); - if (measure.firstChild.offsetHeight != 0) { - zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); - } - } - var node = zwspSupported ? elt("span", "​") : elt("span", " ", null, "display: inline-block; width: 1px; margin-right: -1px"); - node.setAttribute("cm-text", ""); - return node; - } - var badBidiRects; - function hasBadBidiRects(measure) { - if (badBidiRects != null) { - return badBidiRects; - } - var txt = removeChildrenAndAdd(measure, document.createTextNode("AخA")); - var r0 = range(txt, 0, 1).getBoundingClientRect(); - var r1 = range(txt, 1, 2).getBoundingClientRect(); - removeChildren(measure); - if (!r0 || r0.left == r0.right) { - return false; - } - return badBidiRects = r1.right - r0.right < 3; - } - var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { - var pos = 0, - result = [], - l = string.length; - while (pos <= l) { - var nl = string.indexOf("\n", pos); - if (nl == -1) { - nl = string.length; - } - var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); - var rt = line.indexOf("\r"); - if (rt != -1) { - result.push(line.slice(0, rt)); - pos += rt + 1; - } else { - result.push(line); - pos = nl + 1; - } - } - return result; - } : function (string) { - return string.split(/\r\n?|\n/); - }; - var hasSelection = window.getSelection ? function (te) { - try { - return te.selectionStart != te.selectionEnd; - } catch (e) { - return false; - } - } : function (te) { - var range2; - try { - range2 = te.ownerDocument.selection.createRange(); - } catch (e) {} - if (!range2 || range2.parentElement() != te) { - return false; - } - return range2.compareEndPoints("StartToEnd", range2) != 0; - }; - var hasCopyEvent = function () { - var e = elt("div"); - if ("oncopy" in e) { - return true; - } - e.setAttribute("oncopy", "return;"); - return typeof e.oncopy == "function"; - }(); - var badZoomedRects = null; - function hasBadZoomedRects(measure) { - if (badZoomedRects != null) { - return badZoomedRects; - } - var node = removeChildrenAndAdd(measure, elt("span", "x")); - var normal = node.getBoundingClientRect(); - var fromRange = range(node, 0, 1).getBoundingClientRect(); - return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; - } - var modes = {}, - mimeModes = {}; - function defineMode(name, mode) { - if (arguments.length > 2) { - mode.dependencies = Array.prototype.slice.call(arguments, 2); - } - modes[name] = mode; - } - function defineMIME(mime, spec) { - mimeModes[mime] = spec; - } - function resolveMode(spec) { - if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { - spec = mimeModes[spec]; - } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { - var found = mimeModes[spec.name]; - if (typeof found == "string") { - found = { - name: found - }; - } - spec = createObj(found, spec); - spec.name = found.name; - } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { - return resolveMode("application/xml"); - } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { - return resolveMode("application/json"); - } - if (typeof spec == "string") { - return { - name: spec - }; - } else { - return spec || { - name: "null" - }; - } - } - function getMode(options, spec) { - spec = resolveMode(spec); - var mfactory = modes[spec.name]; - if (!mfactory) { - return getMode(options, "text/plain"); - } - var modeObj = mfactory(options, spec); - if (modeExtensions.hasOwnProperty(spec.name)) { - var exts = modeExtensions[spec.name]; - for (var prop2 in exts) { - if (!exts.hasOwnProperty(prop2)) { - continue; - } - if (modeObj.hasOwnProperty(prop2)) { - modeObj["_" + prop2] = modeObj[prop2]; - } - modeObj[prop2] = exts[prop2]; - } - } - modeObj.name = spec.name; - if (spec.helperType) { - modeObj.helperType = spec.helperType; - } - if (spec.modeProps) { - for (var prop$1 in spec.modeProps) { - modeObj[prop$1] = spec.modeProps[prop$1]; - } - } - return modeObj; - } - var modeExtensions = {}; - function extendMode(mode, properties) { - var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : modeExtensions[mode] = {}; - copyObj(properties, exts); - } - function copyState(mode, state) { - if (state === true) { - return state; - } - if (mode.copyState) { - return mode.copyState(state); - } - var nstate = {}; - for (var n in state) { - var val = state[n]; - if (val instanceof Array) { - val = val.concat([]); - } - nstate[n] = val; - } - return nstate; - } - function innerMode(mode, state) { - var info; - while (mode.innerMode) { - info = mode.innerMode(state); - if (!info || info.mode == mode) { - break; - } - state = info.state; - mode = info.mode; - } - return info || { - mode, - state - }; - } - function startState(mode, a1, a2) { - return mode.startState ? mode.startState(a1, a2) : true; - } - var StringStream = function (string, tabSize, lineOracle) { - this.pos = this.start = 0; - this.string = string; - this.tabSize = tabSize || 8; - this.lastColumnPos = this.lastColumnValue = 0; - this.lineStart = 0; - this.lineOracle = lineOracle; - }; - StringStream.prototype.eol = function () { - return this.pos >= this.string.length; - }; - StringStream.prototype.sol = function () { - return this.pos == this.lineStart; - }; - StringStream.prototype.peek = function () { - return this.string.charAt(this.pos) || void 0; - }; - StringStream.prototype.next = function () { - if (this.pos < this.string.length) { - return this.string.charAt(this.pos++); - } - }; - StringStream.prototype.eat = function (match) { - var ch = this.string.charAt(this.pos); - var ok; - if (typeof match == "string") { - ok = ch == match; - } else { - ok = ch && (match.test ? match.test(ch) : match(ch)); - } - if (ok) { - ++this.pos; - return ch; - } - }; - StringStream.prototype.eatWhile = function (match) { - var start = this.pos; - while (this.eat(match)) {} - return this.pos > start; - }; - StringStream.prototype.eatSpace = function () { - var start = this.pos; - while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { - ++this.pos; - } - return this.pos > start; - }; - StringStream.prototype.skipToEnd = function () { - this.pos = this.string.length; - }; - StringStream.prototype.skipTo = function (ch) { - var found = this.string.indexOf(ch, this.pos); - if (found > -1) { - this.pos = found; - return true; - } - }; - StringStream.prototype.backUp = function (n) { - this.pos -= n; - }; - StringStream.prototype.column = function () { - if (this.lastColumnPos < this.start) { - this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); - this.lastColumnPos = this.start; - } - return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); - }; - StringStream.prototype.indentation = function () { - return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); - }; - StringStream.prototype.match = function (pattern, consume, caseInsensitive) { - if (typeof pattern == "string") { - var cased = function (str) { - return caseInsensitive ? str.toLowerCase() : str; - }; - var substr = this.string.substr(this.pos, pattern.length); - if (cased(substr) == cased(pattern)) { - if (consume !== false) { - this.pos += pattern.length; - } - return true; - } - } else { - var match = this.string.slice(this.pos).match(pattern); - if (match && match.index > 0) { - return null; - } - if (match && consume !== false) { - this.pos += match[0].length; - } - return match; - } - }; - StringStream.prototype.current = function () { - return this.string.slice(this.start, this.pos); - }; - StringStream.prototype.hideFirstChars = function (n, inner) { - this.lineStart += n; - try { - return inner(); - } finally { - this.lineStart -= n; - } - }; - StringStream.prototype.lookAhead = function (n) { - var oracle = this.lineOracle; - return oracle && oracle.lookAhead(n); - }; - StringStream.prototype.baseToken = function () { - var oracle = this.lineOracle; - return oracle && oracle.baseToken(this.pos); - }; - function getLine(doc, n) { - n -= doc.first; - if (n < 0 || n >= doc.size) { - throw new Error("There is no line " + (n + doc.first) + " in the document."); - } - var chunk = doc; - while (!chunk.lines) { - for (var i2 = 0;; ++i2) { - var child = chunk.children[i2], - sz = child.chunkSize(); - if (n < sz) { - chunk = child; - break; - } - n -= sz; - } - } - return chunk.lines[n]; - } - function getBetween(doc, start, end) { - var out = [], - n = start.line; - doc.iter(start.line, end.line + 1, function (line) { - var text = line.text; - if (n == end.line) { - text = text.slice(0, end.ch); - } - if (n == start.line) { - text = text.slice(start.ch); - } - out.push(text); - ++n; - }); - return out; - } - function getLines(doc, from, to) { - var out = []; - doc.iter(from, to, function (line) { - out.push(line.text); - }); - return out; - } - function updateLineHeight(line, height) { - var diff = height - line.height; - if (diff) { - for (var n = line; n; n = n.parent) { - n.height += diff; - } - } - } - function lineNo(line) { - if (line.parent == null) { - return null; - } - var cur = line.parent, - no = indexOf(cur.lines, line); - for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { - for (var i2 = 0;; ++i2) { - if (chunk.children[i2] == cur) { - break; - } - no += chunk.children[i2].chunkSize(); - } - } - return no + cur.first; - } - function lineAtHeight(chunk, h) { - var n = chunk.first; - outer: do { - for (var i$12 = 0; i$12 < chunk.children.length; ++i$12) { - var child = chunk.children[i$12], - ch = child.height; - if (h < ch) { - chunk = child; - continue outer; - } - h -= ch; - n += child.chunkSize(); - } - return n; - } while (!chunk.lines); - var i2 = 0; - for (; i2 < chunk.lines.length; ++i2) { - var line = chunk.lines[i2], - lh = line.height; - if (h < lh) { - break; - } - h -= lh; - } - return n + i2; - } - function isLine(doc, l) { - return l >= doc.first && l < doc.first + doc.size; - } - function lineNumberFor(options, i2) { - return String(options.lineNumberFormatter(i2 + options.firstLineNumber)); - } - function Pos(line, ch, sticky) { - if (sticky === void 0) sticky = null; - if (!(this instanceof Pos)) { - return new Pos(line, ch, sticky); - } - this.line = line; - this.ch = ch; - this.sticky = sticky; - } - function cmp(a, b) { - return a.line - b.line || a.ch - b.ch; - } - function equalCursorPos(a, b) { - return a.sticky == b.sticky && cmp(a, b) == 0; - } - function copyPos(x) { - return Pos(x.line, x.ch); - } - function maxPos(a, b) { - return cmp(a, b) < 0 ? b : a; - } - function minPos(a, b) { - return cmp(a, b) < 0 ? a : b; - } - function clipLine(doc, n) { - return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1)); - } - function clipPos(doc, pos) { - if (pos.line < doc.first) { - return Pos(doc.first, 0); - } - var last = doc.first + doc.size - 1; - if (pos.line > last) { - return Pos(last, getLine(doc, last).text.length); - } - return clipToLen(pos, getLine(doc, pos.line).text.length); - } - function clipToLen(pos, linelen) { - var ch = pos.ch; - if (ch == null || ch > linelen) { - return Pos(pos.line, linelen); - } else if (ch < 0) { - return Pos(pos.line, 0); - } else { - return pos; - } - } - function clipPosArray(doc, array) { - var out = []; - for (var i2 = 0; i2 < array.length; i2++) { - out[i2] = clipPos(doc, array[i2]); - } - return out; - } - var SavedContext = function (state, lookAhead) { - this.state = state; - this.lookAhead = lookAhead; - }; - var Context = function (doc, state, line, lookAhead) { - this.state = state; - this.doc = doc; - this.line = line; - this.maxLookAhead = lookAhead || 0; - this.baseTokens = null; - this.baseTokenPos = 1; - }; - Context.prototype.lookAhead = function (n) { - var line = this.doc.getLine(this.line + n); - if (line != null && n > this.maxLookAhead) { - this.maxLookAhead = n; - } - return line; - }; - Context.prototype.baseToken = function (n) { - if (!this.baseTokens) { - return null; - } - while (this.baseTokens[this.baseTokenPos] <= n) { - this.baseTokenPos += 2; - } - var type = this.baseTokens[this.baseTokenPos + 1]; - return { - type: type && type.replace(/( |^)overlay .*/, ""), - size: this.baseTokens[this.baseTokenPos] - n - }; - }; - Context.prototype.nextLine = function () { - this.line++; - if (this.maxLookAhead > 0) { - this.maxLookAhead--; - } - }; - Context.fromSaved = function (doc, saved, line) { - if (saved instanceof SavedContext) { - return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead); - } else { - return new Context(doc, copyState(doc.mode, saved), line); - } - }; - Context.prototype.save = function (copy) { - var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state; - return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state; - }; - function highlightLine(cm, line, context, forceToEnd) { - var st = [cm.state.modeGen], - lineClasses = {}; - runMode(cm, line.text, cm.doc.mode, context, function (end, style) { - return st.push(end, style); - }, lineClasses, forceToEnd); - var state = context.state; - var loop = function (o2) { - context.baseTokens = st; - var overlay = cm.state.overlays[o2], - i2 = 1, - at = 0; - context.state = true; - runMode(cm, line.text, overlay.mode, context, function (end, style) { - var start = i2; - while (at < end) { - var i_end = st[i2]; - if (i_end > end) { - st.splice(i2, 1, end, st[i2 + 1], i_end); - } - i2 += 2; - at = Math.min(end, i_end); - } - if (!style) { - return; - } - if (overlay.opaque) { - st.splice(start, i2 - start, end, "overlay " + style); - i2 = start + 2; - } else { - for (; start < i2; start += 2) { - var cur = st[start + 1]; - st[start + 1] = (cur ? cur + " " : "") + "overlay " + style; - } - } - }, lineClasses); - context.state = state; - context.baseTokens = null; - context.baseTokenPos = 1; - }; - for (var o = 0; o < cm.state.overlays.length; ++o) loop(o); - return { - styles: st, - classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null - }; - } - function getLineStyles(cm, line, updateFrontier) { - if (!line.styles || line.styles[0] != cm.state.modeGen) { - var context = getContextBefore(cm, lineNo(line)); - var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state); - var result = highlightLine(cm, line, context); - if (resetState) { - context.state = resetState; - } - line.stateAfter = context.save(!resetState); - line.styles = result.styles; - if (result.classes) { - line.styleClasses = result.classes; - } else if (line.styleClasses) { - line.styleClasses = null; - } - if (updateFrontier === cm.doc.highlightFrontier) { - cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); - } - } - return line.styles; - } - function getContextBefore(cm, n, precise) { - var doc = cm.doc, - display = cm.display; - if (!doc.mode.startState) { - return new Context(doc, true, n); - } - var start = findStartLine(cm, n, precise); - var saved = start > doc.first && getLine(doc, start - 1).stateAfter; - var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start); - doc.iter(start, n, function (line) { - processLine(cm, line.text, context); - var pos = context.line; - line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null; - context.nextLine(); - }); - if (precise) { - doc.modeFrontier = context.line; - } - return context; - } - function processLine(cm, text, context, startAt) { - var mode = cm.doc.mode; - var stream = new StringStream(text, cm.options.tabSize, context); - stream.start = stream.pos = startAt || 0; - if (text == "") { - callBlankLine(mode, context.state); - } - while (!stream.eol()) { - readToken(mode, stream, context.state); - stream.start = stream.pos; - } - } - function callBlankLine(mode, state) { - if (mode.blankLine) { - return mode.blankLine(state); - } - if (!mode.innerMode) { - return; - } - var inner = innerMode(mode, state); - if (inner.mode.blankLine) { - return inner.mode.blankLine(inner.state); - } - } - function readToken(mode, stream, state, inner) { - for (var i2 = 0; i2 < 10; i2++) { - if (inner) { - inner[0] = innerMode(mode, state).mode; - } - var style = mode.token(stream, state); - if (stream.pos > stream.start) { - return style; - } - } - throw new Error("Mode " + mode.name + " failed to advance stream."); - } - var Token = function (stream, type, state) { - this.start = stream.start; - this.end = stream.pos; - this.string = stream.current(); - this.type = type || null; - this.state = state; - }; - function takeToken(cm, pos, precise, asArray) { - var doc = cm.doc, - mode = doc.mode, - style; - pos = clipPos(doc, pos); - var line = getLine(doc, pos.line), - context = getContextBefore(cm, pos.line, precise); - var stream = new StringStream(line.text, cm.options.tabSize, context), - tokens; - if (asArray) { - tokens = []; - } - while ((asArray || stream.pos < pos.ch) && !stream.eol()) { - stream.start = stream.pos; - style = readToken(mode, stream, context.state); - if (asArray) { - tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); - } - } - return asArray ? tokens : new Token(stream, style, context.state); - } - function extractLineClasses(type, output) { - if (type) { - for (;;) { - var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); - if (!lineClass) { - break; - } - type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); - var prop2 = lineClass[1] ? "bgClass" : "textClass"; - if (output[prop2] == null) { - output[prop2] = lineClass[2]; - } else if (!new RegExp("(?:^|\\s)" + lineClass[2] + "(?:$|\\s)").test(output[prop2])) { - output[prop2] += " " + lineClass[2]; - } - } - } - return type; - } - function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { - var flattenSpans = mode.flattenSpans; - if (flattenSpans == null) { - flattenSpans = cm.options.flattenSpans; - } - var curStart = 0, - curStyle = null; - var stream = new StringStream(text, cm.options.tabSize, context), - style; - var inner = cm.options.addModeClass && [null]; - if (text == "") { - extractLineClasses(callBlankLine(mode, context.state), lineClasses); - } - while (!stream.eol()) { - if (stream.pos > cm.options.maxHighlightLength) { - flattenSpans = false; - if (forceToEnd) { - processLine(cm, text, context, stream.pos); - } - stream.pos = text.length; - style = null; - } else { - style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses); - } - if (inner) { - var mName = inner[0].name; - if (mName) { - style = "m-" + (style ? mName + " " + style : mName); - } - } - if (!flattenSpans || curStyle != style) { - while (curStart < stream.start) { - curStart = Math.min(stream.start, curStart + 5e3); - f(curStart, curStyle); - } - curStyle = style; - } - stream.start = stream.pos; - } - while (curStart < stream.pos) { - var pos = Math.min(stream.pos, curStart + 5e3); - f(pos, curStyle); - curStart = pos; - } - } - function findStartLine(cm, n, precise) { - var minindent, - minline, - doc = cm.doc; - var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1e3 : 100); - for (var search = n; search > lim; --search) { - if (search <= doc.first) { - return doc.first; - } - var line = getLine(doc, search - 1), - after = line.stateAfter; - if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) { - return search; - } - var indented = countColumn(line.text, null, cm.options.tabSize); - if (minline == null || minindent > indented) { - minline = search - 1; - minindent = indented; - } - } - return minline; - } - function retreatFrontier(doc, n) { - doc.modeFrontier = Math.min(doc.modeFrontier, n); - if (doc.highlightFrontier < n - 10) { - return; - } - var start = doc.first; - for (var line = n - 1; line > start; line--) { - var saved = getLine(doc, line).stateAfter; - if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) { - start = line + 1; - break; - } - } - doc.highlightFrontier = Math.min(doc.highlightFrontier, start); - } - var sawReadOnlySpans = false, - sawCollapsedSpans = false; - function seeReadOnlySpans() { - sawReadOnlySpans = true; - } - function seeCollapsedSpans() { - sawCollapsedSpans = true; - } - function MarkedSpan(marker, from, to) { - this.marker = marker; - this.from = from; - this.to = to; - } - function getMarkedSpanFor(spans, marker) { - if (spans) { - for (var i2 = 0; i2 < spans.length; ++i2) { - var span = spans[i2]; - if (span.marker == marker) { - return span; - } - } - } - } - function removeMarkedSpan(spans, span) { - var r; - for (var i2 = 0; i2 < spans.length; ++i2) { - if (spans[i2] != span) { - (r || (r = [])).push(spans[i2]); - } - } - return r; - } - function addMarkedSpan(line, span, op) { - var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = /* @__PURE__ */new WeakSet())); - if (inThisOp && line.markedSpans && inThisOp.has(line.markedSpans)) { - line.markedSpans.push(span); - } else { - line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; - if (inThisOp) { - inThisOp.add(line.markedSpans); - } - } - span.marker.attachLine(line); - } - function markedSpansBefore(old, startCh, isInsert) { - var nw; - if (old) { - for (var i2 = 0; i2 < old.length; ++i2) { - var span = old[i2], - marker = span.marker; - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); - if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); - (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); - } - } - } - return nw; - } - function markedSpansAfter(old, endCh, isInsert) { - var nw; - if (old) { - for (var i2 = 0; i2 < old.length; ++i2) { - var span = old[i2], - marker = span.marker; - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); - if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); - (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh)); - } - } - } - return nw; - } - function stretchSpansOverChange(doc, change) { - if (change.full) { - return null; - } - var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; - var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; - if (!oldFirst && !oldLast) { - return null; - } - var startCh = change.from.ch, - endCh = change.to.ch, - isInsert = cmp(change.from, change.to) == 0; - var first = markedSpansBefore(oldFirst, startCh, isInsert); - var last = markedSpansAfter(oldLast, endCh, isInsert); - var sameLine = change.text.length == 1, - offset = lst(change.text).length + (sameLine ? startCh : 0); - if (first) { - for (var i2 = 0; i2 < first.length; ++i2) { - var span = first[i2]; - if (span.to == null) { - var found = getMarkedSpanFor(last, span.marker); - if (!found) { - span.to = startCh; - } else if (sameLine) { - span.to = found.to == null ? null : found.to + offset; - } - } - } - } - if (last) { - for (var i$12 = 0; i$12 < last.length; ++i$12) { - var span$1 = last[i$12]; - if (span$1.to != null) { - span$1.to += offset; - } - if (span$1.from == null) { - var found$1 = getMarkedSpanFor(first, span$1.marker); - if (!found$1) { - span$1.from = offset; - if (sameLine) { - (first || (first = [])).push(span$1); - } - } - } else { - span$1.from += offset; - if (sameLine) { - (first || (first = [])).push(span$1); - } - } - } - } - if (first) { - first = clearEmptySpans(first); - } - if (last && last != first) { - last = clearEmptySpans(last); - } - var newMarkers = [first]; - if (!sameLine) { - var gap = change.text.length - 2, - gapMarkers; - if (gap > 0 && first) { - for (var i$22 = 0; i$22 < first.length; ++i$22) { - if (first[i$22].to == null) { - (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$22].marker, null, null)); - } - } - } - for (var i$3 = 0; i$3 < gap; ++i$3) { - newMarkers.push(gapMarkers); - } - newMarkers.push(last); - } - return newMarkers; - } - function clearEmptySpans(spans) { - for (var i2 = 0; i2 < spans.length; ++i2) { - var span = spans[i2]; - if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) { - spans.splice(i2--, 1); - } - } - if (!spans.length) { - return null; - } - return spans; - } - function removeReadOnlyRanges(doc, from, to) { - var markers = null; - doc.iter(from.line, to.line + 1, function (line) { - if (line.markedSpans) { - for (var i3 = 0; i3 < line.markedSpans.length; ++i3) { - var mark = line.markedSpans[i3].marker; - if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) { - (markers || (markers = [])).push(mark); - } - } - } - }); - if (!markers) { - return null; - } - var parts = [{ - from, - to - }]; - for (var i2 = 0; i2 < markers.length; ++i2) { - var mk = markers[i2], - m = mk.find(0); - for (var j = 0; j < parts.length; ++j) { - var p = parts[j]; - if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { - continue; - } - var newParts = [j, 1], - dfrom = cmp(p.from, m.from), - dto = cmp(p.to, m.to); - if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) { - newParts.push({ - from: p.from, - to: m.from - }); - } - if (dto > 0 || !mk.inclusiveRight && !dto) { - newParts.push({ - from: m.to, - to: p.to - }); - } - parts.splice.apply(parts, newParts); - j += newParts.length - 3; - } - } - return parts; - } - function detachMarkedSpans(line) { - var spans = line.markedSpans; - if (!spans) { - return; - } - for (var i2 = 0; i2 < spans.length; ++i2) { - spans[i2].marker.detachLine(line); - } - line.markedSpans = null; - } - function attachMarkedSpans(line, spans) { - if (!spans) { - return; - } - for (var i2 = 0; i2 < spans.length; ++i2) { - spans[i2].marker.attachLine(line); - } - line.markedSpans = spans; - } - function extraLeft(marker) { - return marker.inclusiveLeft ? -1 : 0; - } - function extraRight(marker) { - return marker.inclusiveRight ? 1 : 0; - } - function compareCollapsedMarkers(a, b) { - var lenDiff = a.lines.length - b.lines.length; - if (lenDiff != 0) { - return lenDiff; - } - var aPos = a.find(), - bPos = b.find(); - var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); - if (fromCmp) { - return -fromCmp; - } - var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); - if (toCmp) { - return toCmp; - } - return b.id - a.id; - } - function collapsedSpanAtSide(line, start) { - var sps = sawCollapsedSpans && line.markedSpans, - found; - if (sps) { - for (var sp = void 0, i2 = 0; i2 < sps.length; ++i2) { - sp = sps[i2]; - if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { - found = sp.marker; - } - } - } - return found; - } - function collapsedSpanAtStart(line) { - return collapsedSpanAtSide(line, true); - } - function collapsedSpanAtEnd(line) { - return collapsedSpanAtSide(line, false); - } - function collapsedSpanAround(line, ch) { - var sps = sawCollapsedSpans && line.markedSpans, - found; - if (sps) { - for (var i2 = 0; i2 < sps.length; ++i2) { - var sp = sps[i2]; - if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { - found = sp.marker; - } - } - } - return found; - } - function conflictingCollapsedRange(doc, lineNo2, from, to, marker) { - var line = getLine(doc, lineNo2); - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) { - for (var i2 = 0; i2 < sps.length; ++i2) { - var sp = sps[i2]; - if (!sp.marker.collapsed) { - continue; - } - var found = sp.marker.find(0); - var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); - var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); - if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { - continue; - } - if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) { - return true; - } - } - } - } - function visualLine(line) { - var merged; - while (merged = collapsedSpanAtStart(line)) { - line = merged.find(-1, true).line; - } - return line; - } - function visualLineEnd(line) { - var merged; - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - } - return line; - } - function visualLineContinued(line) { - var merged, lines; - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - (lines || (lines = [])).push(line); - } - return lines; - } - function visualLineNo(doc, lineN) { - var line = getLine(doc, lineN), - vis = visualLine(line); - if (line == vis) { - return lineN; - } - return lineNo(vis); - } - function visualLineEndNo(doc, lineN) { - if (lineN > doc.lastLine()) { - return lineN; - } - var line = getLine(doc, lineN), - merged; - if (!lineIsHidden(doc, line)) { - return lineN; - } - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - } - return lineNo(line) + 1; - } - function lineIsHidden(doc, line) { - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) { - for (var sp = void 0, i2 = 0; i2 < sps.length; ++i2) { - sp = sps[i2]; - if (!sp.marker.collapsed) { - continue; - } - if (sp.from == null) { - return true; - } - if (sp.marker.widgetNode) { - continue; - } - if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) { - return true; - } - } - } - } - function lineIsHiddenInner(doc, line, span) { - if (span.to == null) { - var end = span.marker.find(1, true); - return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); - } - if (span.marker.inclusiveRight && span.to == line.text.length) { - return true; - } - for (var sp = void 0, i2 = 0; i2 < line.markedSpans.length; ++i2) { - sp = line.markedSpans[i2]; - if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) { - return true; - } - } - } - function heightAtLine(lineObj) { - lineObj = visualLine(lineObj); - var h = 0, - chunk = lineObj.parent; - for (var i2 = 0; i2 < chunk.lines.length; ++i2) { - var line = chunk.lines[i2]; - if (line == lineObj) { - break; - } else { - h += line.height; - } - } - for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { - for (var i$12 = 0; i$12 < p.children.length; ++i$12) { - var cur = p.children[i$12]; - if (cur == chunk) { - break; - } else { - h += cur.height; - } - } - } - return h; - } - function lineLength(line) { - if (line.height == 0) { - return 0; - } - var len = line.text.length, - merged, - cur = line; - while (merged = collapsedSpanAtStart(cur)) { - var found = merged.find(0, true); - cur = found.from.line; - len += found.from.ch - found.to.ch; - } - cur = line; - while (merged = collapsedSpanAtEnd(cur)) { - var found$1 = merged.find(0, true); - len -= cur.text.length - found$1.from.ch; - cur = found$1.to.line; - len += cur.text.length - found$1.to.ch; - } - return len; - } - function findMaxLine(cm) { - var d = cm.display, - doc = cm.doc; - d.maxLine = getLine(doc, doc.first); - d.maxLineLength = lineLength(d.maxLine); - d.maxLineChanged = true; - doc.iter(function (line) { - var len = lineLength(line); - if (len > d.maxLineLength) { - d.maxLineLength = len; - d.maxLine = line; - } - }); - } - var Line = function (text, markedSpans, estimateHeight2) { - this.text = text; - attachMarkedSpans(this, markedSpans); - this.height = estimateHeight2 ? estimateHeight2(this) : 1; - }; - Line.prototype.lineNo = function () { - return lineNo(this); - }; - eventMixin(Line); - function updateLine(line, text, markedSpans, estimateHeight2) { - line.text = text; - if (line.stateAfter) { - line.stateAfter = null; - } - if (line.styles) { - line.styles = null; - } - if (line.order != null) { - line.order = null; - } - detachMarkedSpans(line); - attachMarkedSpans(line, markedSpans); - var estHeight = estimateHeight2 ? estimateHeight2(line) : 1; - if (estHeight != line.height) { - updateLineHeight(line, estHeight); - } - } - function cleanUpLine(line) { - line.parent = null; - detachMarkedSpans(line); - } - var styleToClassCache = {}, - styleToClassCacheWithMode = {}; - function interpretTokenStyle(style, options) { - if (!style || /^\s*$/.test(style)) { - return null; - } - var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; - return cache[style] || (cache[style] = style.replace(/\S+/g, "cm-$&")); - } - function buildLineContent(cm, lineView) { - var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null); - var builder = { - pre: eltP("pre", [content], "CodeMirror-line"), - content, - col: 0, - pos: 0, - cm, - trailingSpace: false, - splitSpaces: cm.getOption("lineWrapping") - }; - lineView.measure = {}; - for (var i2 = 0; i2 <= (lineView.rest ? lineView.rest.length : 0); i2++) { - var line = i2 ? lineView.rest[i2 - 1] : lineView.line, - order = void 0; - builder.pos = 0; - builder.addToken = buildToken; - if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) { - builder.addToken = buildTokenBadBidi(builder.addToken, order); - } - builder.map = []; - var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); - insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); - if (line.styleClasses) { - if (line.styleClasses.bgClass) { - builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); - } - if (line.styleClasses.textClass) { - builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); - } - } - if (builder.map.length == 0) { - builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); - } - if (i2 == 0) { - lineView.measure.map = builder.map; - lineView.measure.cache = {}; - } else { - (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); - (lineView.measure.caches || (lineView.measure.caches = [])).push({}); - } - } - if (webkit) { - var last = builder.content.lastChild; - if (/\bcm-tab\b/.test(last.className) || last.querySelector && last.querySelector(".cm-tab")) { - builder.content.className = "cm-tab-wrap-hack"; - } - } - signal(cm, "renderLine", cm, lineView.line, builder.pre); - if (builder.pre.className) { - builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); - } - return builder; - } - function defaultSpecialCharPlaceholder(ch) { - var token = elt("span", "•", "cm-invalidchar"); - token.title = "\\u" + ch.charCodeAt(0).toString(16); - token.setAttribute("aria-label", token.title); - return token; - } - function buildToken(builder, text, style, startStyle, endStyle, css, attributes) { - if (!text) { - return; - } - var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text; - var special = builder.cm.state.specialChars, - mustWrap = false; - var content; - if (!special.test(text)) { - builder.col += text.length; - content = document.createTextNode(displayText); - builder.map.push(builder.pos, builder.pos + text.length, content); - if (ie && ie_version < 9) { - mustWrap = true; - } - builder.pos += text.length; - } else { - content = document.createDocumentFragment(); - var pos = 0; - while (true) { - special.lastIndex = pos; - var m = special.exec(text); - var skipped = m ? m.index - pos : text.length - pos; - if (skipped) { - var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); - if (ie && ie_version < 9) { - content.appendChild(elt("span", [txt])); - } else { - content.appendChild(txt); - } - builder.map.push(builder.pos, builder.pos + skipped, txt); - builder.col += skipped; - builder.pos += skipped; - } - if (!m) { - break; - } - pos += skipped + 1; - var txt$1 = void 0; - if (m[0] == " ") { - var tabSize = builder.cm.options.tabSize, - tabWidth = tabSize - builder.col % tabSize; - txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); - txt$1.setAttribute("role", "presentation"); - txt$1.setAttribute("cm-text", " "); - builder.col += tabWidth; - } else if (m[0] == "\r" || m[0] == "\n") { - txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "␍" : "␤", "cm-invalidchar")); - txt$1.setAttribute("cm-text", m[0]); - builder.col += 1; - } else { - txt$1 = builder.cm.options.specialCharPlaceholder(m[0]); - txt$1.setAttribute("cm-text", m[0]); - if (ie && ie_version < 9) { - content.appendChild(elt("span", [txt$1])); - } else { - content.appendChild(txt$1); - } - builder.col += 1; - } - builder.map.push(builder.pos, builder.pos + 1, txt$1); - builder.pos++; - } - } - builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32; - if (style || startStyle || endStyle || mustWrap || css || attributes) { - var fullStyle = style || ""; - if (startStyle) { - fullStyle += startStyle; - } - if (endStyle) { - fullStyle += endStyle; - } - var token = elt("span", [content], fullStyle, css); - if (attributes) { - for (var attr in attributes) { - if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class") { - token.setAttribute(attr, attributes[attr]); - } - } - } - return builder.content.appendChild(token); - } - builder.content.appendChild(content); - } - function splitSpaces(text, trailingBefore) { - if (text.length > 1 && !/ /.test(text)) { - return text; - } - var spaceBefore = trailingBefore, - result = ""; - for (var i2 = 0; i2 < text.length; i2++) { - var ch = text.charAt(i2); - if (ch == " " && spaceBefore && (i2 == text.length - 1 || text.charCodeAt(i2 + 1) == 32)) { - ch = " "; - } - result += ch; - spaceBefore = ch == " "; - } - return result; - } - function buildTokenBadBidi(inner, order) { - return function (builder, text, style, startStyle, endStyle, css, attributes) { - style = style ? style + " cm-force-border" : "cm-force-border"; - var start = builder.pos, - end = start + text.length; - for (;;) { - var part = void 0; - for (var i2 = 0; i2 < order.length; i2++) { - part = order[i2]; - if (part.to > start && part.from <= start) { - break; - } - } - if (part.to >= end) { - return inner(builder, text, style, startStyle, endStyle, css, attributes); - } - inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes); - startStyle = null; - text = text.slice(part.to - start); - start = part.to; - } - }; - } - function buildCollapsedSpan(builder, size, marker, ignoreWidget) { - var widget = !ignoreWidget && marker.widgetNode; - if (widget) { - builder.map.push(builder.pos, builder.pos + size, widget); - } - if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { - if (!widget) { - widget = builder.content.appendChild(document.createElement("span")); - } - widget.setAttribute("cm-marker", marker.id); - } - if (widget) { - builder.cm.display.input.setUneditable(widget); - builder.content.appendChild(widget); - } - builder.pos += size; - builder.trailingSpace = false; - } - function insertLineContent(line, builder, styles) { - var spans = line.markedSpans, - allText = line.text, - at = 0; - if (!spans) { - for (var i$12 = 1; i$12 < styles.length; i$12 += 2) { - builder.addToken(builder, allText.slice(at, at = styles[i$12]), interpretTokenStyle(styles[i$12 + 1], builder.cm.options)); - } - return; - } - var len = allText.length, - pos = 0, - i2 = 1, - text = "", - style, - css; - var nextChange = 0, - spanStyle, - spanEndStyle, - spanStartStyle, - collapsed, - attributes; - for (;;) { - if (nextChange == pos) { - spanStyle = spanEndStyle = spanStartStyle = css = ""; - attributes = null; - collapsed = null; - nextChange = Infinity; - var foundBookmarks = [], - endStyles = void 0; - for (var j = 0; j < spans.length; ++j) { - var sp = spans[j], - m = sp.marker; - if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { - foundBookmarks.push(m); - } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { - if (sp.to != null && sp.to != pos && nextChange > sp.to) { - nextChange = sp.to; - spanEndStyle = ""; - } - if (m.className) { - spanStyle += " " + m.className; - } - if (m.css) { - css = (css ? css + ";" : "") + m.css; - } - if (m.startStyle && sp.from == pos) { - spanStartStyle += " " + m.startStyle; - } - if (m.endStyle && sp.to == nextChange) { - (endStyles || (endStyles = [])).push(m.endStyle, sp.to); - } - if (m.title) { - (attributes || (attributes = {})).title = m.title; - } - if (m.attributes) { - for (var attr in m.attributes) { - (attributes || (attributes = {}))[attr] = m.attributes[attr]; - } - } - if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) { - collapsed = sp; - } - } else if (sp.from > pos && nextChange > sp.from) { - nextChange = sp.from; - } - } - if (endStyles) { - for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) { - if (endStyles[j$1 + 1] == nextChange) { - spanEndStyle += " " + endStyles[j$1]; - } - } - } - if (!collapsed || collapsed.from == pos) { - for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) { - buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); - } - } - if (collapsed && (collapsed.from || 0) == pos) { - buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null); - if (collapsed.to == null) { - return; - } - if (collapsed.to == pos) { - collapsed = false; - } - } - } - if (pos >= len) { - break; - } - var upto = Math.min(len, nextChange); - while (true) { - if (text) { - var end = pos + text.length; - if (!collapsed) { - var tokenText = end > upto ? text.slice(0, upto - pos) : text; - builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes); - } - if (end >= upto) { - text = text.slice(upto - pos); - pos = upto; - break; - } - pos = end; - spanStartStyle = ""; - } - text = allText.slice(at, at = styles[i2++]); - style = interpretTokenStyle(styles[i2++], builder.cm.options); - } - } - } - function LineView(doc, line, lineN) { - this.line = line; - this.rest = visualLineContinued(line); - this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; - this.node = this.text = null; - this.hidden = lineIsHidden(doc, line); - } - function buildViewArray(cm, from, to) { - var array = [], - nextPos; - for (var pos = from; pos < to; pos = nextPos) { - var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); - nextPos = pos + view.size; - array.push(view); - } - return array; - } - var operationGroup = null; - function pushOperation(op) { - if (operationGroup) { - operationGroup.ops.push(op); - } else { - op.ownsGroup = operationGroup = { - ops: [op], - delayedCallbacks: [] - }; - } - } - function fireCallbacksForOps(group) { - var callbacks = group.delayedCallbacks, - i2 = 0; - do { - for (; i2 < callbacks.length; i2++) { - callbacks[i2].call(null); - } - for (var j = 0; j < group.ops.length; j++) { - var op = group.ops[j]; - if (op.cursorActivityHandlers) { - while (op.cursorActivityCalled < op.cursorActivityHandlers.length) { - op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); - } - } - } - } while (i2 < callbacks.length); - } - function finishOperation(op, endCb) { - var group = op.ownsGroup; - if (!group) { - return; - } - try { - fireCallbacksForOps(group); - } finally { - operationGroup = null; - endCb(group); - } - } - var orphanDelayedCallbacks = null; - function signalLater(emitter, type) { - var arr = getHandlers(emitter, type); - if (!arr.length) { - return; - } - var args = Array.prototype.slice.call(arguments, 2), - list; - if (operationGroup) { - list = operationGroup.delayedCallbacks; - } else if (orphanDelayedCallbacks) { - list = orphanDelayedCallbacks; - } else { - list = orphanDelayedCallbacks = []; - setTimeout(fireOrphanDelayed, 0); - } - var loop = function (i3) { - list.push(function () { - return arr[i3].apply(null, args); - }); - }; - for (var i2 = 0; i2 < arr.length; ++i2) loop(i2); - } - function fireOrphanDelayed() { - var delayed = orphanDelayedCallbacks; - orphanDelayedCallbacks = null; - for (var i2 = 0; i2 < delayed.length; ++i2) { - delayed[i2](); - } - } - function updateLineForChanges(cm, lineView, lineN, dims) { - for (var j = 0; j < lineView.changes.length; j++) { - var type = lineView.changes[j]; - if (type == "text") { - updateLineText(cm, lineView); - } else if (type == "gutter") { - updateLineGutter(cm, lineView, lineN, dims); - } else if (type == "class") { - updateLineClasses(cm, lineView); - } else if (type == "widget") { - updateLineWidgets(cm, lineView, dims); - } - } - lineView.changes = null; - } - function ensureLineWrapped(lineView) { - if (lineView.node == lineView.text) { - lineView.node = elt("div", null, null, "position: relative"); - if (lineView.text.parentNode) { - lineView.text.parentNode.replaceChild(lineView.node, lineView.text); - } - lineView.node.appendChild(lineView.text); - if (ie && ie_version < 8) { - lineView.node.style.zIndex = 2; - } - } - return lineView.node; - } - function updateLineBackground(cm, lineView) { - var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; - if (cls) { - cls += " CodeMirror-linebackground"; - } - if (lineView.background) { - if (cls) { - lineView.background.className = cls; - } else { - lineView.background.parentNode.removeChild(lineView.background); - lineView.background = null; - } - } else if (cls) { - var wrap = ensureLineWrapped(lineView); - lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); - cm.display.input.setUneditable(lineView.background); - } - } - function getLineContent(cm, lineView) { - var ext = cm.display.externalMeasured; - if (ext && ext.line == lineView.line) { - cm.display.externalMeasured = null; - lineView.measure = ext.measure; - return ext.built; - } - return buildLineContent(cm, lineView); - } - function updateLineText(cm, lineView) { - var cls = lineView.text.className; - var built = getLineContent(cm, lineView); - if (lineView.text == lineView.node) { - lineView.node = built.pre; - } - lineView.text.parentNode.replaceChild(built.pre, lineView.text); - lineView.text = built.pre; - if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { - lineView.bgClass = built.bgClass; - lineView.textClass = built.textClass; - updateLineClasses(cm, lineView); - } else if (cls) { - lineView.text.className = cls; - } - } - function updateLineClasses(cm, lineView) { - updateLineBackground(cm, lineView); - if (lineView.line.wrapClass) { - ensureLineWrapped(lineView).className = lineView.line.wrapClass; - } else if (lineView.node != lineView.text) { - lineView.node.className = ""; - } - var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; - lineView.text.className = textClass || ""; - } - function updateLineGutter(cm, lineView, lineN, dims) { - if (lineView.gutter) { - lineView.node.removeChild(lineView.gutter); - lineView.gutter = null; - } - if (lineView.gutterBackground) { - lineView.node.removeChild(lineView.gutterBackground); - lineView.gutterBackground = null; - } - if (lineView.line.gutterClass) { - var wrap = ensureLineWrapped(lineView); - lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + dims.gutterTotalWidth + "px"); - cm.display.input.setUneditable(lineView.gutterBackground); - wrap.insertBefore(lineView.gutterBackground, lineView.text); - } - var markers = lineView.line.gutterMarkers; - if (cm.options.lineNumbers || markers) { - var wrap$1 = ensureLineWrapped(lineView); - var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"); - gutterWrap.setAttribute("aria-hidden", "true"); - cm.display.input.setUneditable(gutterWrap); - wrap$1.insertBefore(gutterWrap, lineView.text); - if (lineView.line.gutterClass) { - gutterWrap.className += " " + lineView.line.gutterClass; - } - if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) { - lineView.lineNumber = gutterWrap.appendChild(elt("div", lineNumberFor(cm.options, lineN), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + cm.display.lineNumInnerWidth + "px")); - } - if (markers) { - for (var k = 0; k < cm.display.gutterSpecs.length; ++k) { - var id = cm.display.gutterSpecs[k].className, - found = markers.hasOwnProperty(id) && markers[id]; - if (found) { - gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); - } - } - } - } - } - function updateLineWidgets(cm, lineView, dims) { - if (lineView.alignable) { - lineView.alignable = null; - } - var isWidget = classTest("CodeMirror-linewidget"); - for (var node = lineView.node.firstChild, next = void 0; node; node = next) { - next = node.nextSibling; - if (isWidget.test(node.className)) { - lineView.node.removeChild(node); - } - } - insertLineWidgets(cm, lineView, dims); - } - function buildLineElement(cm, lineView, lineN, dims) { - var built = getLineContent(cm, lineView); - lineView.text = lineView.node = built.pre; - if (built.bgClass) { - lineView.bgClass = built.bgClass; - } - if (built.textClass) { - lineView.textClass = built.textClass; - } - updateLineClasses(cm, lineView); - updateLineGutter(cm, lineView, lineN, dims); - insertLineWidgets(cm, lineView, dims); - return lineView.node; - } - function insertLineWidgets(cm, lineView, dims) { - insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); - if (lineView.rest) { - for (var i2 = 0; i2 < lineView.rest.length; i2++) { - insertLineWidgetsFor(cm, lineView.rest[i2], lineView, dims, false); - } - } - } - function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { - if (!line.widgets) { - return; - } - var wrap = ensureLineWrapped(lineView); - for (var i2 = 0, ws = line.widgets; i2 < ws.length; ++i2) { - var widget = ws[i2], - node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : "")); - if (!widget.handleMouseEvents) { - node.setAttribute("cm-ignore-events", "true"); - } - positionLineWidget(widget, node, lineView, dims); - cm.display.input.setUneditable(node); - if (allowAbove && widget.above) { - wrap.insertBefore(node, lineView.gutter || lineView.text); - } else { - wrap.appendChild(node); - } - signalLater(widget, "redraw"); - } - } - function positionLineWidget(widget, node, lineView, dims) { - if (widget.noHScroll) { - (lineView.alignable || (lineView.alignable = [])).push(node); - var width = dims.wrapperWidth; - node.style.left = dims.fixedPos + "px"; - if (!widget.coverGutter) { - width -= dims.gutterTotalWidth; - node.style.paddingLeft = dims.gutterTotalWidth + "px"; - } - node.style.width = width + "px"; - } - if (widget.coverGutter) { - node.style.zIndex = 5; - node.style.position = "relative"; - if (!widget.noHScroll) { - node.style.marginLeft = -dims.gutterTotalWidth + "px"; - } - } - } - function widgetHeight(widget) { - if (widget.height != null) { - return widget.height; - } - var cm = widget.doc.cm; - if (!cm) { - return 0; - } - if (!contains(document.body, widget.node)) { - var parentStyle = "position: relative;"; - if (widget.coverGutter) { - parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; - } - if (widget.noHScroll) { - parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; - } - removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); - } - return widget.height = widget.node.parentNode.offsetHeight; - } - function eventInWidget(display, e) { - for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { - if (!n || n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true" || n.parentNode == display.sizer && n != display.mover) { - return true; - } - } - } - function paddingTop(display) { - return display.lineSpace.offsetTop; - } - function paddingVert(display) { - return display.mover.offsetHeight - display.lineSpace.offsetHeight; - } - function paddingH(display) { - if (display.cachedPaddingH) { - return display.cachedPaddingH; - } - var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like")); - var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; - var data = { - left: parseInt(style.paddingLeft), - right: parseInt(style.paddingRight) - }; - if (!isNaN(data.left) && !isNaN(data.right)) { - display.cachedPaddingH = data; - } - return data; - } - function scrollGap(cm) { - return scrollerGap - cm.display.nativeBarWidth; - } - function displayWidth(cm) { - return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; - } - function displayHeight(cm) { - return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; - } - function ensureLineHeights(cm, lineView, rect) { - var wrapping = cm.options.lineWrapping; - var curWidth = wrapping && displayWidth(cm); - if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { - var heights = lineView.measure.heights = []; - if (wrapping) { - lineView.measure.width = curWidth; - var rects = lineView.text.firstChild.getClientRects(); - for (var i2 = 0; i2 < rects.length - 1; i2++) { - var cur = rects[i2], - next = rects[i2 + 1]; - if (Math.abs(cur.bottom - next.bottom) > 2) { - heights.push((cur.bottom + next.top) / 2 - rect.top); - } - } - } - heights.push(rect.bottom - rect.top); - } - } - function mapFromLineView(lineView, line, lineN) { - if (lineView.line == line) { - return { - map: lineView.measure.map, - cache: lineView.measure.cache - }; - } - if (lineView.rest) { - for (var i2 = 0; i2 < lineView.rest.length; i2++) { - if (lineView.rest[i2] == line) { - return { - map: lineView.measure.maps[i2], - cache: lineView.measure.caches[i2] - }; - } - } - for (var i$12 = 0; i$12 < lineView.rest.length; i$12++) { - if (lineNo(lineView.rest[i$12]) > lineN) { - return { - map: lineView.measure.maps[i$12], - cache: lineView.measure.caches[i$12], - before: true - }; - } - } - } - } - function updateExternalMeasurement(cm, line) { - line = visualLine(line); - var lineN = lineNo(line); - var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); - view.lineN = lineN; - var built = view.built = buildLineContent(cm, view); - view.text = built.pre; - removeChildrenAndAdd(cm.display.lineMeasure, built.pre); - return view; - } - function measureChar(cm, line, ch, bias) { - return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); - } - function findViewForLine(cm, lineN) { - if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) { - return cm.display.view[findViewIndex(cm, lineN)]; - } - var ext = cm.display.externalMeasured; - if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) { - return ext; - } - } - function prepareMeasureForLine(cm, line) { - var lineN = lineNo(line); - var view = findViewForLine(cm, lineN); - if (view && !view.text) { - view = null; - } else if (view && view.changes) { - updateLineForChanges(cm, view, lineN, getDimensions(cm)); - cm.curOp.forceUpdate = true; - } - if (!view) { - view = updateExternalMeasurement(cm, line); - } - var info = mapFromLineView(view, line, lineN); - return { - line, - view, - rect: null, - map: info.map, - cache: info.cache, - before: info.before, - hasHeights: false - }; - } - function measureCharPrepared(cm, prepared, ch, bias, varHeight) { - if (prepared.before) { - ch = -1; - } - var key = ch + (bias || ""), - found; - if (prepared.cache.hasOwnProperty(key)) { - found = prepared.cache[key]; - } else { - if (!prepared.rect) { - prepared.rect = prepared.view.text.getBoundingClientRect(); - } - if (!prepared.hasHeights) { - ensureLineHeights(cm, prepared.view, prepared.rect); - prepared.hasHeights = true; - } - found = measureCharInner(cm, prepared, ch, bias); - if (!found.bogus) { - prepared.cache[key] = found; - } - } - return { - left: found.left, - right: found.right, - top: varHeight ? found.rtop : found.top, - bottom: varHeight ? found.rbottom : found.bottom - }; - } - var nullRect = { - left: 0, - right: 0, - top: 0, - bottom: 0 - }; - function nodeAndOffsetInLineMap(map2, ch, bias) { - var node, start, end, collapse, mStart, mEnd; - for (var i2 = 0; i2 < map2.length; i2 += 3) { - mStart = map2[i2]; - mEnd = map2[i2 + 1]; - if (ch < mStart) { - start = 0; - end = 1; - collapse = "left"; - } else if (ch < mEnd) { - start = ch - mStart; - end = start + 1; - } else if (i2 == map2.length - 3 || ch == mEnd && map2[i2 + 3] > ch) { - end = mEnd - mStart; - start = end - 1; - if (ch >= mEnd) { - collapse = "right"; - } - } - if (start != null) { - node = map2[i2 + 2]; - if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) { - collapse = bias; - } - if (bias == "left" && start == 0) { - while (i2 && map2[i2 - 2] == map2[i2 - 3] && map2[i2 - 1].insertLeft) { - node = map2[(i2 -= 3) + 2]; - collapse = "left"; - } - } - if (bias == "right" && start == mEnd - mStart) { - while (i2 < map2.length - 3 && map2[i2 + 3] == map2[i2 + 4] && !map2[i2 + 5].insertLeft) { - node = map2[(i2 += 3) + 2]; - collapse = "right"; - } - } - break; - } - } - return { - node, - start, - end, - collapse, - coverStart: mStart, - coverEnd: mEnd - }; - } - function getUsefulRect(rects, bias) { - var rect = nullRect; - if (bias == "left") { - for (var i2 = 0; i2 < rects.length; i2++) { - if ((rect = rects[i2]).left != rect.right) { - break; - } - } - } else { - for (var i$12 = rects.length - 1; i$12 >= 0; i$12--) { - if ((rect = rects[i$12]).left != rect.right) { - break; - } - } - } - return rect; - } - function measureCharInner(cm, prepared, ch, bias) { - var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); - var node = place.node, - start = place.start, - end = place.end, - collapse = place.collapse; - var rect; - if (node.nodeType == 3) { - for (var i$12 = 0; i$12 < 4; i$12++) { - while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { - --start; - } - while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { - ++end; - } - if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) { - rect = node.parentNode.getBoundingClientRect(); - } else { - rect = getUsefulRect(range(node, start, end).getClientRects(), bias); - } - if (rect.left || rect.right || start == 0) { - break; - } - end = start; - start = start - 1; - collapse = "right"; - } - if (ie && ie_version < 11) { - rect = maybeUpdateRectForZooming(cm.display.measure, rect); - } - } else { - if (start > 0) { - collapse = bias = "right"; - } - var rects; - if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) { - rect = rects[bias == "right" ? rects.length - 1 : 0]; - } else { - rect = node.getBoundingClientRect(); - } - } - if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { - var rSpan = node.parentNode.getClientRects()[0]; - if (rSpan) { - rect = { - left: rSpan.left, - right: rSpan.left + charWidth(cm.display), - top: rSpan.top, - bottom: rSpan.bottom - }; - } else { - rect = nullRect; - } - } - var rtop = rect.top - prepared.rect.top, - rbot = rect.bottom - prepared.rect.top; - var mid = (rtop + rbot) / 2; - var heights = prepared.view.measure.heights; - var i2 = 0; - for (; i2 < heights.length - 1; i2++) { - if (mid < heights[i2]) { - break; - } - } - var top = i2 ? heights[i2 - 1] : 0, - bot = heights[i2]; - var result = { - left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, - right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, - top, - bottom: bot - }; - if (!rect.left && !rect.right) { - result.bogus = true; - } - if (!cm.options.singleCursorHeightPerLine) { - result.rtop = rtop; - result.rbottom = rbot; - } - return result; - } - function maybeUpdateRectForZooming(measure, rect) { - if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) { - return rect; - } - var scaleX = screen.logicalXDPI / screen.deviceXDPI; - var scaleY = screen.logicalYDPI / screen.deviceYDPI; - return { - left: rect.left * scaleX, - right: rect.right * scaleX, - top: rect.top * scaleY, - bottom: rect.bottom * scaleY - }; - } - function clearLineMeasurementCacheFor(lineView) { - if (lineView.measure) { - lineView.measure.cache = {}; - lineView.measure.heights = null; - if (lineView.rest) { - for (var i2 = 0; i2 < lineView.rest.length; i2++) { - lineView.measure.caches[i2] = {}; - } - } - } - } - function clearLineMeasurementCache(cm) { - cm.display.externalMeasure = null; - removeChildren(cm.display.lineMeasure); - for (var i2 = 0; i2 < cm.display.view.length; i2++) { - clearLineMeasurementCacheFor(cm.display.view[i2]); - } - } - function clearCaches(cm) { - clearLineMeasurementCache(cm); - cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; - if (!cm.options.lineWrapping) { - cm.display.maxLineChanged = true; - } - cm.display.lineNumChars = null; - } - function pageScrollX() { - if (chrome && android) { - return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)); - } - return window.pageXOffset || (document.documentElement || document.body).scrollLeft; - } - function pageScrollY() { - if (chrome && android) { - return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)); - } - return window.pageYOffset || (document.documentElement || document.body).scrollTop; - } - function widgetTopHeight(lineObj) { - var ref = visualLine(lineObj); - var widgets = ref.widgets; - var height = 0; - if (widgets) { - for (var i2 = 0; i2 < widgets.length; ++i2) { - if (widgets[i2].above) { - height += widgetHeight(widgets[i2]); - } - } - } - return height; - } - function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { - if (!includeWidgets) { - var height = widgetTopHeight(lineObj); - rect.top += height; - rect.bottom += height; - } - if (context == "line") { - return rect; - } - if (!context) { - context = "local"; - } - var yOff = heightAtLine(lineObj); - if (context == "local") { - yOff += paddingTop(cm.display); - } else { - yOff -= cm.display.viewOffset; - } - if (context == "page" || context == "window") { - var lOff = cm.display.lineSpace.getBoundingClientRect(); - yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); - var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); - rect.left += xOff; - rect.right += xOff; - } - rect.top += yOff; - rect.bottom += yOff; - return rect; - } - function fromCoordSystem(cm, coords, context) { - if (context == "div") { - return coords; - } - var left = coords.left, - top = coords.top; - if (context == "page") { - left -= pageScrollX(); - top -= pageScrollY(); - } else if (context == "local" || !context) { - var localBox = cm.display.sizer.getBoundingClientRect(); - left += localBox.left; - top += localBox.top; - } - var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); - return { - left: left - lineSpaceBox.left, - top: top - lineSpaceBox.top - }; - } - function charCoords(cm, pos, context, lineObj, bias) { - if (!lineObj) { - lineObj = getLine(cm.doc, pos.line); - } - return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); - } - function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { - lineObj = lineObj || getLine(cm.doc, pos.line); - if (!preparedMeasure) { - preparedMeasure = prepareMeasureForLine(cm, lineObj); - } - function get(ch2, right) { - var m = measureCharPrepared(cm, preparedMeasure, ch2, right ? "right" : "left", varHeight); - if (right) { - m.left = m.right; - } else { - m.right = m.left; - } - return intoCoordSystem(cm, lineObj, m, context); - } - var order = getOrder(lineObj, cm.doc.direction), - ch = pos.ch, - sticky = pos.sticky; - if (ch >= lineObj.text.length) { - ch = lineObj.text.length; - sticky = "before"; - } else if (ch <= 0) { - ch = 0; - sticky = "after"; - } - if (!order) { - return get(sticky == "before" ? ch - 1 : ch, sticky == "before"); - } - function getBidi(ch2, partPos2, invert) { - var part = order[partPos2], - right = part.level == 1; - return get(invert ? ch2 - 1 : ch2, right != invert); - } - var partPos = getBidiPartAt(order, ch, sticky); - var other = bidiOther; - var val = getBidi(ch, partPos, sticky == "before"); - if (other != null) { - val.other = getBidi(ch, other, sticky != "before"); - } - return val; - } - function estimateCoords(cm, pos) { - var left = 0; - pos = clipPos(cm.doc, pos); - if (!cm.options.lineWrapping) { - left = charWidth(cm.display) * pos.ch; - } - var lineObj = getLine(cm.doc, pos.line); - var top = heightAtLine(lineObj) + paddingTop(cm.display); - return { - left, - right: left, - top, - bottom: top + lineObj.height - }; - } - function PosWithInfo(line, ch, sticky, outside, xRel) { - var pos = Pos(line, ch, sticky); - pos.xRel = xRel; - if (outside) { - pos.outside = outside; - } - return pos; - } - function coordsChar(cm, x, y) { - var doc = cm.doc; - y += cm.display.viewOffset; - if (y < 0) { - return PosWithInfo(doc.first, 0, null, -1, -1); - } - var lineN = lineAtHeight(doc, y), - last = doc.first + doc.size - 1; - if (lineN > last) { - return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1); - } - if (x < 0) { - x = 0; - } - var lineObj = getLine(doc, lineN); - for (;;) { - var found = coordsCharInner(cm, lineObj, lineN, x, y); - var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0)); - if (!collapsed) { - return found; - } - var rangeEnd = collapsed.find(1); - if (rangeEnd.line == lineN) { - return rangeEnd; - } - lineObj = getLine(doc, lineN = rangeEnd.line); - } - } - function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { - y -= widgetTopHeight(lineObj); - var end = lineObj.text.length; - var begin = findFirst(function (ch) { - return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; - }, end, 0); - end = findFirst(function (ch) { - return measureCharPrepared(cm, preparedMeasure, ch).top > y; - }, begin, end); - return { - begin, - end - }; - } - function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { - if (!preparedMeasure) { - preparedMeasure = prepareMeasureForLine(cm, lineObj); - } - var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top; - return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop); - } - function boxIsAfter(box, x, y, left) { - return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x; - } - function coordsCharInner(cm, lineObj, lineNo2, x, y) { - y -= heightAtLine(lineObj); - var preparedMeasure = prepareMeasureForLine(cm, lineObj); - var widgetHeight2 = widgetTopHeight(lineObj); - var begin = 0, - end = lineObj.text.length, - ltr = true; - var order = getOrder(lineObj, cm.doc.direction); - if (order) { - var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)(cm, lineObj, lineNo2, preparedMeasure, order, x, y); - ltr = part.level != 1; - begin = ltr ? part.from : part.to - 1; - end = ltr ? part.to : part.from - 1; - } - var chAround = null, - boxAround = null; - var ch = findFirst(function (ch2) { - var box = measureCharPrepared(cm, preparedMeasure, ch2); - box.top += widgetHeight2; - box.bottom += widgetHeight2; - if (!boxIsAfter(box, x, y, false)) { - return false; - } - if (box.top <= y && box.left <= x) { - chAround = ch2; - boxAround = box; - } - return true; - }, begin, end); - var baseX, - sticky, - outside = false; - if (boxAround) { - var atLeft = x - boxAround.left < boxAround.right - x, - atStart = atLeft == ltr; - ch = chAround + (atStart ? 0 : 1); - sticky = atStart ? "after" : "before"; - baseX = atLeft ? boxAround.left : boxAround.right; - } else { - if (!ltr && (ch == end || ch == begin)) { - ch++; - } - sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight2 <= y == ltr ? "after" : "before"; - var coords = cursorCoords(cm, Pos(lineNo2, ch, sticky), "line", lineObj, preparedMeasure); - baseX = coords.left; - outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0; - } - ch = skipExtendingChars(lineObj.text, ch, 1); - return PosWithInfo(lineNo2, ch, sticky, outside, x - baseX); - } - function coordsBidiPart(cm, lineObj, lineNo2, preparedMeasure, order, x, y) { - var index = findFirst(function (i2) { - var part2 = order[i2], - ltr2 = part2.level != 1; - return boxIsAfter(cursorCoords(cm, Pos(lineNo2, ltr2 ? part2.to : part2.from, ltr2 ? "before" : "after"), "line", lineObj, preparedMeasure), x, y, true); - }, 0, order.length - 1); - var part = order[index]; - if (index > 0) { - var ltr = part.level != 1; - var start = cursorCoords(cm, Pos(lineNo2, ltr ? part.from : part.to, ltr ? "after" : "before"), "line", lineObj, preparedMeasure); - if (boxIsAfter(start, x, y, true) && start.top > y) { - part = order[index - 1]; - } - } - return part; - } - function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) { - var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y); - var begin = ref.begin; - var end = ref.end; - if (/\s/.test(lineObj.text.charAt(end - 1))) { - end--; - } - var part = null, - closestDist = null; - for (var i2 = 0; i2 < order.length; i2++) { - var p = order[i2]; - if (p.from >= end || p.to <= begin) { - continue; - } - var ltr = p.level != 1; - var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; - var dist = endX < x ? x - endX + 1e9 : endX - x; - if (!part || closestDist > dist) { - part = p; - closestDist = dist; - } - } - if (!part) { - part = order[order.length - 1]; - } - if (part.from < begin) { - part = { - from: begin, - to: part.to, - level: part.level - }; - } - if (part.to > end) { - part = { - from: part.from, - to: end, - level: part.level - }; - } - return part; - } - var measureText; - function textHeight(display) { - if (display.cachedTextHeight != null) { - return display.cachedTextHeight; - } - if (measureText == null) { - measureText = elt("pre", null, "CodeMirror-line-like"); - for (var i2 = 0; i2 < 49; ++i2) { - measureText.appendChild(document.createTextNode("x")); - measureText.appendChild(elt("br")); - } - measureText.appendChild(document.createTextNode("x")); - } - removeChildrenAndAdd(display.measure, measureText); - var height = measureText.offsetHeight / 50; - if (height > 3) { - display.cachedTextHeight = height; - } - removeChildren(display.measure); - return height || 1; - } - function charWidth(display) { - if (display.cachedCharWidth != null) { - return display.cachedCharWidth; - } - var anchor = elt("span", "xxxxxxxxxx"); - var pre = elt("pre", [anchor], "CodeMirror-line-like"); - removeChildrenAndAdd(display.measure, pre); - var rect = anchor.getBoundingClientRect(), - width = (rect.right - rect.left) / 10; - if (width > 2) { - display.cachedCharWidth = width; - } - return width || 10; - } - function getDimensions(cm) { - var d = cm.display, - left = {}, - width = {}; - var gutterLeft = d.gutters.clientLeft; - for (var n = d.gutters.firstChild, i2 = 0; n; n = n.nextSibling, ++i2) { - var id = cm.display.gutterSpecs[i2].className; - left[id] = n.offsetLeft + n.clientLeft + gutterLeft; - width[id] = n.clientWidth; - } - return { - fixedPos: compensateForHScroll(d), - gutterTotalWidth: d.gutters.offsetWidth, - gutterLeft: left, - gutterWidth: width, - wrapperWidth: d.wrapper.clientWidth - }; - } - function compensateForHScroll(display) { - return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; - } - function estimateHeight(cm) { - var th = textHeight(cm.display), - wrapping = cm.options.lineWrapping; - var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); - return function (line) { - if (lineIsHidden(cm.doc, line)) { - return 0; - } - var widgetsHeight = 0; - if (line.widgets) { - for (var i2 = 0; i2 < line.widgets.length; i2++) { - if (line.widgets[i2].height) { - widgetsHeight += line.widgets[i2].height; - } - } - } - if (wrapping) { - return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; - } else { - return widgetsHeight + th; - } - }; - } - function estimateLineHeights(cm) { - var doc = cm.doc, - est = estimateHeight(cm); - doc.iter(function (line) { - var estHeight = est(line); - if (estHeight != line.height) { - updateLineHeight(line, estHeight); - } - }); - } - function posFromMouse(cm, e, liberal, forRect) { - var display = cm.display; - if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { - return null; - } - var x, - y, - space = display.lineSpace.getBoundingClientRect(); - try { - x = e.clientX - space.left; - y = e.clientY - space.top; - } catch (e$1) { - return null; - } - var coords = coordsChar(cm, x, y), - line; - if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { - var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; - coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); - } - return coords; - } - function findViewIndex(cm, n) { - if (n >= cm.display.viewTo) { - return null; - } - n -= cm.display.viewFrom; - if (n < 0) { - return null; - } - var view = cm.display.view; - for (var i2 = 0; i2 < view.length; i2++) { - n -= view[i2].size; - if (n < 0) { - return i2; - } - } - } - function regChange(cm, from, to, lendiff) { - if (from == null) { - from = cm.doc.first; - } - if (to == null) { - to = cm.doc.first + cm.doc.size; - } - if (!lendiff) { - lendiff = 0; - } - var display = cm.display; - if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) { - display.updateLineNumbers = from; - } - cm.curOp.viewChanged = true; - if (from >= display.viewTo) { - if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) { - resetView(cm); - } - } else if (to <= display.viewFrom) { - if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { - resetView(cm); - } else { - display.viewFrom += lendiff; - display.viewTo += lendiff; - } - } else if (from <= display.viewFrom && to >= display.viewTo) { - resetView(cm); - } else if (from <= display.viewFrom) { - var cut = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cut) { - display.view = display.view.slice(cut.index); - display.viewFrom = cut.lineN; - display.viewTo += lendiff; - } else { - resetView(cm); - } - } else if (to >= display.viewTo) { - var cut$1 = viewCuttingPoint(cm, from, from, -1); - if (cut$1) { - display.view = display.view.slice(0, cut$1.index); - display.viewTo = cut$1.lineN; - } else { - resetView(cm); - } - } else { - var cutTop = viewCuttingPoint(cm, from, from, -1); - var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cutTop && cutBot) { - display.view = display.view.slice(0, cutTop.index).concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)).concat(display.view.slice(cutBot.index)); - display.viewTo += lendiff; - } else { - resetView(cm); - } - } - var ext = display.externalMeasured; - if (ext) { - if (to < ext.lineN) { - ext.lineN += lendiff; - } else if (from < ext.lineN + ext.size) { - display.externalMeasured = null; - } - } - } - function regLineChange(cm, line, type) { - cm.curOp.viewChanged = true; - var display = cm.display, - ext = cm.display.externalMeasured; - if (ext && line >= ext.lineN && line < ext.lineN + ext.size) { - display.externalMeasured = null; - } - if (line < display.viewFrom || line >= display.viewTo) { - return; - } - var lineView = display.view[findViewIndex(cm, line)]; - if (lineView.node == null) { - return; - } - var arr = lineView.changes || (lineView.changes = []); - if (indexOf(arr, type) == -1) { - arr.push(type); - } - } - function resetView(cm) { - cm.display.viewFrom = cm.display.viewTo = cm.doc.first; - cm.display.view = []; - cm.display.viewOffset = 0; - } - function viewCuttingPoint(cm, oldN, newN, dir) { - var index = findViewIndex(cm, oldN), - diff, - view = cm.display.view; - if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) { - return { - index, - lineN: newN - }; - } - var n = cm.display.viewFrom; - for (var i2 = 0; i2 < index; i2++) { - n += view[i2].size; - } - if (n != oldN) { - if (dir > 0) { - if (index == view.length - 1) { - return null; - } - diff = n + view[index].size - oldN; - index++; - } else { - diff = n - oldN; - } - oldN += diff; - newN += diff; - } - while (visualLineNo(cm.doc, newN) != newN) { - if (index == (dir < 0 ? 0 : view.length - 1)) { - return null; - } - newN += dir * view[index - (dir < 0 ? 1 : 0)].size; - index += dir; - } - return { - index, - lineN: newN - }; - } - function adjustView(cm, from, to) { - var display = cm.display, - view = display.view; - if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { - display.view = buildViewArray(cm, from, to); - display.viewFrom = from; - } else { - if (display.viewFrom > from) { - display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); - } else if (display.viewFrom < from) { - display.view = display.view.slice(findViewIndex(cm, from)); - } - display.viewFrom = from; - if (display.viewTo < to) { - display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); - } else if (display.viewTo > to) { - display.view = display.view.slice(0, findViewIndex(cm, to)); - } - } - display.viewTo = to; - } - function countDirtyView(cm) { - var view = cm.display.view, - dirty = 0; - for (var i2 = 0; i2 < view.length; i2++) { - var lineView = view[i2]; - if (!lineView.hidden && (!lineView.node || lineView.changes)) { - ++dirty; - } - } - return dirty; - } - function updateSelection(cm) { - cm.display.input.showSelection(cm.display.input.prepareSelection()); - } - function prepareSelection(cm, primary) { - if (primary === void 0) primary = true; - var doc = cm.doc, - result = {}; - var curFragment = result.cursors = document.createDocumentFragment(); - var selFragment = result.selection = document.createDocumentFragment(); - var customCursor = cm.options.$customCursor; - if (customCursor) { - primary = true; - } - for (var i2 = 0; i2 < doc.sel.ranges.length; i2++) { - if (!primary && i2 == doc.sel.primIndex) { - continue; - } - var range2 = doc.sel.ranges[i2]; - if (range2.from().line >= cm.display.viewTo || range2.to().line < cm.display.viewFrom) { - continue; - } - var collapsed = range2.empty(); - if (customCursor) { - var head = customCursor(cm, range2); - if (head) { - drawSelectionCursor(cm, head, curFragment); - } - } else if (collapsed || cm.options.showCursorWhenSelecting) { - drawSelectionCursor(cm, range2.head, curFragment); - } - if (!collapsed) { - drawSelectionRange(cm, range2, selFragment); - } - } - return result; - } - function drawSelectionCursor(cm, head, output) { - var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); - var cursor = output.appendChild(elt("div", " ", "CodeMirror-cursor")); - cursor.style.left = pos.left + "px"; - cursor.style.top = pos.top + "px"; - cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; - if (/\bcm-fat-cursor\b/.test(cm.getWrapperElement().className)) { - var charPos = charCoords(cm, head, "div", null, null); - var width = charPos.right - charPos.left; - cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + "px"; - } - if (pos.other) { - var otherCursor = output.appendChild(elt("div", " ", "CodeMirror-cursor CodeMirror-secondarycursor")); - otherCursor.style.display = ""; - otherCursor.style.left = pos.other.left + "px"; - otherCursor.style.top = pos.other.top + "px"; - otherCursor.style.height = (pos.other.bottom - pos.other.top) * 0.85 + "px"; - } - } - function cmpCoords(a, b) { - return a.top - b.top || a.left - b.left; - } - function drawSelectionRange(cm, range2, output) { - var display = cm.display, - doc = cm.doc; - var fragment = document.createDocumentFragment(); - var padding = paddingH(cm.display), - leftSide = padding.left; - var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; - var docLTR = doc.direction == "ltr"; - function add(left, top, width, bottom) { - if (top < 0) { - top = 0; - } - top = Math.round(top); - bottom = Math.round(bottom); - fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px")); - } - function drawForLine(line, fromArg, toArg) { - var lineObj = getLine(doc, line); - var lineLen = lineObj.text.length; - var start, end; - function coords(ch, bias) { - return charCoords(cm, Pos(line, ch), "div", lineObj, bias); - } - function wrapX(pos, dir, side) { - var extent = wrappedLineExtentChar(cm, lineObj, null, pos); - var prop2 = dir == "ltr" == (side == "after") ? "left" : "right"; - var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1); - return coords(ch, prop2)[prop2]; - } - var order = getOrder(lineObj, doc.direction); - iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i2) { - var ltr = dir == "ltr"; - var fromPos = coords(from, ltr ? "left" : "right"); - var toPos = coords(to - 1, ltr ? "right" : "left"); - var openStart = fromArg == null && from == 0, - openEnd = toArg == null && to == lineLen; - var first = i2 == 0, - last = !order || i2 == order.length - 1; - if (toPos.top - fromPos.top <= 3) { - var openLeft = (docLTR ? openStart : openEnd) && first; - var openRight = (docLTR ? openEnd : openStart) && last; - var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left; - var right = openRight ? rightSide : (ltr ? toPos : fromPos).right; - add(left, fromPos.top, right - left, fromPos.bottom); - } else { - var topLeft, topRight, botLeft, botRight; - if (ltr) { - topLeft = docLTR && openStart && first ? leftSide : fromPos.left; - topRight = docLTR ? rightSide : wrapX(from, dir, "before"); - botLeft = docLTR ? leftSide : wrapX(to, dir, "after"); - botRight = docLTR && openEnd && last ? rightSide : toPos.right; - } else { - topLeft = !docLTR ? leftSide : wrapX(from, dir, "before"); - topRight = !docLTR && openStart && first ? rightSide : fromPos.right; - botLeft = !docLTR && openEnd && last ? leftSide : toPos.left; - botRight = !docLTR ? rightSide : wrapX(to, dir, "after"); - } - add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom); - if (fromPos.bottom < toPos.top) { - add(leftSide, fromPos.bottom, null, toPos.top); - } - add(botLeft, toPos.top, botRight - botLeft, toPos.bottom); - } - if (!start || cmpCoords(fromPos, start) < 0) { - start = fromPos; - } - if (cmpCoords(toPos, start) < 0) { - start = toPos; - } - if (!end || cmpCoords(fromPos, end) < 0) { - end = fromPos; - } - if (cmpCoords(toPos, end) < 0) { - end = toPos; - } - }); - return { - start, - end - }; - } - var sFrom = range2.from(), - sTo = range2.to(); - if (sFrom.line == sTo.line) { - drawForLine(sFrom.line, sFrom.ch, sTo.ch); - } else { - var fromLine = getLine(doc, sFrom.line), - toLine = getLine(doc, sTo.line); - var singleVLine = visualLine(fromLine) == visualLine(toLine); - var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; - var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; - if (singleVLine) { - if (leftEnd.top < rightStart.top - 2) { - add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); - add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); - } else { - add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); - } - } - if (leftEnd.bottom < rightStart.top) { - add(leftSide, leftEnd.bottom, null, rightStart.top); - } - } - output.appendChild(fragment); - } - function restartBlink(cm) { - if (!cm.state.focused) { - return; - } - var display = cm.display; - clearInterval(display.blinker); - var on2 = true; - display.cursorDiv.style.visibility = ""; - if (cm.options.cursorBlinkRate > 0) { - display.blinker = setInterval(function () { - if (!cm.hasFocus()) { - onBlur(cm); - } - display.cursorDiv.style.visibility = (on2 = !on2) ? "" : "hidden"; - }, cm.options.cursorBlinkRate); - } else if (cm.options.cursorBlinkRate < 0) { - display.cursorDiv.style.visibility = "hidden"; - } - } - function ensureFocus(cm) { - if (!cm.hasFocus()) { - cm.display.input.focus(); - if (!cm.state.focused) { - onFocus(cm); - } - } - } - function delayBlurEvent(cm) { - cm.state.delayingBlurEvent = true; - setTimeout(function () { - if (cm.state.delayingBlurEvent) { - cm.state.delayingBlurEvent = false; - if (cm.state.focused) { - onBlur(cm); - } - } - }, 100); - } - function onFocus(cm, e) { - if (cm.state.delayingBlurEvent && !cm.state.draggingText) { - cm.state.delayingBlurEvent = false; - } - if (cm.options.readOnly == "nocursor") { - return; - } - if (!cm.state.focused) { - signal(cm, "focus", cm, e); - cm.state.focused = true; - addClass(cm.display.wrapper, "CodeMirror-focused"); - if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { - cm.display.input.reset(); - if (webkit) { - setTimeout(function () { - return cm.display.input.reset(true); - }, 20); - } - } - cm.display.input.receivedFocus(); - } - restartBlink(cm); - } - function onBlur(cm, e) { - if (cm.state.delayingBlurEvent) { - return; - } - if (cm.state.focused) { - signal(cm, "blur", cm, e); - cm.state.focused = false; - rmClass(cm.display.wrapper, "CodeMirror-focused"); - } - clearInterval(cm.display.blinker); - setTimeout(function () { - if (!cm.state.focused) { - cm.display.shift = false; - } - }, 150); - } - function updateHeightsInViewport(cm) { - var display = cm.display; - var prevBottom = display.lineDiv.offsetTop; - var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top); - var oldHeight = display.lineDiv.getBoundingClientRect().top; - var mustScroll = 0; - for (var i2 = 0; i2 < display.view.length; i2++) { - var cur = display.view[i2], - wrapping = cm.options.lineWrapping; - var height = void 0, - width = 0; - if (cur.hidden) { - continue; - } - oldHeight += cur.line.height; - if (ie && ie_version < 8) { - var bot = cur.node.offsetTop + cur.node.offsetHeight; - height = bot - prevBottom; - prevBottom = bot; - } else { - var box = cur.node.getBoundingClientRect(); - height = box.bottom - box.top; - if (!wrapping && cur.text.firstChild) { - width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; - } - } - var diff = cur.line.height - height; - if (diff > 5e-3 || diff < -5e-3) { - if (oldHeight < viewTop) { - mustScroll -= diff; - } - updateLineHeight(cur.line, height); - updateWidgetHeight(cur.line); - if (cur.rest) { - for (var j = 0; j < cur.rest.length; j++) { - updateWidgetHeight(cur.rest[j]); - } - } - } - if (width > cm.display.sizerWidth) { - var chWidth = Math.ceil(width / charWidth(cm.display)); - if (chWidth > cm.display.maxLineLength) { - cm.display.maxLineLength = chWidth; - cm.display.maxLine = cur.line; - cm.display.maxLineChanged = true; - } - } - } - if (Math.abs(mustScroll) > 2) { - display.scroller.scrollTop += mustScroll; - } - } - function updateWidgetHeight(line) { - if (line.widgets) { - for (var i2 = 0; i2 < line.widgets.length; ++i2) { - var w = line.widgets[i2], - parent = w.node.parentNode; - if (parent) { - w.height = parent.offsetHeight; - } - } - } - } - function visibleLines(display, doc, viewport) { - var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; - top = Math.floor(top - paddingTop(display)); - var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; - var from = lineAtHeight(doc, top), - to = lineAtHeight(doc, bottom); - if (viewport && viewport.ensure) { - var ensureFrom = viewport.ensure.from.line, - ensureTo = viewport.ensure.to.line; - if (ensureFrom < from) { - from = ensureFrom; - to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); - } else if (Math.min(ensureTo, doc.lastLine()) >= to) { - from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); - to = ensureTo; - } - } - return { - from, - to: Math.max(to, from + 1) - }; - } - function maybeScrollWindow(cm, rect) { - if (signalDOMEvent(cm, "scrollCursorIntoView")) { - return; - } - var display = cm.display, - box = display.sizer.getBoundingClientRect(), - doScroll = null; - if (rect.top + box.top < 0) { - doScroll = true; - } else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { - doScroll = false; - } - if (doScroll != null && !phantom) { - var scrollNode = elt("div", "​", null, "position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + rect.left + "px; width: " + Math.max(2, rect.right - rect.left) + "px;"); - cm.display.lineSpace.appendChild(scrollNode); - scrollNode.scrollIntoView(doScroll); - cm.display.lineSpace.removeChild(scrollNode); - } - } - function scrollPosIntoView(cm, pos, end, margin) { - if (margin == null) { - margin = 0; - } - var rect; - if (!cm.options.lineWrapping && pos == end) { - end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos; - pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos; - } - for (var limit = 0; limit < 5; limit++) { - var changed = false; - var coords = cursorCoords(cm, pos); - var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); - rect = { - left: Math.min(coords.left, endCoords.left), - top: Math.min(coords.top, endCoords.top) - margin, - right: Math.max(coords.left, endCoords.left), - bottom: Math.max(coords.bottom, endCoords.bottom) + margin - }; - var scrollPos = calculateScrollPos(cm, rect); - var startTop = cm.doc.scrollTop, - startLeft = cm.doc.scrollLeft; - if (scrollPos.scrollTop != null) { - updateScrollTop(cm, scrollPos.scrollTop); - if (Math.abs(cm.doc.scrollTop - startTop) > 1) { - changed = true; - } - } - if (scrollPos.scrollLeft != null) { - setScrollLeft(cm, scrollPos.scrollLeft); - if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { - changed = true; - } - } - if (!changed) { - break; - } - } - return rect; - } - function scrollIntoView(cm, rect) { - var scrollPos = calculateScrollPos(cm, rect); - if (scrollPos.scrollTop != null) { - updateScrollTop(cm, scrollPos.scrollTop); - } - if (scrollPos.scrollLeft != null) { - setScrollLeft(cm, scrollPos.scrollLeft); - } - } - function calculateScrollPos(cm, rect) { - var display = cm.display, - snapMargin = textHeight(cm.display); - if (rect.top < 0) { - rect.top = 0; - } - var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; - var screen2 = displayHeight(cm), - result = {}; - if (rect.bottom - rect.top > screen2) { - rect.bottom = rect.top + screen2; - } - var docBottom = cm.doc.height + paddingVert(display); - var atTop = rect.top < snapMargin, - atBottom = rect.bottom > docBottom - snapMargin; - if (rect.top < screentop) { - result.scrollTop = atTop ? 0 : rect.top; - } else if (rect.bottom > screentop + screen2) { - var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen2); - if (newTop != screentop) { - result.scrollTop = newTop; - } - } - var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth; - var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace; - var screenw = displayWidth(cm) - display.gutters.offsetWidth; - var tooWide = rect.right - rect.left > screenw; - if (tooWide) { - rect.right = rect.left + screenw; - } - if (rect.left < 10) { - result.scrollLeft = 0; - } else if (rect.left < screenleft) { - result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); - } else if (rect.right > screenw + screenleft - 3) { - result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; - } - return result; - } - function addToScrollTop(cm, top) { - if (top == null) { - return; - } - resolveScrollToPos(cm); - cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; - } - function ensureCursorVisible(cm) { - resolveScrollToPos(cm); - var cur = cm.getCursor(); - cm.curOp.scrollToPos = { - from: cur, - to: cur, - margin: cm.options.cursorScrollMargin - }; - } - function scrollToCoords(cm, x, y) { - if (x != null || y != null) { - resolveScrollToPos(cm); - } - if (x != null) { - cm.curOp.scrollLeft = x; - } - if (y != null) { - cm.curOp.scrollTop = y; - } - } - function scrollToRange(cm, range2) { - resolveScrollToPos(cm); - cm.curOp.scrollToPos = range2; - } - function resolveScrollToPos(cm) { - var range2 = cm.curOp.scrollToPos; - if (range2) { - cm.curOp.scrollToPos = null; - var from = estimateCoords(cm, range2.from), - to = estimateCoords(cm, range2.to); - scrollToCoordsRange(cm, from, to, range2.margin); - } - } - function scrollToCoordsRange(cm, from, to, margin) { - var sPos = calculateScrollPos(cm, { - left: Math.min(from.left, to.left), - top: Math.min(from.top, to.top) - margin, - right: Math.max(from.right, to.right), - bottom: Math.max(from.bottom, to.bottom) + margin - }); - scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop); - } - function updateScrollTop(cm, val) { - if (Math.abs(cm.doc.scrollTop - val) < 2) { - return; - } - if (!gecko) { - updateDisplaySimple(cm, { - top: val - }); - } - setScrollTop(cm, val, true); - if (gecko) { - updateDisplaySimple(cm); - } - startWorker(cm, 100); - } - function setScrollTop(cm, val, forceScroll) { - val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val)); - if (cm.display.scroller.scrollTop == val && !forceScroll) { - return; - } - cm.doc.scrollTop = val; - cm.display.scrollbars.setScrollTop(val); - if (cm.display.scroller.scrollTop != val) { - cm.display.scroller.scrollTop = val; - } - } - function setScrollLeft(cm, val, isScroller, forceScroll) { - val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)); - if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { - return; - } - cm.doc.scrollLeft = val; - alignHorizontally(cm); - if (cm.display.scroller.scrollLeft != val) { - cm.display.scroller.scrollLeft = val; - } - cm.display.scrollbars.setScrollLeft(val); - } - function measureForScrollbars(cm) { - var d = cm.display, - gutterW = d.gutters.offsetWidth; - var docH = Math.round(cm.doc.height + paddingVert(cm.display)); - return { - clientHeight: d.scroller.clientHeight, - viewHeight: d.wrapper.clientHeight, - scrollWidth: d.scroller.scrollWidth, - clientWidth: d.scroller.clientWidth, - viewWidth: d.wrapper.clientWidth, - barLeft: cm.options.fixedGutter ? gutterW : 0, - docHeight: docH, - scrollHeight: docH + scrollGap(cm) + d.barHeight, - nativeBarWidth: d.nativeBarWidth, - gutterWidth: gutterW - }; - } - var NativeScrollbars = function (place, scroll, cm) { - this.cm = cm; - var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); - var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); - vert.tabIndex = horiz.tabIndex = -1; - place(vert); - place(horiz); - on(vert, "scroll", function () { - if (vert.clientHeight) { - scroll(vert.scrollTop, "vertical"); - } - }); - on(horiz, "scroll", function () { - if (horiz.clientWidth) { - scroll(horiz.scrollLeft, "horizontal"); - } - }); - this.checkedZeroWidth = false; - if (ie && ie_version < 8) { - this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; - } - }; - NativeScrollbars.prototype.update = function (measure) { - var needsH = measure.scrollWidth > measure.clientWidth + 1; - var needsV = measure.scrollHeight > measure.clientHeight + 1; - var sWidth = measure.nativeBarWidth; - if (needsV) { - this.vert.style.display = "block"; - this.vert.style.bottom = needsH ? sWidth + "px" : "0"; - var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); - this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; - } else { - this.vert.scrollTop = 0; - this.vert.style.display = ""; - this.vert.firstChild.style.height = "0"; - } - if (needsH) { - this.horiz.style.display = "block"; - this.horiz.style.right = needsV ? sWidth + "px" : "0"; - this.horiz.style.left = measure.barLeft + "px"; - var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); - this.horiz.firstChild.style.width = Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; - } else { - this.horiz.style.display = ""; - this.horiz.firstChild.style.width = "0"; - } - if (!this.checkedZeroWidth && measure.clientHeight > 0) { - if (sWidth == 0) { - this.zeroWidthHack(); - } - this.checkedZeroWidth = true; - } - return { - right: needsV ? sWidth : 0, - bottom: needsH ? sWidth : 0 - }; - }; - NativeScrollbars.prototype.setScrollLeft = function (pos) { - if (this.horiz.scrollLeft != pos) { - this.horiz.scrollLeft = pos; - } - if (this.disableHoriz) { - this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); - } - }; - NativeScrollbars.prototype.setScrollTop = function (pos) { - if (this.vert.scrollTop != pos) { - this.vert.scrollTop = pos; - } - if (this.disableVert) { - this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); - } - }; - NativeScrollbars.prototype.zeroWidthHack = function () { - var w = mac && !mac_geMountainLion ? "12px" : "18px"; - this.horiz.style.height = this.vert.style.width = w; - this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; - this.disableHoriz = new Delayed(); - this.disableVert = new Delayed(); - }; - NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { - bar.style.pointerEvents = "auto"; - function maybeDisable() { - var box = bar.getBoundingClientRect(); - var elt2 = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1); - if (elt2 != bar) { - bar.style.pointerEvents = "none"; - } else { - delay.set(1e3, maybeDisable); - } - } - delay.set(1e3, maybeDisable); - }; - NativeScrollbars.prototype.clear = function () { - var parent = this.horiz.parentNode; - parent.removeChild(this.horiz); - parent.removeChild(this.vert); - }; - var NullScrollbars = function () {}; - NullScrollbars.prototype.update = function () { - return { - bottom: 0, - right: 0 - }; - }; - NullScrollbars.prototype.setScrollLeft = function () {}; - NullScrollbars.prototype.setScrollTop = function () {}; - NullScrollbars.prototype.clear = function () {}; - function updateScrollbars(cm, measure) { - if (!measure) { - measure = measureForScrollbars(cm); - } - var startWidth = cm.display.barWidth, - startHeight = cm.display.barHeight; - updateScrollbarsInner(cm, measure); - for (var i2 = 0; i2 < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i2++) { - if (startWidth != cm.display.barWidth && cm.options.lineWrapping) { - updateHeightsInViewport(cm); - } - updateScrollbarsInner(cm, measureForScrollbars(cm)); - startWidth = cm.display.barWidth; - startHeight = cm.display.barHeight; - } - } - function updateScrollbarsInner(cm, measure) { - var d = cm.display; - var sizes = d.scrollbars.update(measure); - d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; - d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; - d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"; - if (sizes.right && sizes.bottom) { - d.scrollbarFiller.style.display = "block"; - d.scrollbarFiller.style.height = sizes.bottom + "px"; - d.scrollbarFiller.style.width = sizes.right + "px"; - } else { - d.scrollbarFiller.style.display = ""; - } - if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { - d.gutterFiller.style.display = "block"; - d.gutterFiller.style.height = sizes.bottom + "px"; - d.gutterFiller.style.width = measure.gutterWidth + "px"; - } else { - d.gutterFiller.style.display = ""; - } - } - var scrollbarModel = { - "native": NativeScrollbars, - "null": NullScrollbars - }; - function initScrollbars(cm) { - if (cm.display.scrollbars) { - cm.display.scrollbars.clear(); - if (cm.display.scrollbars.addClass) { - rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); - } - } - cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { - cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); - on(node, "mousedown", function () { - if (cm.state.focused) { - setTimeout(function () { - return cm.display.input.focus(); - }, 0); - } - }); - node.setAttribute("cm-not-content", "true"); - }, function (pos, axis) { - if (axis == "horizontal") { - setScrollLeft(cm, pos); - } else { - updateScrollTop(cm, pos); - } - }, cm); - if (cm.display.scrollbars.addClass) { - addClass(cm.display.wrapper, cm.display.scrollbars.addClass); - } - } - var nextOpId = 0; - function startOperation(cm) { - cm.curOp = { - cm, - viewChanged: false, - // Flag that indicates that lines might need to be redrawn - startHeight: cm.doc.height, - // Used to detect need to update scrollbar - forceUpdate: false, - // Used to force a redraw - updateInput: 0, - // Whether to reset the input textarea - typing: false, - // Whether this reset should be careful to leave existing text (for compositing) - changeObjs: null, - // Accumulated changes, for firing change events - cursorActivityHandlers: null, - // Set of handlers to fire cursorActivity on - cursorActivityCalled: 0, - // Tracks which cursorActivity handlers have been called already - selectionChanged: false, - // Whether the selection needs to be redrawn - updateMaxLine: false, - // Set when the widest line needs to be determined anew - scrollLeft: null, - scrollTop: null, - // Intermediate scroll position, not pushed to DOM yet - scrollToPos: null, - // Used to scroll to a specific position - focus: false, - id: ++nextOpId, - // Unique ID - markArrays: null - // Used by addMarkedSpan - }; - pushOperation(cm.curOp); - } - function endOperation(cm) { - var op = cm.curOp; - if (op) { - finishOperation(op, function (group) { - for (var i2 = 0; i2 < group.ops.length; i2++) { - group.ops[i2].cm.curOp = null; - } - endOperations(group); - }); - } - } - function endOperations(group) { - var ops = group.ops; - for (var i2 = 0; i2 < ops.length; i2++) { - endOperation_R1(ops[i2]); - } - for (var i$12 = 0; i$12 < ops.length; i$12++) { - endOperation_W1(ops[i$12]); - } - for (var i$22 = 0; i$22 < ops.length; i$22++) { - endOperation_R2(ops[i$22]); - } - for (var i$3 = 0; i$3 < ops.length; i$3++) { - endOperation_W2(ops[i$3]); - } - for (var i$4 = 0; i$4 < ops.length; i$4++) { - endOperation_finish(ops[i$4]); - } - } - function endOperation_R1(op) { - var cm = op.cm, - display = cm.display; - maybeClipScrollbars(cm); - if (op.updateMaxLine) { - findMaxLine(cm); - } - op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping; - op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && { - top: op.scrollTop, - ensure: op.scrollToPos - }, op.forceUpdate); - } - function endOperation_W1(op) { - op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); - } - function endOperation_R2(op) { - var cm = op.cm, - display = cm.display; - if (op.updatedDisplay) { - updateHeightsInViewport(cm); - } - op.barMeasure = measureForScrollbars(cm); - if (display.maxLineChanged && !cm.options.lineWrapping) { - op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; - cm.display.sizerWidth = op.adjustWidthTo; - op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); - op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); - } - if (op.updatedDisplay || op.selectionChanged) { - op.preparedSelection = display.input.prepareSelection(); - } - } - function endOperation_W2(op) { - var cm = op.cm; - if (op.adjustWidthTo != null) { - cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; - if (op.maxScrollLeft < cm.doc.scrollLeft) { - setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); - } - cm.display.maxLineChanged = false; - } - var takeFocus = op.focus && op.focus == activeElt(); - if (op.preparedSelection) { - cm.display.input.showSelection(op.preparedSelection, takeFocus); - } - if (op.updatedDisplay || op.startHeight != cm.doc.height) { - updateScrollbars(cm, op.barMeasure); - } - if (op.updatedDisplay) { - setDocumentHeight(cm, op.barMeasure); - } - if (op.selectionChanged) { - restartBlink(cm); - } - if (cm.state.focused && op.updateInput) { - cm.display.input.reset(op.typing); - } - if (takeFocus) { - ensureFocus(op.cm); - } - } - function endOperation_finish(op) { - var cm = op.cm, - display = cm.display, - doc = cm.doc; - if (op.updatedDisplay) { - postUpdateDisplay(cm, op.update); - } - if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) { - display.wheelStartX = display.wheelStartY = null; - } - if (op.scrollTop != null) { - setScrollTop(cm, op.scrollTop, op.forceScroll); - } - if (op.scrollLeft != null) { - setScrollLeft(cm, op.scrollLeft, true, true); - } - if (op.scrollToPos) { - var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); - maybeScrollWindow(cm, rect); - } - var hidden = op.maybeHiddenMarkers, - unhidden = op.maybeUnhiddenMarkers; - if (hidden) { - for (var i2 = 0; i2 < hidden.length; ++i2) { - if (!hidden[i2].lines.length) { - signal(hidden[i2], "hide"); - } - } - } - if (unhidden) { - for (var i$12 = 0; i$12 < unhidden.length; ++i$12) { - if (unhidden[i$12].lines.length) { - signal(unhidden[i$12], "unhide"); - } - } - } - if (display.wrapper.offsetHeight) { - doc.scrollTop = cm.display.scroller.scrollTop; - } - if (op.changeObjs) { - signal(cm, "changes", cm, op.changeObjs); - } - if (op.update) { - op.update.finish(); - } - } - function runInOp(cm, f) { - if (cm.curOp) { - return f(); - } - startOperation(cm); - try { - return f(); - } finally { - endOperation(cm); - } - } - function operation(cm, f) { - return function () { - if (cm.curOp) { - return f.apply(cm, arguments); - } - startOperation(cm); - try { - return f.apply(cm, arguments); - } finally { - endOperation(cm); - } - }; - } - function methodOp(f) { - return function () { - if (this.curOp) { - return f.apply(this, arguments); - } - startOperation(this); - try { - return f.apply(this, arguments); - } finally { - endOperation(this); - } - }; - } - function docMethodOp(f) { - return function () { - var cm = this.cm; - if (!cm || cm.curOp) { - return f.apply(this, arguments); - } - startOperation(cm); - try { - return f.apply(this, arguments); - } finally { - endOperation(cm); - } - }; - } - function startWorker(cm, time) { - if (cm.doc.highlightFrontier < cm.display.viewTo) { - cm.state.highlight.set(time, bind(highlightWorker, cm)); - } - } - function highlightWorker(cm) { - var doc = cm.doc; - if (doc.highlightFrontier >= cm.display.viewTo) { - return; - } - var end = + /* @__PURE__ */new Date() + cm.options.workTime; - var context = getContextBefore(cm, doc.highlightFrontier); - var changedLines = []; - doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { - if (context.line >= cm.display.viewFrom) { - var oldStyles = line.styles; - var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null; - var highlighted = highlightLine(cm, line, context, true); - if (resetState) { - context.state = resetState; - } - line.styles = highlighted.styles; - var oldCls = line.styleClasses, - newCls = highlighted.classes; - if (newCls) { - line.styleClasses = newCls; - } else if (oldCls) { - line.styleClasses = null; - } - var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); - for (var i2 = 0; !ischange && i2 < oldStyles.length; ++i2) { - ischange = oldStyles[i2] != line.styles[i2]; - } - if (ischange) { - changedLines.push(context.line); - } - line.stateAfter = context.save(); - context.nextLine(); - } else { - if (line.text.length <= cm.options.maxHighlightLength) { - processLine(cm, line.text, context); - } - line.stateAfter = context.line % 5 == 0 ? context.save() : null; - context.nextLine(); - } - if (+ /* @__PURE__ */new Date() > end) { - startWorker(cm, cm.options.workDelay); - return true; - } - }); - doc.highlightFrontier = context.line; - doc.modeFrontier = Math.max(doc.modeFrontier, context.line); - if (changedLines.length) { - runInOp(cm, function () { - for (var i2 = 0; i2 < changedLines.length; i2++) { - regLineChange(cm, changedLines[i2], "text"); - } - }); - } - } - var DisplayUpdate = function (cm, viewport, force) { - var display = cm.display; - this.viewport = viewport; - this.visible = visibleLines(display, cm.doc, viewport); - this.editorIsHidden = !display.wrapper.offsetWidth; - this.wrapperHeight = display.wrapper.clientHeight; - this.wrapperWidth = display.wrapper.clientWidth; - this.oldDisplayWidth = displayWidth(cm); - this.force = force; - this.dims = getDimensions(cm); - this.events = []; - }; - DisplayUpdate.prototype.signal = function (emitter, type) { - if (hasHandler(emitter, type)) { - this.events.push(arguments); - } - }; - DisplayUpdate.prototype.finish = function () { - for (var i2 = 0; i2 < this.events.length; i2++) { - signal.apply(null, this.events[i2]); - } - }; - function maybeClipScrollbars(cm) { - var display = cm.display; - if (!display.scrollbarsClipped && display.scroller.offsetWidth) { - display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; - display.heightForcer.style.height = scrollGap(cm) + "px"; - display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; - display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; - display.scrollbarsClipped = true; - } - } - function selectionSnapshot(cm) { - if (cm.hasFocus()) { - return null; - } - var active = activeElt(); - if (!active || !contains(cm.display.lineDiv, active)) { - return null; - } - var result = { - activeElt: active - }; - if (window.getSelection) { - var sel = window.getSelection(); - if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { - result.anchorNode = sel.anchorNode; - result.anchorOffset = sel.anchorOffset; - result.focusNode = sel.focusNode; - result.focusOffset = sel.focusOffset; - } - } - return result; - } - function restoreSelection(snapshot) { - if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { - return; - } - snapshot.activeElt.focus(); - if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { - var sel = window.getSelection(), - range2 = document.createRange(); - range2.setEnd(snapshot.anchorNode, snapshot.anchorOffset); - range2.collapse(false); - sel.removeAllRanges(); - sel.addRange(range2); - sel.extend(snapshot.focusNode, snapshot.focusOffset); - } - } - function updateDisplayIfNeeded(cm, update) { - var display = cm.display, - doc = cm.doc; - if (update.editorIsHidden) { - resetView(cm); - return false; - } - if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) { - return false; - } - if (maybeUpdateLineNumberWidth(cm)) { - resetView(cm); - update.dims = getDimensions(cm); - } - var end = doc.first + doc.size; - var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); - var to = Math.min(end, update.visible.to + cm.options.viewportMargin); - if (display.viewFrom < from && from - display.viewFrom < 20) { - from = Math.max(doc.first, display.viewFrom); - } - if (display.viewTo > to && display.viewTo - to < 20) { - to = Math.min(end, display.viewTo); - } - if (sawCollapsedSpans) { - from = visualLineNo(cm.doc, from); - to = visualLineEndNo(cm.doc, to); - } - var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; - adjustView(cm, from, to); - display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); - cm.display.mover.style.top = display.viewOffset + "px"; - var toUpdate = countDirtyView(cm); - if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) { - return false; - } - var selSnapshot = selectionSnapshot(cm); - if (toUpdate > 4) { - display.lineDiv.style.display = "none"; - } - patchDisplay(cm, display.updateLineNumbers, update.dims); - if (toUpdate > 4) { - display.lineDiv.style.display = ""; - } - display.renderedView = display.view; - restoreSelection(selSnapshot); - removeChildren(display.cursorDiv); - removeChildren(display.selectionDiv); - display.gutters.style.height = display.sizer.style.minHeight = 0; - if (different) { - display.lastWrapHeight = update.wrapperHeight; - display.lastWrapWidth = update.wrapperWidth; - startWorker(cm, 400); - } - display.updateLineNumbers = null; - return true; - } - function postUpdateDisplay(cm, update) { - var viewport = update.viewport; - for (var first = true;; first = false) { - if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { - if (viewport && viewport.top != null) { - viewport = { - top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top) - }; - } - update.visible = visibleLines(cm.display, cm.doc, viewport); - if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) { - break; - } - } else if (first) { - update.visible = visibleLines(cm.display, cm.doc, viewport); - } - if (!updateDisplayIfNeeded(cm, update)) { - break; - } - updateHeightsInViewport(cm); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - updateScrollbars(cm, barMeasure); - setDocumentHeight(cm, barMeasure); - update.force = false; - } - update.signal(cm, "update", cm); - if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { - update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); - cm.display.reportedViewFrom = cm.display.viewFrom; - cm.display.reportedViewTo = cm.display.viewTo; - } - } - function updateDisplaySimple(cm, viewport) { - var update = new DisplayUpdate(cm, viewport); - if (updateDisplayIfNeeded(cm, update)) { - updateHeightsInViewport(cm); - postUpdateDisplay(cm, update); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - updateScrollbars(cm, barMeasure); - setDocumentHeight(cm, barMeasure); - update.finish(); - } - } - function patchDisplay(cm, updateNumbersFrom, dims) { - var display = cm.display, - lineNumbers = cm.options.lineNumbers; - var container = display.lineDiv, - cur = container.firstChild; - function rm(node2) { - var next = node2.nextSibling; - if (webkit && mac && cm.display.currentWheelTarget == node2) { - node2.style.display = "none"; - } else { - node2.parentNode.removeChild(node2); - } - return next; - } - var view = display.view, - lineN = display.viewFrom; - for (var i2 = 0; i2 < view.length; i2++) { - var lineView = view[i2]; - if (lineView.hidden) ;else if (!lineView.node || lineView.node.parentNode != container) { - var node = buildLineElement(cm, lineView, lineN, dims); - container.insertBefore(node, cur); - } else { - while (cur != lineView.node) { - cur = rm(cur); - } - var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber; - if (lineView.changes) { - if (indexOf(lineView.changes, "gutter") > -1) { - updateNumber = false; - } - updateLineForChanges(cm, lineView, lineN, dims); - } - if (updateNumber) { - removeChildren(lineView.lineNumber); - lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); - } - cur = lineView.node.nextSibling; - } - lineN += lineView.size; - } - while (cur) { - cur = rm(cur); - } - } - function updateGutterSpace(display) { - var width = display.gutters.offsetWidth; - display.sizer.style.marginLeft = width + "px"; - signalLater(display, "gutterChanged", display); - } - function setDocumentHeight(cm, measure) { - cm.display.sizer.style.minHeight = measure.docHeight + "px"; - cm.display.heightForcer.style.top = measure.docHeight + "px"; - cm.display.gutters.style.height = measure.docHeight + cm.display.barHeight + scrollGap(cm) + "px"; - } - function alignHorizontally(cm) { - var display = cm.display, - view = display.view; - if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { - return; - } - var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; - var gutterW = display.gutters.offsetWidth, - left = comp + "px"; - for (var i2 = 0; i2 < view.length; i2++) { - if (!view[i2].hidden) { - if (cm.options.fixedGutter) { - if (view[i2].gutter) { - view[i2].gutter.style.left = left; - } - if (view[i2].gutterBackground) { - view[i2].gutterBackground.style.left = left; - } - } - var align = view[i2].alignable; - if (align) { - for (var j = 0; j < align.length; j++) { - align[j].style.left = left; - } - } - } - } - if (cm.options.fixedGutter) { - display.gutters.style.left = comp + gutterW + "px"; - } - } - function maybeUpdateLineNumberWidth(cm) { - if (!cm.options.lineNumbers) { - return false; - } - var doc = cm.doc, - last = lineNumberFor(cm.options, doc.first + doc.size - 1), - display = cm.display; - if (last.length != display.lineNumChars) { - var test = display.measure.appendChild(elt("div", [elt("div", last)], "CodeMirror-linenumber CodeMirror-gutter-elt")); - var innerW = test.firstChild.offsetWidth, - padding = test.offsetWidth - innerW; - display.lineGutter.style.width = ""; - display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; - display.lineNumWidth = display.lineNumInnerWidth + padding; - display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; - display.lineGutter.style.width = display.lineNumWidth + "px"; - updateGutterSpace(cm.display); - return true; - } - return false; - } - function getGutters(gutters, lineNumbers) { - var result = [], - sawLineNumbers = false; - for (var i2 = 0; i2 < gutters.length; i2++) { - var name = gutters[i2], - style = null; - if (typeof name != "string") { - style = name.style; - name = name.className; - } - if (name == "CodeMirror-linenumbers") { - if (!lineNumbers) { - continue; - } else { - sawLineNumbers = true; - } - } - result.push({ - className: name, - style - }); - } - if (lineNumbers && !sawLineNumbers) { - result.push({ - className: "CodeMirror-linenumbers", - style: null - }); - } - return result; - } - function renderGutters(display) { - var gutters = display.gutters, - specs = display.gutterSpecs; - removeChildren(gutters); - display.lineGutter = null; - for (var i2 = 0; i2 < specs.length; ++i2) { - var ref = specs[i2]; - var className = ref.className; - var style = ref.style; - var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className)); - if (style) { - gElt.style.cssText = style; - } - if (className == "CodeMirror-linenumbers") { - display.lineGutter = gElt; - gElt.style.width = (display.lineNumWidth || 1) + "px"; - } - } - gutters.style.display = specs.length ? "" : "none"; - updateGutterSpace(display); - } - function updateGutters(cm) { - renderGutters(cm.display); - regChange(cm); - alignHorizontally(cm); - } - function Display(place, doc, input, options) { - var d = this; - this.input = input; - d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); - d.scrollbarFiller.setAttribute("cm-not-content", "true"); - d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); - d.gutterFiller.setAttribute("cm-not-content", "true"); - d.lineDiv = eltP("div", null, "CodeMirror-code"); - d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); - d.cursorDiv = elt("div", null, "CodeMirror-cursors"); - d.measure = elt("div", null, "CodeMirror-measure"); - d.lineMeasure = elt("div", null, "CodeMirror-measure"); - d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, "position: relative; outline: none"); - var lines = eltP("div", [d.lineSpace], "CodeMirror-lines"); - d.mover = elt("div", [lines], null, "position: relative"); - d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); - d.sizerWidth = null; - d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); - d.gutters = elt("div", null, "CodeMirror-gutters"); - d.lineGutter = null; - d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); - d.scroller.setAttribute("tabIndex", "-1"); - d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); - d.wrapper.setAttribute("translate", "no"); - if (ie && ie_version < 8) { - d.gutters.style.zIndex = -1; - d.scroller.style.paddingRight = 0; - } - if (!webkit && !(gecko && mobile)) { - d.scroller.draggable = true; - } - if (place) { - if (place.appendChild) { - place.appendChild(d.wrapper); - } else { - place(d.wrapper); - } - } - d.viewFrom = d.viewTo = doc.first; - d.reportedViewFrom = d.reportedViewTo = doc.first; - d.view = []; - d.renderedView = null; - d.externalMeasured = null; - d.viewOffset = 0; - d.lastWrapHeight = d.lastWrapWidth = 0; - d.updateLineNumbers = null; - d.nativeBarWidth = d.barHeight = d.barWidth = 0; - d.scrollbarsClipped = false; - d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; - d.alignWidgets = false; - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - d.maxLine = null; - d.maxLineLength = 0; - d.maxLineChanged = false; - d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; - d.shift = false; - d.selForContextMenu = null; - d.activeTouch = null; - d.gutterSpecs = getGutters(options.gutters, options.lineNumbers); - renderGutters(d); - input.init(d); - } - var wheelSamples = 0, - wheelPixelsPerUnit = null; - if (ie) { - wheelPixelsPerUnit = -0.53; - } else if (gecko) { - wheelPixelsPerUnit = 15; - } else if (chrome) { - wheelPixelsPerUnit = -0.7; - } else if (safari) { - wheelPixelsPerUnit = -1 / 3; - } - function wheelEventDelta(e) { - var dx = e.wheelDeltaX, - dy = e.wheelDeltaY; - if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { - dx = e.detail; - } - if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { - dy = e.detail; - } else if (dy == null) { - dy = e.wheelDelta; - } - return { - x: dx, - y: dy - }; - } - function wheelEventPixels(e) { - var delta = wheelEventDelta(e); - delta.x *= wheelPixelsPerUnit; - delta.y *= wheelPixelsPerUnit; - return delta; - } - function onScrollWheel(cm, e) { - var delta = wheelEventDelta(e), - dx = delta.x, - dy = delta.y; - var pixelsPerUnit = wheelPixelsPerUnit; - if (e.deltaMode === 0) { - dx = e.deltaX; - dy = e.deltaY; - pixelsPerUnit = 1; - } - var display = cm.display, - scroll = display.scroller; - var canScrollX = scroll.scrollWidth > scroll.clientWidth; - var canScrollY = scroll.scrollHeight > scroll.clientHeight; - if (!(dx && canScrollX || dy && canScrollY)) { - return; - } - if (dy && mac && webkit) { - outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { - for (var i2 = 0; i2 < view.length; i2++) { - if (view[i2].node == cur) { - cm.display.currentWheelTarget = cur; - break outer; - } - } - } - } - if (dx && !gecko && !presto && pixelsPerUnit != null) { - if (dy && canScrollY) { - updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); - } - setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit)); - if (!dy || dy && canScrollY) { - e_preventDefault(e); - } - display.wheelStartX = null; - return; - } - if (dy && pixelsPerUnit != null) { - var pixels = dy * pixelsPerUnit; - var top = cm.doc.scrollTop, - bot = top + display.wrapper.clientHeight; - if (pixels < 0) { - top = Math.max(0, top + pixels - 50); - } else { - bot = Math.min(cm.doc.height, bot + pixels + 50); - } - updateDisplaySimple(cm, { - top, - bottom: bot - }); - } - if (wheelSamples < 20 && e.deltaMode !== 0) { - if (display.wheelStartX == null) { - display.wheelStartX = scroll.scrollLeft; - display.wheelStartY = scroll.scrollTop; - display.wheelDX = dx; - display.wheelDY = dy; - setTimeout(function () { - if (display.wheelStartX == null) { - return; - } - var movedX = scroll.scrollLeft - display.wheelStartX; - var movedY = scroll.scrollTop - display.wheelStartY; - var sample = movedY && display.wheelDY && movedY / display.wheelDY || movedX && display.wheelDX && movedX / display.wheelDX; - display.wheelStartX = display.wheelStartY = null; - if (!sample) { - return; - } - wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); - ++wheelSamples; - }, 200); - } else { - display.wheelDX += dx; - display.wheelDY += dy; - } - } - } - var Selection = function (ranges, primIndex) { - this.ranges = ranges; - this.primIndex = primIndex; - }; - Selection.prototype.primary = function () { - return this.ranges[this.primIndex]; - }; - Selection.prototype.equals = function (other) { - if (other == this) { - return true; - } - if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { - return false; - } - for (var i2 = 0; i2 < this.ranges.length; i2++) { - var here = this.ranges[i2], - there = other.ranges[i2]; - if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { - return false; - } - } - return true; - }; - Selection.prototype.deepCopy = function () { - var out = []; - for (var i2 = 0; i2 < this.ranges.length; i2++) { - out[i2] = new Range(copyPos(this.ranges[i2].anchor), copyPos(this.ranges[i2].head)); - } - return new Selection(out, this.primIndex); - }; - Selection.prototype.somethingSelected = function () { - for (var i2 = 0; i2 < this.ranges.length; i2++) { - if (!this.ranges[i2].empty()) { - return true; - } - } - return false; - }; - Selection.prototype.contains = function (pos, end) { - if (!end) { - end = pos; - } - for (var i2 = 0; i2 < this.ranges.length; i2++) { - var range2 = this.ranges[i2]; - if (cmp(end, range2.from()) >= 0 && cmp(pos, range2.to()) <= 0) { - return i2; - } - } - return -1; - }; - var Range = function (anchor, head) { - this.anchor = anchor; - this.head = head; - }; - Range.prototype.from = function () { - return minPos(this.anchor, this.head); - }; - Range.prototype.to = function () { - return maxPos(this.anchor, this.head); - }; - Range.prototype.empty = function () { - return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; - }; - function normalizeSelection(cm, ranges, primIndex) { - var mayTouch = cm && cm.options.selectionsMayTouch; - var prim = ranges[primIndex]; - ranges.sort(function (a, b) { - return cmp(a.from(), b.from()); - }); - primIndex = indexOf(ranges, prim); - for (var i2 = 1; i2 < ranges.length; i2++) { - var cur = ranges[i2], - prev = ranges[i2 - 1]; - var diff = cmp(prev.to(), cur.from()); - if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) { - var from = minPos(prev.from(), cur.from()), - to = maxPos(prev.to(), cur.to()); - var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; - if (i2 <= primIndex) { - --primIndex; - } - ranges.splice(--i2, 2, new Range(inv ? to : from, inv ? from : to)); - } - } - return new Selection(ranges, primIndex); - } - function simpleSelection(anchor, head) { - return new Selection([new Range(anchor, head || anchor)], 0); - } - function changeEnd(change) { - if (!change.text) { - return change.to; - } - return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); - } - function adjustForChange(pos, change) { - if (cmp(pos, change.from) < 0) { - return pos; - } - if (cmp(pos, change.to) <= 0) { - return changeEnd(change); - } - var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, - ch = pos.ch; - if (pos.line == change.to.line) { - ch += changeEnd(change).ch - change.to.ch; - } - return Pos(line, ch); - } - function computeSelAfterChange(doc, change) { - var out = []; - for (var i2 = 0; i2 < doc.sel.ranges.length; i2++) { - var range2 = doc.sel.ranges[i2]; - out.push(new Range(adjustForChange(range2.anchor, change), adjustForChange(range2.head, change))); - } - return normalizeSelection(doc.cm, out, doc.sel.primIndex); - } - function offsetPos(pos, old, nw) { - if (pos.line == old.line) { - return Pos(nw.line, pos.ch - old.ch + nw.ch); - } else { - return Pos(nw.line + (pos.line - old.line), pos.ch); - } - } - function computeReplacedSel(doc, changes, hint) { - var out = []; - var oldPrev = Pos(doc.first, 0), - newPrev = oldPrev; - for (var i2 = 0; i2 < changes.length; i2++) { - var change = changes[i2]; - var from = offsetPos(change.from, oldPrev, newPrev); - var to = offsetPos(changeEnd(change), oldPrev, newPrev); - oldPrev = change.to; - newPrev = to; - if (hint == "around") { - var range2 = doc.sel.ranges[i2], - inv = cmp(range2.head, range2.anchor) < 0; - out[i2] = new Range(inv ? to : from, inv ? from : to); - } else { - out[i2] = new Range(from, from); - } - } - return new Selection(out, doc.sel.primIndex); - } - function loadMode(cm) { - cm.doc.mode = getMode(cm.options, cm.doc.modeOption); - resetModeState(cm); - } - function resetModeState(cm) { - cm.doc.iter(function (line) { - if (line.stateAfter) { - line.stateAfter = null; - } - if (line.styles) { - line.styles = null; - } - }); - cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first; - startWorker(cm, 100); - cm.state.modeGen++; - if (cm.curOp) { - regChange(cm); - } - } - function isWholeLineUpdate(doc, change) { - return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore); - } - function updateDoc(doc, change, markedSpans, estimateHeight2) { - function spansFor(n) { - return markedSpans ? markedSpans[n] : null; - } - function update(line, text2, spans) { - updateLine(line, text2, spans, estimateHeight2); - signalLater(line, "change", line, change); - } - function linesFor(start, end) { - var result = []; - for (var i2 = start; i2 < end; ++i2) { - result.push(new Line(text[i2], spansFor(i2), estimateHeight2)); - } - return result; - } - var from = change.from, - to = change.to, - text = change.text; - var firstLine = getLine(doc, from.line), - lastLine = getLine(doc, to.line); - var lastText = lst(text), - lastSpans = spansFor(text.length - 1), - nlines = to.line - from.line; - if (change.full) { - doc.insert(0, linesFor(0, text.length)); - doc.remove(text.length, doc.size - text.length); - } else if (isWholeLineUpdate(doc, change)) { - var added = linesFor(0, text.length - 1); - update(lastLine, lastLine.text, lastSpans); - if (nlines) { - doc.remove(from.line, nlines); - } - if (added.length) { - doc.insert(from.line, added); - } - } else if (firstLine == lastLine) { - if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); - } else { - var added$1 = linesFor(1, text.length - 1); - added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight2)); - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - doc.insert(from.line + 1, added$1); - } - } else if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); - doc.remove(from.line + 1, nlines); - } else { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); - var added$2 = linesFor(1, text.length - 1); - if (nlines > 1) { - doc.remove(from.line + 1, nlines - 1); - } - doc.insert(from.line + 1, added$2); - } - signalLater(doc, "change", doc, change); - } - function linkedDocs(doc, f, sharedHistOnly) { - function propagate(doc2, skip, sharedHist) { - if (doc2.linked) { - for (var i2 = 0; i2 < doc2.linked.length; ++i2) { - var rel = doc2.linked[i2]; - if (rel.doc == skip) { - continue; - } - var shared = sharedHist && rel.sharedHist; - if (sharedHistOnly && !shared) { - continue; - } - f(rel.doc, shared); - propagate(rel.doc, doc2, shared); - } - } - } - propagate(doc, null, true); - } - function attachDoc(cm, doc) { - if (doc.cm) { - throw new Error("This document is already in use."); - } - cm.doc = doc; - doc.cm = cm; - estimateLineHeights(cm); - loadMode(cm); - setDirectionClass(cm); - cm.options.direction = doc.direction; - if (!cm.options.lineWrapping) { - findMaxLine(cm); - } - cm.options.mode = doc.modeOption; - regChange(cm); - } - function setDirectionClass(cm) { - (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl"); - } - function directionChanged(cm) { - runInOp(cm, function () { - setDirectionClass(cm); - regChange(cm); - }); - } - function History(prev) { - this.done = []; - this.undone = []; - this.undoDepth = prev ? prev.undoDepth : Infinity; - this.lastModTime = this.lastSelTime = 0; - this.lastOp = this.lastSelOp = null; - this.lastOrigin = this.lastSelOrigin = null; - this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1; - } - function historyChangeFromChange(doc, change) { - var histChange = { - from: copyPos(change.from), - to: changeEnd(change), - text: getBetween(doc, change.from, change.to) - }; - attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); - linkedDocs(doc, function (doc2) { - return attachLocalSpans(doc2, histChange, change.from.line, change.to.line + 1); - }, true); - return histChange; - } - function clearSelectionEvents(array) { - while (array.length) { - var last = lst(array); - if (last.ranges) { - array.pop(); - } else { - break; - } - } - } - function lastChangeEvent(hist, force) { - if (force) { - clearSelectionEvents(hist.done); - return lst(hist.done); - } else if (hist.done.length && !lst(hist.done).ranges) { - return lst(hist.done); - } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { - hist.done.pop(); - return lst(hist.done); - } - } - function addChangeToHistory(doc, change, selAfter, opId) { - var hist = doc.history; - hist.undone.length = 0; - var time = + /* @__PURE__ */new Date(), - cur; - var last; - if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && (change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500) || change.origin.charAt(0) == "*")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) { - last = lst(cur.changes); - if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { - last.to = changeEnd(change); - } else { - cur.changes.push(historyChangeFromChange(doc, change)); - } - } else { - var before = lst(hist.done); - if (!before || !before.ranges) { - pushSelectionToHistory(doc.sel, hist.done); - } - cur = { - changes: [historyChangeFromChange(doc, change)], - generation: hist.generation - }; - hist.done.push(cur); - while (hist.done.length > hist.undoDepth) { - hist.done.shift(); - if (!hist.done[0].ranges) { - hist.done.shift(); - } - } - } - hist.done.push(selAfter); - hist.generation = ++hist.maxGeneration; - hist.lastModTime = hist.lastSelTime = time; - hist.lastOp = hist.lastSelOp = opId; - hist.lastOrigin = hist.lastSelOrigin = change.origin; - if (!last) { - signal(doc, "historyAdded"); - } - } - function selectionEventCanBeMerged(doc, origin, prev, sel) { - var ch = origin.charAt(0); - return ch == "*" || ch == "+" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && /* @__PURE__ */new Date() - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); - } - function addSelectionToHistory(doc, sel, opId, options) { - var hist = doc.history, - origin = options && options.origin; - if (opId == hist.lastSelOp || origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))) { - hist.done[hist.done.length - 1] = sel; - } else { - pushSelectionToHistory(sel, hist.done); - } - hist.lastSelTime = + /* @__PURE__ */new Date(); - hist.lastSelOrigin = origin; - hist.lastSelOp = opId; - if (options && options.clearRedo !== false) { - clearSelectionEvents(hist.undone); - } - } - function pushSelectionToHistory(sel, dest) { - var top = lst(dest); - if (!(top && top.ranges && top.equals(sel))) { - dest.push(sel); - } - } - function attachLocalSpans(doc, change, from, to) { - var existing = change["spans_" + doc.id], - n = 0; - doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { - if (line.markedSpans) { - (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; - } - ++n; - }); - } - function removeClearedSpans(spans) { - if (!spans) { - return null; - } - var out; - for (var i2 = 0; i2 < spans.length; ++i2) { - if (spans[i2].marker.explicitlyCleared) { - if (!out) { - out = spans.slice(0, i2); - } - } else if (out) { - out.push(spans[i2]); - } - } - return !out ? spans : out.length ? out : null; - } - function getOldSpans(doc, change) { - var found = change["spans_" + doc.id]; - if (!found) { - return null; - } - var nw = []; - for (var i2 = 0; i2 < change.text.length; ++i2) { - nw.push(removeClearedSpans(found[i2])); - } - return nw; - } - function mergeOldSpans(doc, change) { - var old = getOldSpans(doc, change); - var stretched = stretchSpansOverChange(doc, change); - if (!old) { - return stretched; - } - if (!stretched) { - return old; - } - for (var i2 = 0; i2 < old.length; ++i2) { - var oldCur = old[i2], - stretchCur = stretched[i2]; - if (oldCur && stretchCur) { - spans: for (var j = 0; j < stretchCur.length; ++j) { - var span = stretchCur[j]; - for (var k = 0; k < oldCur.length; ++k) { - if (oldCur[k].marker == span.marker) { - continue spans; - } - } - oldCur.push(span); - } - } else if (stretchCur) { - old[i2] = stretchCur; - } - } - return old; - } - function copyHistoryArray(events, newGroup, instantiateSel) { - var copy = []; - for (var i2 = 0; i2 < events.length; ++i2) { - var event = events[i2]; - if (event.ranges) { - copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); - continue; - } - var changes = event.changes, - newChanges = []; - copy.push({ - changes: newChanges - }); - for (var j = 0; j < changes.length; ++j) { - var change = changes[j], - m = void 0; - newChanges.push({ - from: change.from, - to: change.to, - text: change.text - }); - if (newGroup) { - for (var prop2 in change) { - if (m = prop2.match(/^spans_(\d+)$/)) { - if (indexOf(newGroup, Number(m[1])) > -1) { - lst(newChanges)[prop2] = change[prop2]; - delete change[prop2]; - } - } - } - } - } - } - return copy; - } - function extendRange(range2, head, other, extend) { - if (extend) { - var anchor = range2.anchor; - if (other) { - var posBefore = cmp(head, anchor) < 0; - if (posBefore != cmp(other, anchor) < 0) { - anchor = head; - head = other; - } else if (posBefore != cmp(head, other) < 0) { - head = other; - } - } - return new Range(anchor, head); - } else { - return new Range(other || head, head); - } - } - function extendSelection(doc, head, other, options, extend) { - if (extend == null) { - extend = doc.cm && (doc.cm.display.shift || doc.extend); - } - setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options); - } - function extendSelections(doc, heads, options) { - var out = []; - var extend = doc.cm && (doc.cm.display.shift || doc.extend); - for (var i2 = 0; i2 < doc.sel.ranges.length; i2++) { - out[i2] = extendRange(doc.sel.ranges[i2], heads[i2], null, extend); - } - var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex); - setSelection(doc, newSel, options); - } - function replaceOneSelection(doc, i2, range2, options) { - var ranges = doc.sel.ranges.slice(0); - ranges[i2] = range2; - setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options); - } - function setSimpleSelection(doc, anchor, head, options) { - setSelection(doc, simpleSelection(anchor, head), options); - } - function filterSelectionChange(doc, sel, options) { - var obj = { - ranges: sel.ranges, - update: function (ranges) { - this.ranges = []; - for (var i2 = 0; i2 < ranges.length; i2++) { - this.ranges[i2] = new Range(clipPos(doc, ranges[i2].anchor), clipPos(doc, ranges[i2].head)); - } - }, - origin: options && options.origin - }; - signal(doc, "beforeSelectionChange", doc, obj); - if (doc.cm) { - signal(doc.cm, "beforeSelectionChange", doc.cm, obj); - } - if (obj.ranges != sel.ranges) { - return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1); - } else { - return sel; - } - } - function setSelectionReplaceHistory(doc, sel, options) { - var done = doc.history.done, - last = lst(done); - if (last && last.ranges) { - done[done.length - 1] = sel; - setSelectionNoUndo(doc, sel, options); - } else { - setSelection(doc, sel, options); - } - } - function setSelection(doc, sel, options) { - setSelectionNoUndo(doc, sel, options); - addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); - } - function setSelectionNoUndo(doc, sel, options) { - if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) { - sel = filterSelectionChange(doc, sel, options); - } - var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); - setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); - if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption("readOnly") != "nocursor") { - ensureCursorVisible(doc.cm); - } - } - function setSelectionInner(doc, sel) { - if (sel.equals(doc.sel)) { - return; - } - doc.sel = sel; - if (doc.cm) { - doc.cm.curOp.updateInput = 1; - doc.cm.curOp.selectionChanged = true; - signalCursorActivity(doc.cm); - } - signalLater(doc, "cursorActivity", doc); - } - function reCheckSelection(doc) { - setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false)); - } - function skipAtomicInSelection(doc, sel, bias, mayClear) { - var out; - for (var i2 = 0; i2 < sel.ranges.length; i2++) { - var range2 = sel.ranges[i2]; - var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i2]; - var newAnchor = skipAtomic(doc, range2.anchor, old && old.anchor, bias, mayClear); - var newHead = skipAtomic(doc, range2.head, old && old.head, bias, mayClear); - if (out || newAnchor != range2.anchor || newHead != range2.head) { - if (!out) { - out = sel.ranges.slice(0, i2); - } - out[i2] = new Range(newAnchor, newHead); - } - } - return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel; - } - function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { - var line = getLine(doc, pos.line); - if (line.markedSpans) { - for (var i2 = 0; i2 < line.markedSpans.length; ++i2) { - var sp = line.markedSpans[i2], - m = sp.marker; - var preventCursorLeft = "selectLeft" in m ? !m.selectLeft : m.inclusiveLeft; - var preventCursorRight = "selectRight" in m ? !m.selectRight : m.inclusiveRight; - if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) { - if (mayClear) { - signal(m, "beforeCursorEnter"); - if (m.explicitlyCleared) { - if (!line.markedSpans) { - break; - } else { - --i2; - continue; - } - } - } - if (!m.atomic) { - continue; - } - if (oldPos) { - var near = m.find(dir < 0 ? 1 : -1), - diff = void 0; - if (dir < 0 ? preventCursorRight : preventCursorLeft) { - near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); - } - if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) { - return skipAtomicInner(doc, near, pos, dir, mayClear); - } - } - var far = m.find(dir < 0 ? -1 : 1); - if (dir < 0 ? preventCursorLeft : preventCursorRight) { - far = movePos(doc, far, dir, far.line == pos.line ? line : null); - } - return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null; - } - } - } - return pos; - } - function skipAtomic(doc, pos, oldPos, bias, mayClear) { - var dir = bias || 1; - var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, dir, true) || skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true); - if (!found) { - doc.cantEdit = true; - return Pos(doc.first, 0); - } - return found; - } - function movePos(doc, pos, dir, line) { - if (dir < 0 && pos.ch == 0) { - if (pos.line > doc.first) { - return clipPos(doc, Pos(pos.line - 1)); - } else { - return null; - } - } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { - if (pos.line < doc.first + doc.size - 1) { - return Pos(pos.line + 1, 0); - } else { - return null; - } - } else { - return new Pos(pos.line, pos.ch + dir); - } - } - function selectAll(cm) { - cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll); - } - function filterChange(doc, change, update) { - var obj = { - canceled: false, - from: change.from, - to: change.to, - text: change.text, - origin: change.origin, - cancel: function () { - return obj.canceled = true; - } - }; - if (update) { - obj.update = function (from, to, text, origin) { - if (from) { - obj.from = clipPos(doc, from); - } - if (to) { - obj.to = clipPos(doc, to); - } - if (text) { - obj.text = text; - } - if (origin !== void 0) { - obj.origin = origin; - } - }; - } - signal(doc, "beforeChange", doc, obj); - if (doc.cm) { - signal(doc.cm, "beforeChange", doc.cm, obj); - } - if (obj.canceled) { - if (doc.cm) { - doc.cm.curOp.updateInput = 2; - } - return null; - } - return { - from: obj.from, - to: obj.to, - text: obj.text, - origin: obj.origin - }; - } - function makeChange(doc, change, ignoreReadOnly) { - if (doc.cm) { - if (!doc.cm.curOp) { - return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); - } - if (doc.cm.state.suppressEdits) { - return; - } - } - if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { - change = filterChange(doc, change, true); - if (!change) { - return; - } - } - var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); - if (split) { - for (var i2 = split.length - 1; i2 >= 0; --i2) { - makeChangeInner(doc, { - from: split[i2].from, - to: split[i2].to, - text: i2 ? [""] : change.text, - origin: change.origin - }); - } - } else { - makeChangeInner(doc, change); - } - } - function makeChangeInner(doc, change) { - if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { - return; - } - var selAfter = computeSelAfterChange(doc, change); - addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); - makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); - var rebased = []; - linkedDocs(doc, function (doc2, sharedHist) { - if (!sharedHist && indexOf(rebased, doc2.history) == -1) { - rebaseHist(doc2.history, change); - rebased.push(doc2.history); - } - makeChangeSingleDoc(doc2, change, null, stretchSpansOverChange(doc2, change)); - }); - } - function makeChangeFromHistory(doc, type, allowSelectionOnly) { - var suppress = doc.cm && doc.cm.state.suppressEdits; - if (suppress && !allowSelectionOnly) { - return; - } - var hist = doc.history, - event, - selAfter = doc.sel; - var source = type == "undo" ? hist.done : hist.undone, - dest = type == "undo" ? hist.undone : hist.done; - var i2 = 0; - for (; i2 < source.length; i2++) { - event = source[i2]; - if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) { - break; - } - } - if (i2 == source.length) { - return; - } - hist.lastOrigin = hist.lastSelOrigin = null; - for (;;) { - event = source.pop(); - if (event.ranges) { - pushSelectionToHistory(event, dest); - if (allowSelectionOnly && !event.equals(doc.sel)) { - setSelection(doc, event, { - clearRedo: false - }); - return; - } - selAfter = event; - } else if (suppress) { - source.push(event); - return; - } else { - break; - } - } - var antiChanges = []; - pushSelectionToHistory(selAfter, dest); - dest.push({ - changes: antiChanges, - generation: hist.generation - }); - hist.generation = event.generation || ++hist.maxGeneration; - var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); - var loop = function (i3) { - var change = event.changes[i3]; - change.origin = type; - if (filter && !filterChange(doc, change, false)) { - source.length = 0; - return {}; - } - antiChanges.push(historyChangeFromChange(doc, change)); - var after = i3 ? computeSelAfterChange(doc, change) : lst(source); - makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); - if (!i3 && doc.cm) { - doc.cm.scrollIntoView({ - from: change.from, - to: changeEnd(change) - }); - } - var rebased = []; - linkedDocs(doc, function (doc2, sharedHist) { - if (!sharedHist && indexOf(rebased, doc2.history) == -1) { - rebaseHist(doc2.history, change); - rebased.push(doc2.history); - } - makeChangeSingleDoc(doc2, change, null, mergeOldSpans(doc2, change)); - }); - }; - for (var i$12 = event.changes.length - 1; i$12 >= 0; --i$12) { - var returned = loop(i$12); - if (returned) return returned.v; - } - } - function shiftDoc(doc, distance) { - if (distance == 0) { - return; - } - doc.first += distance; - doc.sel = new Selection(map(doc.sel.ranges, function (range2) { - return new Range(Pos(range2.anchor.line + distance, range2.anchor.ch), Pos(range2.head.line + distance, range2.head.ch)); - }), doc.sel.primIndex); - if (doc.cm) { - regChange(doc.cm, doc.first, doc.first - distance, distance); - for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) { - regLineChange(doc.cm, l, "gutter"); - } - } - } - function makeChangeSingleDoc(doc, change, selAfter, spans) { - if (doc.cm && !doc.cm.curOp) { - return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); - } - if (change.to.line < doc.first) { - shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); - return; - } - if (change.from.line > doc.lastLine()) { - return; - } - if (change.from.line < doc.first) { - var shift = change.text.length - 1 - (doc.first - change.from.line); - shiftDoc(doc, shift); - change = { - from: Pos(doc.first, 0), - to: Pos(change.to.line + shift, change.to.ch), - text: [lst(change.text)], - origin: change.origin - }; - } - var last = doc.lastLine(); - if (change.to.line > last) { - change = { - from: change.from, - to: Pos(last, getLine(doc, last).text.length), - text: [change.text[0]], - origin: change.origin - }; - } - change.removed = getBetween(doc, change.from, change.to); - if (!selAfter) { - selAfter = computeSelAfterChange(doc, change); - } - if (doc.cm) { - makeChangeSingleDocInEditor(doc.cm, change, spans); - } else { - updateDoc(doc, change, spans); - } - setSelectionNoUndo(doc, selAfter, sel_dontScroll); - if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) { - doc.cantEdit = false; - } - } - function makeChangeSingleDocInEditor(cm, change, spans) { - var doc = cm.doc, - display = cm.display, - from = change.from, - to = change.to; - var recomputeMaxLength = false, - checkWidthStart = from.line; - if (!cm.options.lineWrapping) { - checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); - doc.iter(checkWidthStart, to.line + 1, function (line) { - if (line == display.maxLine) { - recomputeMaxLength = true; - return true; - } - }); - } - if (doc.sel.contains(change.from, change.to) > -1) { - signalCursorActivity(cm); - } - updateDoc(doc, change, spans, estimateHeight(cm)); - if (!cm.options.lineWrapping) { - doc.iter(checkWidthStart, from.line + change.text.length, function (line) { - var len = lineLength(line); - if (len > display.maxLineLength) { - display.maxLine = line; - display.maxLineLength = len; - display.maxLineChanged = true; - recomputeMaxLength = false; - } - }); - if (recomputeMaxLength) { - cm.curOp.updateMaxLine = true; - } - } - retreatFrontier(doc, from.line); - startWorker(cm, 400); - var lendiff = change.text.length - (to.line - from.line) - 1; - if (change.full) { - regChange(cm); - } else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) { - regLineChange(cm, from.line, "text"); - } else { - regChange(cm, from.line, to.line + 1, lendiff); - } - var changesHandler = hasHandler(cm, "changes"), - changeHandler = hasHandler(cm, "change"); - if (changeHandler || changesHandler) { - var obj = { - from, - to, - text: change.text, - removed: change.removed, - origin: change.origin - }; - if (changeHandler) { - signalLater(cm, "change", cm, obj); - } - if (changesHandler) { - (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); - } - } - cm.display.selForContextMenu = null; - } - function replaceRange(doc, code, from, to, origin) { - var assign; - if (!to) { - to = from; - } - if (cmp(to, from) < 0) { - assign = [to, from], from = assign[0], to = assign[1]; - } - if (typeof code == "string") { - code = doc.splitLines(code); - } - makeChange(doc, { - from, - to, - text: code, - origin - }); - } - function rebaseHistSelSingle(pos, from, to, diff) { - if (to < pos.line) { - pos.line += diff; - } else if (from < pos.line) { - pos.line = from; - pos.ch = 0; - } - } - function rebaseHistArray(array, from, to, diff) { - for (var i2 = 0; i2 < array.length; ++i2) { - var sub = array[i2], - ok = true; - if (sub.ranges) { - if (!sub.copied) { - sub = array[i2] = sub.deepCopy(); - sub.copied = true; - } - for (var j = 0; j < sub.ranges.length; j++) { - rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); - rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); - } - continue; - } - for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { - var cur = sub.changes[j$1]; - if (to < cur.from.line) { - cur.from = Pos(cur.from.line + diff, cur.from.ch); - cur.to = Pos(cur.to.line + diff, cur.to.ch); - } else if (from <= cur.to.line) { - ok = false; - break; - } - } - if (!ok) { - array.splice(0, i2 + 1); - i2 = 0; - } - } - } - function rebaseHist(hist, change) { - var from = change.from.line, - to = change.to.line, - diff = change.text.length - (to - from) - 1; - rebaseHistArray(hist.done, from, to, diff); - rebaseHistArray(hist.undone, from, to, diff); - } - function changeLine(doc, handle, changeType, op) { - var no = handle, - line = handle; - if (typeof handle == "number") { - line = getLine(doc, clipLine(doc, handle)); - } else { - no = lineNo(handle); - } - if (no == null) { - return null; - } - if (op(line, no) && doc.cm) { - regLineChange(doc.cm, no, changeType); - } - return line; - } - function LeafChunk(lines) { - this.lines = lines; - this.parent = null; - var height = 0; - for (var i2 = 0; i2 < lines.length; ++i2) { - lines[i2].parent = this; - height += lines[i2].height; - } - this.height = height; - } - LeafChunk.prototype = { - chunkSize: function () { - return this.lines.length; - }, - // Remove the n lines at offset 'at'. - removeInner: function (at, n) { - for (var i2 = at, e = at + n; i2 < e; ++i2) { - var line = this.lines[i2]; - this.height -= line.height; - cleanUpLine(line); - signalLater(line, "delete"); - } - this.lines.splice(at, n); - }, - // Helper used to collapse a small branch into a single leaf. - collapse: function (lines) { - lines.push.apply(lines, this.lines); - }, - // Insert the given array of lines at offset 'at', count them as - // having the given height. - insertInner: function (at, lines, height) { - this.height += height; - this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); - for (var i2 = 0; i2 < lines.length; ++i2) { - lines[i2].parent = this; - } - }, - // Used to iterate over a part of the tree. - iterN: function (at, n, op) { - for (var e = at + n; at < e; ++at) { - if (op(this.lines[at])) { - return true; - } - } - } - }; - function BranchChunk(children) { - this.children = children; - var size = 0, - height = 0; - for (var i2 = 0; i2 < children.length; ++i2) { - var ch = children[i2]; - size += ch.chunkSize(); - height += ch.height; - ch.parent = this; - } - this.size = size; - this.height = height; - this.parent = null; - } - BranchChunk.prototype = { - chunkSize: function () { - return this.size; - }, - removeInner: function (at, n) { - this.size -= n; - for (var i2 = 0; i2 < this.children.length; ++i2) { - var child = this.children[i2], - sz = child.chunkSize(); - if (at < sz) { - var rm = Math.min(n, sz - at), - oldHeight = child.height; - child.removeInner(at, rm); - this.height -= oldHeight - child.height; - if (sz == rm) { - this.children.splice(i2--, 1); - child.parent = null; - } - if ((n -= rm) == 0) { - break; - } - at = 0; - } else { - at -= sz; - } - } - if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { - var lines = []; - this.collapse(lines); - this.children = [new LeafChunk(lines)]; - this.children[0].parent = this; - } - }, - collapse: function (lines) { - for (var i2 = 0; i2 < this.children.length; ++i2) { - this.children[i2].collapse(lines); - } - }, - insertInner: function (at, lines, height) { - this.size += lines.length; - this.height += height; - for (var i2 = 0; i2 < this.children.length; ++i2) { - var child = this.children[i2], - sz = child.chunkSize(); - if (at <= sz) { - child.insertInner(at, lines, height); - if (child.lines && child.lines.length > 50) { - var remaining = child.lines.length % 25 + 25; - for (var pos = remaining; pos < child.lines.length;) { - var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); - child.height -= leaf.height; - this.children.splice(++i2, 0, leaf); - leaf.parent = this; - } - child.lines = child.lines.slice(0, remaining); - this.maybeSpill(); - } - break; - } - at -= sz; - } - }, - // When a node has grown, check whether it should be split. - maybeSpill: function () { - if (this.children.length <= 10) { - return; - } - var me = this; - do { - var spilled = me.children.splice(me.children.length - 5, 5); - var sibling = new BranchChunk(spilled); - if (!me.parent) { - var copy = new BranchChunk(me.children); - copy.parent = me; - me.children = [copy, sibling]; - me = copy; - } else { - me.size -= sibling.size; - me.height -= sibling.height; - var myIndex = indexOf(me.parent.children, me); - me.parent.children.splice(myIndex + 1, 0, sibling); - } - sibling.parent = me.parent; - } while (me.children.length > 10); - me.parent.maybeSpill(); - }, - iterN: function (at, n, op) { - for (var i2 = 0; i2 < this.children.length; ++i2) { - var child = this.children[i2], - sz = child.chunkSize(); - if (at < sz) { - var used = Math.min(n, sz - at); - if (child.iterN(at, used, op)) { - return true; - } - if ((n -= used) == 0) { - break; - } - at = 0; - } else { - at -= sz; - } - } - } - }; - var LineWidget = function (doc, node, options) { - if (options) { - for (var opt in options) { - if (options.hasOwnProperty(opt)) { - this[opt] = options[opt]; - } - } - } - this.doc = doc; - this.node = node; - }; - LineWidget.prototype.clear = function () { - var cm = this.doc.cm, - ws = this.line.widgets, - line = this.line, - no = lineNo(line); - if (no == null || !ws) { - return; - } - for (var i2 = 0; i2 < ws.length; ++i2) { - if (ws[i2] == this) { - ws.splice(i2--, 1); - } - } - if (!ws.length) { - line.widgets = null; - } - var height = widgetHeight(this); - updateLineHeight(line, Math.max(0, line.height - height)); - if (cm) { - runInOp(cm, function () { - adjustScrollWhenAboveVisible(cm, line, -height); - regLineChange(cm, no, "widget"); - }); - signalLater(cm, "lineWidgetCleared", cm, this, no); - } - }; - LineWidget.prototype.changed = function () { - var this$1$1 = this; - var oldH = this.height, - cm = this.doc.cm, - line = this.line; - this.height = null; - var diff = widgetHeight(this) - oldH; - if (!diff) { - return; - } - if (!lineIsHidden(this.doc, line)) { - updateLineHeight(line, line.height + diff); - } - if (cm) { - runInOp(cm, function () { - cm.curOp.forceUpdate = true; - adjustScrollWhenAboveVisible(cm, line, diff); - signalLater(cm, "lineWidgetChanged", cm, this$1$1, lineNo(line)); - }); - } - }; - eventMixin(LineWidget); - function adjustScrollWhenAboveVisible(cm, line, diff) { - if (heightAtLine(line) < (cm.curOp && cm.curOp.scrollTop || cm.doc.scrollTop)) { - addToScrollTop(cm, diff); - } - } - function addLineWidget(doc, handle, node, options) { - var widget = new LineWidget(doc, node, options); - var cm = doc.cm; - if (cm && widget.noHScroll) { - cm.display.alignWidgets = true; - } - changeLine(doc, handle, "widget", function (line) { - var widgets = line.widgets || (line.widgets = []); - if (widget.insertAt == null) { - widgets.push(widget); - } else { - widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); - } - widget.line = line; - if (cm && !lineIsHidden(doc, line)) { - var aboveVisible = heightAtLine(line) < doc.scrollTop; - updateLineHeight(line, line.height + widgetHeight(widget)); - if (aboveVisible) { - addToScrollTop(cm, widget.height); - } - cm.curOp.forceUpdate = true; - } - return true; - }); - if (cm) { - signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); - } - return widget; - } - var nextMarkerId = 0; - var TextMarker = function (doc, type) { - this.lines = []; - this.type = type; - this.doc = doc; - this.id = ++nextMarkerId; - }; - TextMarker.prototype.clear = function () { - if (this.explicitlyCleared) { - return; - } - var cm = this.doc.cm, - withOp = cm && !cm.curOp; - if (withOp) { - startOperation(cm); - } - if (hasHandler(this, "clear")) { - var found = this.find(); - if (found) { - signalLater(this, "clear", found.from, found.to); - } - } - var min = null, - max = null; - for (var i2 = 0; i2 < this.lines.length; ++i2) { - var line = this.lines[i2]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (cm && !this.collapsed) { - regLineChange(cm, lineNo(line), "text"); - } else if (cm) { - if (span.to != null) { - max = lineNo(line); - } - if (span.from != null) { - min = lineNo(line); - } - } - line.markedSpans = removeMarkedSpan(line.markedSpans, span); - if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) { - updateLineHeight(line, textHeight(cm.display)); - } - } - if (cm && this.collapsed && !cm.options.lineWrapping) { - for (var i$12 = 0; i$12 < this.lines.length; ++i$12) { - var visual = visualLine(this.lines[i$12]), - len = lineLength(visual); - if (len > cm.display.maxLineLength) { - cm.display.maxLine = visual; - cm.display.maxLineLength = len; - cm.display.maxLineChanged = true; - } - } - } - if (min != null && cm && this.collapsed) { - regChange(cm, min, max + 1); - } - this.lines.length = 0; - this.explicitlyCleared = true; - if (this.atomic && this.doc.cantEdit) { - this.doc.cantEdit = false; - if (cm) { - reCheckSelection(cm.doc); - } - } - if (cm) { - signalLater(cm, "markerCleared", cm, this, min, max); - } - if (withOp) { - endOperation(cm); - } - if (this.parent) { - this.parent.clear(); - } - }; - TextMarker.prototype.find = function (side, lineObj) { - if (side == null && this.type == "bookmark") { - side = 1; - } - var from, to; - for (var i2 = 0; i2 < this.lines.length; ++i2) { - var line = this.lines[i2]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (span.from != null) { - from = Pos(lineObj ? line : lineNo(line), span.from); - if (side == -1) { - return from; - } - } - if (span.to != null) { - to = Pos(lineObj ? line : lineNo(line), span.to); - if (side == 1) { - return to; - } - } - } - return from && { - from, - to - }; - }; - TextMarker.prototype.changed = function () { - var this$1$1 = this; - var pos = this.find(-1, true), - widget = this, - cm = this.doc.cm; - if (!pos || !cm) { - return; - } - runInOp(cm, function () { - var line = pos.line, - lineN = lineNo(pos.line); - var view = findViewForLine(cm, lineN); - if (view) { - clearLineMeasurementCacheFor(view); - cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; - } - cm.curOp.updateMaxLine = true; - if (!lineIsHidden(widget.doc, line) && widget.height != null) { - var oldHeight = widget.height; - widget.height = null; - var dHeight = widgetHeight(widget) - oldHeight; - if (dHeight) { - updateLineHeight(line, line.height + dHeight); - } - } - signalLater(cm, "markerChanged", cm, this$1$1); - }); - }; - TextMarker.prototype.attachLine = function (line) { - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) { - (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); - } - } - this.lines.push(line); - }; - TextMarker.prototype.detachLine = function (line) { - this.lines.splice(indexOf(this.lines, line), 1); - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); - } - }; - eventMixin(TextMarker); - function markText(doc, from, to, options, type) { - if (options && options.shared) { - return markTextShared(doc, from, to, options, type); - } - if (doc.cm && !doc.cm.curOp) { - return operation(doc.cm, markText)(doc, from, to, options, type); - } - var marker = new TextMarker(doc, type), - diff = cmp(from, to); - if (options) { - copyObj(options, marker, false); - } - if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) { - return marker; - } - if (marker.replacedWith) { - marker.collapsed = true; - marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget"); - if (!options.handleMouseEvents) { - marker.widgetNode.setAttribute("cm-ignore-events", "true"); - } - if (options.insertLeft) { - marker.widgetNode.insertLeft = true; - } - } - if (marker.collapsed) { - if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) { - throw new Error("Inserting collapsed marker partially overlapping an existing one"); - } - seeCollapsedSpans(); - } - if (marker.addToHistory) { - addChangeToHistory(doc, { - from, - to, - origin: "markText" - }, doc.sel, NaN); - } - var curLine = from.line, - cm = doc.cm, - updateMaxLine; - doc.iter(curLine, to.line + 1, function (line) { - if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) { - updateMaxLine = true; - } - if (marker.collapsed && curLine != from.line) { - updateLineHeight(line, 0); - } - addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp); - ++curLine; - }); - if (marker.collapsed) { - doc.iter(from.line, to.line + 1, function (line) { - if (lineIsHidden(doc, line)) { - updateLineHeight(line, 0); - } - }); - } - if (marker.clearOnEnter) { - on(marker, "beforeCursorEnter", function () { - return marker.clear(); - }); - } - if (marker.readOnly) { - seeReadOnlySpans(); - if (doc.history.done.length || doc.history.undone.length) { - doc.clearHistory(); - } - } - if (marker.collapsed) { - marker.id = ++nextMarkerId; - marker.atomic = true; - } - if (cm) { - if (updateMaxLine) { - cm.curOp.updateMaxLine = true; - } - if (marker.collapsed) { - regChange(cm, from.line, to.line + 1); - } else if (marker.className || marker.startStyle || marker.endStyle || marker.css || marker.attributes || marker.title) { - for (var i2 = from.line; i2 <= to.line; i2++) { - regLineChange(cm, i2, "text"); - } - } - if (marker.atomic) { - reCheckSelection(cm.doc); - } - signalLater(cm, "markerAdded", cm, marker); - } - return marker; - } - var SharedTextMarker = function (markers, primary) { - this.markers = markers; - this.primary = primary; - for (var i2 = 0; i2 < markers.length; ++i2) { - markers[i2].parent = this; - } - }; - SharedTextMarker.prototype.clear = function () { - if (this.explicitlyCleared) { - return; - } - this.explicitlyCleared = true; - for (var i2 = 0; i2 < this.markers.length; ++i2) { - this.markers[i2].clear(); - } - signalLater(this, "clear"); - }; - SharedTextMarker.prototype.find = function (side, lineObj) { - return this.primary.find(side, lineObj); - }; - eventMixin(SharedTextMarker); - function markTextShared(doc, from, to, options, type) { - options = copyObj(options); - options.shared = false; - var markers = [markText(doc, from, to, options, type)], - primary = markers[0]; - var widget = options.widgetNode; - linkedDocs(doc, function (doc2) { - if (widget) { - options.widgetNode = widget.cloneNode(true); - } - markers.push(markText(doc2, clipPos(doc2, from), clipPos(doc2, to), options, type)); - for (var i2 = 0; i2 < doc2.linked.length; ++i2) { - if (doc2.linked[i2].isParent) { - return; - } - } - primary = lst(markers); - }); - return new SharedTextMarker(markers, primary); - } - function findSharedMarkers(doc) { - return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { - return m.parent; - }); - } - function copySharedMarkers(doc, markers) { - for (var i2 = 0; i2 < markers.length; i2++) { - var marker = markers[i2], - pos = marker.find(); - var mFrom = doc.clipPos(pos.from), - mTo = doc.clipPos(pos.to); - if (cmp(mFrom, mTo)) { - var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); - marker.markers.push(subMark); - subMark.parent = marker; - } - } - } - function detachSharedMarkers(markers) { - var loop = function (i3) { - var marker = markers[i3], - linked = [marker.primary.doc]; - linkedDocs(marker.primary.doc, function (d) { - return linked.push(d); - }); - for (var j = 0; j < marker.markers.length; j++) { - var subMarker = marker.markers[j]; - if (indexOf(linked, subMarker.doc) == -1) { - subMarker.parent = null; - marker.markers.splice(j--, 1); - } - } - }; - for (var i2 = 0; i2 < markers.length; i2++) loop(i2); - } - var nextDocId = 0; - var Doc = function (text, mode, firstLine, lineSep, direction) { - if (!(this instanceof Doc)) { - return new Doc(text, mode, firstLine, lineSep, direction); - } - if (firstLine == null) { - firstLine = 0; - } - BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); - this.first = firstLine; - this.scrollTop = this.scrollLeft = 0; - this.cantEdit = false; - this.cleanGeneration = 1; - this.modeFrontier = this.highlightFrontier = firstLine; - var start = Pos(firstLine, 0); - this.sel = simpleSelection(start); - this.history = new History(null); - this.id = ++nextDocId; - this.modeOption = mode; - this.lineSep = lineSep; - this.direction = direction == "rtl" ? "rtl" : "ltr"; - this.extend = false; - if (typeof text == "string") { - text = this.splitLines(text); - } - updateDoc(this, { - from: start, - to: start, - text - }); - setSelection(this, simpleSelection(start), sel_dontScroll); - }; - Doc.prototype = createObj(BranchChunk.prototype, { - constructor: Doc, - // Iterate over the document. Supports two forms -- with only one - // argument, it calls that for each line in the document. With - // three, it iterates over the range given by the first two (with - // the second being non-inclusive). - iter: function (from, to, op) { - if (op) { - this.iterN(from - this.first, to - from, op); - } else { - this.iterN(this.first, this.first + this.size, from); - } - }, - // Non-public interface for adding and removing lines. - insert: function (at, lines) { - var height = 0; - for (var i2 = 0; i2 < lines.length; ++i2) { - height += lines[i2].height; - } - this.insertInner(at - this.first, lines, height); - }, - remove: function (at, n) { - this.removeInner(at - this.first, n); - }, - // From here, the methods are part of the public interface. Most - // are also available from CodeMirror (editor) instances. - getValue: function (lineSep) { - var lines = getLines(this, this.first, this.first + this.size); - if (lineSep === false) { - return lines; - } - return lines.join(lineSep || this.lineSeparator()); - }, - setValue: docMethodOp(function (code) { - var top = Pos(this.first, 0), - last = this.first + this.size - 1; - makeChange(this, { - from: top, - to: Pos(last, getLine(this, last).text.length), - text: this.splitLines(code), - origin: "setValue", - full: true - }, true); - if (this.cm) { - scrollToCoords(this.cm, 0, 0); - } - setSelection(this, simpleSelection(top), sel_dontScroll); - }), - replaceRange: function (code, from, to, origin) { - from = clipPos(this, from); - to = to ? clipPos(this, to) : from; - replaceRange(this, code, from, to, origin); - }, - getRange: function (from, to, lineSep) { - var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); - if (lineSep === false) { - return lines; - } - if (lineSep === "") { - return lines.join(""); - } - return lines.join(lineSep || this.lineSeparator()); - }, - getLine: function (line) { - var l = this.getLineHandle(line); - return l && l.text; - }, - getLineHandle: function (line) { - if (isLine(this, line)) { - return getLine(this, line); - } - }, - getLineNumber: function (line) { - return lineNo(line); - }, - getLineHandleVisualStart: function (line) { - if (typeof line == "number") { - line = getLine(this, line); - } - return visualLine(line); - }, - lineCount: function () { - return this.size; - }, - firstLine: function () { - return this.first; - }, - lastLine: function () { - return this.first + this.size - 1; - }, - clipPos: function (pos) { - return clipPos(this, pos); - }, - getCursor: function (start) { - var range2 = this.sel.primary(), - pos; - if (start == null || start == "head") { - pos = range2.head; - } else if (start == "anchor") { - pos = range2.anchor; - } else if (start == "end" || start == "to" || start === false) { - pos = range2.to(); - } else { - pos = range2.from(); - } - return pos; - }, - listSelections: function () { - return this.sel.ranges; - }, - somethingSelected: function () { - return this.sel.somethingSelected(); - }, - setCursor: docMethodOp(function (line, ch, options) { - setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); - }), - setSelection: docMethodOp(function (anchor, head, options) { - setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); - }), - extendSelection: docMethodOp(function (head, other, options) { - extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); - }), - extendSelections: docMethodOp(function (heads, options) { - extendSelections(this, clipPosArray(this, heads), options); - }), - extendSelectionsBy: docMethodOp(function (f, options) { - var heads = map(this.sel.ranges, f); - extendSelections(this, clipPosArray(this, heads), options); - }), - setSelections: docMethodOp(function (ranges, primary, options) { - if (!ranges.length) { - return; - } - var out = []; - for (var i2 = 0; i2 < ranges.length; i2++) { - out[i2] = new Range(clipPos(this, ranges[i2].anchor), clipPos(this, ranges[i2].head || ranges[i2].anchor)); - } - if (primary == null) { - primary = Math.min(ranges.length - 1, this.sel.primIndex); - } - setSelection(this, normalizeSelection(this.cm, out, primary), options); - }), - addSelection: docMethodOp(function (anchor, head, options) { - var ranges = this.sel.ranges.slice(0); - ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); - setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options); - }), - getSelection: function (lineSep) { - var ranges = this.sel.ranges, - lines; - for (var i2 = 0; i2 < ranges.length; i2++) { - var sel = getBetween(this, ranges[i2].from(), ranges[i2].to()); - lines = lines ? lines.concat(sel) : sel; - } - if (lineSep === false) { - return lines; - } else { - return lines.join(lineSep || this.lineSeparator()); - } - }, - getSelections: function (lineSep) { - var parts = [], - ranges = this.sel.ranges; - for (var i2 = 0; i2 < ranges.length; i2++) { - var sel = getBetween(this, ranges[i2].from(), ranges[i2].to()); - if (lineSep !== false) { - sel = sel.join(lineSep || this.lineSeparator()); - } - parts[i2] = sel; - } - return parts; - }, - replaceSelection: function (code, collapse, origin) { - var dup = []; - for (var i2 = 0; i2 < this.sel.ranges.length; i2++) { - dup[i2] = code; - } - this.replaceSelections(dup, collapse, origin || "+input"); - }, - replaceSelections: docMethodOp(function (code, collapse, origin) { - var changes = [], - sel = this.sel; - for (var i2 = 0; i2 < sel.ranges.length; i2++) { - var range2 = sel.ranges[i2]; - changes[i2] = { - from: range2.from(), - to: range2.to(), - text: this.splitLines(code[i2]), - origin - }; - } - var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); - for (var i$12 = changes.length - 1; i$12 >= 0; i$12--) { - makeChange(this, changes[i$12]); - } - if (newSel) { - setSelectionReplaceHistory(this, newSel); - } else if (this.cm) { - ensureCursorVisible(this.cm); - } - }), - undo: docMethodOp(function () { - makeChangeFromHistory(this, "undo"); - }), - redo: docMethodOp(function () { - makeChangeFromHistory(this, "redo"); - }), - undoSelection: docMethodOp(function () { - makeChangeFromHistory(this, "undo", true); - }), - redoSelection: docMethodOp(function () { - makeChangeFromHistory(this, "redo", true); - }), - setExtending: function (val) { - this.extend = val; - }, - getExtending: function () { - return this.extend; - }, - historySize: function () { - var hist = this.history, - done = 0, - undone = 0; - for (var i2 = 0; i2 < hist.done.length; i2++) { - if (!hist.done[i2].ranges) { - ++done; - } - } - for (var i$12 = 0; i$12 < hist.undone.length; i$12++) { - if (!hist.undone[i$12].ranges) { - ++undone; - } - } - return { - undo: done, - redo: undone - }; - }, - clearHistory: function () { - var this$1$1 = this; - this.history = new History(this.history); - linkedDocs(this, function (doc) { - return doc.history = this$1$1.history; - }, true); - }, - markClean: function () { - this.cleanGeneration = this.changeGeneration(true); - }, - changeGeneration: function (forceSplit) { - if (forceSplit) { - this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; - } - return this.history.generation; - }, - isClean: function (gen) { - return this.history.generation == (gen || this.cleanGeneration); - }, - getHistory: function () { - return { - done: copyHistoryArray(this.history.done), - undone: copyHistoryArray(this.history.undone) - }; - }, - setHistory: function (histData) { - var hist = this.history = new History(this.history); - hist.done = copyHistoryArray(histData.done.slice(0), null, true); - hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); - }, - setGutterMarker: docMethodOp(function (line, gutterID, value) { - return changeLine(this, line, "gutter", function (line2) { - var markers = line2.gutterMarkers || (line2.gutterMarkers = {}); - markers[gutterID] = value; - if (!value && isEmpty(markers)) { - line2.gutterMarkers = null; - } - return true; - }); - }), - clearGutter: docMethodOp(function (gutterID) { - var this$1$1 = this; - this.iter(function (line) { - if (line.gutterMarkers && line.gutterMarkers[gutterID]) { - changeLine(this$1$1, line, "gutter", function () { - line.gutterMarkers[gutterID] = null; - if (isEmpty(line.gutterMarkers)) { - line.gutterMarkers = null; - } - return true; - }); - } - }); - }), - lineInfo: function (line) { - var n; - if (typeof line == "number") { - if (!isLine(this, line)) { - return null; - } - n = line; - line = getLine(this, line); - if (!line) { - return null; - } - } else { - n = lineNo(line); - if (n == null) { - return null; - } - } - return { - line: n, - handle: line, - text: line.text, - gutterMarkers: line.gutterMarkers, - textClass: line.textClass, - bgClass: line.bgClass, - wrapClass: line.wrapClass, - widgets: line.widgets - }; - }, - addLineClass: docMethodOp(function (handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { - var prop2 = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; - if (!line[prop2]) { - line[prop2] = cls; - } else if (classTest(cls).test(line[prop2])) { - return false; - } else { - line[prop2] += " " + cls; - } - return true; - }); - }), - removeLineClass: docMethodOp(function (handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { - var prop2 = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; - var cur = line[prop2]; - if (!cur) { - return false; - } else if (cls == null) { - line[prop2] = null; - } else { - var found = cur.match(classTest(cls)); - if (!found) { - return false; - } - var end = found.index + found[0].length; - line[prop2] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; - } - return true; - }); - }), - addLineWidget: docMethodOp(function (handle, node, options) { - return addLineWidget(this, handle, node, options); - }), - removeLineWidget: function (widget) { - widget.clear(); - }, - markText: function (from, to, options) { - return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range"); - }, - setBookmark: function (pos, options) { - var realOpts = { - replacedWith: options && (options.nodeType == null ? options.widget : options), - insertLeft: options && options.insertLeft, - clearWhenEmpty: false, - shared: options && options.shared, - handleMouseEvents: options && options.handleMouseEvents - }; - pos = clipPos(this, pos); - return markText(this, pos, pos, realOpts, "bookmark"); - }, - findMarksAt: function (pos) { - pos = clipPos(this, pos); - var markers = [], - spans = getLine(this, pos.line).markedSpans; - if (spans) { - for (var i2 = 0; i2 < spans.length; ++i2) { - var span = spans[i2]; - if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) { - markers.push(span.marker.parent || span.marker); - } - } - } - return markers; - }, - findMarks: function (from, to, filter) { - from = clipPos(this, from); - to = clipPos(this, to); - var found = [], - lineNo2 = from.line; - this.iter(from.line, to.line + 1, function (line) { - var spans = line.markedSpans; - if (spans) { - for (var i2 = 0; i2 < spans.length; i2++) { - var span = spans[i2]; - if (!(span.to != null && lineNo2 == from.line && from.ch >= span.to || span.from == null && lineNo2 != from.line || span.from != null && lineNo2 == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) { - found.push(span.marker.parent || span.marker); - } - } - } - ++lineNo2; - }); - return found; - }, - getAllMarks: function () { - var markers = []; - this.iter(function (line) { - var sps = line.markedSpans; - if (sps) { - for (var i2 = 0; i2 < sps.length; ++i2) { - if (sps[i2].from != null) { - markers.push(sps[i2].marker); - } - } - } - }); - return markers; - }, - posFromIndex: function (off2) { - var ch, - lineNo2 = this.first, - sepSize = this.lineSeparator().length; - this.iter(function (line) { - var sz = line.text.length + sepSize; - if (sz > off2) { - ch = off2; - return true; - } - off2 -= sz; - ++lineNo2; - }); - return clipPos(this, Pos(lineNo2, ch)); - }, - indexFromPos: function (coords) { - coords = clipPos(this, coords); - var index = coords.ch; - if (coords.line < this.first || coords.ch < 0) { - return 0; - } - var sepSize = this.lineSeparator().length; - this.iter(this.first, coords.line, function (line) { - index += line.text.length + sepSize; - }); - return index; - }, - copy: function (copyHistory) { - var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction); - doc.scrollTop = this.scrollTop; - doc.scrollLeft = this.scrollLeft; - doc.sel = this.sel; - doc.extend = false; - if (copyHistory) { - doc.history.undoDepth = this.history.undoDepth; - doc.setHistory(this.getHistory()); - } - return doc; - }, - linkedDoc: function (options) { - if (!options) { - options = {}; - } - var from = this.first, - to = this.first + this.size; - if (options.from != null && options.from > from) { - from = options.from; - } - if (options.to != null && options.to < to) { - to = options.to; - } - var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction); - if (options.sharedHist) { - copy.history = this.history; - } - (this.linked || (this.linked = [])).push({ - doc: copy, - sharedHist: options.sharedHist - }); - copy.linked = [{ - doc: this, - isParent: true, - sharedHist: options.sharedHist - }]; - copySharedMarkers(copy, findSharedMarkers(this)); - return copy; - }, - unlinkDoc: function (other) { - if (other instanceof CodeMirror) { - other = other.doc; - } - if (this.linked) { - for (var i2 = 0; i2 < this.linked.length; ++i2) { - var link = this.linked[i2]; - if (link.doc != other) { - continue; - } - this.linked.splice(i2, 1); - other.unlinkDoc(this); - detachSharedMarkers(findSharedMarkers(this)); - break; - } - } - if (other.history == this.history) { - var splitIds = [other.id]; - linkedDocs(other, function (doc) { - return splitIds.push(doc.id); - }, true); - other.history = new History(null); - other.history.done = copyHistoryArray(this.history.done, splitIds); - other.history.undone = copyHistoryArray(this.history.undone, splitIds); - } - }, - iterLinkedDocs: function (f) { - linkedDocs(this, f); - }, - getMode: function () { - return this.mode; - }, - getEditor: function () { - return this.cm; - }, - splitLines: function (str) { - if (this.lineSep) { - return str.split(this.lineSep); - } - return splitLinesAuto(str); - }, - lineSeparator: function () { - return this.lineSep || "\n"; - }, - setDirection: docMethodOp(function (dir) { - if (dir != "rtl") { - dir = "ltr"; - } - if (dir == this.direction) { - return; - } - this.direction = dir; - this.iter(function (line) { - return line.order = null; - }); - if (this.cm) { - directionChanged(this.cm); - } - }) - }); - Doc.prototype.eachLine = Doc.prototype.iter; - var lastDrop = 0; - function onDrop(e) { - var cm = this; - clearDragCursor(cm); - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { - return; - } - e_preventDefault(e); - if (ie) { - lastDrop = + /* @__PURE__ */new Date(); - } - var pos = posFromMouse(cm, e, true), - files = e.dataTransfer.files; - if (!pos || cm.isReadOnly()) { - return; - } - if (files && files.length && window.FileReader && window.File) { - var n = files.length, - text = Array(n), - read = 0; - var markAsReadAndPasteIfAllFilesAreRead = function () { - if (++read == n) { - operation(cm, function () { - pos = clipPos(cm.doc, pos); - var change = { - from: pos, - to: pos, - text: cm.doc.splitLines(text.filter(function (t) { - return t != null; - }).join(cm.doc.lineSeparator())), - origin: "paste" - }; - makeChange(cm.doc, change); - setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change)))); - })(); - } - }; - var readTextFromFile = function (file, i3) { - if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) { - markAsReadAndPasteIfAllFilesAreRead(); - return; - } - var reader = new FileReader(); - reader.onerror = function () { - return markAsReadAndPasteIfAllFilesAreRead(); - }; - reader.onload = function () { - var content = reader.result; - if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { - markAsReadAndPasteIfAllFilesAreRead(); - return; - } - text[i3] = content; - markAsReadAndPasteIfAllFilesAreRead(); - }; - reader.readAsText(file); - }; - for (var i2 = 0; i2 < files.length; i2++) { - readTextFromFile(files[i2], i2); - } - } else { - if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { - cm.state.draggingText(e); - setTimeout(function () { - return cm.display.input.focus(); - }, 20); - return; - } - try { - var text$1 = e.dataTransfer.getData("Text"); - if (text$1) { - var selected; - if (cm.state.draggingText && !cm.state.draggingText.copy) { - selected = cm.listSelections(); - } - setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); - if (selected) { - for (var i$12 = 0; i$12 < selected.length; ++i$12) { - replaceRange(cm.doc, "", selected[i$12].anchor, selected[i$12].head, "drag"); - } - } - cm.replaceSelection(text$1, "around", "paste"); - cm.display.input.focus(); - } - } catch (e$1) {} - } - } - function onDragStart(cm, e) { - if (ie && (!cm.state.draggingText || + /* @__PURE__ */new Date() - lastDrop < 100)) { - e_stop(e); - return; - } - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { - return; - } - e.dataTransfer.setData("Text", cm.getSelection()); - e.dataTransfer.effectAllowed = "copyMove"; - if (e.dataTransfer.setDragImage && !safari) { - var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); - img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; - if (presto) { - img.width = img.height = 1; - cm.display.wrapper.appendChild(img); - img._top = img.offsetTop; - } - e.dataTransfer.setDragImage(img, 0, 0); - if (presto) { - img.parentNode.removeChild(img); - } - } - } - function onDragOver(cm, e) { - var pos = posFromMouse(cm, e); - if (!pos) { - return; - } - var frag = document.createDocumentFragment(); - drawSelectionCursor(cm, pos, frag); - if (!cm.display.dragCursor) { - cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); - cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); - } - removeChildrenAndAdd(cm.display.dragCursor, frag); - } - function clearDragCursor(cm) { - if (cm.display.dragCursor) { - cm.display.lineSpace.removeChild(cm.display.dragCursor); - cm.display.dragCursor = null; - } - } - function forEachCodeMirror(f) { - if (!document.getElementsByClassName) { - return; - } - var byClass = document.getElementsByClassName("CodeMirror"), - editors = []; - for (var i2 = 0; i2 < byClass.length; i2++) { - var cm = byClass[i2].CodeMirror; - if (cm) { - editors.push(cm); - } - } - if (editors.length) { - editors[0].operation(function () { - for (var i3 = 0; i3 < editors.length; i3++) { - f(editors[i3]); - } - }); - } - } - var globalsRegistered = false; - function ensureGlobalHandlers() { - if (globalsRegistered) { - return; - } - registerGlobalHandlers(); - globalsRegistered = true; - } - function registerGlobalHandlers() { - var resizeTimer; - on(window, "resize", function () { - if (resizeTimer == null) { - resizeTimer = setTimeout(function () { - resizeTimer = null; - forEachCodeMirror(onResize); - }, 100); - } - }); - on(window, "blur", function () { - return forEachCodeMirror(onBlur); - }); - } - function onResize(cm) { - var d = cm.display; - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - d.scrollbarsClipped = false; - cm.setSize(); - } - var keyNames = { - 3: "Pause", - 8: "Backspace", - 9: "Tab", - 13: "Enter", - 16: "Shift", - 17: "Ctrl", - 18: "Alt", - 19: "Pause", - 20: "CapsLock", - 27: "Esc", - 32: "Space", - 33: "PageUp", - 34: "PageDown", - 35: "End", - 36: "Home", - 37: "Left", - 38: "Up", - 39: "Right", - 40: "Down", - 44: "PrintScrn", - 45: "Insert", - 46: "Delete", - 59: ";", - 61: "=", - 91: "Mod", - 92: "Mod", - 93: "Mod", - 106: "*", - 107: "=", - 109: "-", - 110: ".", - 111: "/", - 145: "ScrollLock", - 173: "-", - 186: ";", - 187: "=", - 188: ",", - 189: "-", - 190: ".", - 191: "/", - 192: "`", - 219: "[", - 220: "\\", - 221: "]", - 222: "'", - 224: "Mod", - 63232: "Up", - 63233: "Down", - 63234: "Left", - 63235: "Right", - 63272: "Delete", - 63273: "Home", - 63275: "End", - 63276: "PageUp", - 63277: "PageDown", - 63302: "Insert" - }; - for (var i = 0; i < 10; i++) { - keyNames[i + 48] = keyNames[i + 96] = String(i); - } - for (var i$1 = 65; i$1 <= 90; i$1++) { - keyNames[i$1] = String.fromCharCode(i$1); - } - for (var i$2 = 1; i$2 <= 12; i$2++) { - keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; - } - var keyMap = {}; - keyMap.basic = { - "Left": "goCharLeft", - "Right": "goCharRight", - "Up": "goLineUp", - "Down": "goLineDown", - "End": "goLineEnd", - "Home": "goLineStartSmart", - "PageUp": "goPageUp", - "PageDown": "goPageDown", - "Delete": "delCharAfter", - "Backspace": "delCharBefore", - "Shift-Backspace": "delCharBefore", - "Tab": "defaultTab", - "Shift-Tab": "indentAuto", - "Enter": "newlineAndIndent", - "Insert": "toggleOverwrite", - "Esc": "singleSelection" - }; - keyMap.pcDefault = { - "Ctrl-A": "selectAll", - "Ctrl-D": "deleteLine", - "Ctrl-Z": "undo", - "Shift-Ctrl-Z": "redo", - "Ctrl-Y": "redo", - "Ctrl-Home": "goDocStart", - "Ctrl-End": "goDocEnd", - "Ctrl-Up": "goLineUp", - "Ctrl-Down": "goLineDown", - "Ctrl-Left": "goGroupLeft", - "Ctrl-Right": "goGroupRight", - "Alt-Left": "goLineStart", - "Alt-Right": "goLineEnd", - "Ctrl-Backspace": "delGroupBefore", - "Ctrl-Delete": "delGroupAfter", - "Ctrl-S": "save", - "Ctrl-F": "find", - "Ctrl-G": "findNext", - "Shift-Ctrl-G": "findPrev", - "Shift-Ctrl-F": "replace", - "Shift-Ctrl-R": "replaceAll", - "Ctrl-[": "indentLess", - "Ctrl-]": "indentMore", - "Ctrl-U": "undoSelection", - "Shift-Ctrl-U": "redoSelection", - "Alt-U": "redoSelection", - "fallthrough": "basic" - }; - keyMap.emacsy = { - "Ctrl-F": "goCharRight", - "Ctrl-B": "goCharLeft", - "Ctrl-P": "goLineUp", - "Ctrl-N": "goLineDown", - "Ctrl-A": "goLineStart", - "Ctrl-E": "goLineEnd", - "Ctrl-V": "goPageDown", - "Shift-Ctrl-V": "goPageUp", - "Ctrl-D": "delCharAfter", - "Ctrl-H": "delCharBefore", - "Alt-Backspace": "delWordBefore", - "Ctrl-K": "killLine", - "Ctrl-T": "transposeChars", - "Ctrl-O": "openLine" - }; - keyMap.macDefault = { - "Cmd-A": "selectAll", - "Cmd-D": "deleteLine", - "Cmd-Z": "undo", - "Shift-Cmd-Z": "redo", - "Cmd-Y": "redo", - "Cmd-Home": "goDocStart", - "Cmd-Up": "goDocStart", - "Cmd-End": "goDocEnd", - "Cmd-Down": "goDocEnd", - "Alt-Left": "goGroupLeft", - "Alt-Right": "goGroupRight", - "Cmd-Left": "goLineLeft", - "Cmd-Right": "goLineRight", - "Alt-Backspace": "delGroupBefore", - "Ctrl-Alt-Backspace": "delGroupAfter", - "Alt-Delete": "delGroupAfter", - "Cmd-S": "save", - "Cmd-F": "find", - "Cmd-G": "findNext", - "Shift-Cmd-G": "findPrev", - "Cmd-Alt-F": "replace", - "Shift-Cmd-Alt-F": "replaceAll", - "Cmd-[": "indentLess", - "Cmd-]": "indentMore", - "Cmd-Backspace": "delWrappedLineLeft", - "Cmd-Delete": "delWrappedLineRight", - "Cmd-U": "undoSelection", - "Shift-Cmd-U": "redoSelection", - "Ctrl-Up": "goDocStart", - "Ctrl-Down": "goDocEnd", - "fallthrough": ["basic", "emacsy"] - }; - keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; - function normalizeKeyName(name) { - var parts = name.split(/-(?!$)/); - name = parts[parts.length - 1]; - var alt, ctrl, shift, cmd; - for (var i2 = 0; i2 < parts.length - 1; i2++) { - var mod = parts[i2]; - if (/^(cmd|meta|m)$/i.test(mod)) { - cmd = true; - } else if (/^a(lt)?$/i.test(mod)) { - alt = true; - } else if (/^(c|ctrl|control)$/i.test(mod)) { - ctrl = true; - } else if (/^s(hift)?$/i.test(mod)) { - shift = true; - } else { - throw new Error("Unrecognized modifier name: " + mod); - } - } - if (alt) { - name = "Alt-" + name; - } - if (ctrl) { - name = "Ctrl-" + name; - } - if (cmd) { - name = "Cmd-" + name; - } - if (shift) { - name = "Shift-" + name; - } - return name; - } - function normalizeKeyMap(keymap) { - var copy = {}; - for (var keyname in keymap) { - if (keymap.hasOwnProperty(keyname)) { - var value = keymap[keyname]; - if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { - continue; - } - if (value == "...") { - delete keymap[keyname]; - continue; - } - var keys = map(keyname.split(" "), normalizeKeyName); - for (var i2 = 0; i2 < keys.length; i2++) { - var val = void 0, - name = void 0; - if (i2 == keys.length - 1) { - name = keys.join(" "); - val = value; - } else { - name = keys.slice(0, i2 + 1).join(" "); - val = "..."; - } - var prev = copy[name]; - if (!prev) { - copy[name] = val; - } else if (prev != val) { - throw new Error("Inconsistent bindings for " + name); - } - } - delete keymap[keyname]; - } - } - for (var prop2 in copy) { - keymap[prop2] = copy[prop2]; - } - return keymap; - } - function lookupKey(key, map2, handle, context) { - map2 = getKeyMap(map2); - var found = map2.call ? map2.call(key, context) : map2[key]; - if (found === false) { - return "nothing"; - } - if (found === "...") { - return "multi"; - } - if (found != null && handle(found)) { - return "handled"; - } - if (map2.fallthrough) { - if (Object.prototype.toString.call(map2.fallthrough) != "[object Array]") { - return lookupKey(key, map2.fallthrough, handle, context); - } - for (var i2 = 0; i2 < map2.fallthrough.length; i2++) { - var result = lookupKey(key, map2.fallthrough[i2], handle, context); - if (result) { - return result; - } - } - } - } - function isModifierKey(value) { - var name = typeof value == "string" ? value : keyNames[value.keyCode]; - return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; - } - function addModifierNames(name, event, noShift) { - var base = name; - if (event.altKey && base != "Alt") { - name = "Alt-" + name; - } - if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { - name = "Ctrl-" + name; - } - if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") { - name = "Cmd-" + name; - } - if (!noShift && event.shiftKey && base != "Shift") { - name = "Shift-" + name; - } - return name; - } - function keyName(event, noShift) { - if (presto && event.keyCode == 34 && event["char"]) { - return false; - } - var name = keyNames[event.keyCode]; - if (name == null || event.altGraphKey) { - return false; - } - if (event.keyCode == 3 && event.code) { - name = event.code; - } - return addModifierNames(name, event, noShift); - } - function getKeyMap(val) { - return typeof val == "string" ? keyMap[val] : val; - } - function deleteNearSelection(cm, compute) { - var ranges = cm.doc.sel.ranges, - kill = []; - for (var i2 = 0; i2 < ranges.length; i2++) { - var toKill = compute(ranges[i2]); - while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { - var replaced = kill.pop(); - if (cmp(replaced.from, toKill.from) < 0) { - toKill.from = replaced.from; - break; - } - } - kill.push(toKill); - } - runInOp(cm, function () { - for (var i3 = kill.length - 1; i3 >= 0; i3--) { - replaceRange(cm.doc, "", kill[i3].from, kill[i3].to, "+delete"); - } - ensureCursorVisible(cm); - }); - } - function moveCharLogically(line, ch, dir) { - var target = skipExtendingChars(line.text, ch + dir, dir); - return target < 0 || target > line.text.length ? null : target; - } - function moveLogically(line, start, dir) { - var ch = moveCharLogically(line, start.ch, dir); - return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before"); - } - function endOfLine(visually, cm, lineObj, lineNo2, dir) { - if (visually) { - if (cm.doc.direction == "rtl") { - dir = -dir; - } - var order = getOrder(lineObj, cm.doc.direction); - if (order) { - var part = dir < 0 ? lst(order) : order[0]; - var moveInStorageOrder = dir < 0 == (part.level == 1); - var sticky = moveInStorageOrder ? "after" : "before"; - var ch; - if (part.level > 0 || cm.doc.direction == "rtl") { - var prep = prepareMeasureForLine(cm, lineObj); - ch = dir < 0 ? lineObj.text.length - 1 : 0; - var targetTop = measureCharPrepared(cm, prep, ch).top; - ch = findFirst(function (ch2) { - return measureCharPrepared(cm, prep, ch2).top == targetTop; - }, dir < 0 == (part.level == 1) ? part.from : part.to - 1, ch); - if (sticky == "before") { - ch = moveCharLogically(lineObj, ch, 1); - } - } else { - ch = dir < 0 ? part.to : part.from; - } - return new Pos(lineNo2, ch, sticky); - } - } - return new Pos(lineNo2, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after"); - } - function moveVisually(cm, line, start, dir) { - var bidi = getOrder(line, cm.doc.direction); - if (!bidi) { - return moveLogically(line, start, dir); - } - if (start.ch >= line.text.length) { - start.ch = line.text.length; - start.sticky = "before"; - } else if (start.ch <= 0) { - start.ch = 0; - start.sticky = "after"; - } - var partPos = getBidiPartAt(bidi, start.ch, start.sticky), - part = bidi[partPos]; - if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { - return moveLogically(line, start, dir); - } - var mv = function (pos, dir2) { - return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir2); - }; - var prep; - var getWrappedLineExtent = function (ch2) { - if (!cm.options.lineWrapping) { - return { - begin: 0, - end: line.text.length - }; - } - prep = prep || prepareMeasureForLine(cm, line); - return wrappedLineExtentChar(cm, line, prep, ch2); - }; - var wrappedLineExtent2 = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch); - if (cm.doc.direction == "rtl" || part.level == 1) { - var moveInStorageOrder = part.level == 1 == dir < 0; - var ch = mv(start, moveInStorageOrder ? 1 : -1); - if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent2.begin : ch <= part.to && ch <= wrappedLineExtent2.end)) { - var sticky = moveInStorageOrder ? "before" : "after"; - return new Pos(start.line, ch, sticky); - } - } - var searchInVisualLine = function (partPos2, dir2, wrappedLineExtent3) { - var getRes = function (ch3, moveInStorageOrder3) { - return moveInStorageOrder3 ? new Pos(start.line, mv(ch3, 1), "before") : new Pos(start.line, ch3, "after"); - }; - for (; partPos2 >= 0 && partPos2 < bidi.length; partPos2 += dir2) { - var part2 = bidi[partPos2]; - var moveInStorageOrder2 = dir2 > 0 == (part2.level != 1); - var ch2 = moveInStorageOrder2 ? wrappedLineExtent3.begin : mv(wrappedLineExtent3.end, -1); - if (part2.from <= ch2 && ch2 < part2.to) { - return getRes(ch2, moveInStorageOrder2); - } - ch2 = moveInStorageOrder2 ? part2.from : mv(part2.to, -1); - if (wrappedLineExtent3.begin <= ch2 && ch2 < wrappedLineExtent3.end) { - return getRes(ch2, moveInStorageOrder2); - } - } - }; - var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent2); - if (res) { - return res; - } - var nextCh = dir > 0 ? wrappedLineExtent2.end : mv(wrappedLineExtent2.begin, -1); - if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { - res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)); - if (res) { - return res; - } - } - return null; - } - var commands = { - selectAll, - singleSelection: function (cm) { - return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); - }, - killLine: function (cm) { - return deleteNearSelection(cm, function (range2) { - if (range2.empty()) { - var len = getLine(cm.doc, range2.head.line).text.length; - if (range2.head.ch == len && range2.head.line < cm.lastLine()) { - return { - from: range2.head, - to: Pos(range2.head.line + 1, 0) - }; - } else { - return { - from: range2.head, - to: Pos(range2.head.line, len) - }; - } - } else { - return { - from: range2.from(), - to: range2.to() - }; - } - }); - }, - deleteLine: function (cm) { - return deleteNearSelection(cm, function (range2) { - return { - from: Pos(range2.from().line, 0), - to: clipPos(cm.doc, Pos(range2.to().line + 1, 0)) - }; - }); - }, - delLineLeft: function (cm) { - return deleteNearSelection(cm, function (range2) { - return { - from: Pos(range2.from().line, 0), - to: range2.from() - }; - }); - }, - delWrappedLineLeft: function (cm) { - return deleteNearSelection(cm, function (range2) { - var top = cm.charCoords(range2.head, "div").top + 5; - var leftPos = cm.coordsChar({ - left: 0, - top - }, "div"); - return { - from: leftPos, - to: range2.from() - }; - }); - }, - delWrappedLineRight: function (cm) { - return deleteNearSelection(cm, function (range2) { - var top = cm.charCoords(range2.head, "div").top + 5; - var rightPos = cm.coordsChar({ - left: cm.display.lineDiv.offsetWidth + 100, - top - }, "div"); - return { - from: range2.from(), - to: rightPos - }; - }); - }, - undo: function (cm) { - return cm.undo(); - }, - redo: function (cm) { - return cm.redo(); - }, - undoSelection: function (cm) { - return cm.undoSelection(); - }, - redoSelection: function (cm) { - return cm.redoSelection(); - }, - goDocStart: function (cm) { - return cm.extendSelection(Pos(cm.firstLine(), 0)); - }, - goDocEnd: function (cm) { - return cm.extendSelection(Pos(cm.lastLine())); - }, - goLineStart: function (cm) { - return cm.extendSelectionsBy(function (range2) { - return lineStart(cm, range2.head.line); - }, { - origin: "+move", - bias: 1 - }); - }, - goLineStartSmart: function (cm) { - return cm.extendSelectionsBy(function (range2) { - return lineStartSmart(cm, range2.head); - }, { - origin: "+move", - bias: 1 - }); - }, - goLineEnd: function (cm) { - return cm.extendSelectionsBy(function (range2) { - return lineEnd(cm, range2.head.line); - }, { - origin: "+move", - bias: -1 - }); - }, - goLineRight: function (cm) { - return cm.extendSelectionsBy(function (range2) { - var top = cm.cursorCoords(range2.head, "div").top + 5; - return cm.coordsChar({ - left: cm.display.lineDiv.offsetWidth + 100, - top - }, "div"); - }, sel_move); - }, - goLineLeft: function (cm) { - return cm.extendSelectionsBy(function (range2) { - var top = cm.cursorCoords(range2.head, "div").top + 5; - return cm.coordsChar({ - left: 0, - top - }, "div"); - }, sel_move); - }, - goLineLeftSmart: function (cm) { - return cm.extendSelectionsBy(function (range2) { - var top = cm.cursorCoords(range2.head, "div").top + 5; - var pos = cm.coordsChar({ - left: 0, - top - }, "div"); - if (pos.ch < cm.getLine(pos.line).search(/\S/)) { - return lineStartSmart(cm, range2.head); - } - return pos; - }, sel_move); - }, - goLineUp: function (cm) { - return cm.moveV(-1, "line"); - }, - goLineDown: function (cm) { - return cm.moveV(1, "line"); - }, - goPageUp: function (cm) { - return cm.moveV(-1, "page"); - }, - goPageDown: function (cm) { - return cm.moveV(1, "page"); - }, - goCharLeft: function (cm) { - return cm.moveH(-1, "char"); - }, - goCharRight: function (cm) { - return cm.moveH(1, "char"); - }, - goColumnLeft: function (cm) { - return cm.moveH(-1, "column"); - }, - goColumnRight: function (cm) { - return cm.moveH(1, "column"); - }, - goWordLeft: function (cm) { - return cm.moveH(-1, "word"); - }, - goGroupRight: function (cm) { - return cm.moveH(1, "group"); - }, - goGroupLeft: function (cm) { - return cm.moveH(-1, "group"); - }, - goWordRight: function (cm) { - return cm.moveH(1, "word"); - }, - delCharBefore: function (cm) { - return cm.deleteH(-1, "codepoint"); - }, - delCharAfter: function (cm) { - return cm.deleteH(1, "char"); - }, - delWordBefore: function (cm) { - return cm.deleteH(-1, "word"); - }, - delWordAfter: function (cm) { - return cm.deleteH(1, "word"); - }, - delGroupBefore: function (cm) { - return cm.deleteH(-1, "group"); - }, - delGroupAfter: function (cm) { - return cm.deleteH(1, "group"); - }, - indentAuto: function (cm) { - return cm.indentSelection("smart"); - }, - indentMore: function (cm) { - return cm.indentSelection("add"); - }, - indentLess: function (cm) { - return cm.indentSelection("subtract"); - }, - insertTab: function (cm) { - return cm.replaceSelection(" "); - }, - insertSoftTab: function (cm) { - var spaces = [], - ranges = cm.listSelections(), - tabSize = cm.options.tabSize; - for (var i2 = 0; i2 < ranges.length; i2++) { - var pos = ranges[i2].from(); - var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); - spaces.push(spaceStr(tabSize - col % tabSize)); - } - cm.replaceSelections(spaces); - }, - defaultTab: function (cm) { - if (cm.somethingSelected()) { - cm.indentSelection("add"); - } else { - cm.execCommand("insertTab"); - } - }, - // Swap the two chars left and right of each selection's head. - // Move cursor behind the two swapped characters afterwards. - // - // Doesn't consider line feeds a character. - // Doesn't scan more than one line above to find a character. - // Doesn't do anything on an empty line. - // Doesn't do anything with non-empty selections. - transposeChars: function (cm) { - return runInOp(cm, function () { - var ranges = cm.listSelections(), - newSel = []; - for (var i2 = 0; i2 < ranges.length; i2++) { - if (!ranges[i2].empty()) { - continue; - } - var cur = ranges[i2].head, - line = getLine(cm.doc, cur.line).text; - if (line) { - if (cur.ch == line.length) { - cur = new Pos(cur.line, cur.ch - 1); - } - if (cur.ch > 0) { - cur = new Pos(cur.line, cur.ch + 1); - cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, "+transpose"); - } else if (cur.line > cm.doc.first) { - var prev = getLine(cm.doc, cur.line - 1).text; - if (prev) { - cur = new Pos(cur.line, 1); - cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), cur, "+transpose"); - } - } - } - newSel.push(new Range(cur, cur)); - } - cm.setSelections(newSel); - }); - }, - newlineAndIndent: function (cm) { - return runInOp(cm, function () { - var sels = cm.listSelections(); - for (var i2 = sels.length - 1; i2 >= 0; i2--) { - cm.replaceRange(cm.doc.lineSeparator(), sels[i2].anchor, sels[i2].head, "+input"); - } - sels = cm.listSelections(); - for (var i$12 = 0; i$12 < sels.length; i$12++) { - cm.indentLine(sels[i$12].from().line, null, true); - } - ensureCursorVisible(cm); - }); - }, - openLine: function (cm) { - return cm.replaceSelection("\n", "start"); - }, - toggleOverwrite: function (cm) { - return cm.toggleOverwrite(); - } - }; - function lineStart(cm, lineN) { - var line = getLine(cm.doc, lineN); - var visual = visualLine(line); - if (visual != line) { - lineN = lineNo(visual); - } - return endOfLine(true, cm, visual, lineN, 1); - } - function lineEnd(cm, lineN) { - var line = getLine(cm.doc, lineN); - var visual = visualLineEnd(line); - if (visual != line) { - lineN = lineNo(visual); - } - return endOfLine(true, cm, line, lineN, -1); - } - function lineStartSmart(cm, pos) { - var start = lineStart(cm, pos.line); - var line = getLine(cm.doc, start.line); - var order = getOrder(line, cm.doc.direction); - if (!order || order[0].level == 0) { - var firstNonWS = Math.max(start.ch, line.text.search(/\S/)); - var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; - return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky); - } - return start; - } - function doHandleBinding(cm, bound, dropShift) { - if (typeof bound == "string") { - bound = commands[bound]; - if (!bound) { - return false; - } - } - cm.display.input.ensurePolled(); - var prevShift = cm.display.shift, - done = false; - try { - if (cm.isReadOnly()) { - cm.state.suppressEdits = true; - } - if (dropShift) { - cm.display.shift = false; - } - done = bound(cm) != Pass; - } finally { - cm.display.shift = prevShift; - cm.state.suppressEdits = false; - } - return done; - } - function lookupKeyForEditor(cm, name, handle) { - for (var i2 = 0; i2 < cm.state.keyMaps.length; i2++) { - var result = lookupKey(name, cm.state.keyMaps[i2], handle, cm); - if (result) { - return result; - } - } - return cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm) || lookupKey(name, cm.options.keyMap, handle, cm); - } - var stopSeq = new Delayed(); - function dispatchKey(cm, name, e, handle) { - var seq = cm.state.keySeq; - if (seq) { - if (isModifierKey(name)) { - return "handled"; - } - if (/\'$/.test(name)) { - cm.state.keySeq = null; - } else { - stopSeq.set(50, function () { - if (cm.state.keySeq == seq) { - cm.state.keySeq = null; - cm.display.input.reset(); - } - }); - } - if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { - return true; - } - } - return dispatchKeyInner(cm, name, e, handle); - } - function dispatchKeyInner(cm, name, e, handle) { - var result = lookupKeyForEditor(cm, name, handle); - if (result == "multi") { - cm.state.keySeq = name; - } - if (result == "handled") { - signalLater(cm, "keyHandled", cm, name, e); - } - if (result == "handled" || result == "multi") { - e_preventDefault(e); - restartBlink(cm); - } - return !!result; - } - function handleKeyBinding(cm, e) { - var name = keyName(e, true); - if (!name) { - return false; - } - if (e.shiftKey && !cm.state.keySeq) { - return dispatchKey(cm, "Shift-" + name, e, function (b) { - return doHandleBinding(cm, b, true); - }) || dispatchKey(cm, name, e, function (b) { - if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) { - return doHandleBinding(cm, b); - } - }); - } else { - return dispatchKey(cm, name, e, function (b) { - return doHandleBinding(cm, b); - }); - } - } - function handleCharBinding(cm, e, ch) { - return dispatchKey(cm, "'" + ch + "'", e, function (b) { - return doHandleBinding(cm, b, true); - }); - } - var lastStoppedKey = null; - function onKeyDown(e) { - var cm = this; - if (e.target && e.target != cm.display.input.getField()) { - return; - } - cm.curOp.focus = activeElt(); - if (signalDOMEvent(cm, e)) { - return; - } - if (ie && ie_version < 11 && e.keyCode == 27) { - e.returnValue = false; - } - var code = e.keyCode; - cm.display.shift = code == 16 || e.shiftKey; - var handled = handleKeyBinding(cm, e); - if (presto) { - lastStoppedKey = handled ? code : null; - if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) { - cm.replaceSelection("", null, "cut"); - } - } - if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) { - document.execCommand("cut"); - } - if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) { - showCrossHair(cm); - } - } - function showCrossHair(cm) { - var lineDiv = cm.display.lineDiv; - addClass(lineDiv, "CodeMirror-crosshair"); - function up(e) { - if (e.keyCode == 18 || !e.altKey) { - rmClass(lineDiv, "CodeMirror-crosshair"); - off(document, "keyup", up); - off(document, "mouseover", up); - } - } - on(document, "keyup", up); - on(document, "mouseover", up); - } - function onKeyUp(e) { - if (e.keyCode == 16) { - this.doc.sel.shift = false; - } - signalDOMEvent(this, e); - } - function onKeyPress(e) { - var cm = this; - if (e.target && e.target != cm.display.input.getField()) { - return; - } - if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { - return; - } - var keyCode = e.keyCode, - charCode = e.charCode; - if (presto && keyCode == lastStoppedKey) { - lastStoppedKey = null; - e_preventDefault(e); - return; - } - if (presto && (!e.which || e.which < 10) && handleKeyBinding(cm, e)) { - return; - } - var ch = String.fromCharCode(charCode == null ? keyCode : charCode); - if (ch == "\b") { - return; - } - if (handleCharBinding(cm, e, ch)) { - return; - } - cm.display.input.onKeyPress(e); - } - var DOUBLECLICK_DELAY = 400; - var PastClick = function (time, pos, button) { - this.time = time; - this.pos = pos; - this.button = button; - }; - PastClick.prototype.compare = function (time, pos, button) { - return this.time + DOUBLECLICK_DELAY > time && cmp(pos, this.pos) == 0 && button == this.button; - }; - var lastClick, lastDoubleClick; - function clickRepeat(pos, button) { - var now = + /* @__PURE__ */new Date(); - if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { - lastClick = lastDoubleClick = null; - return "triple"; - } else if (lastClick && lastClick.compare(now, pos, button)) { - lastDoubleClick = new PastClick(now, pos, button); - lastClick = null; - return "double"; - } else { - lastClick = new PastClick(now, pos, button); - lastDoubleClick = null; - return "single"; - } - } - function onMouseDown(e) { - var cm = this, - display = cm.display; - if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { - return; - } - display.input.ensurePolled(); - display.shift = e.shiftKey; - if (eventInWidget(display, e)) { - if (!webkit) { - display.scroller.draggable = false; - setTimeout(function () { - return display.scroller.draggable = true; - }, 100); - } - return; - } - if (clickInGutter(cm, e)) { - return; - } - var pos = posFromMouse(cm, e), - button = e_button(e), - repeat = pos ? clickRepeat(pos, button) : "single"; - window.focus(); - if (button == 1 && cm.state.selectingText) { - cm.state.selectingText(e); - } - if (pos && handleMappedButton(cm, button, pos, repeat, e)) { - return; - } - if (button == 1) { - if (pos) { - leftButtonDown(cm, pos, repeat, e); - } else if (e_target(e) == display.scroller) { - e_preventDefault(e); - } - } else if (button == 2) { - if (pos) { - extendSelection(cm.doc, pos); - } - setTimeout(function () { - return display.input.focus(); - }, 20); - } else if (button == 3) { - if (captureRightClick) { - cm.display.input.onContextMenu(e); - } else { - delayBlurEvent(cm); - } - } - } - function handleMappedButton(cm, button, pos, repeat, event) { - var name = "Click"; - if (repeat == "double") { - name = "Double" + name; - } else if (repeat == "triple") { - name = "Triple" + name; - } - name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name; - return dispatchKey(cm, addModifierNames(name, event), event, function (bound) { - if (typeof bound == "string") { - bound = commands[bound]; - } - if (!bound) { - return false; - } - var done = false; - try { - if (cm.isReadOnly()) { - cm.state.suppressEdits = true; - } - done = bound(cm, pos) != Pass; - } finally { - cm.state.suppressEdits = false; - } - return done; - }); - } - function configureMouse(cm, repeat, event) { - var option = cm.getOption("configureMouse"); - var value = option ? option(cm, repeat, event) : {}; - if (value.unit == null) { - var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey; - value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"; - } - if (value.extend == null || cm.doc.extend) { - value.extend = cm.doc.extend || event.shiftKey; - } - if (value.addNew == null) { - value.addNew = mac ? event.metaKey : event.ctrlKey; - } - if (value.moveOnDrag == null) { - value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); - } - return value; - } - function leftButtonDown(cm, pos, repeat, event) { - if (ie) { - setTimeout(bind(ensureFocus, cm), 0); - } else { - cm.curOp.focus = activeElt(); - } - var behavior = configureMouse(cm, repeat, event); - var sel = cm.doc.sel, - contained; - if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && repeat == "single" && (contained = sel.contains(pos)) > -1 && (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) { - leftButtonStartDrag(cm, event, pos, behavior); - } else { - leftButtonSelect(cm, event, pos, behavior); - } - } - function leftButtonStartDrag(cm, event, pos, behavior) { - var display = cm.display, - moved = false; - var dragEnd = operation(cm, function (e) { - if (webkit) { - display.scroller.draggable = false; - } - cm.state.draggingText = false; - if (cm.state.delayingBlurEvent) { - if (cm.hasFocus()) { - cm.state.delayingBlurEvent = false; - } else { - delayBlurEvent(cm); - } - } - off(display.wrapper.ownerDocument, "mouseup", dragEnd); - off(display.wrapper.ownerDocument, "mousemove", mouseMove); - off(display.scroller, "dragstart", dragStart); - off(display.scroller, "drop", dragEnd); - if (!moved) { - e_preventDefault(e); - if (!behavior.addNew) { - extendSelection(cm.doc, pos, null, null, behavior.extend); - } - if (webkit && !safari || ie && ie_version == 9) { - setTimeout(function () { - display.wrapper.ownerDocument.body.focus({ - preventScroll: true - }); - display.input.focus(); - }, 20); - } else { - display.input.focus(); - } - } - }); - var mouseMove = function (e2) { - moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10; - }; - var dragStart = function () { - return moved = true; - }; - if (webkit) { - display.scroller.draggable = true; - } - cm.state.draggingText = dragEnd; - dragEnd.copy = !behavior.moveOnDrag; - on(display.wrapper.ownerDocument, "mouseup", dragEnd); - on(display.wrapper.ownerDocument, "mousemove", mouseMove); - on(display.scroller, "dragstart", dragStart); - on(display.scroller, "drop", dragEnd); - cm.state.delayingBlurEvent = true; - setTimeout(function () { - return display.input.focus(); - }, 20); - if (display.scroller.dragDrop) { - display.scroller.dragDrop(); - } - } - function rangeForUnit(cm, pos, unit) { - if (unit == "char") { - return new Range(pos, pos); - } - if (unit == "word") { - return cm.findWordAt(pos); - } - if (unit == "line") { - return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); - } - var result = unit(cm, pos); - return new Range(result.from, result.to); - } - function leftButtonSelect(cm, event, start, behavior) { - if (ie) { - delayBlurEvent(cm); - } - var display = cm.display, - doc = cm.doc; - e_preventDefault(event); - var ourRange, - ourIndex, - startSel = doc.sel, - ranges = startSel.ranges; - if (behavior.addNew && !behavior.extend) { - ourIndex = doc.sel.contains(start); - if (ourIndex > -1) { - ourRange = ranges[ourIndex]; - } else { - ourRange = new Range(start, start); - } - } else { - ourRange = doc.sel.primary(); - ourIndex = doc.sel.primIndex; - } - if (behavior.unit == "rectangle") { - if (!behavior.addNew) { - ourRange = new Range(start, start); - } - start = posFromMouse(cm, event, true, true); - ourIndex = -1; - } else { - var range2 = rangeForUnit(cm, start, behavior.unit); - if (behavior.extend) { - ourRange = extendRange(ourRange, range2.anchor, range2.head, behavior.extend); - } else { - ourRange = range2; - } - } - if (!behavior.addNew) { - ourIndex = 0; - setSelection(doc, new Selection([ourRange], 0), sel_mouse); - startSel = doc.sel; - } else if (ourIndex == -1) { - ourIndex = ranges.length; - setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), { - scroll: false, - origin: "*mouse" - }); - } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { - setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), { - scroll: false, - origin: "*mouse" - }); - startSel = doc.sel; - } else { - replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); - } - var lastPos = start; - function extendTo(pos) { - if (cmp(lastPos, pos) == 0) { - return; - } - lastPos = pos; - if (behavior.unit == "rectangle") { - var ranges2 = [], - tabSize = cm.options.tabSize; - var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); - var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); - var left = Math.min(startCol, posCol), - right = Math.max(startCol, posCol); - for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) { - var text = getLine(doc, line).text, - leftPos = findColumn(text, left, tabSize); - if (left == right) { - ranges2.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); - } else if (text.length > leftPos) { - ranges2.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); - } - } - if (!ranges2.length) { - ranges2.push(new Range(start, start)); - } - setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges2), ourIndex), { - origin: "*mouse", - scroll: false - }); - cm.scrollIntoView(pos); - } else { - var oldRange = ourRange; - var range3 = rangeForUnit(cm, pos, behavior.unit); - var anchor = oldRange.anchor, - head; - if (cmp(range3.anchor, anchor) > 0) { - head = range3.head; - anchor = minPos(oldRange.from(), range3.anchor); - } else { - head = range3.anchor; - anchor = maxPos(oldRange.to(), range3.head); - } - var ranges$1 = startSel.ranges.slice(0); - ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head)); - setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse); - } - } - var editorSize = display.wrapper.getBoundingClientRect(); - var counter = 0; - function extend(e) { - var curCount = ++counter; - var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); - if (!cur) { - return; - } - if (cmp(cur, lastPos) != 0) { - cm.curOp.focus = activeElt(); - extendTo(cur); - var visible = visibleLines(display, doc); - if (cur.line >= visible.to || cur.line < visible.from) { - setTimeout(operation(cm, function () { - if (counter == curCount) { - extend(e); - } - }), 150); - } - } else { - var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; - if (outside) { - setTimeout(operation(cm, function () { - if (counter != curCount) { - return; - } - display.scroller.scrollTop += outside; - extend(e); - }), 50); - } - } - } - function done(e) { - cm.state.selectingText = false; - counter = Infinity; - if (e) { - e_preventDefault(e); - display.input.focus(); - } - off(display.wrapper.ownerDocument, "mousemove", move); - off(display.wrapper.ownerDocument, "mouseup", up); - doc.history.lastSelOrigin = null; - } - var move = operation(cm, function (e) { - if (e.buttons === 0 || !e_button(e)) { - done(e); - } else { - extend(e); - } - }); - var up = operation(cm, done); - cm.state.selectingText = up; - on(display.wrapper.ownerDocument, "mousemove", move); - on(display.wrapper.ownerDocument, "mouseup", up); - } - function bidiSimplify(cm, range2) { - var anchor = range2.anchor; - var head = range2.head; - var anchorLine = getLine(cm.doc, anchor.line); - if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { - return range2; - } - var order = getOrder(anchorLine); - if (!order) { - return range2; - } - var index = getBidiPartAt(order, anchor.ch, anchor.sticky), - part = order[index]; - if (part.from != anchor.ch && part.to != anchor.ch) { - return range2; - } - var boundary = index + (part.from == anchor.ch == (part.level != 1) ? 0 : 1); - if (boundary == 0 || boundary == order.length) { - return range2; - } - var leftSide; - if (head.line != anchor.line) { - leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0; - } else { - var headIndex = getBidiPartAt(order, head.ch, head.sticky); - var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1); - if (headIndex == boundary - 1 || headIndex == boundary) { - leftSide = dir < 0; - } else { - leftSide = dir > 0; - } - } - var usePart = order[boundary + (leftSide ? -1 : 0)]; - var from = leftSide == (usePart.level == 1); - var ch = from ? usePart.from : usePart.to, - sticky = from ? "after" : "before"; - return anchor.ch == ch && anchor.sticky == sticky ? range2 : new Range(new Pos(anchor.line, ch, sticky), head); - } - function gutterEvent(cm, e, type, prevent) { - var mX, mY; - if (e.touches) { - mX = e.touches[0].clientX; - mY = e.touches[0].clientY; - } else { - try { - mX = e.clientX; - mY = e.clientY; - } catch (e$1) { - return false; - } - } - if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { - return false; - } - if (prevent) { - e_preventDefault(e); - } - var display = cm.display; - var lineBox = display.lineDiv.getBoundingClientRect(); - if (mY > lineBox.bottom || !hasHandler(cm, type)) { - return e_defaultPrevented(e); - } - mY -= lineBox.top - display.viewOffset; - for (var i2 = 0; i2 < cm.display.gutterSpecs.length; ++i2) { - var g = display.gutters.childNodes[i2]; - if (g && g.getBoundingClientRect().right >= mX) { - var line = lineAtHeight(cm.doc, mY); - var gutter = cm.display.gutterSpecs[i2]; - signal(cm, type, cm, line, gutter.className, e); - return e_defaultPrevented(e); - } - } - } - function clickInGutter(cm, e) { - return gutterEvent(cm, e, "gutterClick", true); - } - function onContextMenu(cm, e) { - if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { - return; - } - if (signalDOMEvent(cm, e, "contextmenu")) { - return; - } - if (!captureRightClick) { - cm.display.input.onContextMenu(e); - } - } - function contextMenuInGutter(cm, e) { - if (!hasHandler(cm, "gutterContextMenu")) { - return false; - } - return gutterEvent(cm, e, "gutterContextMenu", false); - } - function themeChanged(cm) { - cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); - clearCaches(cm); - } - var Init = { - toString: function () { - return "CodeMirror.Init"; - } - }; - var defaults = {}; - var optionHandlers = {}; - function defineOptions(CodeMirror2) { - var optionHandlers2 = CodeMirror2.optionHandlers; - function option(name, deflt, handle, notOnInit) { - CodeMirror2.defaults[name] = deflt; - if (handle) { - optionHandlers2[name] = notOnInit ? function (cm, val, old) { - if (old != Init) { - handle(cm, val, old); - } - } : handle; - } - } - CodeMirror2.defineOption = option; - CodeMirror2.Init = Init; - option("value", "", function (cm, val) { - return cm.setValue(val); - }, true); - option("mode", null, function (cm, val) { - cm.doc.modeOption = val; - loadMode(cm); - }, true); - option("indentUnit", 2, loadMode, true); - option("indentWithTabs", false); - option("smartIndent", true); - option("tabSize", 4, function (cm) { - resetModeState(cm); - clearCaches(cm); - regChange(cm); - }, true); - option("lineSeparator", null, function (cm, val) { - cm.doc.lineSep = val; - if (!val) { - return; - } - var newBreaks = [], - lineNo2 = cm.doc.first; - cm.doc.iter(function (line) { - for (var pos = 0;;) { - var found = line.text.indexOf(val, pos); - if (found == -1) { - break; - } - pos = found + val.length; - newBreaks.push(Pos(lineNo2, found)); - } - lineNo2++; - }); - for (var i2 = newBreaks.length - 1; i2 >= 0; i2--) { - replaceRange(cm.doc, val, newBreaks[i2], Pos(newBreaks[i2].line, newBreaks[i2].ch + val.length)); - } - }); - option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) { - cm.state.specialChars = new RegExp(val.source + (val.test(" ") ? "" : "| "), "g"); - if (old != Init) { - cm.refresh(); - } - }); - option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { - return cm.refresh(); - }, true); - option("electricChars", true); - option("inputStyle", mobile ? "contenteditable" : "textarea", function () { - throw new Error("inputStyle can not (yet) be changed in a running editor"); - }, true); - option("spellcheck", false, function (cm, val) { - return cm.getInputField().spellcheck = val; - }, true); - option("autocorrect", false, function (cm, val) { - return cm.getInputField().autocorrect = val; - }, true); - option("autocapitalize", false, function (cm, val) { - return cm.getInputField().autocapitalize = val; - }, true); - option("rtlMoveVisually", !windows); - option("wholeLineUpdateBefore", true); - option("theme", "default", function (cm) { - themeChanged(cm); - updateGutters(cm); - }, true); - option("keyMap", "default", function (cm, val, old) { - var next = getKeyMap(val); - var prev = old != Init && getKeyMap(old); - if (prev && prev.detach) { - prev.detach(cm, next); - } - if (next.attach) { - next.attach(cm, prev || null); - } - }); - option("extraKeys", null); - option("configureMouse", null); - option("lineWrapping", false, wrappingChanged, true); - option("gutters", [], function (cm, val) { - cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers); - updateGutters(cm); - }, true); - option("fixedGutter", true, function (cm, val) { - cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; - cm.refresh(); - }, true); - option("coverGutterNextToScrollbar", false, function (cm) { - return updateScrollbars(cm); - }, true); - option("scrollbarStyle", "native", function (cm) { - initScrollbars(cm); - updateScrollbars(cm); - cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); - cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); - }, true); - option("lineNumbers", false, function (cm, val) { - cm.display.gutterSpecs = getGutters(cm.options.gutters, val); - updateGutters(cm); - }, true); - option("firstLineNumber", 1, updateGutters, true); - option("lineNumberFormatter", function (integer) { - return integer; - }, updateGutters, true); - option("showCursorWhenSelecting", false, updateSelection, true); - option("resetSelectionOnContextMenu", true); - option("lineWiseCopyCut", true); - option("pasteLinesPerSelection", true); - option("selectionsMayTouch", false); - option("readOnly", false, function (cm, val) { - if (val == "nocursor") { - onBlur(cm); - cm.display.input.blur(); - } - cm.display.input.readOnlyChanged(val); - }); - option("screenReaderLabel", null, function (cm, val) { - val = val === "" ? null : val; - cm.display.input.screenReaderLabelChanged(val); - }); - option("disableInput", false, function (cm, val) { - if (!val) { - cm.display.input.reset(); - } - }, true); - option("dragDrop", true, dragDropChanged); - option("allowDropFileTypes", null); - option("cursorBlinkRate", 530); - option("cursorScrollMargin", 0); - option("cursorHeight", 1, updateSelection, true); - option("singleCursorHeightPerLine", true, updateSelection, true); - option("workTime", 100); - option("workDelay", 100); - option("flattenSpans", true, resetModeState, true); - option("addModeClass", false, resetModeState, true); - option("pollInterval", 100); - option("undoDepth", 200, function (cm, val) { - return cm.doc.history.undoDepth = val; - }); - option("historyEventDelay", 1250); - option("viewportMargin", 10, function (cm) { - return cm.refresh(); - }, true); - option("maxHighlightLength", 1e4, resetModeState, true); - option("moveInputWithCursor", true, function (cm, val) { - if (!val) { - cm.display.input.resetPosition(); - } - }); - option("tabindex", null, function (cm, val) { - return cm.display.input.getField().tabIndex = val || ""; - }); - option("autofocus", null); - option("direction", "ltr", function (cm, val) { - return cm.doc.setDirection(val); - }, true); - option("phrases", null); - } - function dragDropChanged(cm, value, old) { - var wasOn = old && old != Init; - if (!value != !wasOn) { - var funcs = cm.display.dragFunctions; - var toggle = value ? on : off; - toggle(cm.display.scroller, "dragstart", funcs.start); - toggle(cm.display.scroller, "dragenter", funcs.enter); - toggle(cm.display.scroller, "dragover", funcs.over); - toggle(cm.display.scroller, "dragleave", funcs.leave); - toggle(cm.display.scroller, "drop", funcs.drop); - } - } - function wrappingChanged(cm) { - if (cm.options.lineWrapping) { - addClass(cm.display.wrapper, "CodeMirror-wrap"); - cm.display.sizer.style.minWidth = ""; - cm.display.sizerWidth = null; - } else { - rmClass(cm.display.wrapper, "CodeMirror-wrap"); - findMaxLine(cm); - } - estimateLineHeights(cm); - regChange(cm); - clearCaches(cm); - setTimeout(function () { - return updateScrollbars(cm); - }, 100); - } - function CodeMirror(place, options) { - var this$1$1 = this; - if (!(this instanceof CodeMirror)) { - return new CodeMirror(place, options); - } - this.options = options = options ? copyObj(options) : {}; - copyObj(defaults, options, false); - var doc = options.value; - if (typeof doc == "string") { - doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); - } else if (options.mode) { - doc.modeOption = options.mode; - } - this.doc = doc; - var input = new CodeMirror.inputStyles[options.inputStyle](this); - var display = this.display = new Display(place, doc, input, options); - display.wrapper.CodeMirror = this; - themeChanged(this); - if (options.lineWrapping) { - this.display.wrapper.className += " CodeMirror-wrap"; - } - initScrollbars(this); - this.state = { - keyMaps: [], - // stores maps added by addKeyMap - overlays: [], - // highlighting overlays, as added by addOverlay - modeGen: 0, - // bumped when mode/overlay changes, used to invalidate highlighting info - overwrite: false, - delayingBlurEvent: false, - focused: false, - suppressEdits: false, - // used to disable editing during key handlers when in readOnly mode - pasteIncoming: -1, - cutIncoming: -1, - // help recognize paste/cut edits in input.poll - selectingText: false, - draggingText: false, - highlight: new Delayed(), - // stores highlight worker timeout - keySeq: null, - // Unfinished key sequence - specialChars: null - }; - if (options.autofocus && !mobile) { - display.input.focus(); - } - if (ie && ie_version < 11) { - setTimeout(function () { - return this$1$1.display.input.reset(true); - }, 20); - } - registerEventHandlers(this); - ensureGlobalHandlers(); - startOperation(this); - this.curOp.forceUpdate = true; - attachDoc(this, doc); - if (options.autofocus && !mobile || this.hasFocus()) { - setTimeout(function () { - if (this$1$1.hasFocus() && !this$1$1.state.focused) { - onFocus(this$1$1); - } - }, 20); - } else { - onBlur(this); - } - for (var opt in optionHandlers) { - if (optionHandlers.hasOwnProperty(opt)) { - optionHandlers[opt](this, options[opt], Init); - } - } - maybeUpdateLineNumberWidth(this); - if (options.finishInit) { - options.finishInit(this); - } - for (var i2 = 0; i2 < initHooks.length; ++i2) { - initHooks[i2](this); - } - endOperation(this); - if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") { - display.lineDiv.style.textRendering = "auto"; - } - } - CodeMirror.defaults = defaults; - CodeMirror.optionHandlers = optionHandlers; - function registerEventHandlers(cm) { - var d = cm.display; - on(d.scroller, "mousedown", operation(cm, onMouseDown)); - if (ie && ie_version < 11) { - on(d.scroller, "dblclick", operation(cm, function (e) { - if (signalDOMEvent(cm, e)) { - return; - } - var pos = posFromMouse(cm, e); - if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { - return; - } - e_preventDefault(e); - var word = cm.findWordAt(pos); - extendSelection(cm.doc, word.anchor, word.head); - })); - } else { - on(d.scroller, "dblclick", function (e) { - return signalDOMEvent(cm, e) || e_preventDefault(e); - }); - } - on(d.scroller, "contextmenu", function (e) { - return onContextMenu(cm, e); - }); - on(d.input.getField(), "contextmenu", function (e) { - if (!d.scroller.contains(e.target)) { - onContextMenu(cm, e); - } - }); - var touchFinished, - prevTouch = { - end: 0 - }; - function finishTouch() { - if (d.activeTouch) { - touchFinished = setTimeout(function () { - return d.activeTouch = null; - }, 1e3); - prevTouch = d.activeTouch; - prevTouch.end = + /* @__PURE__ */new Date(); - } - } - function isMouseLikeTouchEvent(e) { - if (e.touches.length != 1) { - return false; - } - var touch = e.touches[0]; - return touch.radiusX <= 1 && touch.radiusY <= 1; - } - function farAway(touch, other) { - if (other.left == null) { - return true; - } - var dx = other.left - touch.left, - dy = other.top - touch.top; - return dx * dx + dy * dy > 20 * 20; - } - on(d.scroller, "touchstart", function (e) { - if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) { - d.input.ensurePolled(); - clearTimeout(touchFinished); - var now = + /* @__PURE__ */new Date(); - d.activeTouch = { - start: now, - moved: false, - prev: now - prevTouch.end <= 300 ? prevTouch : null - }; - if (e.touches.length == 1) { - d.activeTouch.left = e.touches[0].pageX; - d.activeTouch.top = e.touches[0].pageY; - } - } - }); - on(d.scroller, "touchmove", function () { - if (d.activeTouch) { - d.activeTouch.moved = true; - } - }); - on(d.scroller, "touchend", function (e) { - var touch = d.activeTouch; - if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && /* @__PURE__ */new Date() - touch.start < 300) { - var pos = cm.coordsChar(d.activeTouch, "page"), - range2; - if (!touch.prev || farAway(touch, touch.prev)) { - range2 = new Range(pos, pos); - } else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) { - range2 = cm.findWordAt(pos); - } else { - range2 = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); - } - cm.setSelection(range2.anchor, range2.head); - cm.focus(); - e_preventDefault(e); - } - finishTouch(); - }); - on(d.scroller, "touchcancel", finishTouch); - on(d.scroller, "scroll", function () { - if (d.scroller.clientHeight) { - updateScrollTop(cm, d.scroller.scrollTop); - setScrollLeft(cm, d.scroller.scrollLeft, true); - signal(cm, "scroll", cm); - } - }); - on(d.scroller, "mousewheel", function (e) { - return onScrollWheel(cm, e); - }); - on(d.scroller, "DOMMouseScroll", function (e) { - return onScrollWheel(cm, e); - }); - on(d.wrapper, "scroll", function () { - return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; - }); - d.dragFunctions = { - enter: function (e) { - if (!signalDOMEvent(cm, e)) { - e_stop(e); - } - }, - over: function (e) { - if (!signalDOMEvent(cm, e)) { - onDragOver(cm, e); - e_stop(e); - } - }, - start: function (e) { - return onDragStart(cm, e); - }, - drop: operation(cm, onDrop), - leave: function (e) { - if (!signalDOMEvent(cm, e)) { - clearDragCursor(cm); - } - } - }; - var inp = d.input.getField(); - on(inp, "keyup", function (e) { - return onKeyUp.call(cm, e); - }); - on(inp, "keydown", operation(cm, onKeyDown)); - on(inp, "keypress", operation(cm, onKeyPress)); - on(inp, "focus", function (e) { - return onFocus(cm, e); - }); - on(inp, "blur", function (e) { - return onBlur(cm, e); - }); - } - var initHooks = []; - CodeMirror.defineInitHook = function (f) { - return initHooks.push(f); - }; - function indentLine(cm, n, how, aggressive) { - var doc = cm.doc, - state; - if (how == null) { - how = "add"; - } - if (how == "smart") { - if (!doc.mode.indent) { - how = "prev"; - } else { - state = getContextBefore(cm, n).state; - } - } - var tabSize = cm.options.tabSize; - var line = getLine(doc, n), - curSpace = countColumn(line.text, null, tabSize); - if (line.stateAfter) { - line.stateAfter = null; - } - var curSpaceString = line.text.match(/^\s*/)[0], - indentation; - if (!aggressive && !/\S/.test(line.text)) { - indentation = 0; - how = "not"; - } else if (how == "smart") { - indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); - if (indentation == Pass || indentation > 150) { - if (!aggressive) { - return; - } - how = "prev"; - } - } - if (how == "prev") { - if (n > doc.first) { - indentation = countColumn(getLine(doc, n - 1).text, null, tabSize); - } else { - indentation = 0; - } - } else if (how == "add") { - indentation = curSpace + cm.options.indentUnit; - } else if (how == "subtract") { - indentation = curSpace - cm.options.indentUnit; - } else if (typeof how == "number") { - indentation = curSpace + how; - } - indentation = Math.max(0, indentation); - var indentString = "", - pos = 0; - if (cm.options.indentWithTabs) { - for (var i2 = Math.floor(indentation / tabSize); i2; --i2) { - pos += tabSize; - indentString += " "; - } - } - if (pos < indentation) { - indentString += spaceStr(indentation - pos); - } - if (indentString != curSpaceString) { - replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); - line.stateAfter = null; - return true; - } else { - for (var i$12 = 0; i$12 < doc.sel.ranges.length; i$12++) { - var range2 = doc.sel.ranges[i$12]; - if (range2.head.line == n && range2.head.ch < curSpaceString.length) { - var pos$1 = Pos(n, curSpaceString.length); - replaceOneSelection(doc, i$12, new Range(pos$1, pos$1)); - break; - } - } - } - } - var lastCopied = null; - function setLastCopied(newLastCopied) { - lastCopied = newLastCopied; - } - function applyTextInput(cm, inserted, deleted, sel, origin) { - var doc = cm.doc; - cm.display.shift = false; - if (!sel) { - sel = doc.sel; - } - var recent = + /* @__PURE__ */new Date() - 200; - var paste = origin == "paste" || cm.state.pasteIncoming > recent; - var textLines = splitLinesAuto(inserted), - multiPaste = null; - if (paste && sel.ranges.length > 1) { - if (lastCopied && lastCopied.text.join("\n") == inserted) { - if (sel.ranges.length % lastCopied.text.length == 0) { - multiPaste = []; - for (var i2 = 0; i2 < lastCopied.text.length; i2++) { - multiPaste.push(doc.splitLines(lastCopied.text[i2])); - } - } - } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) { - multiPaste = map(textLines, function (l) { - return [l]; - }); - } - } - var updateInput = cm.curOp.updateInput; - for (var i$12 = sel.ranges.length - 1; i$12 >= 0; i$12--) { - var range2 = sel.ranges[i$12]; - var from = range2.from(), - to = range2.to(); - if (range2.empty()) { - if (deleted && deleted > 0) { - from = Pos(from.line, from.ch - deleted); - } else if (cm.state.overwrite && !paste) { - to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); - } else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == textLines.join("\n")) { - from = to = Pos(from.line, 0); - } - } - var changeEvent = { - from, - to, - text: multiPaste ? multiPaste[i$12 % multiPaste.length] : textLines, - origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input") - }; - makeChange(cm.doc, changeEvent); - signalLater(cm, "inputRead", cm, changeEvent); - } - if (inserted && !paste) { - triggerElectric(cm, inserted); - } - ensureCursorVisible(cm); - if (cm.curOp.updateInput < 2) { - cm.curOp.updateInput = updateInput; - } - cm.curOp.typing = true; - cm.state.pasteIncoming = cm.state.cutIncoming = -1; - } - function handlePaste(e, cm) { - var pasted = e.clipboardData && e.clipboardData.getData("Text"); - if (pasted) { - e.preventDefault(); - if (!cm.isReadOnly() && !cm.options.disableInput) { - runInOp(cm, function () { - return applyTextInput(cm, pasted, 0, null, "paste"); - }); - } - return true; - } - } - function triggerElectric(cm, inserted) { - if (!cm.options.electricChars || !cm.options.smartIndent) { - return; - } - var sel = cm.doc.sel; - for (var i2 = sel.ranges.length - 1; i2 >= 0; i2--) { - var range2 = sel.ranges[i2]; - if (range2.head.ch > 100 || i2 && sel.ranges[i2 - 1].head.line == range2.head.line) { - continue; - } - var mode = cm.getModeAt(range2.head); - var indented = false; - if (mode.electricChars) { - for (var j = 0; j < mode.electricChars.length; j++) { - if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { - indented = indentLine(cm, range2.head.line, "smart"); - break; - } - } - } else if (mode.electricInput) { - if (mode.electricInput.test(getLine(cm.doc, range2.head.line).text.slice(0, range2.head.ch))) { - indented = indentLine(cm, range2.head.line, "smart"); - } - } - if (indented) { - signalLater(cm, "electricInput", cm, range2.head.line); - } - } - } - function copyableRanges(cm) { - var text = [], - ranges = []; - for (var i2 = 0; i2 < cm.doc.sel.ranges.length; i2++) { - var line = cm.doc.sel.ranges[i2].head.line; - var lineRange = { - anchor: Pos(line, 0), - head: Pos(line + 1, 0) - }; - ranges.push(lineRange); - text.push(cm.getRange(lineRange.anchor, lineRange.head)); - } - return { - text, - ranges - }; - } - function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) { - field.setAttribute("autocorrect", autocorrect ? "" : "off"); - field.setAttribute("autocapitalize", autocapitalize ? "" : "off"); - field.setAttribute("spellcheck", !!spellcheck); - } - function hiddenTextarea() { - var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none"); - var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); - if (webkit) { - te.style.width = "1000px"; - } else { - te.setAttribute("wrap", "off"); - } - if (ios) { - te.style.border = "1px solid black"; - } - disableBrowserMagic(te); - return div; - } - function addEditorMethods(CodeMirror2) { - var optionHandlers2 = CodeMirror2.optionHandlers; - var helpers = CodeMirror2.helpers = {}; - CodeMirror2.prototype = { - constructor: CodeMirror2, - focus: function () { - window.focus(); - this.display.input.focus(); - }, - setOption: function (option, value) { - var options = this.options, - old = options[option]; - if (options[option] == value && option != "mode") { - return; - } - options[option] = value; - if (optionHandlers2.hasOwnProperty(option)) { - operation(this, optionHandlers2[option])(this, value, old); - } - signal(this, "optionChange", this, option); - }, - getOption: function (option) { - return this.options[option]; - }, - getDoc: function () { - return this.doc; - }, - addKeyMap: function (map2, bottom) { - this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map2)); - }, - removeKeyMap: function (map2) { - var maps = this.state.keyMaps; - for (var i2 = 0; i2 < maps.length; ++i2) { - if (maps[i2] == map2 || maps[i2].name == map2) { - maps.splice(i2, 1); - return true; - } - } - }, - addOverlay: methodOp(function (spec, options) { - var mode = spec.token ? spec : CodeMirror2.getMode(this.options, spec); - if (mode.startState) { - throw new Error("Overlays may not be stateful."); - } - insertSorted(this.state.overlays, { - mode, - modeSpec: spec, - opaque: options && options.opaque, - priority: options && options.priority || 0 - }, function (overlay) { - return overlay.priority; - }); - this.state.modeGen++; - regChange(this); - }), - removeOverlay: methodOp(function (spec) { - var overlays = this.state.overlays; - for (var i2 = 0; i2 < overlays.length; ++i2) { - var cur = overlays[i2].modeSpec; - if (cur == spec || typeof spec == "string" && cur.name == spec) { - overlays.splice(i2, 1); - this.state.modeGen++; - regChange(this); - return; - } - } - }), - indentLine: methodOp(function (n, dir, aggressive) { - if (typeof dir != "string" && typeof dir != "number") { - if (dir == null) { - dir = this.options.smartIndent ? "smart" : "prev"; - } else { - dir = dir ? "add" : "subtract"; - } - } - if (isLine(this.doc, n)) { - indentLine(this, n, dir, aggressive); - } - }), - indentSelection: methodOp(function (how) { - var ranges = this.doc.sel.ranges, - end = -1; - for (var i2 = 0; i2 < ranges.length; i2++) { - var range2 = ranges[i2]; - if (!range2.empty()) { - var from = range2.from(), - to = range2.to(); - var start = Math.max(end, from.line); - end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; - for (var j = start; j < end; ++j) { - indentLine(this, j, how); - } - var newRanges = this.doc.sel.ranges; - if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i2].from().ch > 0) { - replaceOneSelection(this.doc, i2, new Range(from, newRanges[i2].to()), sel_dontScroll); - } - } else if (range2.head.line > end) { - indentLine(this, range2.head.line, how, true); - end = range2.head.line; - if (i2 == this.doc.sel.primIndex) { - ensureCursorVisible(this); - } - } - } - }), - // Fetch the parser token for a given character. Useful for hacks - // that want to inspect the mode state (say, for completion). - getTokenAt: function (pos, precise) { - return takeToken(this, pos, precise); - }, - getLineTokens: function (line, precise) { - return takeToken(this, Pos(line), precise, true); - }, - getTokenTypeAt: function (pos) { - pos = clipPos(this.doc, pos); - var styles = getLineStyles(this, getLine(this.doc, pos.line)); - var before = 0, - after = (styles.length - 1) / 2, - ch = pos.ch; - var type; - if (ch == 0) { - type = styles[2]; - } else { - for (;;) { - var mid = before + after >> 1; - if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { - after = mid; - } else if (styles[mid * 2 + 1] < ch) { - before = mid + 1; - } else { - type = styles[mid * 2 + 2]; - break; - } - } - } - var cut = type ? type.indexOf("overlay ") : -1; - return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); - }, - getModeAt: function (pos) { - var mode = this.doc.mode; - if (!mode.innerMode) { - return mode; - } - return CodeMirror2.innerMode(mode, this.getTokenAt(pos).state).mode; - }, - getHelper: function (pos, type) { - return this.getHelpers(pos, type)[0]; - }, - getHelpers: function (pos, type) { - var found = []; - if (!helpers.hasOwnProperty(type)) { - return found; - } - var help = helpers[type], - mode = this.getModeAt(pos); - if (typeof mode[type] == "string") { - if (help[mode[type]]) { - found.push(help[mode[type]]); - } - } else if (mode[type]) { - for (var i2 = 0; i2 < mode[type].length; i2++) { - var val = help[mode[type][i2]]; - if (val) { - found.push(val); - } - } - } else if (mode.helperType && help[mode.helperType]) { - found.push(help[mode.helperType]); - } else if (help[mode.name]) { - found.push(help[mode.name]); - } - for (var i$12 = 0; i$12 < help._global.length; i$12++) { - var cur = help._global[i$12]; - if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) { - found.push(cur.val); - } - } - return found; - }, - getStateAfter: function (line, precise) { - var doc = this.doc; - line = clipLine(doc, line == null ? doc.first + doc.size - 1 : line); - return getContextBefore(this, line + 1, precise).state; - }, - cursorCoords: function (start, mode) { - var pos, - range2 = this.doc.sel.primary(); - if (start == null) { - pos = range2.head; - } else if (typeof start == "object") { - pos = clipPos(this.doc, start); - } else { - pos = start ? range2.from() : range2.to(); - } - return cursorCoords(this, pos, mode || "page"); - }, - charCoords: function (pos, mode) { - return charCoords(this, clipPos(this.doc, pos), mode || "page"); - }, - coordsChar: function (coords, mode) { - coords = fromCoordSystem(this, coords, mode || "page"); - return coordsChar(this, coords.left, coords.top); - }, - lineAtHeight: function (height, mode) { - height = fromCoordSystem(this, { - top: height, - left: 0 - }, mode || "page").top; - return lineAtHeight(this.doc, height + this.display.viewOffset); - }, - heightAtLine: function (line, mode, includeWidgets) { - var end = false, - lineObj; - if (typeof line == "number") { - var last = this.doc.first + this.doc.size - 1; - if (line < this.doc.first) { - line = this.doc.first; - } else if (line > last) { - line = last; - end = true; - } - lineObj = getLine(this.doc, line); - } else { - lineObj = line; - } - return intoCoordSystem(this, lineObj, { - top: 0, - left: 0 - }, mode || "page", includeWidgets || end).top + (end ? this.doc.height - heightAtLine(lineObj) : 0); - }, - defaultTextHeight: function () { - return textHeight(this.display); - }, - defaultCharWidth: function () { - return charWidth(this.display); - }, - getViewport: function () { - return { - from: this.display.viewFrom, - to: this.display.viewTo - }; - }, - addWidget: function (pos, node, scroll, vert, horiz) { - var display = this.display; - pos = cursorCoords(this, clipPos(this.doc, pos)); - var top = pos.bottom, - left = pos.left; - node.style.position = "absolute"; - node.setAttribute("cm-ignore-events", "true"); - this.display.input.setUneditable(node); - display.sizer.appendChild(node); - if (vert == "over") { - top = pos.top; - } else if (vert == "above" || vert == "near") { - var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), - hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); - if ((vert == "above" || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) { - top = pos.top - node.offsetHeight; - } else if (pos.bottom + node.offsetHeight <= vspace) { - top = pos.bottom; - } - if (left + node.offsetWidth > hspace) { - left = hspace - node.offsetWidth; - } - } - node.style.top = top + "px"; - node.style.left = node.style.right = ""; - if (horiz == "right") { - left = display.sizer.clientWidth - node.offsetWidth; - node.style.right = "0px"; - } else { - if (horiz == "left") { - left = 0; - } else if (horiz == "middle") { - left = (display.sizer.clientWidth - node.offsetWidth) / 2; - } - node.style.left = left + "px"; - } - if (scroll) { - scrollIntoView(this, { - left, - top, - right: left + node.offsetWidth, - bottom: top + node.offsetHeight - }); - } - }, - triggerOnKeyDown: methodOp(onKeyDown), - triggerOnKeyPress: methodOp(onKeyPress), - triggerOnKeyUp: onKeyUp, - triggerOnMouseDown: methodOp(onMouseDown), - execCommand: function (cmd) { - if (commands.hasOwnProperty(cmd)) { - return commands[cmd].call(null, this); - } - }, - triggerElectric: methodOp(function (text) { - triggerElectric(this, text); - }), - findPosH: function (from, amount, unit, visually) { - var dir = 1; - if (amount < 0) { - dir = -1; - amount = -amount; - } - var cur = clipPos(this.doc, from); - for (var i2 = 0; i2 < amount; ++i2) { - cur = findPosH(this.doc, cur, dir, unit, visually); - if (cur.hitSide) { - break; - } - } - return cur; - }, - moveH: methodOp(function (dir, unit) { - var this$1$1 = this; - this.extendSelectionsBy(function (range2) { - if (this$1$1.display.shift || this$1$1.doc.extend || range2.empty()) { - return findPosH(this$1$1.doc, range2.head, dir, unit, this$1$1.options.rtlMoveVisually); - } else { - return dir < 0 ? range2.from() : range2.to(); - } - }, sel_move); - }), - deleteH: methodOp(function (dir, unit) { - var sel = this.doc.sel, - doc = this.doc; - if (sel.somethingSelected()) { - doc.replaceSelection("", null, "+delete"); - } else { - deleteNearSelection(this, function (range2) { - var other = findPosH(doc, range2.head, dir, unit, false); - return dir < 0 ? { - from: other, - to: range2.head - } : { - from: range2.head, - to: other - }; - }); - } - }), - findPosV: function (from, amount, unit, goalColumn) { - var dir = 1, - x = goalColumn; - if (amount < 0) { - dir = -1; - amount = -amount; - } - var cur = clipPos(this.doc, from); - for (var i2 = 0; i2 < amount; ++i2) { - var coords = cursorCoords(this, cur, "div"); - if (x == null) { - x = coords.left; - } else { - coords.left = x; - } - cur = findPosV(this, coords, dir, unit); - if (cur.hitSide) { - break; - } - } - return cur; - }, - moveV: methodOp(function (dir, unit) { - var this$1$1 = this; - var doc = this.doc, - goals = []; - var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected(); - doc.extendSelectionsBy(function (range2) { - if (collapse) { - return dir < 0 ? range2.from() : range2.to(); - } - var headPos = cursorCoords(this$1$1, range2.head, "div"); - if (range2.goalColumn != null) { - headPos.left = range2.goalColumn; - } - goals.push(headPos.left); - var pos = findPosV(this$1$1, headPos, dir, unit); - if (unit == "page" && range2 == doc.sel.primary()) { - addToScrollTop(this$1$1, charCoords(this$1$1, pos, "div").top - headPos.top); - } - return pos; - }, sel_move); - if (goals.length) { - for (var i2 = 0; i2 < doc.sel.ranges.length; i2++) { - doc.sel.ranges[i2].goalColumn = goals[i2]; - } - } - }), - // Find the word at the given position (as returned by coordsChar). - findWordAt: function (pos) { - var doc = this.doc, - line = getLine(doc, pos.line).text; - var start = pos.ch, - end = pos.ch; - if (line) { - var helper = this.getHelper(pos, "wordChars"); - if ((pos.sticky == "before" || end == line.length) && start) { - --start; - } else { - ++end; - } - var startChar = line.charAt(start); - var check = isWordChar(startChar, helper) ? function (ch) { - return isWordChar(ch, helper); - } : /\s/.test(startChar) ? function (ch) { - return /\s/.test(ch); - } : function (ch) { - return !/\s/.test(ch) && !isWordChar(ch); - }; - while (start > 0 && check(line.charAt(start - 1))) { - --start; - } - while (end < line.length && check(line.charAt(end))) { - ++end; - } - } - return new Range(Pos(pos.line, start), Pos(pos.line, end)); - }, - toggleOverwrite: function (value) { - if (value != null && value == this.state.overwrite) { - return; - } - if (this.state.overwrite = !this.state.overwrite) { - addClass(this.display.cursorDiv, "CodeMirror-overwrite"); - } else { - rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); - } - signal(this, "overwriteToggle", this, this.state.overwrite); - }, - hasFocus: function () { - return this.display.input.getField() == activeElt(); - }, - isReadOnly: function () { - return !!(this.options.readOnly || this.doc.cantEdit); - }, - scrollTo: methodOp(function (x, y) { - scrollToCoords(this, x, y); - }), - getScrollInfo: function () { - var scroller = this.display.scroller; - return { - left: scroller.scrollLeft, - top: scroller.scrollTop, - height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, - width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, - clientHeight: displayHeight(this), - clientWidth: displayWidth(this) - }; - }, - scrollIntoView: methodOp(function (range2, margin) { - if (range2 == null) { - range2 = { - from: this.doc.sel.primary().head, - to: null - }; - if (margin == null) { - margin = this.options.cursorScrollMargin; - } - } else if (typeof range2 == "number") { - range2 = { - from: Pos(range2, 0), - to: null - }; - } else if (range2.from == null) { - range2 = { - from: range2, - to: null - }; - } - if (!range2.to) { - range2.to = range2.from; - } - range2.margin = margin || 0; - if (range2.from.line != null) { - scrollToRange(this, range2); - } else { - scrollToCoordsRange(this, range2.from, range2.to, range2.margin); - } - }), - setSize: methodOp(function (width, height) { - var this$1$1 = this; - var interpret = function (val) { - return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; - }; - if (width != null) { - this.display.wrapper.style.width = interpret(width); - } - if (height != null) { - this.display.wrapper.style.height = interpret(height); - } - if (this.options.lineWrapping) { - clearLineMeasurementCache(this); - } - var lineNo2 = this.display.viewFrom; - this.doc.iter(lineNo2, this.display.viewTo, function (line) { - if (line.widgets) { - for (var i2 = 0; i2 < line.widgets.length; i2++) { - if (line.widgets[i2].noHScroll) { - regLineChange(this$1$1, lineNo2, "widget"); - break; - } - } - } - ++lineNo2; - }); - this.curOp.forceUpdate = true; - signal(this, "refresh", this); - }), - operation: function (f) { - return runInOp(this, f); - }, - startOperation: function () { - return startOperation(this); - }, - endOperation: function () { - return endOperation(this); - }, - refresh: methodOp(function () { - var oldHeight = this.display.cachedTextHeight; - regChange(this); - this.curOp.forceUpdate = true; - clearCaches(this); - scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop); - updateGutterSpace(this.display); - if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > 0.5 || this.options.lineWrapping) { - estimateLineHeights(this); - } - signal(this, "refresh", this); - }), - swapDoc: methodOp(function (doc) { - var old = this.doc; - old.cm = null; - if (this.state.selectingText) { - this.state.selectingText(); - } - attachDoc(this, doc); - clearCaches(this); - this.display.input.reset(); - scrollToCoords(this, doc.scrollLeft, doc.scrollTop); - this.curOp.forceScroll = true; - signalLater(this, "swapDoc", this, old); - return old; - }), - phrase: function (phraseText) { - var phrases = this.options.phrases; - return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText; - }, - getInputField: function () { - return this.display.input.getField(); - }, - getWrapperElement: function () { - return this.display.wrapper; - }, - getScrollerElement: function () { - return this.display.scroller; - }, - getGutterElement: function () { - return this.display.gutters; - } - }; - eventMixin(CodeMirror2); - CodeMirror2.registerHelper = function (type, name, value) { - if (!helpers.hasOwnProperty(type)) { - helpers[type] = CodeMirror2[type] = { - _global: [] - }; - } - helpers[type][name] = value; - }; - CodeMirror2.registerGlobalHelper = function (type, name, predicate, value) { - CodeMirror2.registerHelper(type, name, value); - helpers[type]._global.push({ - pred: predicate, - val: value - }); - }; - } - function findPosH(doc, pos, dir, unit, visually) { - var oldPos = pos; - var origDir = dir; - var lineObj = getLine(doc, pos.line); - var lineDir = visually && doc.direction == "rtl" ? -dir : dir; - function findNextLine() { - var l = pos.line + lineDir; - if (l < doc.first || l >= doc.first + doc.size) { - return false; - } - pos = new Pos(l, pos.ch, pos.sticky); - return lineObj = getLine(doc, l); - } - function moveOnce(boundToLine) { - var next; - if (unit == "codepoint") { - var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1)); - if (isNaN(ch)) { - next = null; - } else { - var astral = dir > 0 ? ch >= 55296 && ch < 56320 : ch >= 56320 && ch < 57343; - next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir); - } - } else if (visually) { - next = moveVisually(doc.cm, lineObj, pos, dir); - } else { - next = moveLogically(lineObj, pos, dir); - } - if (next == null) { - if (!boundToLine && findNextLine()) { - pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); - } else { - return false; - } - } else { - pos = next; - } - return true; - } - if (unit == "char" || unit == "codepoint") { - moveOnce(); - } else if (unit == "column") { - moveOnce(true); - } else if (unit == "word" || unit == "group") { - var sawType = null, - group = unit == "group"; - var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); - for (var first = true;; first = false) { - if (dir < 0 && !moveOnce(!first)) { - break; - } - var cur = lineObj.text.charAt(pos.ch) || "\n"; - var type = isWordChar(cur, helper) ? "w" : group && cur == "\n" ? "n" : !group || /\s/.test(cur) ? null : "p"; - if (group && !first && !type) { - type = "s"; - } - if (sawType && sawType != type) { - if (dir < 0) { - dir = 1; - moveOnce(); - pos.sticky = "after"; - } - break; - } - if (type) { - sawType = type; - } - if (dir > 0 && !moveOnce(!first)) { - break; - } - } - } - var result = skipAtomic(doc, pos, oldPos, origDir, true); - if (equalCursorPos(oldPos, result)) { - result.hitSide = true; - } - return result; - } - function findPosV(cm, pos, dir, unit) { - var doc = cm.doc, - x = pos.left, - y; - if (unit == "page") { - var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); - var moveAmount = Math.max(pageSize - 0.5 * textHeight(cm.display), 3); - y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; - } else if (unit == "line") { - y = dir > 0 ? pos.bottom + 3 : pos.top - 3; - } - var target; - for (;;) { - target = coordsChar(cm, x, y); - if (!target.outside) { - break; - } - if (dir < 0 ? y <= 0 : y >= doc.height) { - target.hitSide = true; - break; - } - y += dir * 5; - } - return target; - } - var ContentEditableInput = function (cm) { - this.cm = cm; - this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; - this.polling = new Delayed(); - this.composing = null; - this.gracePeriod = false; - this.readDOMTimeout = null; - }; - ContentEditableInput.prototype.init = function (display) { - var this$1$1 = this; - var input = this, - cm = input.cm; - var div = input.div = display.lineDiv; - div.contentEditable = true; - disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize); - function belongsToInput(e) { - for (var t = e.target; t; t = t.parentNode) { - if (t == div) { - return true; - } - if (/\bCodeMirror-(?:line)?widget\b/.test(t.className)) { - break; - } - } - return false; - } - on(div, "paste", function (e) { - if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { - return; - } - if (ie_version <= 11) { - setTimeout(operation(cm, function () { - return this$1$1.updateFromDOM(); - }), 20); - } - }); - on(div, "compositionstart", function (e) { - this$1$1.composing = { - data: e.data, - done: false - }; - }); - on(div, "compositionupdate", function (e) { - if (!this$1$1.composing) { - this$1$1.composing = { - data: e.data, - done: false - }; - } - }); - on(div, "compositionend", function (e) { - if (this$1$1.composing) { - if (e.data != this$1$1.composing.data) { - this$1$1.readFromDOMSoon(); - } - this$1$1.composing.done = true; - } - }); - on(div, "touchstart", function () { - return input.forceCompositionEnd(); - }); - on(div, "input", function () { - if (!this$1$1.composing) { - this$1$1.readFromDOMSoon(); - } - }); - function onCopyCut(e) { - if (!belongsToInput(e) || signalDOMEvent(cm, e)) { - return; - } - if (cm.somethingSelected()) { - setLastCopied({ - lineWise: false, - text: cm.getSelections() - }); - if (e.type == "cut") { - cm.replaceSelection("", null, "cut"); - } - } else if (!cm.options.lineWiseCopyCut) { - return; - } else { - var ranges = copyableRanges(cm); - setLastCopied({ - lineWise: true, - text: ranges.text - }); - if (e.type == "cut") { - cm.operation(function () { - cm.setSelections(ranges.ranges, 0, sel_dontScroll); - cm.replaceSelection("", null, "cut"); - }); - } - } - if (e.clipboardData) { - e.clipboardData.clearData(); - var content = lastCopied.text.join("\n"); - e.clipboardData.setData("Text", content); - if (e.clipboardData.getData("Text") == content) { - e.preventDefault(); - return; - } - } - var kludge = hiddenTextarea(), - te = kludge.firstChild; - cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); - te.value = lastCopied.text.join("\n"); - var hadFocus = activeElt(); - selectInput(te); - setTimeout(function () { - cm.display.lineSpace.removeChild(kludge); - hadFocus.focus(); - if (hadFocus == div) { - input.showPrimarySelection(); - } - }, 50); - } - on(div, "copy", onCopyCut); - on(div, "cut", onCopyCut); - }; - ContentEditableInput.prototype.screenReaderLabelChanged = function (label) { - if (label) { - this.div.setAttribute("aria-label", label); - } else { - this.div.removeAttribute("aria-label"); - } - }; - ContentEditableInput.prototype.prepareSelection = function () { - var result = prepareSelection(this.cm, false); - result.focus = activeElt() == this.div; - return result; - }; - ContentEditableInput.prototype.showSelection = function (info, takeFocus) { - if (!info || !this.cm.display.view.length) { - return; - } - if (info.focus || takeFocus) { - this.showPrimarySelection(); - } - this.showMultipleSelections(info); - }; - ContentEditableInput.prototype.getSelection = function () { - return this.cm.display.wrapper.ownerDocument.getSelection(); - }; - ContentEditableInput.prototype.showPrimarySelection = function () { - var sel = this.getSelection(), - cm = this.cm, - prim = cm.doc.sel.primary(); - var from = prim.from(), - to = prim.to(); - if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { - sel.removeAllRanges(); - return; - } - var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); - var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset); - if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), from) == 0 && cmp(maxPos(curAnchor, curFocus), to) == 0) { - return; - } - var view = cm.display.view; - var start = from.line >= cm.display.viewFrom && posToDOM(cm, from) || { - node: view[0].measure.map[2], - offset: 0 - }; - var end = to.line < cm.display.viewTo && posToDOM(cm, to); - if (!end) { - var measure = view[view.length - 1].measure; - var map2 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; - end = { - node: map2[map2.length - 1], - offset: map2[map2.length - 2] - map2[map2.length - 3] - }; - } - if (!start || !end) { - sel.removeAllRanges(); - return; - } - var old = sel.rangeCount && sel.getRangeAt(0), - rng; - try { - rng = range(start.node, start.offset, end.offset, end.node); - } catch (e) {} - if (rng) { - if (!gecko && cm.state.focused) { - sel.collapse(start.node, start.offset); - if (!rng.collapsed) { - sel.removeAllRanges(); - sel.addRange(rng); - } - } else { - sel.removeAllRanges(); - sel.addRange(rng); - } - if (old && sel.anchorNode == null) { - sel.addRange(old); - } else if (gecko) { - this.startGracePeriod(); - } - } - this.rememberSelection(); - }; - ContentEditableInput.prototype.startGracePeriod = function () { - var this$1$1 = this; - clearTimeout(this.gracePeriod); - this.gracePeriod = setTimeout(function () { - this$1$1.gracePeriod = false; - if (this$1$1.selectionChanged()) { - this$1$1.cm.operation(function () { - return this$1$1.cm.curOp.selectionChanged = true; - }); - } - }, 20); - }; - ContentEditableInput.prototype.showMultipleSelections = function (info) { - removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); - removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); - }; - ContentEditableInput.prototype.rememberSelection = function () { - var sel = this.getSelection(); - this.lastAnchorNode = sel.anchorNode; - this.lastAnchorOffset = sel.anchorOffset; - this.lastFocusNode = sel.focusNode; - this.lastFocusOffset = sel.focusOffset; - }; - ContentEditableInput.prototype.selectionInEditor = function () { - var sel = this.getSelection(); - if (!sel.rangeCount) { - return false; - } - var node = sel.getRangeAt(0).commonAncestorContainer; - return contains(this.div, node); - }; - ContentEditableInput.prototype.focus = function () { - if (this.cm.options.readOnly != "nocursor") { - if (!this.selectionInEditor() || activeElt() != this.div) { - this.showSelection(this.prepareSelection(), true); - } - this.div.focus(); - } - }; - ContentEditableInput.prototype.blur = function () { - this.div.blur(); - }; - ContentEditableInput.prototype.getField = function () { - return this.div; - }; - ContentEditableInput.prototype.supportsTouch = function () { - return true; - }; - ContentEditableInput.prototype.receivedFocus = function () { - var this$1$1 = this; - var input = this; - if (this.selectionInEditor()) { - setTimeout(function () { - return this$1$1.pollSelection(); - }, 20); - } else { - runInOp(this.cm, function () { - return input.cm.curOp.selectionChanged = true; - }); - } - function poll() { - if (input.cm.state.focused) { - input.pollSelection(); - input.polling.set(input.cm.options.pollInterval, poll); - } - } - this.polling.set(this.cm.options.pollInterval, poll); - }; - ContentEditableInput.prototype.selectionChanged = function () { - var sel = this.getSelection(); - return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset; - }; - ContentEditableInput.prototype.pollSelection = function () { - if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { - return; - } - var sel = this.getSelection(), - cm = this.cm; - if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) { - this.cm.triggerOnKeyDown({ - type: "keydown", - keyCode: 8, - preventDefault: Math.abs - }); - this.blur(); - this.focus(); - return; - } - if (this.composing) { - return; - } - this.rememberSelection(); - var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); - var head = domToPos(cm, sel.focusNode, sel.focusOffset); - if (anchor && head) { - runInOp(cm, function () { - setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); - if (anchor.bad || head.bad) { - cm.curOp.selectionChanged = true; - } - }); - } - }; - ContentEditableInput.prototype.pollContent = function () { - if (this.readDOMTimeout != null) { - clearTimeout(this.readDOMTimeout); - this.readDOMTimeout = null; - } - var cm = this.cm, - display = cm.display, - sel = cm.doc.sel.primary(); - var from = sel.from(), - to = sel.to(); - if (from.ch == 0 && from.line > cm.firstLine()) { - from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); - } - if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) { - to = Pos(to.line + 1, 0); - } - if (from.line < display.viewFrom || to.line > display.viewTo - 1) { - return false; - } - var fromIndex, fromLine, fromNode; - if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { - fromLine = lineNo(display.view[0].line); - fromNode = display.view[0].node; - } else { - fromLine = lineNo(display.view[fromIndex].line); - fromNode = display.view[fromIndex - 1].node.nextSibling; - } - var toIndex = findViewIndex(cm, to.line); - var toLine, toNode; - if (toIndex == display.view.length - 1) { - toLine = display.viewTo - 1; - toNode = display.lineDiv.lastChild; - } else { - toLine = lineNo(display.view[toIndex + 1].line) - 1; - toNode = display.view[toIndex + 1].node.previousSibling; - } - if (!fromNode) { - return false; - } - var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); - var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); - while (newText.length > 1 && oldText.length > 1) { - if (lst(newText) == lst(oldText)) { - newText.pop(); - oldText.pop(); - toLine--; - } else if (newText[0] == oldText[0]) { - newText.shift(); - oldText.shift(); - fromLine++; - } else { - break; - } - } - var cutFront = 0, - cutEnd = 0; - var newTop = newText[0], - oldTop = oldText[0], - maxCutFront = Math.min(newTop.length, oldTop.length); - while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) { - ++cutFront; - } - var newBot = lst(newText), - oldBot = lst(oldText); - var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0)); - while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { - ++cutEnd; - } - if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { - while (cutFront && cutFront > from.ch && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { - cutFront--; - cutEnd++; - } - } - newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, ""); - newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, ""); - var chFrom = Pos(fromLine, cutFront); - var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); - if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { - replaceRange(cm.doc, newText, chFrom, chTo, "+input"); - return true; - } - }; - ContentEditableInput.prototype.ensurePolled = function () { - this.forceCompositionEnd(); - }; - ContentEditableInput.prototype.reset = function () { - this.forceCompositionEnd(); - }; - ContentEditableInput.prototype.forceCompositionEnd = function () { - if (!this.composing) { - return; - } - clearTimeout(this.readDOMTimeout); - this.composing = null; - this.updateFromDOM(); - this.div.blur(); - this.div.focus(); - }; - ContentEditableInput.prototype.readFromDOMSoon = function () { - var this$1$1 = this; - if (this.readDOMTimeout != null) { - return; - } - this.readDOMTimeout = setTimeout(function () { - this$1$1.readDOMTimeout = null; - if (this$1$1.composing) { - if (this$1$1.composing.done) { - this$1$1.composing = null; - } else { - return; - } - } - this$1$1.updateFromDOM(); - }, 80); - }; - ContentEditableInput.prototype.updateFromDOM = function () { - var this$1$1 = this; - if (this.cm.isReadOnly() || !this.pollContent()) { - runInOp(this.cm, function () { - return regChange(this$1$1.cm); - }); - } - }; - ContentEditableInput.prototype.setUneditable = function (node) { - node.contentEditable = "false"; - }; - ContentEditableInput.prototype.onKeyPress = function (e) { - if (e.charCode == 0 || this.composing) { - return; - } - e.preventDefault(); - if (!this.cm.isReadOnly()) { - operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); - } - }; - ContentEditableInput.prototype.readOnlyChanged = function (val) { - this.div.contentEditable = String(val != "nocursor"); - }; - ContentEditableInput.prototype.onContextMenu = function () {}; - ContentEditableInput.prototype.resetPosition = function () {}; - ContentEditableInput.prototype.needsContentAttribute = true; - function posToDOM(cm, pos) { - var view = findViewForLine(cm, pos.line); - if (!view || view.hidden) { - return null; - } - var line = getLine(cm.doc, pos.line); - var info = mapFromLineView(view, line, pos.line); - var order = getOrder(line, cm.doc.direction), - side = "left"; - if (order) { - var partPos = getBidiPartAt(order, pos.ch); - side = partPos % 2 ? "right" : "left"; - } - var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); - result.offset = result.collapse == "right" ? result.end : result.start; - return result; - } - function isInGutter(node) { - for (var scan = node; scan; scan = scan.parentNode) { - if (/CodeMirror-gutter-wrapper/.test(scan.className)) { - return true; - } - } - return false; - } - function badPos(pos, bad) { - if (bad) { - pos.bad = true; - } - return pos; - } - function domTextBetween(cm, from, to, fromLine, toLine) { - var text = "", - closing = false, - lineSep = cm.doc.lineSeparator(), - extraLinebreak = false; - function recognizeMarker(id) { - return function (marker) { - return marker.id == id; - }; - } - function close() { - if (closing) { - text += lineSep; - if (extraLinebreak) { - text += lineSep; - } - closing = extraLinebreak = false; - } - } - function addText(str) { - if (str) { - close(); - text += str; - } - } - function walk(node) { - if (node.nodeType == 1) { - var cmText = node.getAttribute("cm-text"); - if (cmText) { - addText(cmText); - return; - } - var markerID = node.getAttribute("cm-marker"), - range2; - if (markerID) { - var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); - if (found.length && (range2 = found[0].find(0))) { - addText(getBetween(cm.doc, range2.from, range2.to).join(lineSep)); - } - return; - } - if (node.getAttribute("contenteditable") == "false") { - return; - } - var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName); - if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { - return; - } - if (isBlock) { - close(); - } - for (var i2 = 0; i2 < node.childNodes.length; i2++) { - walk(node.childNodes[i2]); - } - if (/^(pre|p)$/i.test(node.nodeName)) { - extraLinebreak = true; - } - if (isBlock) { - closing = true; - } - } else if (node.nodeType == 3) { - addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")); - } - } - for (;;) { - walk(from); - if (from == to) { - break; - } - from = from.nextSibling; - extraLinebreak = false; - } - return text; - } - function domToPos(cm, node, offset) { - var lineNode; - if (node == cm.display.lineDiv) { - lineNode = cm.display.lineDiv.childNodes[offset]; - if (!lineNode) { - return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); - } - node = null; - offset = 0; - } else { - for (lineNode = node;; lineNode = lineNode.parentNode) { - if (!lineNode || lineNode == cm.display.lineDiv) { - return null; - } - if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { - break; - } - } - } - for (var i2 = 0; i2 < cm.display.view.length; i2++) { - var lineView = cm.display.view[i2]; - if (lineView.node == lineNode) { - return locateNodeInLineView(lineView, node, offset); - } - } - } - function locateNodeInLineView(lineView, node, offset) { - var wrapper = lineView.text.firstChild, - bad = false; - if (!node || !contains(wrapper, node)) { - return badPos(Pos(lineNo(lineView.line), 0), true); - } - if (node == wrapper) { - bad = true; - node = wrapper.childNodes[offset]; - offset = 0; - if (!node) { - var line = lineView.rest ? lst(lineView.rest) : lineView.line; - return badPos(Pos(lineNo(line), line.text.length), bad); - } - } - var textNode = node.nodeType == 3 ? node : null, - topNode = node; - if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { - textNode = node.firstChild; - if (offset) { - offset = textNode.nodeValue.length; - } - } - while (topNode.parentNode != wrapper) { - topNode = topNode.parentNode; - } - var measure = lineView.measure, - maps = measure.maps; - function find(textNode2, topNode2, offset2) { - for (var i2 = -1; i2 < (maps ? maps.length : 0); i2++) { - var map2 = i2 < 0 ? measure.map : maps[i2]; - for (var j = 0; j < map2.length; j += 3) { - var curNode = map2[j + 2]; - if (curNode == textNode2 || curNode == topNode2) { - var line2 = lineNo(i2 < 0 ? lineView.line : lineView.rest[i2]); - var ch = map2[j] + offset2; - if (offset2 < 0 || curNode != textNode2) { - ch = map2[j + (offset2 ? 1 : 0)]; - } - return Pos(line2, ch); - } - } - } - } - var found = find(textNode, topNode, offset); - if (found) { - return badPos(found, bad); - } - for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { - found = find(after, after.firstChild, 0); - if (found) { - return badPos(Pos(found.line, found.ch - dist), bad); - } else { - dist += after.textContent.length; - } - } - for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { - found = find(before, before.firstChild, -1); - if (found) { - return badPos(Pos(found.line, found.ch + dist$1), bad); - } else { - dist$1 += before.textContent.length; - } - } - } - var TextareaInput = function (cm) { - this.cm = cm; - this.prevInput = ""; - this.pollingFast = false; - this.polling = new Delayed(); - this.hasSelection = false; - this.composing = null; - }; - TextareaInput.prototype.init = function (display) { - var this$1$1 = this; - var input = this, - cm = this.cm; - this.createField(display); - var te = this.textarea; - display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); - if (ios) { - te.style.width = "0px"; - } - on(te, "input", function () { - if (ie && ie_version >= 9 && this$1$1.hasSelection) { - this$1$1.hasSelection = null; - } - input.poll(); - }); - on(te, "paste", function (e) { - if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { - return; - } - cm.state.pasteIncoming = + /* @__PURE__ */new Date(); - input.fastPoll(); - }); - function prepareCopyCut(e) { - if (signalDOMEvent(cm, e)) { - return; - } - if (cm.somethingSelected()) { - setLastCopied({ - lineWise: false, - text: cm.getSelections() - }); - } else if (!cm.options.lineWiseCopyCut) { - return; - } else { - var ranges = copyableRanges(cm); - setLastCopied({ - lineWise: true, - text: ranges.text - }); - if (e.type == "cut") { - cm.setSelections(ranges.ranges, null, sel_dontScroll); - } else { - input.prevInput = ""; - te.value = ranges.text.join("\n"); - selectInput(te); - } - } - if (e.type == "cut") { - cm.state.cutIncoming = + /* @__PURE__ */new Date(); - } - } - on(te, "cut", prepareCopyCut); - on(te, "copy", prepareCopyCut); - on(display.scroller, "paste", function (e) { - if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { - return; - } - if (!te.dispatchEvent) { - cm.state.pasteIncoming = + /* @__PURE__ */new Date(); - input.focus(); - return; - } - var event = new Event("paste"); - event.clipboardData = e.clipboardData; - te.dispatchEvent(event); - }); - on(display.lineSpace, "selectstart", function (e) { - if (!eventInWidget(display, e)) { - e_preventDefault(e); - } - }); - on(te, "compositionstart", function () { - var start = cm.getCursor("from"); - if (input.composing) { - input.composing.range.clear(); - } - input.composing = { - start, - range: cm.markText(start, cm.getCursor("to"), { - className: "CodeMirror-composing" - }) - }; - }); - on(te, "compositionend", function () { - if (input.composing) { - input.poll(); - input.composing.range.clear(); - input.composing = null; - } - }); - }; - TextareaInput.prototype.createField = function (_display) { - this.wrapper = hiddenTextarea(); - this.textarea = this.wrapper.firstChild; - }; - TextareaInput.prototype.screenReaderLabelChanged = function (label) { - if (label) { - this.textarea.setAttribute("aria-label", label); - } else { - this.textarea.removeAttribute("aria-label"); - } - }; - TextareaInput.prototype.prepareSelection = function () { - var cm = this.cm, - display = cm.display, - doc = cm.doc; - var result = prepareSelection(cm); - if (cm.options.moveInputWithCursor) { - var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); - var wrapOff = display.wrapper.getBoundingClientRect(), - lineOff = display.lineDiv.getBoundingClientRect(); - result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top)); - result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left)); - } - return result; - }; - TextareaInput.prototype.showSelection = function (drawn) { - var cm = this.cm, - display = cm.display; - removeChildrenAndAdd(display.cursorDiv, drawn.cursors); - removeChildrenAndAdd(display.selectionDiv, drawn.selection); - if (drawn.teTop != null) { - this.wrapper.style.top = drawn.teTop + "px"; - this.wrapper.style.left = drawn.teLeft + "px"; - } - }; - TextareaInput.prototype.reset = function (typing) { - if (this.contextMenuPending || this.composing) { - return; - } - var cm = this.cm; - if (cm.somethingSelected()) { - this.prevInput = ""; - var content = cm.getSelection(); - this.textarea.value = content; - if (cm.state.focused) { - selectInput(this.textarea); - } - if (ie && ie_version >= 9) { - this.hasSelection = content; - } - } else if (!typing) { - this.prevInput = this.textarea.value = ""; - if (ie && ie_version >= 9) { - this.hasSelection = null; - } - } - }; - TextareaInput.prototype.getField = function () { - return this.textarea; - }; - TextareaInput.prototype.supportsTouch = function () { - return false; - }; - TextareaInput.prototype.focus = function () { - if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { - try { - this.textarea.focus(); - } catch (e) {} - } - }; - TextareaInput.prototype.blur = function () { - this.textarea.blur(); - }; - TextareaInput.prototype.resetPosition = function () { - this.wrapper.style.top = this.wrapper.style.left = 0; - }; - TextareaInput.prototype.receivedFocus = function () { - this.slowPoll(); - }; - TextareaInput.prototype.slowPoll = function () { - var this$1$1 = this; - if (this.pollingFast) { - return; - } - this.polling.set(this.cm.options.pollInterval, function () { - this$1$1.poll(); - if (this$1$1.cm.state.focused) { - this$1$1.slowPoll(); - } - }); - }; - TextareaInput.prototype.fastPoll = function () { - var missed = false, - input = this; - input.pollingFast = true; - function p() { - var changed = input.poll(); - if (!changed && !missed) { - missed = true; - input.polling.set(60, p); - } else { - input.pollingFast = false; - input.slowPoll(); - } - } - input.polling.set(20, p); - }; - TextareaInput.prototype.poll = function () { - var this$1$1 = this; - var cm = this.cm, - input = this.textarea, - prevInput = this.prevInput; - if (this.contextMenuPending || !cm.state.focused || hasSelection(input) && !prevInput && !this.composing || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) { - return false; - } - var text = input.value; - if (text == prevInput && !cm.somethingSelected()) { - return false; - } - if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\uf700-\uf7ff]/.test(text)) { - cm.display.input.reset(); - return false; - } - if (cm.doc.sel == cm.display.selForContextMenu) { - var first = text.charCodeAt(0); - if (first == 8203 && !prevInput) { - prevInput = "​"; - } - if (first == 8666) { - this.reset(); - return this.cm.execCommand("undo"); - } - } - var same = 0, - l = Math.min(prevInput.length, text.length); - while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { - ++same; - } - runInOp(cm, function () { - applyTextInput(cm, text.slice(same), prevInput.length - same, null, this$1$1.composing ? "*compose" : null); - if (text.length > 1e3 || text.indexOf("\n") > -1) { - input.value = this$1$1.prevInput = ""; - } else { - this$1$1.prevInput = text; - } - if (this$1$1.composing) { - this$1$1.composing.range.clear(); - this$1$1.composing.range = cm.markText(this$1$1.composing.start, cm.getCursor("to"), { - className: "CodeMirror-composing" - }); - } - }); - return true; - }; - TextareaInput.prototype.ensurePolled = function () { - if (this.pollingFast && this.poll()) { - this.pollingFast = false; - } - }; - TextareaInput.prototype.onKeyPress = function () { - if (ie && ie_version >= 9) { - this.hasSelection = null; - } - this.fastPoll(); - }; - TextareaInput.prototype.onContextMenu = function (e) { - var input = this, - cm = input.cm, - display = cm.display, - te = input.textarea; - if (input.contextMenuPending) { - input.contextMenuPending(); - } - var pos = posFromMouse(cm, e), - scrollPos = display.scroller.scrollTop; - if (!pos || presto) { - return; - } - var reset = cm.options.resetSelectionOnContextMenu; - if (reset && cm.doc.sel.contains(pos) == -1) { - operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); - } - var oldCSS = te.style.cssText, - oldWrapperCSS = input.wrapper.style.cssText; - var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect(); - input.wrapper.style.cssText = "position: static"; - te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; - var oldScrollY; - if (webkit) { - oldScrollY = window.scrollY; - } - display.input.focus(); - if (webkit) { - window.scrollTo(null, oldScrollY); - } - display.input.reset(); - if (!cm.somethingSelected()) { - te.value = input.prevInput = " "; - } - input.contextMenuPending = rehide; - display.selForContextMenu = cm.doc.sel; - clearTimeout(display.detectingSelectAll); - function prepareSelectAllHack() { - if (te.selectionStart != null) { - var selected = cm.somethingSelected(); - var extval = "​" + (selected ? te.value : ""); - te.value = "⇚"; - te.value = extval; - input.prevInput = selected ? "" : "​"; - te.selectionStart = 1; - te.selectionEnd = extval.length; - display.selForContextMenu = cm.doc.sel; - } - } - function rehide() { - if (input.contextMenuPending != rehide) { - return; - } - input.contextMenuPending = false; - input.wrapper.style.cssText = oldWrapperCSS; - te.style.cssText = oldCSS; - if (ie && ie_version < 9) { - display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); - } - if (te.selectionStart != null) { - if (!ie || ie && ie_version < 9) { - prepareSelectAllHack(); - } - var i2 = 0, - poll = function () { - if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == "​") { - operation(cm, selectAll)(cm); - } else if (i2++ < 10) { - display.detectingSelectAll = setTimeout(poll, 500); - } else { - display.selForContextMenu = null; - display.input.reset(); - } - }; - display.detectingSelectAll = setTimeout(poll, 200); - } - } - if (ie && ie_version >= 9) { - prepareSelectAllHack(); - } - if (captureRightClick) { - e_stop(e); - var mouseup = function () { - off(window, "mouseup", mouseup); - setTimeout(rehide, 20); - }; - on(window, "mouseup", mouseup); - } else { - setTimeout(rehide, 50); - } - }; - TextareaInput.prototype.readOnlyChanged = function (val) { - if (!val) { - this.reset(); - } - this.textarea.disabled = val == "nocursor"; - this.textarea.readOnly = !!val; - }; - TextareaInput.prototype.setUneditable = function () {}; - TextareaInput.prototype.needsContentAttribute = false; - function fromTextArea(textarea, options) { - options = options ? copyObj(options) : {}; - options.value = textarea.value; - if (!options.tabindex && textarea.tabIndex) { - options.tabindex = textarea.tabIndex; - } - if (!options.placeholder && textarea.placeholder) { - options.placeholder = textarea.placeholder; - } - if (options.autofocus == null) { - var hasFocus = activeElt(); - options.autofocus = hasFocus == textarea || textarea.getAttribute("autofocus") != null && hasFocus == document.body; - } - function save() { - textarea.value = cm.getValue(); - } - var realSubmit; - if (textarea.form) { - on(textarea.form, "submit", save); - if (!options.leaveSubmitMethodAlone) { - var form = textarea.form; - realSubmit = form.submit; - try { - var wrappedSubmit = form.submit = function () { - save(); - form.submit = realSubmit; - form.submit(); - form.submit = wrappedSubmit; - }; - } catch (e) {} - } - } - options.finishInit = function (cm2) { - cm2.save = save; - cm2.getTextArea = function () { - return textarea; - }; - cm2.toTextArea = function () { - cm2.toTextArea = isNaN; - save(); - textarea.parentNode.removeChild(cm2.getWrapperElement()); - textarea.style.display = ""; - if (textarea.form) { - off(textarea.form, "submit", save); - if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == "function") { - textarea.form.submit = realSubmit; - } - } - }; - }; - textarea.style.display = "none"; - var cm = CodeMirror(function (node) { - return textarea.parentNode.insertBefore(node, textarea.nextSibling); - }, options); - return cm; - } - function addLegacyProps(CodeMirror2) { - CodeMirror2.off = off; - CodeMirror2.on = on; - CodeMirror2.wheelEventPixels = wheelEventPixels; - CodeMirror2.Doc = Doc; - CodeMirror2.splitLines = splitLinesAuto; - CodeMirror2.countColumn = countColumn; - CodeMirror2.findColumn = findColumn; - CodeMirror2.isWordChar = isWordCharBasic; - CodeMirror2.Pass = Pass; - CodeMirror2.signal = signal; - CodeMirror2.Line = Line; - CodeMirror2.changeEnd = changeEnd; - CodeMirror2.scrollbarModel = scrollbarModel; - CodeMirror2.Pos = Pos; - CodeMirror2.cmpPos = cmp; - CodeMirror2.modes = modes; - CodeMirror2.mimeModes = mimeModes; - CodeMirror2.resolveMode = resolveMode; - CodeMirror2.getMode = getMode; - CodeMirror2.modeExtensions = modeExtensions; - CodeMirror2.extendMode = extendMode; - CodeMirror2.copyState = copyState; - CodeMirror2.startState = startState; - CodeMirror2.innerMode = innerMode; - CodeMirror2.commands = commands; - CodeMirror2.keyMap = keyMap; - CodeMirror2.keyName = keyName; - CodeMirror2.isModifierKey = isModifierKey; - CodeMirror2.lookupKey = lookupKey; - CodeMirror2.normalizeKeyMap = normalizeKeyMap; - CodeMirror2.StringStream = StringStream; - CodeMirror2.SharedTextMarker = SharedTextMarker; - CodeMirror2.TextMarker = TextMarker; - CodeMirror2.LineWidget = LineWidget; - CodeMirror2.e_preventDefault = e_preventDefault; - CodeMirror2.e_stopPropagation = e_stopPropagation; - CodeMirror2.e_stop = e_stop; - CodeMirror2.addClass = addClass; - CodeMirror2.contains = contains; - CodeMirror2.rmClass = rmClass; - CodeMirror2.keyNames = keyNames; - } - defineOptions(CodeMirror); - addEditorMethods(CodeMirror); - var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); - for (var prop in Doc.prototype) { - if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) { - CodeMirror.prototype[prop] = /* @__PURE__ */function (method) { - return function () { - return method.apply(this.doc, arguments); - }; - }(Doc.prototype[prop]); - } - } - eventMixin(Doc); - CodeMirror.inputStyles = { - "textarea": TextareaInput, - "contenteditable": ContentEditableInput - }; - CodeMirror.defineMode = function (name) { - if (!CodeMirror.defaults.mode && name != "null") { - CodeMirror.defaults.mode = name; - } - defineMode.apply(this, arguments); - }; - CodeMirror.defineMIME = defineMIME; - CodeMirror.defineMode("null", function () { - return { - token: function (stream) { - return stream.skipToEnd(); - } - }; - }); - CodeMirror.defineMIME("text/plain", "null"); - CodeMirror.defineExtension = function (name, func) { - CodeMirror.prototype[name] = func; - }; - CodeMirror.defineDocExtension = function (name, func) { - Doc.prototype[name] = func; - }; - CodeMirror.fromTextArea = fromTextArea; - addLegacyProps(CodeMirror); - CodeMirror.version = "5.65.3"; - return CodeMirror; - }); - })(codemirror); - return codemirror.exports; -} -exports.getDefaultExportFromCjs = getDefaultExportFromCjs; -exports.requireCodemirror = requireCodemirror; - -/***/ }), - -/***/ "../../graphiql-react/dist/comment.cjs.js": -/*!************************************************!*\ - !*** ../../graphiql-react/dist/comment.cjs.js ***! - \************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var comment$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - var noOptions = {}; - var nonWS = /[^\s\u00a0]/; - var Pos = CodeMirror.Pos, - cmp = CodeMirror.cmpPos; - function firstNonWS(str) { - var found = str.search(nonWS); - return found == -1 ? 0 : found; - } - CodeMirror.commands.toggleComment = function (cm) { - cm.toggleComment(); - }; - CodeMirror.defineExtension("toggleComment", function (options) { - if (!options) options = noOptions; - var cm = this; - var minLine = Infinity, - ranges = this.listSelections(), - mode = null; - for (var i = ranges.length - 1; i >= 0; i--) { - var from = ranges[i].from(), - to = ranges[i].to(); - if (from.line >= minLine) continue; - if (to.line >= minLine) to = Pos(minLine, 0); - minLine = from.line; - if (mode == null) { - if (cm.uncomment(from, to, options)) mode = "un";else { - cm.lineComment(from, to, options); - mode = "line"; - } - } else if (mode == "un") { - cm.uncomment(from, to, options); - } else { - cm.lineComment(from, to, options); - } - } - }); - function probablyInsideString(cm, pos, line) { - return /\bstring\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\'\"\`]/.test(line); - } - function getMode(cm, pos) { - var mode = cm.getMode(); - return mode.useInnerComments === false || !mode.innerMode ? mode : cm.getModeAt(pos); - } - CodeMirror.defineExtension("lineComment", function (from, to, options) { - if (!options) options = noOptions; - var self = this, - mode = getMode(self, from); - var firstLine = self.getLine(from.line); - if (firstLine == null || probablyInsideString(self, from, firstLine)) return; - var commentString = options.lineComment || mode.lineComment; - if (!commentString) { - if (options.blockCommentStart || mode.blockCommentStart) { - options.fullLines = true; - self.blockComment(from, to, options); - } - return; - } - var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1); - var pad = options.padding == null ? " " : options.padding; - var blankLines = options.commentBlankLines || from.line == to.line; - self.operation(function () { - if (options.indent) { - var baseString = null; - for (var i = from.line; i < end; ++i) { - var line = self.getLine(i); - var whitespace = line.slice(0, firstNonWS(line)); - if (baseString == null || baseString.length > whitespace.length) { - baseString = whitespace; - } - } - for (var i = from.line; i < end; ++i) { - var line = self.getLine(i), - cut = baseString.length; - if (!blankLines && !nonWS.test(line)) continue; - if (line.slice(0, cut) != baseString) cut = firstNonWS(line); - self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut)); - } - } else { - for (var i = from.line; i < end; ++i) { - if (blankLines || nonWS.test(self.getLine(i))) self.replaceRange(commentString + pad, Pos(i, 0)); - } - } - }); - }); - CodeMirror.defineExtension("blockComment", function (from, to, options) { - if (!options) options = noOptions; - var self = this, - mode = getMode(self, from); - var startString = options.blockCommentStart || mode.blockCommentStart; - var endString = options.blockCommentEnd || mode.blockCommentEnd; - if (!startString || !endString) { - if ((options.lineComment || mode.lineComment) && options.fullLines != false) self.lineComment(from, to, options); - return; - } - if (/\bcomment\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return; - var end = Math.min(to.line, self.lastLine()); - if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end; - var pad = options.padding == null ? " " : options.padding; - if (from.line > end) return; - self.operation(function () { - if (options.fullLines != false) { - var lastLineHasText = nonWS.test(self.getLine(end)); - self.replaceRange(pad + endString, Pos(end)); - self.replaceRange(startString + pad, Pos(from.line, 0)); - var lead = options.blockCommentLead || mode.blockCommentLead; - if (lead != null) { - for (var i = from.line + 1; i <= end; ++i) if (i != end || lastLineHasText) self.replaceRange(lead + pad, Pos(i, 0)); - } - } else { - var atCursor = cmp(self.getCursor("to"), to) == 0, - empty = !self.somethingSelected(); - self.replaceRange(endString, to); - if (atCursor) self.setSelection(empty ? to : self.getCursor("from"), to); - self.replaceRange(startString, from); - } - }); - }); - CodeMirror.defineExtension("uncomment", function (from, to, options) { - if (!options) options = noOptions; - var self = this, - mode = getMode(self, from); - var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), - start = Math.min(from.line, end); - var lineString = options.lineComment || mode.lineComment, - lines = []; - var pad = options.padding == null ? " " : options.padding, - didSomething; - lineComment: { - if (!lineString) break lineComment; - for (var i = start; i <= end; ++i) { - var line = self.getLine(i); - var found = line.indexOf(lineString); - if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1; - if (found == -1 && nonWS.test(line)) break lineComment; - if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment; - lines.push(line); - } - self.operation(function () { - for (var i2 = start; i2 <= end; ++i2) { - var line2 = lines[i2 - start]; - var pos = line2.indexOf(lineString), - endPos = pos + lineString.length; - if (pos < 0) continue; - if (line2.slice(endPos, endPos + pad.length) == pad) endPos += pad.length; - didSomething = true; - self.replaceRange("", Pos(i2, pos), Pos(i2, endPos)); - } - }); - if (didSomething) return true; - } - var startString = options.blockCommentStart || mode.blockCommentStart; - var endString = options.blockCommentEnd || mode.blockCommentEnd; - if (!startString || !endString) return false; - var lead = options.blockCommentLead || mode.blockCommentLead; - var startLine = self.getLine(start), - open = startLine.indexOf(startString); - if (open == -1) return false; - var endLine = end == start ? startLine : self.getLine(end); - var close = endLine.indexOf(endString, end == start ? open + startString.length : 0); - var insideStart = Pos(start, open + 1), - insideEnd = Pos(end, close + 1); - if (close == -1 || !/comment/.test(self.getTokenTypeAt(insideStart)) || !/comment/.test(self.getTokenTypeAt(insideEnd)) || self.getRange(insideStart, insideEnd, "\n").indexOf(endString) > -1) return false; - var lastStart = startLine.lastIndexOf(startString, from.ch); - var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length); - if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false; - firstEnd = endLine.indexOf(endString, to.ch); - var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch); - lastStart = firstEnd == -1 || almostLastStart == -1 ? -1 : to.ch + almostLastStart; - if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false; - self.operation(function () { - self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)), Pos(end, close + endString.length)); - var openEnd = open + startString.length; - if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length; - self.replaceRange("", Pos(start, open), Pos(start, openEnd)); - if (lead) for (var i2 = start + 1; i2 <= end; ++i2) { - var line2 = self.getLine(i2), - found2 = line2.indexOf(lead); - if (found2 == -1 || nonWS.test(line2.slice(0, found2))) continue; - var foundEnd = found2 + lead.length; - if (pad && line2.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length; - self.replaceRange("", Pos(i2, found2), Pos(i2, foundEnd)); - } - }); - return true; - }); - }); -})(); -var commentExports = comment$2.exports; -const comment = /* @__PURE__ */codemirror.getDefaultExportFromCjs(commentExports); -const comment$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: comment -}, [commentExports]); -exports.comment = comment$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/dialog.cjs.js": -/*!***********************************************!*\ - !*** ../../graphiql-react/dist/dialog.cjs.js ***! - \***********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var dialog$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - function dialogDiv(cm, template, bottom) { - var wrap = cm.getWrapperElement(); - var dialog2; - dialog2 = wrap.appendChild(document.createElement("div")); - if (bottom) dialog2.className = "CodeMirror-dialog CodeMirror-dialog-bottom";else dialog2.className = "CodeMirror-dialog CodeMirror-dialog-top"; - if (typeof template == "string") { - dialog2.innerHTML = template; - } else { - dialog2.appendChild(template); - } - CodeMirror.addClass(wrap, "dialog-opened"); - return dialog2; - } - function closeNotification(cm, newVal) { - if (cm.state.currentNotificationClose) cm.state.currentNotificationClose(); - cm.state.currentNotificationClose = newVal; - } - CodeMirror.defineExtension("openDialog", function (template, callback, options) { - if (!options) options = {}; - closeNotification(this, null); - var dialog2 = dialogDiv(this, template, options.bottom); - var closed = false, - me = this; - function close(newVal) { - if (typeof newVal == "string") { - inp.value = newVal; - } else { - if (closed) return; - closed = true; - CodeMirror.rmClass(dialog2.parentNode, "dialog-opened"); - dialog2.parentNode.removeChild(dialog2); - me.focus(); - if (options.onClose) options.onClose(dialog2); - } - } - var inp = dialog2.getElementsByTagName("input")[0], - button; - if (inp) { - inp.focus(); - if (options.value) { - inp.value = options.value; - if (options.selectValueOnOpen !== false) { - inp.select(); - } - } - if (options.onInput) CodeMirror.on(inp, "input", function (e) { - options.onInput(e, inp.value, close); - }); - if (options.onKeyUp) CodeMirror.on(inp, "keyup", function (e) { - options.onKeyUp(e, inp.value, close); - }); - CodeMirror.on(inp, "keydown", function (e) { - if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { - return; - } - if (e.keyCode == 27 || options.closeOnEnter !== false && e.keyCode == 13) { - inp.blur(); - CodeMirror.e_stop(e); - close(); - } - if (e.keyCode == 13) callback(inp.value, e); - }); - if (options.closeOnBlur !== false) CodeMirror.on(dialog2, "focusout", function (evt) { - if (evt.relatedTarget !== null) close(); - }); - } else if (button = dialog2.getElementsByTagName("button")[0]) { - CodeMirror.on(button, "click", function () { - close(); - me.focus(); - }); - if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close); - button.focus(); - } - return close; - }); - CodeMirror.defineExtension("openConfirm", function (template, callbacks, options) { - closeNotification(this, null); - var dialog2 = dialogDiv(this, template, options && options.bottom); - var buttons = dialog2.getElementsByTagName("button"); - var closed = false, - me = this, - blurring = 1; - function close() { - if (closed) return; - closed = true; - CodeMirror.rmClass(dialog2.parentNode, "dialog-opened"); - dialog2.parentNode.removeChild(dialog2); - me.focus(); - } - buttons[0].focus(); - for (var i = 0; i < buttons.length; ++i) { - var b = buttons[i]; - (function (callback) { - CodeMirror.on(b, "click", function (e) { - CodeMirror.e_preventDefault(e); - close(); - if (callback) callback(me); - }); - })(callbacks[i]); - CodeMirror.on(b, "blur", function () { - --blurring; - setTimeout(function () { - if (blurring <= 0) close(); - }, 200); - }); - CodeMirror.on(b, "focus", function () { - ++blurring; - }); - } - }); - CodeMirror.defineExtension("openNotification", function (template, options) { - closeNotification(this, close); - var dialog2 = dialogDiv(this, template, options && options.bottom); - var closed = false, - doneTimer; - var duration = options && typeof options.duration !== "undefined" ? options.duration : 5e3; - function close() { - if (closed) return; - closed = true; - clearTimeout(doneTimer); - CodeMirror.rmClass(dialog2.parentNode, "dialog-opened"); - dialog2.parentNode.removeChild(dialog2); - } - CodeMirror.on(dialog2, "click", function (e) { - CodeMirror.e_preventDefault(e); - close(); - }); - if (duration) doneTimer = setTimeout(close, duration); - return close; - }); - }); -})(); -var dialogExports = dialog$2.exports; -const dialog = /* @__PURE__ */codemirror.getDefaultExportFromCjs(dialogExports); -const dialog$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: dialog -}, [dialogExports]); -exports.dialog = dialog$1; -exports.dialogExports = dialogExports; - -/***/ }), - -/***/ "../../graphiql-react/dist/foldgutter.cjs.js": -/*!***************************************************!*\ - !*** ../../graphiql-react/dist/foldgutter.cjs.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var foldgutter$2 = { - exports: {} -}; -var foldcode = { - exports: {} -}; -var hasRequiredFoldcode; -function requireFoldcode() { - if (hasRequiredFoldcode) return foldcode.exports; - hasRequiredFoldcode = 1; - (function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - function doFold(cm, pos, options, force) { - if (options && options.call) { - var finder = options; - options = null; - } else { - var finder = getOption(cm, options, "rangeFinder"); - } - if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0); - var minSize = getOption(cm, options, "minFoldSize"); - function getRange(allowFolded) { - var range2 = finder(cm, pos); - if (!range2 || range2.to.line - range2.from.line < minSize) return null; - if (force === "fold") return range2; - var marks = cm.findMarksAt(range2.from); - for (var i = 0; i < marks.length; ++i) { - if (marks[i].__isFold) { - if (!allowFolded) return null; - range2.cleared = true; - marks[i].clear(); - } - } - return range2; - } - var range = getRange(true); - if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) { - pos = CodeMirror.Pos(pos.line - 1, 0); - range = getRange(false); - } - if (!range || range.cleared || force === "unfold") return; - var myWidget = makeWidget(cm, options, range); - CodeMirror.on(myWidget, "mousedown", function (e) { - myRange.clear(); - CodeMirror.e_preventDefault(e); - }); - var myRange = cm.markText(range.from, range.to, { - replacedWith: myWidget, - clearOnEnter: getOption(cm, options, "clearOnEnter"), - __isFold: true - }); - myRange.on("clear", function (from, to) { - CodeMirror.signal(cm, "unfold", cm, from, to); - }); - CodeMirror.signal(cm, "fold", cm, range.from, range.to); - } - function makeWidget(cm, options, range) { - var widget = getOption(cm, options, "widget"); - if (typeof widget == "function") { - widget = widget(range.from, range.to); - } - if (typeof widget == "string") { - var text = document.createTextNode(widget); - widget = document.createElement("span"); - widget.appendChild(text); - widget.className = "CodeMirror-foldmarker"; - } else if (widget) { - widget = widget.cloneNode(true); - } - return widget; - } - CodeMirror.newFoldFunction = function (rangeFinder, widget) { - return function (cm, pos) { - doFold(cm, pos, { - rangeFinder, - widget - }); - }; - }; - CodeMirror.defineExtension("foldCode", function (pos, options, force) { - doFold(this, pos, options, force); - }); - CodeMirror.defineExtension("isFolded", function (pos) { - var marks = this.findMarksAt(pos); - for (var i = 0; i < marks.length; ++i) if (marks[i].__isFold) return true; - }); - CodeMirror.commands.toggleFold = function (cm) { - cm.foldCode(cm.getCursor()); - }; - CodeMirror.commands.fold = function (cm) { - cm.foldCode(cm.getCursor(), null, "fold"); - }; - CodeMirror.commands.unfold = function (cm) { - cm.foldCode(cm.getCursor(), { - scanUp: false - }, "unfold"); - }; - CodeMirror.commands.foldAll = function (cm) { - cm.operation(function () { - for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) cm.foldCode(CodeMirror.Pos(i, 0), { - scanUp: false - }, "fold"); - }); - }; - CodeMirror.commands.unfoldAll = function (cm) { - cm.operation(function () { - for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) cm.foldCode(CodeMirror.Pos(i, 0), { - scanUp: false - }, "unfold"); - }); - }; - CodeMirror.registerHelper("fold", "combine", function () { - var funcs = Array.prototype.slice.call(arguments, 0); - return function (cm, start) { - for (var i = 0; i < funcs.length; ++i) { - var found = funcs[i](cm, start); - if (found) return found; - } - }; - }); - CodeMirror.registerHelper("fold", "auto", function (cm, start) { - var helpers = cm.getHelpers(start, "fold"); - for (var i = 0; i < helpers.length; i++) { - var cur = helpers[i](cm, start); - if (cur) return cur; - } - }); - var defaultOptions = { - rangeFinder: CodeMirror.fold.auto, - widget: "↔", - minFoldSize: 0, - scanUp: false, - clearOnEnter: true - }; - CodeMirror.defineOption("foldOptions", null); - function getOption(cm, options, name) { - if (options && options[name] !== void 0) return options[name]; - var editorOptions = cm.options.foldOptions; - if (editorOptions && editorOptions[name] !== void 0) return editorOptions[name]; - return defaultOptions[name]; - } - CodeMirror.defineExtension("foldOption", function (options, name) { - return getOption(this, options, name); - }); - }); - })(); - return foldcode.exports; -} -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror(), requireFoldcode()); - })(function (CodeMirror) { - CodeMirror.defineOption("foldGutter", false, function (cm, val, old) { - if (old && old != CodeMirror.Init) { - cm.clearGutter(cm.state.foldGutter.options.gutter); - cm.state.foldGutter = null; - cm.off("gutterClick", onGutterClick); - cm.off("changes", onChange); - cm.off("viewportChange", onViewportChange); - cm.off("fold", onFold); - cm.off("unfold", onFold); - cm.off("swapDoc", onChange); - } - if (val) { - cm.state.foldGutter = new State(parseOptions(val)); - updateInViewport(cm); - cm.on("gutterClick", onGutterClick); - cm.on("changes", onChange); - cm.on("viewportChange", onViewportChange); - cm.on("fold", onFold); - cm.on("unfold", onFold); - cm.on("swapDoc", onChange); - } - }); - var Pos = CodeMirror.Pos; - function State(options) { - this.options = options; - this.from = this.to = 0; - } - function parseOptions(opts) { - if (opts === true) opts = {}; - if (opts.gutter == null) opts.gutter = "CodeMirror-foldgutter"; - if (opts.indicatorOpen == null) opts.indicatorOpen = "CodeMirror-foldgutter-open"; - if (opts.indicatorFolded == null) opts.indicatorFolded = "CodeMirror-foldgutter-folded"; - return opts; - } - function isFolded(cm, line) { - var marks = cm.findMarks(Pos(line, 0), Pos(line + 1, 0)); - for (var i = 0; i < marks.length; ++i) { - if (marks[i].__isFold) { - var fromPos = marks[i].find(-1); - if (fromPos && fromPos.line === line) return marks[i]; - } - } - } - function marker(spec) { - if (typeof spec == "string") { - var elt = document.createElement("div"); - elt.className = spec + " CodeMirror-guttermarker-subtle"; - return elt; - } else { - return spec.cloneNode(true); - } - } - function updateFoldInfo(cm, from, to) { - var opts = cm.state.foldGutter.options, - cur = from - 1; - var minSize = cm.foldOption(opts, "minFoldSize"); - var func = cm.foldOption(opts, "rangeFinder"); - var clsFolded = typeof opts.indicatorFolded == "string" && classTest(opts.indicatorFolded); - var clsOpen = typeof opts.indicatorOpen == "string" && classTest(opts.indicatorOpen); - cm.eachLine(from, to, function (line) { - ++cur; - var mark = null; - var old = line.gutterMarkers; - if (old) old = old[opts.gutter]; - if (isFolded(cm, cur)) { - if (clsFolded && old && clsFolded.test(old.className)) return; - mark = marker(opts.indicatorFolded); - } else { - var pos = Pos(cur, 0); - var range = func && func(cm, pos); - if (range && range.to.line - range.from.line >= minSize) { - if (clsOpen && old && clsOpen.test(old.className)) return; - mark = marker(opts.indicatorOpen); - } - } - if (!mark && !old) return; - cm.setGutterMarker(line, opts.gutter, mark); - }); - } - function classTest(cls) { - return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); - } - function updateInViewport(cm) { - var vp = cm.getViewport(), - state = cm.state.foldGutter; - if (!state) return; - cm.operation(function () { - updateFoldInfo(cm, vp.from, vp.to); - }); - state.from = vp.from; - state.to = vp.to; - } - function onGutterClick(cm, line, gutter) { - var state = cm.state.foldGutter; - if (!state) return; - var opts = state.options; - if (gutter != opts.gutter) return; - var folded = isFolded(cm, line); - if (folded) folded.clear();else cm.foldCode(Pos(line, 0), opts); - } - function onChange(cm) { - var state = cm.state.foldGutter; - if (!state) return; - var opts = state.options; - state.from = state.to = 0; - clearTimeout(state.changeUpdate); - state.changeUpdate = setTimeout(function () { - updateInViewport(cm); - }, opts.foldOnChangeTimeSpan || 600); - } - function onViewportChange(cm) { - var state = cm.state.foldGutter; - if (!state) return; - var opts = state.options; - clearTimeout(state.changeUpdate); - state.changeUpdate = setTimeout(function () { - var vp = cm.getViewport(); - if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { - updateInViewport(cm); - } else { - cm.operation(function () { - if (vp.from < state.from) { - updateFoldInfo(cm, vp.from, state.from); - state.from = vp.from; - } - if (vp.to > state.to) { - updateFoldInfo(cm, state.to, vp.to); - state.to = vp.to; - } - }); - } - }, opts.updateViewportTimeSpan || 400); - } - function onFold(cm, from) { - var state = cm.state.foldGutter; - if (!state) return; - var line = from.line; - if (line >= state.from && line < state.to) updateFoldInfo(cm, line, line + 1); - } - }); -})(); -var foldgutterExports = foldgutter$2.exports; -const foldgutter = /* @__PURE__ */codemirror.getDefaultExportFromCjs(foldgutterExports); -const foldgutter$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: foldgutter -}, [foldgutterExports]); -exports.foldgutter = foldgutter$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/forEachState.cjs.js": -/*!*****************************************************!*\ - !*** ../../graphiql-react/dist/forEachState.cjs.js ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -function forEachState(stack, fn) { - const reverseStateStack = []; - let state = stack; - while (state === null || state === void 0 ? void 0 : state.kind) { - reverseStateStack.push(state); - state = state.prevState; - } - for (let i = reverseStateStack.length - 1; i >= 0; i--) { - fn(reverseStateStack[i]); - } -} -exports.forEachState = forEachState; - -/***/ }), - -/***/ "../../graphiql-react/dist/hint.cjs.js": -/*!*********************************************!*\ - !*** ../../graphiql-react/dist/hint.cjs.js ***! - \*********************************************/ +/***/ "../../codemirror-graphql/esm/hint.js": +/*!********************************************!*\ + !*** ../../codemirror-graphql/esm/hint.js ***! + \********************************************/ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { +"use strict"; -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -__webpack_require__(/*! ./show-hint.cjs.js */ "../../graphiql-react/dist/show-hint.cjs.js"); -const graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); -codemirror.CodeMirror.registerHelper("hint", "graphql", (editor, options) => { +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +__webpack_require__(/*! codemirror/addon/hint/show-hint.js */ "../../../node_modules/codemirror/addon/hint/show-hint.js"); +var _graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.registerHelper('hint', 'graphql', (editor, options) => { const { schema, externalFragments, @@ -68130,8 +73292,8 @@ codemirror.CodeMirror.registerHelper("hint", "graphql", (editor, options) => { const cur = editor.getCursor(); const token = editor.getTokenAt(cur); const tokenStart = token.type !== null && /"|\w/.test(token.string[0]) ? token.start : token.end; - const position = new graphqlLanguageService.Position(cur.line, tokenStart); - const rawResults = graphqlLanguageService.getAutocompleteSuggestions(schema, editor.getValue(), position, token, externalFragments, autocompleteOptions); + const position = new _graphqlLanguageService.Position(cur.line, tokenStart); + const rawResults = (0, _graphqlLanguageService.getAutocompleteSuggestions)(schema, editor.getValue(), position, token, externalFragments, autocompleteOptions); const results = { list: rawResults.map(item => { var _a; @@ -68153,26 +73315,611 @@ codemirror.CodeMirror.registerHelper("hint", "graphql", (editor, options) => { } }; if ((results === null || results === void 0 ? void 0 : results.list) && results.list.length > 0) { - results.from = codemirror.CodeMirror.Pos(results.from.line, results.from.ch); - results.to = codemirror.CodeMirror.Pos(results.to.line, results.to.ch); - codemirror.CodeMirror.signal(editor, "hasCompletion", editor, results, token); + results.from = _codemirror.default.Pos(results.from.line, results.from.ch); + results.to = _codemirror.default.Pos(results.to.line, results.to.ch); + _codemirror.default.signal(editor, 'hasCompletion', editor, results, token); } return results; }); /***/ }), -/***/ "../../graphiql-react/dist/hint.cjs2.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/hint.cjs2.js ***! - \**********************************************/ +/***/ "../../codemirror-graphql/esm/info.js": +/*!********************************************!*\ + !*** ../../codemirror-graphql/esm/info.js ***! + \********************************************/ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { +"use strict"; -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -const forEachState = __webpack_require__(/*! ./forEachState.cjs.js */ "../../graphiql-react/dist/forEachState.cjs.js"); +var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _getTypeInfo = _interopRequireDefault(__webpack_require__(/*! ./utils/getTypeInfo */ "../../codemirror-graphql/esm/utils/getTypeInfo.js")); +var _SchemaReference = __webpack_require__(/*! ./utils/SchemaReference */ "../../codemirror-graphql/esm/utils/SchemaReference.js"); +__webpack_require__(/*! ./utils/info-addon */ "../../codemirror-graphql/esm/utils/info-addon.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.registerHelper('info', 'graphql', (token, options) => { + var _a; + if (!options.schema || !token.state) { + return; + } + const { + kind, + step + } = token.state; + const typeInfo = (0, _getTypeInfo.default)(options.schema, token.state); + if (kind === 'Field' && step === 0 && typeInfo.fieldDef || kind === 'AliasedField' && step === 2 && typeInfo.fieldDef || kind === 'ObjectField' && step === 0 && typeInfo.fieldDef) { + const header = document.createElement('div'); + header.className = 'CodeMirror-info-header'; + renderField(header, typeInfo, options); + const into = document.createElement('div'); + into.append(header); + renderDescription(into, options, typeInfo.fieldDef); + return into; + } + if (kind === 'Directive' && step === 1 && typeInfo.directiveDef) { + const header = document.createElement('div'); + header.className = 'CodeMirror-info-header'; + renderDirective(header, typeInfo, options); + const into = document.createElement('div'); + into.append(header); + renderDescription(into, options, typeInfo.directiveDef); + return into; + } + if (kind === 'Argument' && step === 0 && typeInfo.argDef) { + const header = document.createElement('div'); + header.className = 'CodeMirror-info-header'; + renderArg(header, typeInfo, options); + const into = document.createElement('div'); + into.append(header); + renderDescription(into, options, typeInfo.argDef); + return into; + } + if (kind === 'EnumValue' && ((_a = typeInfo.enumValue) === null || _a === void 0 ? void 0 : _a.description)) { + const header = document.createElement('div'); + header.className = 'CodeMirror-info-header'; + renderEnumValue(header, typeInfo, options); + const into = document.createElement('div'); + into.append(header); + renderDescription(into, options, typeInfo.enumValue); + return into; + } + if (kind === 'NamedType' && typeInfo.type && typeInfo.type.description) { + const header = document.createElement('div'); + header.className = 'CodeMirror-info-header'; + renderType(header, typeInfo, options, typeInfo.type); + const into = document.createElement('div'); + into.append(header); + renderDescription(into, options, typeInfo.type); + return into; + } +}); +function renderField(into, typeInfo, options) { + renderQualifiedField(into, typeInfo, options); + renderTypeAnnotation(into, typeInfo, options, typeInfo.type); +} +function renderQualifiedField(into, typeInfo, options) { + var _a; + const fieldName = ((_a = typeInfo.fieldDef) === null || _a === void 0 ? void 0 : _a.name) || ''; + text(into, fieldName, 'field-name', options, (0, _SchemaReference.getFieldReference)(typeInfo)); +} +function renderDirective(into, typeInfo, options) { + var _a; + const name = '@' + (((_a = typeInfo.directiveDef) === null || _a === void 0 ? void 0 : _a.name) || ''); + text(into, name, 'directive-name', options, (0, _SchemaReference.getDirectiveReference)(typeInfo)); +} +function renderArg(into, typeInfo, options) { + var _a; + const name = ((_a = typeInfo.argDef) === null || _a === void 0 ? void 0 : _a.name) || ''; + text(into, name, 'arg-name', options, (0, _SchemaReference.getArgumentReference)(typeInfo)); + renderTypeAnnotation(into, typeInfo, options, typeInfo.inputType); +} +function renderEnumValue(into, typeInfo, options) { + var _a; + const name = ((_a = typeInfo.enumValue) === null || _a === void 0 ? void 0 : _a.name) || ''; + renderType(into, typeInfo, options, typeInfo.inputType); + text(into, '.'); + text(into, name, 'enum-value', options, (0, _SchemaReference.getEnumValueReference)(typeInfo)); +} +function renderTypeAnnotation(into, typeInfo, options, t) { + const typeSpan = document.createElement('span'); + typeSpan.className = 'type-name-pill'; + if (t instanceof _graphql.GraphQLNonNull) { + renderType(typeSpan, typeInfo, options, t.ofType); + text(typeSpan, '!'); + } else if (t instanceof _graphql.GraphQLList) { + text(typeSpan, '['); + renderType(typeSpan, typeInfo, options, t.ofType); + text(typeSpan, ']'); + } else { + text(typeSpan, (t === null || t === void 0 ? void 0 : t.name) || '', 'type-name', options, (0, _SchemaReference.getTypeReference)(typeInfo, t)); + } + into.append(typeSpan); +} +function renderType(into, typeInfo, options, t) { + if (t instanceof _graphql.GraphQLNonNull) { + renderType(into, typeInfo, options, t.ofType); + text(into, '!'); + } else if (t instanceof _graphql.GraphQLList) { + text(into, '['); + renderType(into, typeInfo, options, t.ofType); + text(into, ']'); + } else { + text(into, (t === null || t === void 0 ? void 0 : t.name) || '', 'type-name', options, (0, _SchemaReference.getTypeReference)(typeInfo, t)); + } +} +function renderDescription(into, options, def) { + const { + description + } = def; + if (description) { + const descriptionDiv = document.createElement('div'); + descriptionDiv.className = 'info-description'; + if (options.renderDescription) { + descriptionDiv.innerHTML = options.renderDescription(description); + } else { + descriptionDiv.append(document.createTextNode(description)); + } + into.append(descriptionDiv); + } + renderDeprecation(into, options, def); +} +function renderDeprecation(into, options, def) { + const reason = def.deprecationReason; + if (reason) { + const deprecationDiv = document.createElement('div'); + deprecationDiv.className = 'info-deprecation'; + into.append(deprecationDiv); + const label = document.createElement('span'); + label.className = 'info-deprecation-label'; + label.append(document.createTextNode('Deprecated')); + deprecationDiv.append(label); + const reasonDiv = document.createElement('div'); + reasonDiv.className = 'info-deprecation-reason'; + if (options.renderDescription) { + reasonDiv.innerHTML = options.renderDescription(reason); + } else { + reasonDiv.append(document.createTextNode(reason)); + } + deprecationDiv.append(reasonDiv); + } +} +function text(into, content, className = '', options = { + onClick: null +}, ref = null) { + if (className) { + const { + onClick + } = options; + let node; + if (onClick) { + node = document.createElement('a'); + node.href = 'javascript:void 0'; + node.addEventListener('click', e => { + e.preventDefault(); + onClick(ref, e); + }); + } else { + node = document.createElement('span'); + } + node.className = className; + node.append(document.createTextNode(content)); + into.append(node); + } else { + into.append(document.createTextNode(content)); + } +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/jump.js": +/*!********************************************!*\ + !*** ../../codemirror-graphql/esm/jump.js ***! + \********************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _getTypeInfo = _interopRequireDefault(__webpack_require__(/*! ./utils/getTypeInfo */ "../../codemirror-graphql/esm/utils/getTypeInfo.js")); +var _SchemaReference = __webpack_require__(/*! ./utils/SchemaReference */ "../../codemirror-graphql/esm/utils/SchemaReference.js"); +__webpack_require__(/*! ./utils/jump-addon */ "../../codemirror-graphql/esm/utils/jump-addon.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.registerHelper('jump', 'graphql', (token, options) => { + if (!options.schema || !options.onClick || !token.state) { + return; + } + const { + state + } = token; + const { + kind, + step + } = state; + const typeInfo = (0, _getTypeInfo.default)(options.schema, state); + if (kind === 'Field' && step === 0 && typeInfo.fieldDef || kind === 'AliasedField' && step === 2 && typeInfo.fieldDef) { + return (0, _SchemaReference.getFieldReference)(typeInfo); + } + if (kind === 'Directive' && step === 1 && typeInfo.directiveDef) { + return (0, _SchemaReference.getDirectiveReference)(typeInfo); + } + if (kind === 'Argument' && step === 0 && typeInfo.argDef) { + return (0, _SchemaReference.getArgumentReference)(typeInfo); + } + if (kind === 'EnumValue' && typeInfo.enumValue) { + return (0, _SchemaReference.getEnumValueReference)(typeInfo); + } + if (kind === 'NamedType' && typeInfo.type) { + return (0, _SchemaReference.getTypeReference)(typeInfo); + } +}); + +/***/ }), + +/***/ "../../codemirror-graphql/esm/lint.js": +/*!********************************************!*\ + !*** ../../codemirror-graphql/esm/lint.js ***! + \********************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const SEVERITY = ['error', 'warning', 'information', 'hint']; +const TYPE = { + 'GraphQL: Validation': 'validation', + 'GraphQL: Deprecation': 'deprecation', + 'GraphQL: Syntax': 'syntax' +}; +_codemirror.default.registerHelper('lint', 'graphql', (text, options) => { + const { + schema, + validationRules, + externalFragments + } = options; + const rawResults = (0, _graphqlLanguageService.getDiagnostics)(text, schema, validationRules, undefined, externalFragments); + const results = rawResults.map(error => ({ + message: error.message, + severity: error.severity ? SEVERITY[error.severity - 1] : SEVERITY[0], + type: error.source ? TYPE[error.source] : undefined, + from: _codemirror.default.Pos(error.range.start.line, error.range.start.character), + to: _codemirror.default.Pos(error.range.end.line, error.range.end.character) + })); + return results; +}); + +/***/ }), + +/***/ "../../codemirror-graphql/esm/mode.js": +/*!********************************************!*\ + !*** ../../codemirror-graphql/esm/mode.js ***! + \********************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _modeFactory = _interopRequireDefault(__webpack_require__(/*! ./utils/mode-factory */ "../../codemirror-graphql/esm/utils/mode-factory.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.defineMode('graphql', _modeFactory.default); + +/***/ }), + +/***/ "../../codemirror-graphql/esm/results/mode.js": +/*!****************************************************!*\ + !*** ../../codemirror-graphql/esm/results/mode.js ***! + \****************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); +var _modeIndent = _interopRequireDefault(__webpack_require__(/*! ../utils/mode-indent */ "../../codemirror-graphql/esm/utils/mode-indent.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.defineMode('graphql-results', config => { + const parser = (0, _graphqlLanguageService.onlineParser)({ + eatWhitespace: stream => stream.eatSpace(), + lexRules: LexRules, + parseRules: ParseRules, + editorConfig: { + tabSize: config.tabSize + } + }); + return { + config, + startState: parser.startState, + token: parser.token, + indent: _modeIndent.default, + electricInput: /^\s*[}\]]/, + fold: 'brace', + closeBrackets: { + pairs: '[]{}""', + explode: '[]{}' + } + }; +}); +const LexRules = { + Punctuation: /^\[|]|\{|\}|:|,/, + Number: /^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/, + String: /^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/, + Keyword: /^true|false|null/ +}; +const ParseRules = { + Document: [(0, _graphqlLanguageService.p)('{'), (0, _graphqlLanguageService.list)('Entry', (0, _graphqlLanguageService.p)(',')), (0, _graphqlLanguageService.p)('}')], + Entry: [(0, _graphqlLanguageService.t)('String', 'def'), (0, _graphqlLanguageService.p)(':'), 'Value'], + Value(token) { + switch (token.kind) { + case 'Number': + return 'NumberValue'; + case 'String': + return 'StringValue'; + case 'Punctuation': + switch (token.value) { + case '[': + return 'ListValue'; + case '{': + return 'ObjectValue'; + } + return null; + case 'Keyword': + switch (token.value) { + case 'true': + case 'false': + return 'BooleanValue'; + case 'null': + return 'NullValue'; + } + return null; + } + }, + NumberValue: [(0, _graphqlLanguageService.t)('Number', 'number')], + StringValue: [(0, _graphqlLanguageService.t)('String', 'string')], + BooleanValue: [(0, _graphqlLanguageService.t)('Keyword', 'builtin')], + NullValue: [(0, _graphqlLanguageService.t)('Keyword', 'keyword')], + ListValue: [(0, _graphqlLanguageService.p)('['), (0, _graphqlLanguageService.list)('Value', (0, _graphqlLanguageService.p)(',')), (0, _graphqlLanguageService.p)(']')], + ObjectValue: [(0, _graphqlLanguageService.p)('{'), (0, _graphqlLanguageService.list)('ObjectField', (0, _graphqlLanguageService.p)(',')), (0, _graphqlLanguageService.p)('}')], + ObjectField: [(0, _graphqlLanguageService.t)('String', 'property'), (0, _graphqlLanguageService.p)(':'), 'Value'] +}; + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/SchemaReference.js": +/*!*************************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/SchemaReference.js ***! + \*************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.getArgumentReference = getArgumentReference; +exports.getDirectiveReference = getDirectiveReference; +exports.getEnumValueReference = getEnumValueReference; +exports.getFieldReference = getFieldReference; +exports.getTypeReference = getTypeReference; +var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); +function getFieldReference(typeInfo) { + return { + kind: 'Field', + schema: typeInfo.schema, + field: typeInfo.fieldDef, + type: isMetaField(typeInfo.fieldDef) ? null : typeInfo.parentType + }; +} +function getDirectiveReference(typeInfo) { + return { + kind: 'Directive', + schema: typeInfo.schema, + directive: typeInfo.directiveDef + }; +} +function getArgumentReference(typeInfo) { + return typeInfo.directiveDef ? { + kind: 'Argument', + schema: typeInfo.schema, + argument: typeInfo.argDef, + directive: typeInfo.directiveDef + } : { + kind: 'Argument', + schema: typeInfo.schema, + argument: typeInfo.argDef, + field: typeInfo.fieldDef, + type: isMetaField(typeInfo.fieldDef) ? null : typeInfo.parentType + }; +} +function getEnumValueReference(typeInfo) { + return { + kind: 'EnumValue', + value: typeInfo.enumValue || undefined, + type: typeInfo.inputType ? (0, _graphql.getNamedType)(typeInfo.inputType) : undefined + }; +} +function getTypeReference(typeInfo, type) { + return { + kind: 'Type', + schema: typeInfo.schema, + type: type || typeInfo.type + }; +} +function isMetaField(fieldDef) { + return fieldDef.name.slice(0, 2) === '__'; +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/forEachState.js": +/*!**********************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/forEachState.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = forEachState; +function forEachState(stack, fn) { + const reverseStateStack = []; + let state = stack; + while (state === null || state === void 0 ? void 0 : state.kind) { + reverseStateStack.push(state); + state = state.prevState; + } + for (let i = reverseStateStack.length - 1; i >= 0; i--) { + fn(reverseStateStack[i]); + } +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/getTypeInfo.js": +/*!*********************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/getTypeInfo.js ***! + \*********************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = getTypeInfo; +var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); +var _forEachState = _interopRequireDefault(__webpack_require__(/*! ./forEachState */ "../../codemirror-graphql/esm/utils/forEachState.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function getTypeInfo(schema, tokenState) { + const info = { + schema, + type: null, + parentType: null, + inputType: null, + directiveDef: null, + fieldDef: null, + argDef: null, + argDefs: null, + objectFieldDefs: null + }; + (0, _forEachState.default)(tokenState, state => { + var _a, _b; + switch (state.kind) { + case 'Query': + case 'ShortQuery': + info.type = schema.getQueryType(); + break; + case 'Mutation': + info.type = schema.getMutationType(); + break; + case 'Subscription': + info.type = schema.getSubscriptionType(); + break; + case 'InlineFragment': + case 'FragmentDefinition': + if (state.type) { + info.type = schema.getType(state.type); + } + break; + case 'Field': + case 'AliasedField': + info.fieldDef = info.type && state.name ? getFieldDef(schema, info.parentType, state.name) : null; + info.type = (_a = info.fieldDef) === null || _a === void 0 ? void 0 : _a.type; + break; + case 'SelectionSet': + info.parentType = info.type ? (0, _graphql.getNamedType)(info.type) : null; + break; + case 'Directive': + info.directiveDef = state.name ? schema.getDirective(state.name) : null; + break; + case 'Arguments': + const parentDef = state.prevState ? state.prevState.kind === 'Field' ? info.fieldDef : state.prevState.kind === 'Directive' ? info.directiveDef : state.prevState.kind === 'AliasedField' ? state.prevState.name && getFieldDef(schema, info.parentType, state.prevState.name) : null : null; + info.argDefs = parentDef ? parentDef.args : null; + break; + case 'Argument': + info.argDef = null; + if (info.argDefs) { + for (let i = 0; i < info.argDefs.length; i++) { + if (info.argDefs[i].name === state.name) { + info.argDef = info.argDefs[i]; + break; + } + } + } + info.inputType = (_b = info.argDef) === null || _b === void 0 ? void 0 : _b.type; + break; + case 'EnumValue': + const enumType = info.inputType ? (0, _graphql.getNamedType)(info.inputType) : null; + info.enumValue = enumType instanceof _graphql.GraphQLEnumType ? find(enumType.getValues(), val => val.value === state.name) : null; + break; + case 'ListValue': + const nullableType = info.inputType ? (0, _graphql.getNullableType)(info.inputType) : null; + info.inputType = nullableType instanceof _graphql.GraphQLList ? nullableType.ofType : null; + break; + case 'ObjectValue': + const objectType = info.inputType ? (0, _graphql.getNamedType)(info.inputType) : null; + info.objectFieldDefs = objectType instanceof _graphql.GraphQLInputObjectType ? objectType.getFields() : null; + break; + case 'ObjectField': + const objectField = state.name && info.objectFieldDefs ? info.objectFieldDefs[state.name] : null; + info.inputType = objectField === null || objectField === void 0 ? void 0 : objectField.type; + info.fieldDef = objectField; + break; + case 'NamedType': + info.type = state.name ? schema.getType(state.name) : null; + break; + } + }); + return info; +} +function getFieldDef(schema, type, fieldName) { + if (fieldName === _graphql.SchemaMetaFieldDef.name && schema.getQueryType() === type) { + return _graphql.SchemaMetaFieldDef; + } + if (fieldName === _graphql.TypeMetaFieldDef.name && schema.getQueryType() === type) { + return _graphql.TypeMetaFieldDef; + } + if (fieldName === _graphql.TypeNameMetaFieldDef.name && (0, _graphql.isCompositeType)(type)) { + return _graphql.TypeNameMetaFieldDef; + } + if (type && type.getFields) { + return type.getFields()[fieldName]; + } +} +function find(array, predicate) { + for (let i = 0; i < array.length; i++) { + if (predicate(array[i])) { + return array[i]; + } + } +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/hintList.js": +/*!******************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/hintList.js ***! + \******************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = hintList; function hintList(cursor, token, list) { const hints = filterAndSortList(list, normalizeText(token.string)); if (!hints) { @@ -68208,7 +73955,7 @@ function filterNonEmpty(array, predicate) { return filtered.length === 0 ? array : filtered; } function normalizeText(text) { - return text.toLowerCase().replaceAll(/\W/g, ""); + return text.toLowerCase().replaceAll(/\W/g, ''); } function getProximity(suggestion, text) { let proximity = lexicalDistance(text, suggestion); @@ -68241,26 +73988,668 @@ function lexicalDistance(a, b) { } return d[aLength][bLength]; } -codemirror.CodeMirror.registerHelper("hint", "graphql-variables", (editor, options) => { + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/info-addon.js": +/*!********************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/info-addon.js ***! + \********************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.defineOption('info', false, (cm, options, old) => { + if (old && old !== _codemirror.default.Init) { + const oldOnMouseOver = cm.state.info.onMouseOver; + _codemirror.default.off(cm.getWrapperElement(), 'mouseover', oldOnMouseOver); + clearTimeout(cm.state.info.hoverTimeout); + delete cm.state.info; + } + if (options) { + const state = cm.state.info = createState(options); + state.onMouseOver = onMouseOver.bind(null, cm); + _codemirror.default.on(cm.getWrapperElement(), 'mouseover', state.onMouseOver); + } +}); +function createState(options) { + return { + options: options instanceof Function ? { + render: options + } : options === true ? {} : options + }; +} +function getHoverTime(cm) { + const { + options + } = cm.state.info; + return (options === null || options === void 0 ? void 0 : options.hoverTime) || 500; +} +function onMouseOver(cm, e) { + const state = cm.state.info; + const target = e.target || e.srcElement; + if (!(target instanceof HTMLElement)) { + return; + } + if (target.nodeName !== 'SPAN' || state.hoverTimeout !== undefined) { + return; + } + const box = target.getBoundingClientRect(); + const onMouseMove = function () { + clearTimeout(state.hoverTimeout); + state.hoverTimeout = setTimeout(onHover, hoverTime); + }; + const onMouseOut = function () { + _codemirror.default.off(document, 'mousemove', onMouseMove); + _codemirror.default.off(cm.getWrapperElement(), 'mouseout', onMouseOut); + clearTimeout(state.hoverTimeout); + state.hoverTimeout = undefined; + }; + const onHover = function () { + _codemirror.default.off(document, 'mousemove', onMouseMove); + _codemirror.default.off(cm.getWrapperElement(), 'mouseout', onMouseOut); + state.hoverTimeout = undefined; + onMouseHover(cm, box); + }; + const hoverTime = getHoverTime(cm); + state.hoverTimeout = setTimeout(onHover, hoverTime); + _codemirror.default.on(document, 'mousemove', onMouseMove); + _codemirror.default.on(cm.getWrapperElement(), 'mouseout', onMouseOut); +} +function onMouseHover(cm, box) { + const pos = cm.coordsChar({ + left: (box.left + box.right) / 2, + top: (box.top + box.bottom) / 2 + }, 'window'); + const state = cm.state.info; + const { + options + } = state; + const render = options.render || cm.getHelper(pos, 'info'); + if (render) { + const token = cm.getTokenAt(pos, true); + if (token) { + const info = render(token, options, cm, pos); + if (info) { + showPopup(cm, box, info); + } + } + } +} +function showPopup(cm, box, info) { + const popup = document.createElement('div'); + popup.className = 'CodeMirror-info'; + popup.append(info); + document.body.append(popup); + const popupBox = popup.getBoundingClientRect(); + const popupStyle = window.getComputedStyle(popup); + const popupWidth = popupBox.right - popupBox.left + parseFloat(popupStyle.marginLeft) + parseFloat(popupStyle.marginRight); + const popupHeight = popupBox.bottom - popupBox.top + parseFloat(popupStyle.marginTop) + parseFloat(popupStyle.marginBottom); + let topPos = box.bottom; + if (popupHeight > window.innerHeight - box.bottom - 15 && box.top > window.innerHeight - box.bottom) { + topPos = box.top - popupHeight; + } + if (topPos < 0) { + topPos = box.bottom; + } + let leftPos = Math.max(0, window.innerWidth - popupWidth - 15); + if (leftPos > box.left) { + leftPos = box.left; + } + popup.style.opacity = '1'; + popup.style.top = topPos + 'px'; + popup.style.left = leftPos + 'px'; + let popupTimeout; + const onMouseOverPopup = function () { + clearTimeout(popupTimeout); + }; + const onMouseOut = function () { + clearTimeout(popupTimeout); + popupTimeout = setTimeout(hidePopup, 200); + }; + const hidePopup = function () { + _codemirror.default.off(popup, 'mouseover', onMouseOverPopup); + _codemirror.default.off(popup, 'mouseout', onMouseOut); + _codemirror.default.off(cm.getWrapperElement(), 'mouseout', onMouseOut); + if (popup.style.opacity) { + popup.style.opacity = '0'; + setTimeout(() => { + if (popup.parentNode) { + popup.remove(); + } + }, 600); + } else if (popup.parentNode) { + popup.remove(); + } + }; + _codemirror.default.on(popup, 'mouseover', onMouseOverPopup); + _codemirror.default.on(popup, 'mouseout', onMouseOut); + _codemirror.default.on(cm.getWrapperElement(), 'mouseout', onMouseOut); +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/jsonParse.js": +/*!*******************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/jsonParse.js ***! + \*******************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.JSONSyntaxError = void 0; +exports["default"] = jsonParse; +function jsonParse(str) { + string = str; + strLen = str.length; + start = end = lastEnd = -1; + ch(); + lex(); + const ast = parseObj(); + expect('EOF'); + return ast; +} +let string; +let strLen; +let start; +let end; +let lastEnd; +let code; +let kind; +function parseObj() { + const nodeStart = start; + const members = []; + expect('{'); + if (!skip('}')) { + do { + members.push(parseMember()); + } while (skip(',')); + expect('}'); + } + return { + kind: 'Object', + start: nodeStart, + end: lastEnd, + members + }; +} +function parseMember() { + const nodeStart = start; + const key = kind === 'String' ? curToken() : null; + expect('String'); + expect(':'); + const value = parseVal(); + return { + kind: 'Member', + start: nodeStart, + end: lastEnd, + key, + value + }; +} +function parseArr() { + const nodeStart = start; + const values = []; + expect('['); + if (!skip(']')) { + do { + values.push(parseVal()); + } while (skip(',')); + expect(']'); + } + return { + kind: 'Array', + start: nodeStart, + end: lastEnd, + values + }; +} +function parseVal() { + switch (kind) { + case '[': + return parseArr(); + case '{': + return parseObj(); + case 'String': + case 'Number': + case 'Boolean': + case 'Null': + const token = curToken(); + lex(); + return token; + } + expect('Value'); +} +function curToken() { + return { + kind, + start, + end, + value: JSON.parse(string.slice(start, end)) + }; +} +function expect(str) { + if (kind === str) { + lex(); + return; + } + let found; + if (kind === 'EOF') { + found = '[end of file]'; + } else if (end - start > 1) { + found = '`' + string.slice(start, end) + '`'; + } else { + const match = string.slice(start).match(/^.+?\b/); + found = '`' + (match ? match[0] : string[start]) + '`'; + } + throw syntaxError(`Expected ${str} but found ${found}.`); +} +class JSONSyntaxError extends Error { + constructor(message, position) { + super(message); + this.position = position; + } +} +exports.JSONSyntaxError = JSONSyntaxError; +function syntaxError(message) { + return new JSONSyntaxError(message, { + start, + end + }); +} +function skip(k) { + if (kind === k) { + lex(); + return true; + } +} +function ch() { + if (end < strLen) { + end++; + code = end === strLen ? 0 : string.charCodeAt(end); + } + return code; +} +function lex() { + lastEnd = end; + while (code === 9 || code === 10 || code === 13 || code === 32) { + ch(); + } + if (code === 0) { + kind = 'EOF'; + return; + } + start = end; + switch (code) { + case 34: + kind = 'String'; + return readString(); + case 45: + case 48: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + kind = 'Number'; + return readNumber(); + case 102: + if (string.slice(start, start + 5) !== 'false') { + break; + } + end += 4; + ch(); + kind = 'Boolean'; + return; + case 110: + if (string.slice(start, start + 4) !== 'null') { + break; + } + end += 3; + ch(); + kind = 'Null'; + return; + case 116: + if (string.slice(start, start + 4) !== 'true') { + break; + } + end += 3; + ch(); + kind = 'Boolean'; + return; + } + kind = string[start]; + ch(); +} +function readString() { + ch(); + while (code !== 34 && code > 31) { + if (code === 92) { + code = ch(); + switch (code) { + case 34: + case 47: + case 92: + case 98: + case 102: + case 110: + case 114: + case 116: + ch(); + break; + case 117: + ch(); + readHex(); + readHex(); + readHex(); + readHex(); + break; + default: + throw syntaxError('Bad character escape sequence.'); + } + } else if (end === strLen) { + throw syntaxError('Unterminated string.'); + } else { + ch(); + } + } + if (code === 34) { + ch(); + return; + } + throw syntaxError('Unterminated string.'); +} +function readHex() { + if (code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102) { + return ch(); + } + throw syntaxError('Expected hexadecimal digit.'); +} +function readNumber() { + if (code === 45) { + ch(); + } + if (code === 48) { + ch(); + } else { + readDigits(); + } + if (code === 46) { + ch(); + readDigits(); + } + if (code === 69 || code === 101) { + code = ch(); + if (code === 43 || code === 45) { + ch(); + } + readDigits(); + } +} +function readDigits() { + if (code < 48 || code > 57) { + throw syntaxError('Expected decimal digit.'); + } + do { + ch(); + } while (code >= 48 && code <= 57); +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/jump-addon.js": +/*!********************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/jump-addon.js ***! + \********************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.defineOption('jump', false, (cm, options, old) => { + if (old && old !== _codemirror.default.Init) { + const oldOnMouseOver = cm.state.jump.onMouseOver; + _codemirror.default.off(cm.getWrapperElement(), 'mouseover', oldOnMouseOver); + const oldOnMouseOut = cm.state.jump.onMouseOut; + _codemirror.default.off(cm.getWrapperElement(), 'mouseout', oldOnMouseOut); + _codemirror.default.off(document, 'keydown', cm.state.jump.onKeyDown); + delete cm.state.jump; + } + if (options) { + const state = cm.state.jump = { + options, + onMouseOver: onMouseOver.bind(null, cm), + onMouseOut: onMouseOut.bind(null, cm), + onKeyDown: onKeyDown.bind(null, cm) + }; + _codemirror.default.on(cm.getWrapperElement(), 'mouseover', state.onMouseOver); + _codemirror.default.on(cm.getWrapperElement(), 'mouseout', state.onMouseOut); + _codemirror.default.on(document, 'keydown', state.onKeyDown); + } +}); +function onMouseOver(cm, event) { + const target = event.target || event.srcElement; + if (!(target instanceof HTMLElement)) { + return; + } + if ((target === null || target === void 0 ? void 0 : target.nodeName) !== 'SPAN') { + return; + } + const box = target.getBoundingClientRect(); + const cursor = { + left: (box.left + box.right) / 2, + top: (box.top + box.bottom) / 2 + }; + cm.state.jump.cursor = cursor; + if (cm.state.jump.isHoldingModifier) { + enableJumpMode(cm); + } +} +function onMouseOut(cm) { + if (!cm.state.jump.isHoldingModifier && cm.state.jump.cursor) { + cm.state.jump.cursor = null; + return; + } + if (cm.state.jump.isHoldingModifier && cm.state.jump.marker) { + disableJumpMode(cm); + } +} +function onKeyDown(cm, event) { + if (cm.state.jump.isHoldingModifier || !isJumpModifier(event.key)) { + return; + } + cm.state.jump.isHoldingModifier = true; + if (cm.state.jump.cursor) { + enableJumpMode(cm); + } + const onKeyUp = upEvent => { + if (upEvent.code !== event.code) { + return; + } + cm.state.jump.isHoldingModifier = false; + if (cm.state.jump.marker) { + disableJumpMode(cm); + } + _codemirror.default.off(document, 'keyup', onKeyUp); + _codemirror.default.off(document, 'click', onClick); + cm.off('mousedown', onMouseDown); + }; + const onClick = clickEvent => { + const { + destination, + options + } = cm.state.jump; + if (destination) { + options.onClick(destination, clickEvent); + } + }; + const onMouseDown = (_, downEvent) => { + if (cm.state.jump.destination) { + downEvent.codemirrorIgnore = true; + } + }; + _codemirror.default.on(document, 'keyup', onKeyUp); + _codemirror.default.on(document, 'click', onClick); + cm.on('mousedown', onMouseDown); +} +const isMac = typeof navigator !== 'undefined' && navigator.userAgent.includes('Mac'); +function isJumpModifier(key) { + return key === (isMac ? 'Meta' : 'Control'); +} +function enableJumpMode(cm) { + if (cm.state.jump.marker) { + return; + } + const { + cursor, + options + } = cm.state.jump; + const pos = cm.coordsChar(cursor); + const token = cm.getTokenAt(pos, true); + const getDestination = options.getDestination || cm.getHelper(pos, 'jump'); + if (getDestination) { + const destination = getDestination(token, options, cm); + if (destination) { + const marker = cm.markText({ + line: pos.line, + ch: token.start + }, { + line: pos.line, + ch: token.end + }, { + className: 'CodeMirror-jump-token' + }); + cm.state.jump.marker = marker; + cm.state.jump.destination = destination; + } + } +} +function disableJumpMode(cm) { + const { + marker + } = cm.state.jump; + cm.state.jump.marker = null; + cm.state.jump.destination = null; + marker.clear(); +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/mode-factory.js": +/*!**********************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/mode-factory.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +var _graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); +var _modeIndent = _interopRequireDefault(__webpack_require__(/*! ./mode-indent */ "../../codemirror-graphql/esm/utils/mode-indent.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const graphqlModeFactory = config => { + const parser = (0, _graphqlLanguageService.onlineParser)({ + eatWhitespace: stream => stream.eatWhile(_graphqlLanguageService.isIgnored), + lexRules: _graphqlLanguageService.LexRules, + parseRules: _graphqlLanguageService.ParseRules, + editorConfig: { + tabSize: config.tabSize + } + }); + return { + config, + startState: parser.startState, + token: parser.token, + indent: _modeIndent.default, + electricInput: /^\s*[})\]]/, + fold: 'brace', + lineComment: '#', + closeBrackets: { + pairs: '()[]{}""', + explode: '()[]{}' + } + }; +}; +var _default = exports["default"] = graphqlModeFactory; + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/mode-indent.js": +/*!*********************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/mode-indent.js ***! + \*********************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = indent; +function indent(state, textAfter) { + var _a, _b; + const { + levels, + indentLevel + } = state; + const level = !levels || levels.length === 0 ? indentLevel : levels.at(-1) - (((_a = this.electricInput) === null || _a === void 0 ? void 0 : _a.test(textAfter)) ? 1 : 0); + return (level || 0) * (((_b = this.config) === null || _b === void 0 ? void 0 : _b.indentUnit) || 0); +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/variables/hint.js": +/*!******************************************************!*\ + !*** ../../codemirror-graphql/esm/variables/hint.js ***! + \******************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); +var _forEachState = _interopRequireDefault(__webpack_require__(/*! ../utils/forEachState */ "../../codemirror-graphql/esm/utils/forEachState.js")); +var _hintList = _interopRequireDefault(__webpack_require__(/*! ../utils/hintList */ "../../codemirror-graphql/esm/utils/hintList.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.registerHelper('hint', 'graphql-variables', (editor, options) => { const cur = editor.getCursor(); const token = editor.getTokenAt(cur); const results = getVariablesHint(cur, token, options); if ((results === null || results === void 0 ? void 0 : results.list) && results.list.length > 0) { - results.from = codemirror.CodeMirror.Pos(results.from.line, results.from.ch); - results.to = codemirror.CodeMirror.Pos(results.to.line, results.to.ch); - codemirror.CodeMirror.signal(editor, "hasCompletion", editor, results, token); + results.from = _codemirror.default.Pos(results.from.line, results.from.ch); + results.to = _codemirror.default.Pos(results.to.line, results.to.ch); + _codemirror.default.signal(editor, 'hasCompletion', editor, results, token); } return results; }); function getVariablesHint(cur, token, options) { - const state = token.state.kind === "Invalid" ? token.state.prevState : token.state; + const state = token.state.kind === 'Invalid' ? token.state.prevState : token.state; const { kind, step } = state; - if (kind === "Document" && step === 0) { - return hintList(cur, token, [{ - text: "{" + if (kind === 'Document' && step === 0) { + return (0, _hintList.default)(cur, token, [{ + text: '{' }]); } const { @@ -68270,45 +74659,45 @@ function getVariablesHint(cur, token, options) { return; } const typeInfo = getTypeInfo(variableToType, token.state); - if (kind === "Document" || kind === "Variable" && step === 0) { + if (kind === 'Document' || kind === 'Variable' && step === 0) { const variableNames = Object.keys(variableToType); - return hintList(cur, token, variableNames.map(name => ({ + return (0, _hintList.default)(cur, token, variableNames.map(name => ({ text: `"${name}": `, type: variableToType[name] }))); } - if ((kind === "ObjectValue" || kind === "ObjectField" && step === 0) && typeInfo.fields) { + if ((kind === 'ObjectValue' || kind === 'ObjectField' && step === 0) && typeInfo.fields) { const inputFields = Object.keys(typeInfo.fields).map(fieldName => typeInfo.fields[fieldName]); - return hintList(cur, token, inputFields.map(field => ({ + return (0, _hintList.default)(cur, token, inputFields.map(field => ({ text: `"${field.name}": `, type: field.type, description: field.description }))); } - if (kind === "StringValue" || kind === "NumberValue" || kind === "BooleanValue" || kind === "NullValue" || kind === "ListValue" && step === 1 || kind === "ObjectField" && step === 2 || kind === "Variable" && step === 2) { - const namedInputType = typeInfo.type ? graphql.getNamedType(typeInfo.type) : void 0; - if (namedInputType instanceof graphql.GraphQLInputObjectType) { - return hintList(cur, token, [{ - text: "{" + if (kind === 'StringValue' || kind === 'NumberValue' || kind === 'BooleanValue' || kind === 'NullValue' || kind === 'ListValue' && step === 1 || kind === 'ObjectField' && step === 2 || kind === 'Variable' && step === 2) { + const namedInputType = typeInfo.type ? (0, _graphql.getNamedType)(typeInfo.type) : undefined; + if (namedInputType instanceof _graphql.GraphQLInputObjectType) { + return (0, _hintList.default)(cur, token, [{ + text: '{' }]); } - if (namedInputType instanceof graphql.GraphQLEnumType) { + if (namedInputType instanceof _graphql.GraphQLEnumType) { const values = namedInputType.getValues(); - return hintList(cur, token, values.map(value => ({ + return (0, _hintList.default)(cur, token, values.map(value => ({ text: `"${value.name}"`, type: namedInputType, description: value.description }))); } - if (namedInputType === graphql.GraphQLBoolean) { - return hintList(cur, token, [{ - text: "true", - type: graphql.GraphQLBoolean, - description: "Not false." + if (namedInputType === _graphql.GraphQLBoolean) { + return (0, _hintList.default)(cur, token, [{ + text: 'true', + type: _graphql.GraphQLBoolean, + description: 'Not false.' }, { - text: "false", - type: graphql.GraphQLBoolean, - description: "Not true." + text: 'false', + type: _graphql.GraphQLBoolean, + description: 'Not true.' }]); } } @@ -68318,26 +74707,26 @@ function getTypeInfo(variableToType, tokenState) { type: null, fields: null }; - forEachState.forEachState(tokenState, state => { + (0, _forEachState.default)(tokenState, state => { switch (state.kind) { - case "Variable": + case 'Variable': { info.type = variableToType[state.name]; break; } - case "ListValue": + case 'ListValue': { - const nullableType = info.type ? graphql.getNullableType(info.type) : void 0; - info.type = nullableType instanceof graphql.GraphQLList ? nullableType.ofType : null; + const nullableType = info.type ? (0, _graphql.getNullableType)(info.type) : undefined; + info.type = nullableType instanceof _graphql.GraphQLList ? nullableType.ofType : null; break; } - case "ObjectValue": + case 'ObjectValue': { - const objectType = info.type ? graphql.getNamedType(info.type) : void 0; - info.fields = objectType instanceof graphql.GraphQLInputObjectType ? objectType.getFields() : null; + const objectType = info.type ? (0, _graphql.getNamedType)(info.type) : undefined; + info.fields = objectType instanceof _graphql.GraphQLInputObjectType ? objectType.getFields() : null; break; } - case "ObjectField": + case 'ObjectField': { const objectField = state.name && info.fields ? info.fields[state.name] : null; info.type = objectField === null || objectField === void 0 ? void 0 : objectField.type; @@ -68350,18 +74739,260 @@ function getTypeInfo(variableToType, tokenState) { /***/ }), +/***/ "../../codemirror-graphql/esm/variables/lint.js": +/*!******************************************************!*\ + !*** ../../codemirror-graphql/esm/variables/lint.js ***! + \******************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); +var _jsonParse = _interopRequireWildcard(__webpack_require__(/*! ../utils/jsonParse */ "../../codemirror-graphql/esm/utils/jsonParse.js")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.registerHelper('lint', 'graphql-variables', (text, options, editor) => { + if (!text) { + return []; + } + let ast; + try { + ast = (0, _jsonParse.default)(text); + } catch (error) { + if (error instanceof _jsonParse.JSONSyntaxError) { + return [lintError(editor, error.position, error.message)]; + } + throw error; + } + const { + variableToType + } = options; + if (!variableToType) { + return []; + } + return validateVariables(editor, variableToType, ast); +}); +function validateVariables(editor, variableToType, variablesAST) { + var _a; + const errors = []; + for (const member of variablesAST.members) { + if (member) { + const variableName = (_a = member.key) === null || _a === void 0 ? void 0 : _a.value; + const type = variableToType[variableName]; + if (type) { + for (const [node, message] of validateValue(type, member.value)) { + errors.push(lintError(editor, node, message)); + } + } else { + errors.push(lintError(editor, member.key, `Variable "$${variableName}" does not appear in any GraphQL query.`)); + } + } + } + return errors; +} +function validateValue(type, valueAST) { + if (!type || !valueAST) { + return []; + } + if (type instanceof _graphql.GraphQLNonNull) { + if (valueAST.kind === 'Null') { + return [[valueAST, `Type "${type}" is non-nullable and cannot be null.`]]; + } + return validateValue(type.ofType, valueAST); + } + if (valueAST.kind === 'Null') { + return []; + } + if (type instanceof _graphql.GraphQLList) { + const itemType = type.ofType; + if (valueAST.kind === 'Array') { + const values = valueAST.values || []; + return mapCat(values, item => validateValue(itemType, item)); + } + return validateValue(itemType, valueAST); + } + if (type instanceof _graphql.GraphQLInputObjectType) { + if (valueAST.kind !== 'Object') { + return [[valueAST, `Type "${type}" must be an Object.`]]; + } + const providedFields = Object.create(null); + const fieldErrors = mapCat(valueAST.members, member => { + var _a; + const fieldName = (_a = member === null || member === void 0 ? void 0 : member.key) === null || _a === void 0 ? void 0 : _a.value; + providedFields[fieldName] = true; + const inputField = type.getFields()[fieldName]; + if (!inputField) { + return [[member.key, `Type "${type}" does not have a field "${fieldName}".`]]; + } + const fieldType = inputField ? inputField.type : undefined; + return validateValue(fieldType, member.value); + }); + for (const fieldName of Object.keys(type.getFields())) { + const field = type.getFields()[fieldName]; + if (!providedFields[fieldName] && field.type instanceof _graphql.GraphQLNonNull && !field.defaultValue) { + fieldErrors.push([valueAST, `Object of type "${type}" is missing required field "${fieldName}".`]); + } + } + return fieldErrors; + } + if (type.name === 'Boolean' && valueAST.kind !== 'Boolean' || type.name === 'String' && valueAST.kind !== 'String' || type.name === 'ID' && valueAST.kind !== 'Number' && valueAST.kind !== 'String' || type.name === 'Float' && valueAST.kind !== 'Number' || type.name === 'Int' && (valueAST.kind !== 'Number' || (valueAST.value | 0) !== valueAST.value)) { + return [[valueAST, `Expected value of type "${type}".`]]; + } + if ((type instanceof _graphql.GraphQLEnumType || type instanceof _graphql.GraphQLScalarType) && (valueAST.kind !== 'String' && valueAST.kind !== 'Number' && valueAST.kind !== 'Boolean' && valueAST.kind !== 'Null' || isNullish(type.parseValue(valueAST.value)))) { + return [[valueAST, `Expected value of type "${type}".`]]; + } + return []; +} +function lintError(editor, node, message) { + return { + message, + severity: 'error', + type: 'validation', + from: editor.posFromIndex(node.start), + to: editor.posFromIndex(node.end) + }; +} +function isNullish(value) { + return value === null || value === undefined || value !== value; +} +function mapCat(array, mapper) { + return Array.prototype.concat.apply([], array.map(mapper)); +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/variables/mode.js": +/*!******************************************************!*\ + !*** ../../codemirror-graphql/esm/variables/mode.js ***! + \******************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); +var _modeIndent = _interopRequireDefault(__webpack_require__(/*! ../utils/mode-indent */ "../../codemirror-graphql/esm/utils/mode-indent.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.defineMode('graphql-variables', config => { + const parser = (0, _graphqlLanguageService.onlineParser)({ + eatWhitespace: stream => stream.eatSpace(), + lexRules: LexRules, + parseRules: ParseRules, + editorConfig: { + tabSize: config.tabSize + } + }); + return { + config, + startState: parser.startState, + token: parser.token, + indent: _modeIndent.default, + electricInput: /^\s*[}\]]/, + fold: 'brace', + closeBrackets: { + pairs: '[]{}""', + explode: '[]{}' + } + }; +}); +const LexRules = { + Punctuation: /^\[|]|\{|\}|:|,/, + Number: /^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/, + String: /^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/, + Keyword: /^true|false|null/ +}; +const ParseRules = { + Document: [(0, _graphqlLanguageService.p)('{'), (0, _graphqlLanguageService.list)('Variable', (0, _graphqlLanguageService.opt)((0, _graphqlLanguageService.p)(','))), (0, _graphqlLanguageService.p)('}')], + Variable: [namedKey('variable'), (0, _graphqlLanguageService.p)(':'), 'Value'], + Value(token) { + switch (token.kind) { + case 'Number': + return 'NumberValue'; + case 'String': + return 'StringValue'; + case 'Punctuation': + switch (token.value) { + case '[': + return 'ListValue'; + case '{': + return 'ObjectValue'; + } + return null; + case 'Keyword': + switch (token.value) { + case 'true': + case 'false': + return 'BooleanValue'; + case 'null': + return 'NullValue'; + } + return null; + } + }, + NumberValue: [(0, _graphqlLanguageService.t)('Number', 'number')], + StringValue: [(0, _graphqlLanguageService.t)('String', 'string')], + BooleanValue: [(0, _graphqlLanguageService.t)('Keyword', 'builtin')], + NullValue: [(0, _graphqlLanguageService.t)('Keyword', 'keyword')], + ListValue: [(0, _graphqlLanguageService.p)('['), (0, _graphqlLanguageService.list)('Value', (0, _graphqlLanguageService.opt)((0, _graphqlLanguageService.p)(','))), (0, _graphqlLanguageService.p)(']')], + ObjectValue: [(0, _graphqlLanguageService.p)('{'), (0, _graphqlLanguageService.list)('ObjectField', (0, _graphqlLanguageService.opt)((0, _graphqlLanguageService.p)(','))), (0, _graphqlLanguageService.p)('}')], + ObjectField: [namedKey('attribute'), (0, _graphqlLanguageService.p)(':'), 'Value'] +}; +function namedKey(style) { + return { + style, + match: token => token.kind === 'String', + update(state, token) { + state.name = token.value.slice(1, -1); + } + }; +} + +/***/ }), + /***/ "../../graphiql-react/dist/index.js": /*!******************************************!*\ !*** ../../graphiql-react/dist/index.js ***! \******************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { + get: () => from[key], + enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable + }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( +// If the importer is in node compatibility mode or this is not an ESM +// file that has been converted to a CommonJS file using a Babel- +// compatible transform (i.e. "__esModule" has not been set), then set +// "default" to the CommonJS "module.exports" for node compatibility. +isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { + value: mod, + enumerable: true +}) : target, mod)); Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const jsxRuntime = __webpack_require__(/*! react/jsx-runtime */ "../../../node_modules/react/jsx-runtime.js"); +const reactCompilerRuntime = __webpack_require__(/*! react-compiler-runtime */ "../../../node_modules/react-compiler-runtime/dist/index.js"); const React = __webpack_require__(/*! react */ "react"); const clsx = __webpack_require__(/*! clsx */ "../../../node_modules/clsx/dist/clsx.m.js"); const graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); @@ -68422,19 +75053,49 @@ function createContextHook(context) { } const StorageContext = createNullableContext("StorageContext"); function StorageContextProvider(props) { + const $ = reactCompilerRuntime.c(8); const isInitialRender = React.useRef(true); - const [storage, setStorage] = React.useState(() => new toolkit.StorageAPI(props.storage)); - React.useEffect(() => { - if (isInitialRender.current) { - isInitialRender.current = false; - } else { - setStorage(new toolkit.StorageAPI(props.storage)); - } - }, [props.storage]); - return /* @__PURE__ */jsxRuntime.jsx(StorageContext.Provider, { - value: storage, - children: props.children - }); + let t0; + if ($[0] !== props.storage) { + t0 = () => new toolkit.StorageAPI(props.storage); + $[0] = props.storage; + $[1] = t0; + } else { + t0 = $[1]; + } + const [storage, setStorage] = React.useState(t0); + let t1; + let t2; + if ($[2] !== props.storage) { + t1 = () => { + if (isInitialRender.current) { + isInitialRender.current = false; + } else { + setStorage(new toolkit.StorageAPI(props.storage)); + } + }; + t2 = [props.storage]; + $[2] = props.storage; + $[3] = t1; + $[4] = t2; + } else { + t1 = $[3]; + t2 = $[4]; + } + React.useEffect(t1, t2); + let t3; + if ($[5] !== props.children || $[6] !== storage) { + t3 = /* @__PURE__ */jsxRuntime.jsx(StorageContext.Provider, { + value: storage, + children: props.children + }); + $[5] = props.children; + $[6] = storage; + $[7] = t3; + } else { + t3 = $[7]; + } + return t3; } const useStorageContext = createContextHook(StorageContext); const SvgArgument = ({ @@ -69255,67 +75916,208 @@ const TypeIcon = generateIcon(SvgType); function generateIcon(RawComponent) { const title = RawComponent.name.replace("Svg", "").replaceAll(/([A-Z])/g, " $1").trimStart().toLowerCase() + " icon"; function IconComponent(props) { - return /* @__PURE__ */jsxRuntime.jsx(RawComponent, { - title, - ...props - }); + const $ = reactCompilerRuntime.c(2); + let t0; + if ($[0] !== props) { + t0 = /* @__PURE__ */jsxRuntime.jsx(RawComponent, { + title, + ...props + }); + $[0] = props; + $[1] = t0; + } else { + t0 = $[1]; + } + return t0; } IconComponent.displayName = RawComponent.name; return IconComponent; } -const UnStyledButton = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx("button", { - ...props, - ref, - className: clsx.clsx("graphiql-un-styled", props.className) -})); +const UnStyledButton = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(6); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-un-styled", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props || $[3] !== ref || $[4] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsx("button", { + ...props, + ref, + className: t0 + }); + $[2] = props; + $[3] = ref; + $[4] = t0; + $[5] = t1; + } else { + t1 = $[5]; + } + return t1; +}); UnStyledButton.displayName = "UnStyledButton"; -const Button$1 = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx("button", { - ...props, - ref, - className: clsx.clsx("graphiql-button", { - success: "graphiql-button-success", - error: "graphiql-button-error" - }[props.state], props.className) -})); +const Button$1 = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(7); + let t0; + if ($[0] !== props.className || $[1] !== props.state) { + t0 = clsx.clsx("graphiql-button", { + success: "graphiql-button-success", + error: "graphiql-button-error" + }[props.state], props.className); + $[0] = props.className; + $[1] = props.state; + $[2] = t0; + } else { + t0 = $[2]; + } + let t1; + if ($[3] !== props || $[4] !== ref || $[5] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsx("button", { + ...props, + ref, + className: t0 + }); + $[3] = props; + $[4] = ref; + $[5] = t0; + $[6] = t1; + } else { + t1 = $[6]; + } + return t1; +}); Button$1.displayName = "Button"; -const ButtonGroup = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx("div", { - ...props, - ref, - className: clsx.clsx("graphiql-button-group", props.className) -})); +const ButtonGroup = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(6); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-button-group", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props || $[3] !== ref || $[4] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsx("div", { + ...props, + ref, + className: t0 + }); + $[2] = props; + $[3] = ref; + $[4] = t0; + $[5] = t1; + } else { + t1 = $[5]; + } + return t1; +}); ButtonGroup.displayName = "ButtonGroup"; const createComponentGroup = (root, children) => Object.entries(children).reduce((r, [key, value]) => { r[key] = value; return r; }, root); -const DialogClose = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx(D__namespace.Close, { - asChild: true, - children: /* @__PURE__ */jsxRuntime.jsxs(UnStyledButton, { - ...props, - ref, - type: "button", - className: clsx.clsx("graphiql-dialog-close", props.className), - children: [/* @__PURE__ */jsxRuntime.jsx(reactVisuallyHidden.Root, { +const DialogClose = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(8); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-dialog-close", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + let t2; + if ($[2] === Symbol.for("react.memo_cache_sentinel")) { + t1 = /* @__PURE__ */jsxRuntime.jsx(reactVisuallyHidden.Root, { children: "Close dialog" - }), /* @__PURE__ */jsxRuntime.jsx(CloseIcon, {})] - }) -})); + }); + t2 = /* @__PURE__ */jsxRuntime.jsx(CloseIcon, {}); + $[2] = t1; + $[3] = t2; + } else { + t1 = $[2]; + t2 = $[3]; + } + let t3; + if ($[4] !== props || $[5] !== ref || $[6] !== t0) { + t3 = /* @__PURE__ */jsxRuntime.jsx(D__namespace.Close, { + asChild: true, + children: /* @__PURE__ */jsxRuntime.jsxs(UnStyledButton, { + ...props, + ref, + type: "button", + className: t0, + children: [t1, t2] + }) + }); + $[4] = props; + $[5] = ref; + $[6] = t0; + $[7] = t3; + } else { + t3 = $[7]; + } + return t3; +}); DialogClose.displayName = "Dialog.Close"; -function DialogRoot({ - children, - ...props -}) { - return /* @__PURE__ */jsxRuntime.jsx(D__namespace.Root, { - ...props, - children: /* @__PURE__ */jsxRuntime.jsxs(D__namespace.Portal, { - children: [/* @__PURE__ */jsxRuntime.jsx(D__namespace.Overlay, { - className: "graphiql-dialog-overlay" - }), /* @__PURE__ */jsxRuntime.jsx(D__namespace.Content, { +function DialogRoot(t0) { + const $ = reactCompilerRuntime.c(9); + let children; + let props; + if ($[0] !== t0) { + ({ + children, + ...props + } = t0); + $[0] = t0; + $[1] = children; + $[2] = props; + } else { + children = $[1]; + props = $[2]; + } + let t1; + if ($[3] === Symbol.for("react.memo_cache_sentinel")) { + t1 = /* @__PURE__ */jsxRuntime.jsx(D__namespace.Overlay, { + className: "graphiql-dialog-overlay" + }); + $[3] = t1; + } else { + t1 = $[3]; + } + let t2; + if ($[4] !== children) { + t2 = /* @__PURE__ */jsxRuntime.jsxs(D__namespace.Portal, { + children: [t1, /* @__PURE__ */jsxRuntime.jsx(D__namespace.Content, { className: "graphiql-dialog", children })] - }) - }); + }); + $[4] = children; + $[5] = t2; + } else { + t2 = $[5]; + } + let t3; + if ($[6] !== props || $[7] !== t2) { + t3 = /* @__PURE__ */jsxRuntime.jsx(D__namespace.Root, { + ...props, + children: t2 + }); + $[6] = props; + $[7] = t2; + $[8] = t3; + } else { + t3 = $[8]; + } + return t3; } const Dialog = createComponentGroup(DialogRoot, { Close: DialogClose, @@ -69323,31 +76125,95 @@ const Dialog = createComponentGroup(DialogRoot, { Trigger: D__namespace.Trigger, Description: D__namespace.Description }); -const Button = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx(reactDropdownMenu.Trigger, { - asChild: true, - children: /* @__PURE__ */jsxRuntime.jsx("button", { - ...props, - ref, - className: clsx.clsx("graphiql-un-styled", props.className) - }) -})); +const Button = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(6); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-un-styled", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props || $[3] !== ref || $[4] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsx(reactDropdownMenu.Trigger, { + asChild: true, + children: /* @__PURE__ */jsxRuntime.jsx("button", { + ...props, + ref, + className: t0 + }) + }); + $[2] = props; + $[3] = ref; + $[4] = t0; + $[5] = t1; + } else { + t1 = $[5]; + } + return t1; +}); Button.displayName = "DropdownMenuButton"; -function Content({ - children, - align = "start", - sideOffset = 5, - className, - ...props -}) { - return /* @__PURE__ */jsxRuntime.jsx(reactDropdownMenu.Portal, { - children: /* @__PURE__ */jsxRuntime.jsx(reactDropdownMenu.Content, { - align, - sideOffset, - className: clsx.clsx("graphiql-dropdown-content", className), - ...props, - children - }) - }); +function Content(t0) { + const $ = reactCompilerRuntime.c(14); + let children; + let className; + let props; + let t1; + let t2; + if ($[0] !== t0) { + ({ + children, + align: t1, + sideOffset: t2, + className, + ...props + } = t0); + $[0] = t0; + $[1] = children; + $[2] = className; + $[3] = props; + $[4] = t1; + $[5] = t2; + } else { + children = $[1]; + className = $[2]; + props = $[3]; + t1 = $[4]; + t2 = $[5]; + } + const align = t1 === void 0 ? "start" : t1; + const sideOffset = t2 === void 0 ? 5 : t2; + let t3; + if ($[6] !== className) { + t3 = clsx.clsx("graphiql-dropdown-content", className); + $[6] = className; + $[7] = t3; + } else { + t3 = $[7]; + } + let t4; + if ($[8] !== align || $[9] !== children || $[10] !== props || $[11] !== sideOffset || $[12] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsx(reactDropdownMenu.Portal, { + children: /* @__PURE__ */jsxRuntime.jsx(reactDropdownMenu.Content, { + align, + sideOffset, + className: t3, + ...props, + children + }) + }); + $[8] = align; + $[9] = children; + $[10] = props; + $[11] = sideOffset; + $[12] = t3; + $[13] = t4; + } else { + t4 = $[13]; + } + return t4; } const Item = ({ className, @@ -69367,38 +76233,132 @@ const markdown = new MarkdownIt({ breaks: true, linkify: true }); -const MarkdownContent = React.forwardRef(({ - children, - onlyShowFirstChild, - type, - ...props -}, ref) => /* @__PURE__ */jsxRuntime.jsx("div", { - ...props, - ref, - className: clsx.clsx(`graphiql-markdown-${type}`, onlyShowFirstChild && "graphiql-markdown-preview", props.className), - dangerouslySetInnerHTML: { - __html: markdown.render(children) +const MarkdownContent = React.forwardRef((t0, ref) => { + const $ = reactCompilerRuntime.c(18); + let children; + let onlyShowFirstChild; + let props; + let type; + if ($[0] !== t0) { + ({ + children, + onlyShowFirstChild, + type, + ...props + } = t0); + $[0] = t0; + $[1] = children; + $[2] = onlyShowFirstChild; + $[3] = props; + $[4] = type; + } else { + children = $[1]; + onlyShowFirstChild = $[2]; + props = $[3]; + type = $[4]; } -})); + const t1 = `graphiql-markdown-${type}`; + const t2 = onlyShowFirstChild && "graphiql-markdown-preview"; + let t3; + if ($[5] !== props.className || $[6] !== t1 || $[7] !== t2) { + t3 = clsx.clsx(t1, t2, props.className); + $[5] = props.className; + $[6] = t1; + $[7] = t2; + $[8] = t3; + } else { + t3 = $[8]; + } + let t4; + if ($[9] !== children) { + t4 = markdown.render(children); + $[9] = children; + $[10] = t4; + } else { + t4 = $[10]; + } + let t5; + if ($[11] !== t4) { + t5 = { + __html: t4 + }; + $[11] = t4; + $[12] = t5; + } else { + t5 = $[12]; + } + let t6; + if ($[13] !== props || $[14] !== ref || $[15] !== t3 || $[16] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsx("div", { + ...props, + ref, + className: t3, + dangerouslySetInnerHTML: t5 + }); + $[13] = props; + $[14] = ref; + $[15] = t3; + $[16] = t5; + $[17] = t6; + } else { + t6 = $[17]; + } + return t6; +}); MarkdownContent.displayName = "MarkdownContent"; -const Spinner = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx("div", { - ...props, - ref, - className: clsx.clsx("graphiql-spinner", props.className) -})); +const Spinner = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(6); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-spinner", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props || $[3] !== ref || $[4] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsx("div", { + ...props, + ref, + className: t0 + }); + $[2] = props; + $[3] = ref; + $[4] = t0; + $[5] = t1; + } else { + t1 = $[5]; + } + return t1; +}); Spinner.displayName = "Spinner"; -function TooltipRoot({ - children, - align = "start", - side = "bottom", - sideOffset = 5, - label -}) { - return /* @__PURE__ */jsxRuntime.jsxs(T__namespace.Root, { - children: [/* @__PURE__ */jsxRuntime.jsx(T__namespace.Trigger, { +function TooltipRoot(t0) { + const $ = reactCompilerRuntime.c(10); + const { + children, + align: t1, + side: t2, + sideOffset: t3, + label + } = t0; + const align = t1 === void 0 ? "start" : t1; + const side = t2 === void 0 ? "bottom" : t2; + const sideOffset = t3 === void 0 ? 5 : t3; + let t4; + if ($[0] !== children) { + t4 = /* @__PURE__ */jsxRuntime.jsx(T__namespace.Trigger, { asChild: true, children - }), /* @__PURE__ */jsxRuntime.jsx(T__namespace.Portal, { + }); + $[0] = children; + $[1] = t4; + } else { + t4 = $[1]; + } + let t5; + if ($[2] !== align || $[3] !== label || $[4] !== side || $[5] !== sideOffset) { + t5 = /* @__PURE__ */jsxRuntime.jsx(T__namespace.Portal, { children: /* @__PURE__ */jsxRuntime.jsx(T__namespace.Content, { className: "graphiql-tooltip", align, @@ -69406,103 +76366,301 @@ function TooltipRoot({ sideOffset, children: label }) - })] - }); + }); + $[2] = align; + $[3] = label; + $[4] = side; + $[5] = sideOffset; + $[6] = t5; + } else { + t5 = $[6]; + } + let t6; + if ($[7] !== t4 || $[8] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsxs(T__namespace.Root, { + children: [t4, t5] + }); + $[7] = t4; + $[8] = t5; + $[9] = t6; + } else { + t6 = $[9]; + } + return t6; } const Tooltip = createComponentGroup(TooltipRoot, { Provider: T__namespace.Provider }); -const TabRoot = React.forwardRef(({ - isActive, - value, - children, - className, - ...props -}, ref) => /* @__PURE__ */jsxRuntime.jsx(framerMotion.Reorder.Item, { - ...props, - ref, - value, - "aria-selected": isActive ? "true" : void 0, - role: "tab", - className: clsx.clsx("graphiql-tab", isActive && "graphiql-tab-active", className), - children -})); +const TabRoot = React.forwardRef((t0, ref) => { + const $ = reactCompilerRuntime.c(16); + let children; + let className; + let isActive; + let props; + let value; + if ($[0] !== t0) { + ({ + isActive, + value, + children, + className, + ...props + } = t0); + $[0] = t0; + $[1] = children; + $[2] = className; + $[3] = isActive; + $[4] = props; + $[5] = value; + } else { + children = $[1]; + className = $[2]; + isActive = $[3]; + props = $[4]; + value = $[5]; + } + const t1 = isActive ? "true" : void 0; + const t2 = isActive && "graphiql-tab-active"; + let t3; + if ($[6] !== className || $[7] !== t2) { + t3 = clsx.clsx("graphiql-tab", t2, className); + $[6] = className; + $[7] = t2; + $[8] = t3; + } else { + t3 = $[8]; + } + let t4; + if ($[9] !== children || $[10] !== props || $[11] !== ref || $[12] !== t1 || $[13] !== t3 || $[14] !== value) { + t4 = /* @__PURE__ */jsxRuntime.jsx(framerMotion.Reorder.Item, { + ...props, + ref, + value, + "aria-selected": t1, + role: "tab", + className: t3, + children + }); + $[9] = children; + $[10] = props; + $[11] = ref; + $[12] = t1; + $[13] = t3; + $[14] = value; + $[15] = t4; + } else { + t4 = $[15]; + } + return t4; +}); TabRoot.displayName = "Tab"; -const TabButton = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx(UnStyledButton, { - ...props, - ref, - type: "button", - className: clsx.clsx("graphiql-tab-button", props.className), - children: props.children -})); +const TabButton = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(6); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-tab-button", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props || $[3] !== ref || $[4] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsx(UnStyledButton, { + ...props, + ref, + type: "button", + className: t0, + children: props.children + }); + $[2] = props; + $[3] = ref; + $[4] = t0; + $[5] = t1; + } else { + t1 = $[5]; + } + return t1; +}); TabButton.displayName = "Tab.Button"; -const TabClose = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx(Tooltip, { - label: "Close Tab", - children: /* @__PURE__ */jsxRuntime.jsx(UnStyledButton, { - "aria-label": "Close Tab", - ...props, - ref, - type: "button", - className: clsx.clsx("graphiql-tab-close", props.className), - children: /* @__PURE__ */jsxRuntime.jsx(CloseIcon, {}) - }) -})); +const TabClose = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(7); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-tab-close", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] === Symbol.for("react.memo_cache_sentinel")) { + t1 = /* @__PURE__ */jsxRuntime.jsx(CloseIcon, {}); + $[2] = t1; + } else { + t1 = $[2]; + } + let t2; + if ($[3] !== props || $[4] !== ref || $[5] !== t0) { + t2 = /* @__PURE__ */jsxRuntime.jsx(Tooltip, { + label: "Close Tab", + children: /* @__PURE__ */jsxRuntime.jsx(UnStyledButton, { + "aria-label": "Close Tab", + ...props, + ref, + type: "button", + className: t0, + children: t1 + }) + }); + $[3] = props; + $[4] = ref; + $[5] = t0; + $[6] = t2; + } else { + t2 = $[6]; + } + return t2; +}); TabClose.displayName = "Tab.Close"; const Tab = createComponentGroup(TabRoot, { Button: TabButton, Close: TabClose }); -const Tabs = React.forwardRef(({ - values, - onReorder, - children, - className, - ...props -}, ref) => /* @__PURE__ */jsxRuntime.jsx(framerMotion.Reorder.Group, { - ...props, - ref, - values, - onReorder, - axis: "x", - role: "tablist", - className: clsx.clsx("graphiql-tabs", className), - children -})); +const Tabs = React.forwardRef((t0, ref) => { + const $ = reactCompilerRuntime.c(15); + let children; + let className; + let onReorder; + let props; + let values; + if ($[0] !== t0) { + ({ + values, + onReorder, + children, + className, + ...props + } = t0); + $[0] = t0; + $[1] = children; + $[2] = className; + $[3] = onReorder; + $[4] = props; + $[5] = values; + } else { + children = $[1]; + className = $[2]; + onReorder = $[3]; + props = $[4]; + values = $[5]; + } + let t1; + if ($[6] !== className) { + t1 = clsx.clsx("graphiql-tabs", className); + $[6] = className; + $[7] = t1; + } else { + t1 = $[7]; + } + let t2; + if ($[8] !== children || $[9] !== onReorder || $[10] !== props || $[11] !== ref || $[12] !== t1 || $[13] !== values) { + t2 = /* @__PURE__ */jsxRuntime.jsx(framerMotion.Reorder.Group, { + ...props, + ref, + values, + onReorder, + axis: "x", + role: "tablist", + className: t1, + children + }); + $[8] = children; + $[9] = onReorder; + $[10] = props; + $[11] = ref; + $[12] = t1; + $[13] = values; + $[14] = t2; + } else { + t2 = $[14]; + } + return t2; +}); Tabs.displayName = "Tabs"; const HistoryContext = createNullableContext("HistoryContext"); -function HistoryContextProvider({ - maxHistoryLength = DEFAULT_HISTORY_LENGTH, - children -}) { - const storage = useStorageContext(); - const [historyStore] = React.useState(() => - // Fall back to a noop storage when the StorageContext is empty - new toolkit.HistoryStore(storage || new toolkit.StorageAPI(null), maxHistoryLength)); - const [items, setItems] = React.useState(() => historyStore.queries || []); - const value = React.useMemo(() => ({ - addToHistory(operation) { - historyStore.updateHistory(operation); - setItems(historyStore.queries); - }, - editLabel(operation, index) { - historyStore.editLabel(operation, index); - setItems(historyStore.queries); - }, - items, - toggleFavorite(operation) { - historyStore.toggleFavorite(operation); - setItems(historyStore.queries); - }, - setActive: item => item, - deleteFromHistory(item, clearFavorites) { - historyStore.deleteHistory(item, clearFavorites); - setItems(historyStore.queries); - } - }), [items, historyStore]); - return /* @__PURE__ */jsxRuntime.jsx(HistoryContext.Provider, { - value, +function HistoryContextProvider(t0) { + const $ = reactCompilerRuntime.c(11); + const { + maxHistoryLength: t1, children - }); + } = t0; + const maxHistoryLength = t1 === void 0 ? DEFAULT_HISTORY_LENGTH : t1; + const storage = useStorageContext(); + let t2; + if ($[0] !== maxHistoryLength || $[1] !== storage) { + t2 = () => new toolkit.HistoryStore(storage || new toolkit.StorageAPI(null), maxHistoryLength); + $[0] = maxHistoryLength; + $[1] = storage; + $[2] = t2; + } else { + t2 = $[2]; + } + const [historyStore] = React.useState(t2); + let t3; + if ($[3] !== historyStore.queries) { + t3 = () => historyStore.queries || []; + $[3] = historyStore.queries; + $[4] = t3; + } else { + t3 = $[4]; + } + const [items, setItems] = React.useState(t3); + let t4; + if ($[5] !== historyStore || $[6] !== items) { + t4 = { + addToHistory(operation) { + historyStore.updateHistory(operation); + setItems(historyStore.queries); + }, + editLabel(operation_0, index) { + historyStore.editLabel(operation_0, index); + setItems(historyStore.queries); + }, + items, + toggleFavorite(operation_1) { + historyStore.toggleFavorite(operation_1); + setItems(historyStore.queries); + }, + setActive: _temp$8, + deleteFromHistory(item_0, clearFavorites) { + historyStore.deleteHistory(item_0, clearFavorites); + setItems(historyStore.queries); + } + }; + $[5] = historyStore; + $[6] = items; + $[7] = t4; + } else { + t4 = $[7]; + } + const value = t4; + let t5; + if ($[8] !== children || $[9] !== value) { + t5 = /* @__PURE__ */jsxRuntime.jsx(HistoryContext.Provider, { + value, + children + }); + $[8] = children; + $[9] = value; + $[10] = t5; + } else { + t5 = $[10]; + } + return t5; +} +function _temp$8(item) { + return item; } const useHistoryContext = createContextHook(HistoryContext); const DEFAULT_HISTORY_LENGTH = 20; @@ -69517,9 +76675,9 @@ function History() { ...item, index: i })).reverse(); - const favorites = items.filter(item => item.favorite); + const favorites = items.filter(item_0 => item_0.favorite); if (favorites.length) { - items = items.filter(item => !item.favorite); + items = items.filter(item_1 => !item_1.favorite); } const [clearStatus, setClearStatus] = React.useState(null); React.useEffect(() => { @@ -69529,16 +76687,16 @@ function History() { }, 2e3); } }, [clearStatus]); - const handleClearStatus = React.useCallback(() => { + const handleClearStatus = () => { try { - for (const item of items) { - deleteFromHistory(item, true); + for (const item_2 of items) { + deleteFromHistory(item_2, true); } setClearStatus("success"); } catch { setClearStatus("error"); } - }, [deleteFromHistory, items]); + }; return /* @__PURE__ */jsxRuntime.jsxs("section", { "aria-label": "History", className: "graphiql-history", @@ -69556,101 +76714,202 @@ function History() { })] }), Boolean(favorites.length) && /* @__PURE__ */jsxRuntime.jsx("ul", { className: "graphiql-history-items", - children: favorites.map(item => /* @__PURE__ */jsxRuntime.jsx(HistoryItem, { - item - }, item.index)) + children: favorites.map(item_3 => /* @__PURE__ */jsxRuntime.jsx(HistoryItem, { + item: item_3 + }, item_3.index)) }), Boolean(favorites.length) && Boolean(items.length) && /* @__PURE__ */jsxRuntime.jsx("div", { className: "graphiql-history-item-spacer" }), Boolean(items.length) && /* @__PURE__ */jsxRuntime.jsx("ul", { className: "graphiql-history-items", - children: items.map(item => /* @__PURE__ */jsxRuntime.jsx(HistoryItem, { - item - }, item.index)) + children: items.map(item_4 => /* @__PURE__ */jsxRuntime.jsx(HistoryItem, { + item: item_4 + }, item_4.index)) })] }); } function HistoryItem(props) { + const $ = reactCompilerRuntime.c(40); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + nonNull: true, + caller: HistoryItem + }; + $[0] = t0; + } else { + t0 = $[0]; + } const { editLabel, toggleFavorite, deleteFromHistory, setActive - } = useHistoryContext({ - nonNull: true, - caller: HistoryItem - }); + } = useHistoryContext(t0); + let t1; + if ($[1] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: HistoryItem + }; + $[1] = t1; + } else { + t1 = $[1]; + } const { headerEditor, queryEditor, variableEditor - } = useEditorContext({ - nonNull: true, - caller: HistoryItem - }); + } = useEditorContext(t1); const inputRef = React.useRef(null); const buttonRef = React.useRef(null); const [isEditable, setIsEditable] = React.useState(false); - React.useEffect(() => { - var _a; - if (isEditable) { - (_a = inputRef.current) == null ? void 0 : _a.focus(); - } - }, [isEditable]); - const displayName = props.item.label || props.item.operationName || formatQuery(props.item.query); - const handleSave = React.useCallback(() => { - var _a; - setIsEditable(false); - const { - index, - ...item - } = props.item; - editLabel({ - ...item, - label: (_a = inputRef.current) == null ? void 0 : _a.value - }, index); - }, [editLabel, props.item]); - const handleClose = React.useCallback(() => { - setIsEditable(false); - }, []); - const handleEditLabel = React.useCallback(e => { - e.stopPropagation(); - setIsEditable(true); - }, []); - const handleHistoryItemClick = React.useCallback(() => { - const { - query, - variables, - headers - } = props.item; - queryEditor == null ? void 0 : queryEditor.setValue(query !== null && query !== void 0 ? query : ""); - variableEditor == null ? void 0 : variableEditor.setValue(variables !== null && variables !== void 0 ? variables : ""); - headerEditor == null ? void 0 : headerEditor.setValue(headers !== null && headers !== void 0 ? headers : ""); - setActive(props.item); - }, [headerEditor, props.item, queryEditor, setActive, variableEditor]); - const handleDeleteItemFromHistory = React.useCallback(e => { - e.stopPropagation(); - deleteFromHistory(props.item); - }, [props.item, deleteFromHistory]); - const handleToggleFavorite = React.useCallback(e => { - e.stopPropagation(); - toggleFavorite(props.item); - }, [props.item, toggleFavorite]); - return /* @__PURE__ */jsxRuntime.jsx("li", { - className: clsx.clsx("graphiql-history-item", isEditable && "editable"), - children: isEditable ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + let t2; + let t3; + if ($[2] !== isEditable) { + t2 = () => { + var _a; + if (isEditable) { + (_a = inputRef.current) == null ? void 0 : _a.focus(); + } + }; + t3 = [isEditable]; + $[2] = isEditable; + $[3] = t2; + $[4] = t3; + } else { + t2 = $[3]; + t3 = $[4]; + } + React.useEffect(t2, t3); + let t4; + if ($[5] !== props.item.label || $[6] !== props.item.operationName || $[7] !== props.item.query) { + t4 = props.item.label || props.item.operationName || formatQuery(props.item.query); + $[5] = props.item.label; + $[6] = props.item.operationName; + $[7] = props.item.query; + $[8] = t4; + } else { + t4 = $[8]; + } + const displayName = t4; + let t5; + if ($[9] !== editLabel || $[10] !== props.item) { + t5 = () => { + var _a; + setIsEditable(false); + const { + index, + ...item + } = props.item; + editLabel({ + ...item, + label: (_a = inputRef.current) == null ? void 0 : _a.value + }, index); + }; + $[9] = editLabel; + $[10] = props.item; + $[11] = t5; + } else { + t5 = $[11]; + } + const handleSave = t5; + let t6; + if ($[12] === Symbol.for("react.memo_cache_sentinel")) { + t6 = () => { + setIsEditable(false); + }; + $[12] = t6; + } else { + t6 = $[12]; + } + const handleClose = t6; + let t7; + if ($[13] === Symbol.for("react.memo_cache_sentinel")) { + t7 = e => { + e.stopPropagation(); + setIsEditable(true); + }; + $[13] = t7; + } else { + t7 = $[13]; + } + const handleEditLabel = t7; + let t8; + if ($[14] !== headerEditor || $[15] !== props.item || $[16] !== queryEditor || $[17] !== setActive || $[18] !== variableEditor) { + t8 = () => { + const { + query, + variables, + headers + } = props.item; + queryEditor == null ? void 0 : queryEditor.setValue(query !== null && query !== void 0 ? query : ""); + variableEditor == null ? void 0 : variableEditor.setValue(variables !== null && variables !== void 0 ? variables : ""); + headerEditor == null ? void 0 : headerEditor.setValue(headers !== null && headers !== void 0 ? headers : ""); + setActive(props.item); + }; + $[14] = headerEditor; + $[15] = props.item; + $[16] = queryEditor; + $[17] = setActive; + $[18] = variableEditor; + $[19] = t8; + } else { + t8 = $[19]; + } + const handleHistoryItemClick = t8; + let t9; + if ($[20] !== deleteFromHistory || $[21] !== props.item) { + t9 = e_0 => { + e_0.stopPropagation(); + deleteFromHistory(props.item); + }; + $[20] = deleteFromHistory; + $[21] = props.item; + $[22] = t9; + } else { + t9 = $[22]; + } + const handleDeleteItemFromHistory = t9; + let t10; + if ($[23] !== props.item || $[24] !== toggleFavorite) { + t10 = e_1 => { + e_1.stopPropagation(); + toggleFavorite(props.item); + }; + $[23] = props.item; + $[24] = toggleFavorite; + $[25] = t10; + } else { + t10 = $[25]; + } + const handleToggleFavorite = t10; + const t11 = isEditable && "editable"; + let t12; + if ($[26] !== t11) { + t12 = clsx.clsx("graphiql-history-item", t11); + $[26] = t11; + $[27] = t12; + } else { + t12 = $[27]; + } + let t13; + if ($[28] !== displayName || $[29] !== editLabel || $[30] !== handleDeleteItemFromHistory || $[31] !== handleHistoryItemClick || $[32] !== handleSave || $[33] !== handleToggleFavorite || $[34] !== isEditable || $[35] !== props.item) { + t13 = isEditable ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [/* @__PURE__ */jsxRuntime.jsx("input", { type: "text", defaultValue: props.item.label, ref: inputRef, - onKeyDown: e => { - if (e.key === "Esc") { + onKeyDown: e_2 => { + if (e_2.key === "Esc") { setIsEditable(false); - } else if (e.key === "Enter") { - setIsEditable(false); - editLabel({ - ...props.item, - label: e.currentTarget.value - }); + } else { + if (e_2.key === "Enter") { + setIsEditable(false); + editLabel({ + ...props.item, + label: e_2.currentTarget.value + }); + } } }, placeholder: "Type a label" @@ -69711,22 +76970,58 @@ function HistoryItem(props) { }) }) })] - }) - }); + }); + $[28] = displayName; + $[29] = editLabel; + $[30] = handleDeleteItemFromHistory; + $[31] = handleHistoryItemClick; + $[32] = handleSave; + $[33] = handleToggleFavorite; + $[34] = isEditable; + $[35] = props.item; + $[36] = t13; + } else { + t13 = $[36]; + } + let t14; + if ($[37] !== t12 || $[38] !== t13) { + t14 = /* @__PURE__ */jsxRuntime.jsx("li", { + className: t12, + children: t13 + }); + $[37] = t12; + $[38] = t13; + $[39] = t14; + } else { + t14 = $[39]; + } + return t14; } function formatQuery(query) { return query == null ? void 0 : query.split("\n").map(line => line.replace(/#(.*)/, "")).join(" ").replaceAll("{", " { ").replaceAll("}", " } ").replaceAll(/[\s]{2,}/g, " "); } const ExecutionContext = createNullableContext("ExecutionContext"); -function ExecutionContextProvider({ - fetcher, - getDefaultFieldNames, - children, - operationName -}) { +function ExecutionContextProvider(t0) { + const $ = reactCompilerRuntime.c(27); + const { + fetcher, + getDefaultFieldNames, + children, + operationName + } = t0; if (!fetcher) { throw new TypeError("The `ExecutionContextProvider` component requires a `fetcher` function to be passed as prop."); } + let t1; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: ExecutionContextProvider + }; + $[0] = t1; + } else { + t1 = $[0]; + } const { externalFragments, headerEditor, @@ -69734,162 +77029,228 @@ function ExecutionContextProvider({ responseEditor, variableEditor, updateActiveTabValues - } = useEditorContext({ - nonNull: true, - caller: ExecutionContextProvider - }); + } = useEditorContext(t1); const history = useHistoryContext(); - const autoCompleteLeafs = useAutoCompleteLeafs({ - getDefaultFieldNames, - caller: ExecutionContextProvider - }); + let t2; + if ($[1] !== getDefaultFieldNames) { + t2 = { + getDefaultFieldNames, + caller: ExecutionContextProvider + }; + $[1] = getDefaultFieldNames; + $[2] = t2; + } else { + t2 = $[2]; + } + const autoCompleteLeafs = useAutoCompleteLeafs(t2); const [isFetching, setIsFetching] = React.useState(false); const [subscription, setSubscription] = React.useState(null); const queryIdRef = React.useRef(0); - const stop = React.useCallback(() => { - subscription == null ? void 0 : subscription.unsubscribe(); - setIsFetching(false); - setSubscription(null); - }, [subscription]); - const run = React.useCallback(async () => { - var _ref; - if (!queryEditor || !responseEditor) { - return; - } - if (subscription) { - stop(); - return; - } - const setResponse = value2 => { - responseEditor.setValue(value2); - updateActiveTabValues({ - response: value2 - }); - }; - queryIdRef.current += 1; - const queryId = queryIdRef.current; - let query = autoCompleteLeafs() || queryEditor.getValue(); - const variablesString = variableEditor == null ? void 0 : variableEditor.getValue(); - let variables; - try { - variables = tryParseJsonObject({ - json: variablesString, - errorMessageParse: "Variables are invalid JSON", - errorMessageType: "Variables are not a JSON object." - }); - } catch (error) { - setResponse(error instanceof Error ? error.message : `${error}`); - return; - } - const headersString = headerEditor == null ? void 0 : headerEditor.getValue(); - let headers; - try { - headers = tryParseJsonObject({ - json: headersString, - errorMessageParse: "Headers are invalid JSON", - errorMessageType: "Headers are not a JSON object." - }); - } catch (error) { - setResponse(error instanceof Error ? error.message : `${error}`); - return; - } - if (externalFragments) { - const fragmentDependencies = queryEditor.documentAST ? graphqlLanguageService.getFragmentDependenciesForAST(queryEditor.documentAST, externalFragments) : []; - if (fragmentDependencies.length > 0) { - query += "\n" + fragmentDependencies.map(node => graphql.print(node)).join("\n"); - } - } - setResponse(""); - setIsFetching(true); - const opName = (_ref = operationName !== null && operationName !== void 0 ? operationName : queryEditor.operationName) !== null && _ref !== void 0 ? _ref : void 0; - history == null ? void 0 : history.addToHistory({ - query, - variables: variablesString, - headers: headersString, - operationName: opName - }); - try { - var _headers, _queryEditor$document; - const fullResponse = {}; - const handleResponse = result => { - if (queryId !== queryIdRef.current) { - return; - } - let maybeMultipart = Array.isArray(result) ? result : false; - if (!maybeMultipart && typeof result === "object" && result !== null && "hasNext" in result) { - maybeMultipart = [result]; - } - if (maybeMultipart) { - for (const part of maybeMultipart) { - mergeIncrementalResult(fullResponse, part); - } - setIsFetching(false); - setResponse(toolkit.formatResult(fullResponse)); - } else { - const response = toolkit.formatResult(result); - setIsFetching(false); - setResponse(response); - } - }; - const fetch2 = fetcher({ - query, - variables, - operationName: opName - }, { - headers: (_headers = headers) !== null && _headers !== void 0 ? _headers : void 0, - documentAST: (_queryEditor$document = queryEditor.documentAST) !== null && _queryEditor$document !== void 0 ? _queryEditor$document : void 0 - }); - const value2 = await Promise.resolve(fetch2); - if (toolkit.isObservable(value2)) { - setSubscription(value2.subscribe({ - next(result) { - handleResponse(result); - }, - error(error) { - setIsFetching(false); - if (error) { - setResponse(toolkit.formatError(error)); - } - setSubscription(null); - }, - complete() { - setIsFetching(false); - setSubscription(null); - } - })); - } else if (toolkit.isAsyncIterable(value2)) { - setSubscription({ - unsubscribe: () => { - var _a, _b; - return (_b = (_a = value2[Symbol.asyncIterator]()).return) == null ? void 0 : _b.call(_a); - } - }); - for await (const result of value2) { - handleResponse(result); - } - setIsFetching(false); - setSubscription(null); - } else { - handleResponse(value2); - } - } catch (error) { + let t3; + if ($[3] !== subscription) { + t3 = () => { + subscription == null ? void 0 : subscription.unsubscribe(); setIsFetching(false); - setResponse(toolkit.formatError(error)); setSubscription(null); - } - }, [autoCompleteLeafs, externalFragments, fetcher, headerEditor, history, operationName, queryEditor, responseEditor, stop, subscription, updateActiveTabValues, variableEditor]); + }; + $[3] = subscription; + $[4] = t3; + } else { + t3 = $[4]; + } + const stop = t3; + let t4; + if ($[5] !== autoCompleteLeafs || $[6] !== externalFragments || $[7] !== fetcher || $[8] !== headerEditor || $[9] !== history || $[10] !== operationName || $[11] !== queryEditor || $[12] !== responseEditor || $[13] !== stop || $[14] !== subscription || $[15] !== updateActiveTabValues || $[16] !== variableEditor) { + t4 = async () => { + var _ref, _headers2, _queryEditor$document; + if (!queryEditor || !responseEditor) { + return; + } + if (subscription) { + stop(); + return; + } + const setResponse = value => { + responseEditor.setValue(value); + updateActiveTabValues({ + response: value + }); + }; + queryIdRef.current = queryIdRef.current + 1; + const queryId = queryIdRef.current; + let query = autoCompleteLeafs() || queryEditor.getValue(); + const variablesString = variableEditor == null ? void 0 : variableEditor.getValue(); + let variables; + try { + variables = tryParseJsonObject({ + json: variablesString, + errorMessageParse: "Variables are invalid JSON", + errorMessageType: "Variables are not a JSON object." + }); + } catch (t52) { + const error = t52; + setResponse(error instanceof Error ? error.message : `${error}`); + return; + } + const headersString = headerEditor == null ? void 0 : headerEditor.getValue(); + let headers; + try { + headers = tryParseJsonObject({ + json: headersString, + errorMessageParse: "Headers are invalid JSON", + errorMessageType: "Headers are not a JSON object." + }); + } catch (t62) { + const error_0 = t62; + setResponse(error_0 instanceof Error ? error_0.message : `${error_0}`); + return; + } + if (externalFragments) { + const fragmentDependencies = queryEditor.documentAST ? graphqlLanguageService.getFragmentDependenciesForAST(queryEditor.documentAST, externalFragments) : []; + if (fragmentDependencies.length > 0) { + query = query + ("\n" + fragmentDependencies.map(_temp$7).join("\n")); + } + } + setResponse(""); + setIsFetching(true); + const opName = (_ref = operationName !== null && operationName !== void 0 ? operationName : queryEditor.operationName) !== null && _ref !== void 0 ? _ref : void 0; + history == null ? void 0 : history.addToHistory({ + query, + variables: variablesString, + headers: headersString, + operationName: opName + }); + const _headers = (_headers2 = headers) !== null && _headers2 !== void 0 ? _headers2 : void 0; + const documentAST = (_queryEditor$document = queryEditor.documentAST) !== null && _queryEditor$document !== void 0 ? _queryEditor$document : void 0; + try { + const fullResponse = {}; + const handleResponse = result => { + if (queryId !== queryIdRef.current) { + return; + } + let maybeMultipart = Array.isArray(result) ? result : false; + if (!maybeMultipart && typeof result === "object" && result !== null && "hasNext" in result) { + maybeMultipart = [result]; + } + if (maybeMultipart) { + for (const part of maybeMultipart) { + mergeIncrementalResult(fullResponse, part); + } + setIsFetching(false); + setResponse(toolkit.formatResult(fullResponse)); + } else { + const response = toolkit.formatResult(result); + setIsFetching(false); + setResponse(response); + } + }; + const fetch2 = fetcher({ + query, + variables, + operationName: opName + }, { + headers: _headers, + documentAST + }); + const value_0 = await Promise.resolve(fetch2); + if (toolkit.isObservable(value_0)) { + setSubscription(value_0.subscribe({ + next(result_0) { + handleResponse(result_0); + }, + error(error_2) { + setIsFetching(false); + if (error_2) { + setResponse(toolkit.formatError(error_2)); + } + setSubscription(null); + }, + complete() { + setIsFetching(false); + setSubscription(null); + } + })); + } else { + if (toolkit.isAsyncIterable(value_0)) { + setSubscription({ + unsubscribe: () => { + var _a, _b; + return (_b = (_a = value_0[Symbol.asyncIterator]()).return) == null ? void 0 : _b.call(_a); + } + }); + await handleAsyncResults(handleResponse, value_0); + setIsFetching(false); + setSubscription(null); + } else { + handleResponse(value_0); + } + } + } catch (t72) { + const error_1 = t72; + setIsFetching(false); + setResponse(toolkit.formatError(error_1)); + setSubscription(null); + } + }; + $[5] = autoCompleteLeafs; + $[6] = externalFragments; + $[7] = fetcher; + $[8] = headerEditor; + $[9] = history; + $[10] = operationName; + $[11] = queryEditor; + $[12] = responseEditor; + $[13] = stop; + $[14] = subscription; + $[15] = updateActiveTabValues; + $[16] = variableEditor; + $[17] = t4; + } else { + t4 = $[17]; + } + const run = t4; const isSubscribed = Boolean(subscription); - const value = React.useMemo(() => ({ - isFetching, - isSubscribed, - operationName: operationName !== null && operationName !== void 0 ? operationName : null, - run, - stop - }), [isFetching, isSubscribed, operationName, run, stop]); - return /* @__PURE__ */jsxRuntime.jsx(ExecutionContext.Provider, { - value, - children - }); + const t5 = operationName !== null && operationName !== void 0 ? operationName : null; + let t6; + if ($[18] !== isFetching || $[19] !== isSubscribed || $[20] !== run || $[21] !== stop || $[22] !== t5) { + t6 = { + isFetching, + isSubscribed, + operationName: t5, + run, + stop + }; + $[18] = isFetching; + $[19] = isSubscribed; + $[20] = run; + $[21] = stop; + $[22] = t5; + $[23] = t6; + } else { + t6 = $[23]; + } + const value_1 = t6; + let t7; + if ($[24] !== children || $[25] !== value_1) { + t7 = /* @__PURE__ */jsxRuntime.jsx(ExecutionContext.Provider, { + value: value_1, + children + }); + $[24] = children; + $[25] = value_1; + $[26] = t7; + } else { + t7 = $[26]; + } + return t7; +} +function _temp$7(node) { + return graphql.print(node); +} +async function handleAsyncResults(onResponse, value) { + for await (const result of value) { + onResponse(result); + } } const useExecutionContext = createContextHook(ExecutionContext); function tryParseJsonObject({ @@ -70017,13 +77378,12 @@ const commonKeys = { "Alt-Right": "goGroupRight" }; async function importCodeMirror(addons, options) { - const CodeMirror = await Promise.resolve().then(() => __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js")).then(n => n.codemirror).then(c => + const CodeMirror = await Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"))).then(c => // Depending on bundler and settings the dynamic import either returns a // function (e.g. parcel) or an object containing a `default` property typeof c === "function" ? c : c.default); - await Promise.all((options == null ? void 0 : options.useCommonAddons) === false ? addons : [Promise.resolve().then(() => __webpack_require__(/*! ./show-hint.cjs.js */ "../../graphiql-react/dist/show-hint.cjs.js")).then(n => n.showHint), Promise.resolve().then(() => __webpack_require__(/*! ./matchbrackets.cjs.js */ "../../graphiql-react/dist/matchbrackets.cjs.js")).then(n => n.matchbrackets), Promise.resolve().then(() => __webpack_require__(/*! ./closebrackets.cjs.js */ "../../graphiql-react/dist/closebrackets.cjs.js")).then(n => n.closebrackets), Promise.resolve().then(() => __webpack_require__(/*! ./brace-fold.cjs.js */ "../../graphiql-react/dist/brace-fold.cjs.js")).then(n => n.braceFold), Promise.resolve().then(() => __webpack_require__(/*! ./foldgutter.cjs.js */ "../../graphiql-react/dist/foldgutter.cjs.js")).then(n => n.foldgutter), Promise.resolve().then(() => __webpack_require__(/*! ./lint.cjs.js */ "../../graphiql-react/dist/lint.cjs.js")).then(n => n.lint), Promise.resolve().then(() => __webpack_require__(/*! ./searchcursor.cjs.js */ "../../graphiql-react/dist/searchcursor.cjs.js")).then(n => n.searchcursor), Promise.resolve().then(() => __webpack_require__(/*! ./jump-to-line.cjs.js */ "../../graphiql-react/dist/jump-to-line.cjs.js")).then(n => n.jumpToLine), Promise.resolve().then(() => __webpack_require__(/*! ./dialog.cjs.js */ "../../graphiql-react/dist/dialog.cjs.js")).then(n => n.dialog), - // @ts-expect-error - Promise.resolve().then(() => __webpack_require__(/*! ./sublime.cjs.js */ "../../graphiql-react/dist/sublime.cjs.js")).then(n => n.sublime), ...addons]); + await Promise.all((options == null ? void 0 : options.useCommonAddons) === false ? addons : [Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/hint/show-hint.js */ "../../../node_modules/codemirror/addon/hint/show-hint.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/edit/matchbrackets.js */ "../../../node_modules/codemirror/addon/edit/matchbrackets.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/edit/closebrackets.js */ "../../../node_modules/codemirror/addon/edit/closebrackets.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/fold/brace-fold.js */ "../../../node_modules/codemirror/addon/fold/brace-fold.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/fold/foldgutter.js */ "../../../node_modules/codemirror/addon/fold/foldgutter.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/lint/lint.js */ "../../../node_modules/codemirror/addon/lint/lint.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/search/searchcursor.js */ "../../../node_modules/codemirror/addon/search/searchcursor.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/search/jump-to-line.js */ "../../../node_modules/codemirror/addon/search/jump-to-line.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/dialog/dialog.js */ "../../../node_modules/codemirror/addon/dialog/dialog.js"))), // @ts-expect-error + Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/keymap/sublime.js */ "../../../node_modules/codemirror/keymap/sublime.js"))), ...addons]); return CodeMirror; } const printDefault = ast => { @@ -70032,158 +77392,320 @@ const printDefault = ast => { } return graphql.print(ast); }; -function DefaultValue({ - field -}) { +function DefaultValue(t0) { + const $ = reactCompilerRuntime.c(12); + const { + field + } = t0; if (!("defaultValue" in field) || field.defaultValue === void 0) { return null; } - const ast = graphql.astFromValue(field.defaultValue, field.type); - if (!ast) { - return null; + const t1 = field.defaultValue; + const t2 = field.type; + let t3; + let t4; + let t5; + let t6; + if ($[0] !== field.defaultValue || $[1] !== field.type) { + t6 = Symbol.for("react.early_return_sentinel"); + bb0: { + const ast = graphql.astFromValue(t1, t2); + if (!ast) { + t6 = null; + break bb0; + } + t5 = " = "; + t3 = "graphiql-doc-explorer-default-value"; + t4 = printDefault(ast); + } + $[0] = field.defaultValue; + $[1] = field.type; + $[2] = t3; + $[3] = t4; + $[4] = t5; + $[5] = t6; + } else { + t3 = $[2]; + t4 = $[3]; + t5 = $[4]; + t6 = $[5]; } - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [" = ", /* @__PURE__ */jsxRuntime.jsx("span", { - className: "graphiql-doc-explorer-default-value", - children: printDefault(ast) - })] - }); + if (t6 !== Symbol.for("react.early_return_sentinel")) { + return t6; + } + let t7; + if ($[6] !== t3 || $[7] !== t4) { + t7 = /* @__PURE__ */jsxRuntime.jsx("span", { + className: t3, + children: t4 + }); + $[6] = t3; + $[7] = t4; + $[8] = t7; + } else { + t7 = $[8]; + } + let t8; + if ($[9] !== t5 || $[10] !== t7) { + t8 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t5, t7] + }); + $[9] = t5; + $[10] = t7; + $[11] = t8; + } else { + t8 = $[11]; + } + return t8; } const SchemaContext = createNullableContext("SchemaContext"); -function SchemaContextProvider(props) { - if (!props.fetcher) { +function SchemaContextProvider(t0) { + const $ = reactCompilerRuntime.c(38); + let fetcher; + let onSchemaChange; + let props; + if ($[0] !== t0) { + ({ + fetcher, + onSchemaChange, + ...props + } = t0); + $[0] = t0; + $[1] = fetcher; + $[2] = onSchemaChange; + $[3] = props; + } else { + fetcher = $[1]; + onSchemaChange = $[2]; + props = $[3]; + } + if (!fetcher) { throw new TypeError("The `SchemaContextProvider` component requires a `fetcher` function to be passed as prop."); } + let t1; + if ($[4] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: SchemaContextProvider + }; + $[4] = t1; + } else { + t1 = $[4]; + } const { initialHeaders, headerEditor - } = useEditorContext({ - nonNull: true, - caller: SchemaContextProvider - }); + } = useEditorContext(t1); const [schema, setSchema] = React.useState(); const [isFetching, setIsFetching] = React.useState(false); const [fetchError, setFetchError] = React.useState(null); const counterRef = React.useRef(0); - React.useEffect(() => { - setSchema(graphql.isSchema(props.schema) || props.schema === null || props.schema === void 0 ? props.schema : void 0); - counterRef.current++; - }, [props.schema]); + let t2; + let t3; + if ($[5] !== props.schema) { + t2 = () => { + setSchema(graphql.isSchema(props.schema) || props.schema == null ? props.schema : void 0); + counterRef.current = counterRef.current + 1; + }; + t3 = [props.schema]; + $[5] = props.schema; + $[6] = t2; + $[7] = t3; + } else { + t2 = $[6]; + t3 = $[7]; + } + React.useEffect(t2, t3); const headersRef = React.useRef(initialHeaders); - React.useEffect(() => { - if (headerEditor) { - headersRef.current = headerEditor.getValue(); - } - }); + let t4; + if ($[8] !== headerEditor) { + t4 = () => { + if (headerEditor) { + headersRef.current = headerEditor.getValue(); + } + }; + $[8] = headerEditor; + $[9] = t4; + } else { + t4 = $[9]; + } + React.useEffect(t4); + let t5; + if ($[10] !== props.inputValueDeprecation || $[11] !== props.introspectionQueryName || $[12] !== props.schemaDescription) { + t5 = { + inputValueDeprecation: props.inputValueDeprecation, + introspectionQueryName: props.introspectionQueryName, + schemaDescription: props.schemaDescription + }; + $[10] = props.inputValueDeprecation; + $[11] = props.introspectionQueryName; + $[12] = props.schemaDescription; + $[13] = t5; + } else { + t5 = $[13]; + } const { introspectionQuery, introspectionQueryName, introspectionQuerySansSubscriptions - } = useIntrospectionQuery({ - inputValueDeprecation: props.inputValueDeprecation, - introspectionQueryName: props.introspectionQueryName, - schemaDescription: props.schemaDescription - }); - const { - fetcher, - onSchemaChange, - dangerouslyAssumeSchemaIsValid, - children - } = props; - const introspect = React.useCallback(() => { - if (graphql.isSchema(props.schema) || props.schema === null) { - return; - } - const counter = ++counterRef.current; - const maybeIntrospectionData = props.schema; - async function fetchIntrospectionData() { - if (maybeIntrospectionData) { - return maybeIntrospectionData; - } - const parsedHeaders = parseHeaderString(headersRef.current); - if (!parsedHeaders.isValidJSON) { - setFetchError("Introspection failed as headers are invalid."); + } = useIntrospectionQuery(t5); + let t6; + if ($[14] !== fetcher || $[15] !== introspectionQuery || $[16] !== introspectionQueryName || $[17] !== introspectionQuerySansSubscriptions || $[18] !== onSchemaChange || $[19] !== props.schema) { + t6 = () => { + if (graphql.isSchema(props.schema) || props.schema === null) { return; } - const fetcherOpts = parsedHeaders.headers ? { - headers: parsedHeaders.headers - } : {}; - const fetch2 = toolkit.fetcherReturnToPromise(fetcher({ - query: introspectionQuery, - operationName: introspectionQueryName - }, fetcherOpts)); - if (!toolkit.isPromise(fetch2)) { - setFetchError("Fetcher did not return a Promise for introspection."); - return; - } - setIsFetching(true); - setFetchError(null); - let result = await fetch2; - if (typeof result !== "object" || result === null || !("data" in result)) { - const fetch22 = toolkit.fetcherReturnToPromise(fetcher({ - query: introspectionQuerySansSubscriptions, + const counter = counterRef.current = counterRef.current + 1; + const maybeIntrospectionData = props.schema; + const fetchIntrospectionData = async function fetchIntrospectionData2() { + if (maybeIntrospectionData) { + return maybeIntrospectionData; + } + const parsedHeaders = parseHeaderString(headersRef.current); + if (!parsedHeaders.isValidJSON) { + setFetchError("Introspection failed as headers are invalid."); + return; + } + const fetcherOpts = parsedHeaders.headers ? { + headers: parsedHeaders.headers + } : {}; + const fetch2 = toolkit.fetcherReturnToPromise(fetcher({ + query: introspectionQuery, operationName: introspectionQueryName }, fetcherOpts)); - if (!toolkit.isPromise(fetch22)) { - throw new Error("Fetcher did not return a Promise for introspection."); + if (!toolkit.isPromise(fetch2)) { + setFetchError("Fetcher did not return a Promise for introspection."); + return; } - result = await fetch22; - } - setIsFetching(false); - if ((result == null ? void 0 : result.data) && "__schema" in result.data) { - return result.data; - } - const responseString = typeof result === "string" ? result : toolkit.formatResult(result); - setFetchError(responseString); - } - fetchIntrospectionData().then(introspectionData => { - if (counter !== counterRef.current || !introspectionData) { - return; - } - try { - const newSchema = graphql.buildClientSchema(introspectionData); - setSchema(newSchema); - onSchemaChange == null ? void 0 : onSchemaChange(newSchema); - } catch (error) { - setFetchError(toolkit.formatError(error)); - } - }).catch(error => { - if (counter !== counterRef.current) { - return; - } - setFetchError(toolkit.formatError(error)); - setIsFetching(false); + setIsFetching(true); + setFetchError(null); + let result = await fetch2; + if (typeof result !== "object" || result === null || !("data" in result)) { + const fetch22 = toolkit.fetcherReturnToPromise(fetcher({ + query: introspectionQuerySansSubscriptions, + operationName: introspectionQueryName + }, fetcherOpts)); + if (!toolkit.isPromise(fetch22)) { + throw new Error("Fetcher did not return a Promise for introspection."); + } + result = await fetch22; + } + setIsFetching(false); + if ((result == null ? void 0 : result.data) && "__schema" in result.data) { + return result.data; + } + const responseString = typeof result === "string" ? result : toolkit.formatResult(result); + setFetchError(responseString); + }; + fetchIntrospectionData().then(introspectionData => { + if (counter !== counterRef.current || !introspectionData) { + return; + } + try { + const newSchema = graphql.buildClientSchema(introspectionData); + setSchema(newSchema); + if (onSchemaChange) { + onSchemaChange(newSchema); + } + } catch (t72) { + const error = t72; + setFetchError(toolkit.formatError(error)); + } + }).catch(error_0 => { + if (counter !== counterRef.current) { + return; + } + setFetchError(toolkit.formatError(error_0)); + setIsFetching(false); + }); + }; + $[14] = fetcher; + $[15] = introspectionQuery; + $[16] = introspectionQueryName; + $[17] = introspectionQuerySansSubscriptions; + $[18] = onSchemaChange; + $[19] = props.schema; + $[20] = t6; + } else { + t6 = $[20]; + } + const introspect = t6; + let t7; + let t8; + if ($[21] !== introspect) { + t7 = () => { + introspect(); + }; + t8 = [introspect]; + $[21] = introspect; + $[22] = t7; + $[23] = t8; + } else { + t7 = $[22]; + t8 = $[23]; + } + React.useEffect(t7, t8); + let t9; + if ($[24] !== introspect) { + t9 = () => { + const triggerIntrospection = function triggerIntrospection2(event) { + if (event.ctrlKey && event.key === "R") { + introspect(); + } + }; + window.addEventListener("keydown", triggerIntrospection); + return () => { + window.removeEventListener("keydown", triggerIntrospection); + }; + }; + $[24] = introspect; + $[25] = t9; + } else { + t9 = $[25]; + } + React.useEffect(t9); + let t10; + if ($[26] !== props.dangerouslyAssumeSchemaIsValid || $[27] !== schema) { + t10 = !schema || props.dangerouslyAssumeSchemaIsValid ? [] : graphql.validateSchema(schema); + $[26] = props.dangerouslyAssumeSchemaIsValid; + $[27] = schema; + $[28] = t10; + } else { + t10 = $[28]; + } + const validationErrors = t10; + let t11; + if ($[29] !== fetchError || $[30] !== introspect || $[31] !== isFetching || $[32] !== schema || $[33] !== validationErrors) { + t11 = { + fetchError, + introspect, + isFetching, + schema, + validationErrors + }; + $[29] = fetchError; + $[30] = introspect; + $[31] = isFetching; + $[32] = schema; + $[33] = validationErrors; + $[34] = t11; + } else { + t11 = $[34]; + } + const value = t11; + let t12; + if ($[35] !== props.children || $[36] !== value) { + t12 = /* @__PURE__ */jsxRuntime.jsx(SchemaContext.Provider, { + value, + children: props.children }); - }, [fetcher, introspectionQueryName, introspectionQuery, introspectionQuerySansSubscriptions, onSchemaChange, props.schema]); - React.useEffect(() => { - introspect(); - }, [introspect]); - React.useEffect(() => { - function triggerIntrospection(event) { - if (event.ctrlKey && event.key === "R") { - introspect(); - } - } - window.addEventListener("keydown", triggerIntrospection); - return () => window.removeEventListener("keydown", triggerIntrospection); - }); - const validationErrors = React.useMemo(() => { - if (!schema || dangerouslyAssumeSchemaIsValid) { - return []; - } - return graphql.validateSchema(schema); - }, [schema, dangerouslyAssumeSchemaIsValid]); - const value = React.useMemo(() => ({ - fetchError, - introspect, - isFetching, - schema, - validationErrors - }), [fetchError, introspect, isFetching, schema, validationErrors]); - return /* @__PURE__ */jsxRuntime.jsx(SchemaContext.Provider, { - value, - children - }); + $[35] = props.children; + $[36] = value; + $[37] = t12; + } else { + t12 = $[37]; + } + return t12; } const useSchemaContext = createContextHook(SchemaContext); function useIntrospectionQuery({ @@ -70191,22 +77713,20 @@ function useIntrospectionQuery({ introspectionQueryName, schemaDescription }) { - return React.useMemo(() => { - const queryName = introspectionQueryName || "IntrospectionQuery"; - let query = graphql.getIntrospectionQuery({ - inputValueDeprecation, - schemaDescription - }); - if (introspectionQueryName) { - query = query.replace("query IntrospectionQuery", `query ${queryName}`); - } - const querySansSubscriptions = query.replace("subscriptionType { name }", ""); - return { - introspectionQueryName: queryName, - introspectionQuery: query, - introspectionQuerySansSubscriptions: querySansSubscriptions - }; - }, [inputValueDeprecation, introspectionQueryName, schemaDescription]); + const queryName = introspectionQueryName || "IntrospectionQuery"; + let query = graphql.getIntrospectionQuery({ + inputValueDeprecation, + schemaDescription + }); + if (introspectionQueryName) { + query = query.replace("query IntrospectionQuery", `query ${queryName}`); + } + const querySansSubscriptions = query.replace("subscriptionType { name }", ""); + return { + introspectionQueryName: queryName, + introspectionQuery: query, + introspectionQuerySansSubscriptions: querySansSubscriptions + }; } function parseHeaderString(headersString) { let headers = null; @@ -70228,99 +77748,175 @@ const initialNavStackItem = { }; const ExplorerContext = createNullableContext("ExplorerContext"); function ExplorerContextProvider(props) { + const $ = reactCompilerRuntime.c(14); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + nonNull: true, + caller: ExplorerContextProvider + }; + $[0] = t0; + } else { + t0 = $[0]; + } const { schema, validationErrors - } = useSchemaContext({ - nonNull: true, - caller: ExplorerContextProvider - }); - const [navStack, setNavStack] = React.useState([initialNavStackItem]); - const push = React.useCallback(item => { - setNavStack(currentState => { - const lastItem = currentState.at(-1); - return lastItem.def === item.def ? - // Avoid pushing duplicate items - currentState : [...currentState, item]; - }); - }, []); - const pop = React.useCallback(() => { - setNavStack(currentState => currentState.length > 1 ? currentState.slice(0, -1) : currentState); - }, []); - const reset = React.useCallback(() => { - setNavStack(currentState => currentState.length === 1 ? currentState : [initialNavStackItem]); - }, []); - React.useEffect(() => { - if (schema == null || validationErrors.length > 0) { - reset(); - } else { - setNavStack(oldNavStack => { - if (oldNavStack.length === 1) { - return oldNavStack; - } - const newNavStack = [initialNavStackItem]; - let lastEntity = null; - for (const item of oldNavStack) { - if (item === initialNavStackItem) { - continue; - } - if (item.def) { - if (graphql.isNamedType(item.def)) { - const newType = schema.getType(item.def.name); - if (newType) { - newNavStack.push({ - name: item.name, - def: newType - }); - lastEntity = newType; - } else { - break; - } - } else if (lastEntity === null) { - break; - } else if (graphql.isObjectType(lastEntity) || graphql.isInputObjectType(lastEntity)) { - const field = lastEntity.getFields()[item.name]; - if (field) { - newNavStack.push({ - name: item.name, - def: field - }); - } else { - break; - } - } else if (graphql.isScalarType(lastEntity) || graphql.isEnumType(lastEntity) || graphql.isInterfaceType(lastEntity) || graphql.isUnionType(lastEntity)) { - break; - } else { - const field = lastEntity; - const arg = field.args.find(a => a.name === item.name); - if (arg) { - newNavStack.push({ - name: item.name, - def: field - }); - } else { - break; - } - } - } else { - lastEntity = null; - newNavStack.push(item); - } - } - return newNavStack; + } = useSchemaContext(t0); + let t1; + if ($[1] === Symbol.for("react.memo_cache_sentinel")) { + t1 = [initialNavStackItem]; + $[1] = t1; + } else { + t1 = $[1]; + } + const [navStack, setNavStack] = React.useState(t1); + let t2; + if ($[2] === Symbol.for("react.memo_cache_sentinel")) { + t2 = item => { + setNavStack(currentState => { + const lastItem = currentState.at(-1); + return lastItem.def === item.def ? currentState : [...currentState, item]; }); - } - }, [reset, schema, validationErrors]); - const value = React.useMemo(() => ({ - explorerNavStack: navStack, - push, - pop, - reset - }), [navStack, push, pop, reset]); - return /* @__PURE__ */jsxRuntime.jsx(ExplorerContext.Provider, { - value, - children: props.children - }); + }; + $[2] = t2; + } else { + t2 = $[2]; + } + const push = t2; + let t3; + if ($[3] === Symbol.for("react.memo_cache_sentinel")) { + t3 = () => { + setNavStack(_temp$6); + }; + $[3] = t3; + } else { + t3 = $[3]; + } + const pop = t3; + let t4; + if ($[4] === Symbol.for("react.memo_cache_sentinel")) { + t4 = () => { + setNavStack(_temp2$3); + }; + $[4] = t4; + } else { + t4 = $[4]; + } + const reset = t4; + let t5; + let t6; + if ($[5] !== schema || $[6] !== validationErrors) { + t5 = () => { + if (schema == null || validationErrors.length > 0) { + reset(); + } else { + setNavStack(oldNavStack => { + if (oldNavStack.length === 1) { + return oldNavStack; + } + const newNavStack = [initialNavStackItem]; + let lastEntity = null; + for (const item_0 of oldNavStack) { + if (item_0 === initialNavStackItem) { + continue; + } + if (item_0.def) { + if (graphql.isNamedType(item_0.def)) { + const newType = schema.getType(item_0.def.name); + if (newType) { + newNavStack.push({ + name: item_0.name, + def: newType + }); + lastEntity = newType; + } else { + break; + } + } else { + if (lastEntity === null) { + break; + } else { + if (graphql.isObjectType(lastEntity) || graphql.isInputObjectType(lastEntity)) { + const field = lastEntity.getFields()[item_0.name]; + if (field) { + newNavStack.push({ + name: item_0.name, + def: field + }); + } else { + break; + } + } else { + if (graphql.isScalarType(lastEntity) || graphql.isEnumType(lastEntity) || graphql.isInterfaceType(lastEntity) || graphql.isUnionType(lastEntity)) { + break; + } else { + const field_0 = lastEntity; + const arg = field_0.args.find(a => a.name === item_0.name); + if (arg) { + newNavStack.push({ + name: item_0.name, + def: field_0 + }); + } else { + break; + } + } + } + } + } + } else { + lastEntity = null; + newNavStack.push(item_0); + } + } + return newNavStack; + }); + } + }; + t6 = [schema, validationErrors]; + $[5] = schema; + $[6] = validationErrors; + $[7] = t5; + $[8] = t6; + } else { + t5 = $[7]; + t6 = $[8]; + } + React.useEffect(t5, t6); + let t7; + if ($[9] !== navStack) { + t7 = { + explorerNavStack: navStack, + push, + pop, + reset + }; + $[9] = navStack; + $[10] = t7; + } else { + t7 = $[10]; + } + const value = t7; + let t8; + if ($[11] !== props.children || $[12] !== value) { + t8 = /* @__PURE__ */jsxRuntime.jsx(ExplorerContext.Provider, { + value, + children: props.children + }); + $[11] = props.children; + $[12] = value; + $[13] = t8; + } else { + t8 = $[13]; + } + return t8; +} +function _temp2$3(currentState_1) { + return currentState_1.length === 1 ? currentState_1 : [initialNavStackItem]; +} +function _temp$6(currentState_0) { + return currentState_0.length > 1 ? currentState_0.slice(0, -1) : currentState_0; } const useExplorerContext = createContextHook(ExplorerContext); function renderType(type, renderNamedType) { @@ -70337,52 +77933,122 @@ function renderType(type, renderNamedType) { return renderNamedType(type); } function TypeLink(props) { + const $ = reactCompilerRuntime.c(6); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + nonNull: true, + caller: TypeLink + }; + $[0] = t0; + } else { + t0 = $[0]; + } const { push - } = useExplorerContext({ - nonNull: true, - caller: TypeLink - }); + } = useExplorerContext(t0); if (!props.type) { return null; } - return renderType(props.type, namedType => /* @__PURE__ */jsxRuntime.jsx("a", { - className: "graphiql-doc-explorer-type-name", - onClick: event => { - event.preventDefault(); - push({ - name: namedType.name, - def: namedType - }); - }, - href: "#", - children: namedType.name - })); + let t1; + if ($[1] !== push) { + t1 = namedType => /* @__PURE__ */jsxRuntime.jsx("a", { + className: "graphiql-doc-explorer-type-name", + onClick: event => { + event.preventDefault(); + push({ + name: namedType.name, + def: namedType + }); + }, + href: "#", + children: namedType.name + }); + $[1] = push; + $[2] = t1; + } else { + t1 = $[2]; + } + let t2; + if ($[3] !== props.type || $[4] !== t1) { + t2 = renderType(props.type, t1); + $[3] = props.type; + $[4] = t1; + $[5] = t2; + } else { + t2 = $[5]; + } + return t2; } -function Argument({ - arg, - showDefaultValue, - inline -}) { - const definition = /* @__PURE__ */jsxRuntime.jsxs("span", { - children: [/* @__PURE__ */jsxRuntime.jsx("span", { +function Argument(t0) { + const $ = reactCompilerRuntime.c(19); + const { + arg, + showDefaultValue, + inline + } = t0; + let t1; + if ($[0] !== arg.name) { + t1 = /* @__PURE__ */jsxRuntime.jsx("span", { className: "graphiql-doc-explorer-argument-name", children: arg.name - }), ": ", /* @__PURE__ */jsxRuntime.jsx(TypeLink, { + }); + $[0] = arg.name; + $[1] = t1; + } else { + t1 = $[1]; + } + let t2; + if ($[2] !== arg.type) { + t2 = /* @__PURE__ */jsxRuntime.jsx(TypeLink, { type: arg.type - }), showDefaultValue !== false && /* @__PURE__ */jsxRuntime.jsx(DefaultValue, { + }); + $[2] = arg.type; + $[3] = t2; + } else { + t2 = $[3]; + } + let t3; + if ($[4] !== arg || $[5] !== showDefaultValue) { + t3 = showDefaultValue !== false && /* @__PURE__ */jsxRuntime.jsx(DefaultValue, { field: arg - })] - }); + }); + $[4] = arg; + $[5] = showDefaultValue; + $[6] = t3; + } else { + t3 = $[6]; + } + let t4; + if ($[7] !== t1 || $[8] !== t2 || $[9] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsxs("span", { + children: [t1, ": ", t2, t3] + }); + $[7] = t1; + $[8] = t2; + $[9] = t3; + $[10] = t4; + } else { + t4 = $[10]; + } + const definition = t4; if (inline) { return definition; } - return /* @__PURE__ */jsxRuntime.jsxs("div", { - className: "graphiql-doc-explorer-argument", - children: [definition, arg.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + let t5; + if ($[11] !== arg.description) { + t5 = arg.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { type: "description", children: arg.description - }) : null, arg.deprecationReason ? /* @__PURE__ */jsxRuntime.jsxs("div", { + }) : null; + $[11] = arg.description; + $[12] = t5; + } else { + t5 = $[12]; + } + let t6; + if ($[13] !== arg.deprecationReason) { + t6 = arg.deprecationReason ? /* @__PURE__ */jsxRuntime.jsxs("div", { className: "graphiql-doc-explorer-argument-deprecation", children: [/* @__PURE__ */jsxRuntime.jsx("div", { className: "graphiql-doc-explorer-argument-deprecation-label", @@ -70391,42 +78057,115 @@ function Argument({ type: "deprecation", children: arg.deprecationReason })] - }) : null] - }); + }) : null; + $[13] = arg.deprecationReason; + $[14] = t6; + } else { + t6 = $[14]; + } + let t7; + if ($[15] !== definition || $[16] !== t5 || $[17] !== t6) { + t7 = /* @__PURE__ */jsxRuntime.jsxs("div", { + className: "graphiql-doc-explorer-argument", + children: [definition, t5, t6] + }); + $[15] = definition; + $[16] = t5; + $[17] = t6; + $[18] = t7; + } else { + t7 = $[18]; + } + return t7; } function DeprecationReason(props) { - var _props$preview; - return props.children ? /* @__PURE__ */jsxRuntime.jsxs("div", { - className: "graphiql-doc-explorer-deprecation", - children: [/* @__PURE__ */jsxRuntime.jsx("div", { - className: "graphiql-doc-explorer-deprecation-label", - children: "Deprecated" - }), /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { - type: "deprecation", - onlyShowFirstChild: (_props$preview = props.preview) !== null && _props$preview !== void 0 ? _props$preview : true, - children: props.children - })] - }) : null; + const $ = reactCompilerRuntime.c(3); + let t0; + if ($[0] !== props.children || $[1] !== props.preview) { + var _props$preview; + t0 = props.children ? /* @__PURE__ */jsxRuntime.jsxs("div", { + className: "graphiql-doc-explorer-deprecation", + children: [/* @__PURE__ */jsxRuntime.jsx("div", { + className: "graphiql-doc-explorer-deprecation-label", + children: "Deprecated" + }), /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + type: "deprecation", + onlyShowFirstChild: (_props$preview = props.preview) !== null && _props$preview !== void 0 ? _props$preview : true, + children: props.children + })] + }) : null; + $[0] = props.children; + $[1] = props.preview; + $[2] = t0; + } else { + t0 = $[2]; + } + return t0; } -function Directive({ - directive -}) { - return /* @__PURE__ */jsxRuntime.jsxs("span", { - className: "graphiql-doc-explorer-directive", - children: ["@", directive.name.value] - }); +function Directive(t0) { + const $ = reactCompilerRuntime.c(2); + const { + directive + } = t0; + let t1; + if ($[0] !== directive.name.value) { + t1 = /* @__PURE__ */jsxRuntime.jsxs("span", { + className: "graphiql-doc-explorer-directive", + children: ["@", directive.name.value] + }); + $[0] = directive.name.value; + $[1] = t1; + } else { + t1 = $[1]; + } + return t1; } function ExplorerSection(props) { + const $ = reactCompilerRuntime.c(10); const Icon2 = TYPE_TO_ICON[props.title]; - return /* @__PURE__ */jsxRuntime.jsxs("div", { - children: [/* @__PURE__ */jsxRuntime.jsxs("div", { + let t0; + if ($[0] !== Icon2) { + t0 = /* @__PURE__ */jsxRuntime.jsx(Icon2, {}); + $[0] = Icon2; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props.title || $[3] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsxs("div", { className: "graphiql-doc-explorer-section-title", - children: [/* @__PURE__ */jsxRuntime.jsx(Icon2, {}), props.title] - }), /* @__PURE__ */jsxRuntime.jsx("div", { + children: [t0, props.title] + }); + $[2] = props.title; + $[3] = t0; + $[4] = t1; + } else { + t1 = $[4]; + } + let t2; + if ($[5] !== props.children) { + t2 = /* @__PURE__ */jsxRuntime.jsx("div", { className: "graphiql-doc-explorer-section-content", children: props.children - })] - }); + }); + $[5] = props.children; + $[6] = t2; + } else { + t2 = $[6]; + } + let t3; + if ($[7] !== t1 || $[8] !== t2) { + t3 = /* @__PURE__ */jsxRuntime.jsxs("div", { + children: [t1, t2] + }); + $[7] = t1; + $[8] = t2; + $[9] = t3; + } else { + t3 = $[9]; + } + return t3; } const TYPE_TO_ICON = { Arguments: ArgumentIcon, @@ -70444,130 +78183,380 @@ const TYPE_TO_ICON = { "All Schema Types": TypeIcon }; function FieldDocumentation(props) { - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [props.field.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + const $ = reactCompilerRuntime.c(15); + let t0; + if ($[0] !== props.field.description) { + t0 = props.field.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { type: "description", children: props.field.description - }) : null, /* @__PURE__ */jsxRuntime.jsx(DeprecationReason, { + }) : null; + $[0] = props.field.description; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props.field.deprecationReason) { + t1 = /* @__PURE__ */jsxRuntime.jsx(DeprecationReason, { preview: false, children: props.field.deprecationReason - }), /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + }); + $[2] = props.field.deprecationReason; + $[3] = t1; + } else { + t1 = $[3]; + } + let t2; + if ($[4] !== props.field.type) { + t2 = /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Type", children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { type: props.field.type }) - }), /* @__PURE__ */jsxRuntime.jsx(Arguments, { + }); + $[4] = props.field.type; + $[5] = t2; + } else { + t2 = $[5]; + } + let t3; + let t4; + if ($[6] !== props.field) { + t3 = /* @__PURE__ */jsxRuntime.jsx(Arguments, { field: props.field - }), /* @__PURE__ */jsxRuntime.jsx(Directives, { + }); + t4 = /* @__PURE__ */jsxRuntime.jsx(Directives, { field: props.field - })] - }); + }); + $[6] = props.field; + $[7] = t3; + $[8] = t4; + } else { + t3 = $[7]; + t4 = $[8]; + } + let t5; + if ($[9] !== t0 || $[10] !== t1 || $[11] !== t2 || $[12] !== t3 || $[13] !== t4) { + t5 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t0, t1, t2, t3, t4] + }); + $[9] = t0; + $[10] = t1; + $[11] = t2; + $[12] = t3; + $[13] = t4; + $[14] = t5; + } else { + t5 = $[14]; + } + return t5; } -function Arguments({ - field -}) { +function Arguments(t0) { + const $ = reactCompilerRuntime.c(12); + const { + field + } = t0; const [showDeprecated, setShowDeprecated] = React.useState(false); - const handleShowDeprecated = React.useCallback(() => { - setShowDeprecated(true); - }, []); + let t1; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t1 = () => { + setShowDeprecated(true); + }; + $[0] = t1; + } else { + t1 = $[0]; + } + const handleShowDeprecated = t1; if (!("args" in field)) { return null; } - const args = []; - const deprecatedArgs = []; - for (const argument of field.args) { - if (argument.deprecationReason) { - deprecatedArgs.push(argument); - } else { - args.push(argument); + let args; + let deprecatedArgs; + let t2; + if ($[1] !== field.args) { + args = []; + deprecatedArgs = []; + for (const argument of field.args) { + if (argument.deprecationReason) { + deprecatedArgs.push(argument); + } else { + args.push(argument); + } } - } - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [args.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + t2 = args.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Arguments", - children: args.map(arg => /* @__PURE__ */jsxRuntime.jsx(Argument, { - arg - }, arg.name)) - }) : null, deprecatedArgs.length > 0 ? showDeprecated || args.length === 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + children: args.map(_temp$5) + }) : null; + $[1] = field.args; + $[2] = args; + $[3] = deprecatedArgs; + $[4] = t2; + } else { + args = $[2]; + deprecatedArgs = $[3]; + t2 = $[4]; + } + let t3; + if ($[5] !== args.length || $[6] !== deprecatedArgs || $[7] !== showDeprecated) { + t3 = deprecatedArgs.length > 0 ? showDeprecated || args.length === 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Deprecated Arguments", - children: deprecatedArgs.map(arg => /* @__PURE__ */jsxRuntime.jsx(Argument, { - arg - }, arg.name)) + children: deprecatedArgs.map(_temp2$2) }) : /* @__PURE__ */jsxRuntime.jsx(Button$1, { type: "button", onClick: handleShowDeprecated, children: "Show Deprecated Arguments" - }) : null] - }); + }) : null; + $[5] = args.length; + $[6] = deprecatedArgs; + $[7] = showDeprecated; + $[8] = t3; + } else { + t3 = $[8]; + } + let t4; + if ($[9] !== t2 || $[10] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t2, t3] + }); + $[9] = t2; + $[10] = t3; + $[11] = t4; + } else { + t4 = $[11]; + } + return t4; } -function Directives({ - field -}) { - var _a; - const directives = ((_a = field.astNode) == null ? void 0 : _a.directives) || []; +function _temp2$2(arg_0) { + return /* @__PURE__ */jsxRuntime.jsx(Argument, { + arg: arg_0 + }, arg_0.name); +} +function _temp$5(arg) { + return /* @__PURE__ */jsxRuntime.jsx(Argument, { + arg + }, arg.name); +} +function Directives(t0) { + var _a, _b, _c; + const $ = reactCompilerRuntime.c(6); + const { + field + } = t0; + let t1; + if ($[0] !== ((_a = field.astNode) == null ? void 0 : _a.directives)) { + t1 = ((_b = field.astNode) == null ? void 0 : _b.directives) || []; + $[0] = (_c = field.astNode) == null ? void 0 : _c.directives; + $[1] = t1; + } else { + t1 = $[1]; + } + const directives = t1; if (!directives || directives.length === 0) { return null; } - return /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { - title: "Directives", - children: directives.map(directive => /* @__PURE__ */jsxRuntime.jsx("div", { - children: /* @__PURE__ */jsxRuntime.jsx(Directive, { - directive - }) - }, directive.name.value)) - }); + let t2; + if ($[2] !== directives) { + t2 = directives.map(_temp3$2); + $[2] = directives; + $[3] = t2; + } else { + t2 = $[3]; + } + let t3; + if ($[4] !== t2) { + t3 = /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + title: "Directives", + children: t2 + }); + $[4] = t2; + $[5] = t3; + } else { + t3 = $[5]; + } + return t3; +} +function _temp3$2(directive) { + return /* @__PURE__ */jsxRuntime.jsx("div", { + children: /* @__PURE__ */jsxRuntime.jsx(Directive, { + directive + }) + }, directive.name.value); } function SchemaDocumentation(props) { var _a, _b, _c, _d; - const queryType = props.schema.getQueryType(); - const mutationType = (_b = (_a = props.schema).getMutationType) == null ? void 0 : _b.call(_a); - const subscriptionType = (_d = (_c = props.schema).getSubscriptionType) == null ? void 0 : _d.call(_c); - const typeMap = props.schema.getTypeMap(); - const ignoreTypesInAllSchema = [queryType == null ? void 0 : queryType.name, mutationType == null ? void 0 : mutationType.name, subscriptionType == null ? void 0 : subscriptionType.name]; - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [/* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { - type: "description", - children: props.schema.description || "A GraphQL schema provides a root type for each kind of operation." - }), /* @__PURE__ */jsxRuntime.jsxs(ExplorerSection, { - title: "Root Types", - children: [queryType ? /* @__PURE__ */jsxRuntime.jsxs("div", { + const $ = reactCompilerRuntime.c(39); + let t0; + if ($[0] !== props.schema) { + t0 = props.schema.getQueryType(); + $[0] = props.schema; + $[1] = t0; + } else { + t0 = $[1]; + } + const queryType = t0; + let t1; + if ($[2] !== props.schema) { + t1 = (_b = (_a = props.schema).getMutationType) == null ? void 0 : _b.call(_a); + $[2] = props.schema; + $[3] = t1; + } else { + t1 = $[3]; + } + const mutationType = t1; + let t2; + if ($[4] !== props.schema) { + t2 = (_d = (_c = props.schema).getSubscriptionType) == null ? void 0 : _d.call(_c); + $[4] = props.schema; + $[5] = t2; + } else { + t2 = $[5]; + } + const subscriptionType = t2; + let T0; + let t3; + let t4; + let t5; + let t6; + if ($[6] !== mutationType || $[7] !== props.schema || $[8] !== queryType || $[9] !== subscriptionType) { + const typeMap = props.schema.getTypeMap(); + const t72 = queryType == null ? void 0 : queryType.name; + const t82 = mutationType == null ? void 0 : mutationType.name; + const t9 = subscriptionType == null ? void 0 : subscriptionType.name; + let t10; + if ($[15] !== t72 || $[16] !== t82 || $[17] !== t9) { + t10 = [t72, t82, t9]; + $[15] = t72; + $[16] = t82; + $[17] = t9; + $[18] = t10; + } else { + t10 = $[18]; + } + const ignoreTypesInAllSchema = t10; + const t11 = props.schema.description || "A GraphQL schema provides a root type for each kind of operation."; + if ($[19] !== t11) { + t5 = /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + type: "description", + children: t11 + }); + $[19] = t11; + $[20] = t5; + } else { + t5 = $[20]; + } + let t12; + if ($[21] !== queryType) { + t12 = queryType ? /* @__PURE__ */jsxRuntime.jsxs("div", { children: [/* @__PURE__ */jsxRuntime.jsx("span", { className: "graphiql-doc-explorer-root-type", children: "query" }), ": ", /* @__PURE__ */jsxRuntime.jsx(TypeLink, { type: queryType })] - }) : null, mutationType && /* @__PURE__ */jsxRuntime.jsxs("div", { + }) : null; + $[21] = queryType; + $[22] = t12; + } else { + t12 = $[22]; + } + let t13; + if ($[23] !== mutationType) { + t13 = mutationType && /* @__PURE__ */jsxRuntime.jsxs("div", { children: [/* @__PURE__ */jsxRuntime.jsx("span", { className: "graphiql-doc-explorer-root-type", children: "mutation" }), ": ", /* @__PURE__ */jsxRuntime.jsx(TypeLink, { type: mutationType })] - }), subscriptionType && /* @__PURE__ */jsxRuntime.jsxs("div", { + }); + $[23] = mutationType; + $[24] = t13; + } else { + t13 = $[24]; + } + let t14; + if ($[25] !== subscriptionType) { + t14 = subscriptionType && /* @__PURE__ */jsxRuntime.jsxs("div", { children: [/* @__PURE__ */jsxRuntime.jsx("span", { className: "graphiql-doc-explorer-root-type", children: "subscription" }), ": ", /* @__PURE__ */jsxRuntime.jsx(TypeLink, { type: subscriptionType })] - })] - }), /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { - title: "All Schema Types", - children: typeMap && /* @__PURE__ */jsxRuntime.jsx("div", { - children: Object.values(typeMap).map(type => { - if (ignoreTypesInAllSchema.includes(type.name) || type.name.startsWith("__")) { - return null; - } - return /* @__PURE__ */jsxRuntime.jsx("div", { - children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { - type - }) - }, type.name); - }) + }); + $[25] = subscriptionType; + $[26] = t14; + } else { + t14 = $[26]; + } + if ($[27] !== t12 || $[28] !== t13 || $[29] !== t14) { + t6 = /* @__PURE__ */jsxRuntime.jsxs(ExplorerSection, { + title: "Root Types", + children: [t12, t13, t14] + }); + $[27] = t12; + $[28] = t13; + $[29] = t14; + $[30] = t6; + } else { + t6 = $[30]; + } + T0 = ExplorerSection; + t3 = "All Schema Types"; + t4 = typeMap && /* @__PURE__ */jsxRuntime.jsx("div", { + children: Object.values(typeMap).map(type => { + if (ignoreTypesInAllSchema.includes(type.name) || type.name.startsWith("__")) { + return null; + } + return /* @__PURE__ */jsxRuntime.jsx("div", { + children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { + type + }) + }, type.name); }) - })] - }); + }); + $[6] = mutationType; + $[7] = props.schema; + $[8] = queryType; + $[9] = subscriptionType; + $[10] = T0; + $[11] = t3; + $[12] = t4; + $[13] = t5; + $[14] = t6; + } else { + T0 = $[10]; + t3 = $[11]; + t4 = $[12]; + t5 = $[13]; + t6 = $[14]; + } + let t7; + if ($[31] !== T0 || $[32] !== t3 || $[33] !== t4) { + t7 = /* @__PURE__ */jsxRuntime.jsx(T0, { + title: t3, + children: t4 + }); + $[31] = T0; + $[32] = t3; + $[33] = t4; + $[34] = t7; + } else { + t7 = $[34]; + } + let t8; + if ($[35] !== t5 || $[36] !== t6 || $[37] !== t7) { + t8 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t5, t6, t7] + }); + $[35] = t5; + $[36] = t6; + $[37] = t7; + $[38] = t8; + } else { + t8 = $[38]; + } + return t8; } function debounce(duration, fn) { let timeout; @@ -70582,6 +78571,8 @@ function debounce(duration, fn) { }; } function Search() { + "use no memo"; + const { explorerNavStack, push @@ -70643,7 +78634,7 @@ function Search() { autoComplete: "off", onFocus: handleFocus, onBlur: handleFocus, - onChange: event => setSearchValue(event.target.value), + onChange: event_0 => setSearchValue(event_0.target.value), placeholder: `${isMacOs ? "⌘" : "Ctrl"} K`, ref: inputRef, value: searchValue, @@ -70664,94 +78655,131 @@ function Search() { }, `within-${i}`)), results.within.length > 0 && results.types.length + results.fields.length > 0 ? /* @__PURE__ */jsxRuntime.jsx("div", { className: "graphiql-doc-explorer-search-divider", children: "Other results" - }) : null, results.types.map((result, i) => /* @__PURE__ */jsxRuntime.jsx(react.Combobox.Option, { - value: result, + }) : null, results.types.map((result_0, i_0) => /* @__PURE__ */jsxRuntime.jsx(react.Combobox.Option, { + value: result_0, "data-cy": "doc-explorer-option", children: /* @__PURE__ */jsxRuntime.jsx(Type, { - type: result.type + type: result_0.type }) - }, `type-${i}`)), results.fields.map((result, i) => /* @__PURE__ */jsxRuntime.jsxs(react.Combobox.Option, { - value: result, + }, `type-${i_0}`)), results.fields.map((result_1, i_1) => /* @__PURE__ */jsxRuntime.jsxs(react.Combobox.Option, { + value: result_1, "data-cy": "doc-explorer-option", children: [/* @__PURE__ */jsxRuntime.jsx(Type, { - type: result.type + type: result_1.type }), ".", /* @__PURE__ */jsxRuntime.jsx(Field$1, { - field: result.field, - argument: result.argument + field: result_1.field, + argument: result_1.argument })] - }, `field-${i}`))] + }, `field-${i_1}`))] })] }); } +const _useSearchResults = useSearchResults; function useSearchResults(caller) { + const $ = reactCompilerRuntime.c(9); + const t0 = caller || _useSearchResults; + let t1; + if ($[0] !== t0) { + t1 = { + nonNull: true, + caller: t0 + }; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } const { explorerNavStack - } = useExplorerContext({ - nonNull: true, - caller: caller || useSearchResults - }); + } = useExplorerContext(t1); + const t2 = caller || _useSearchResults; + let t3; + if ($[2] !== t2) { + t3 = { + nonNull: true, + caller: t2 + }; + $[2] = t2; + $[3] = t3; + } else { + t3 = $[3]; + } const { schema - } = useSchemaContext({ - nonNull: true, - caller: caller || useSearchResults - }); - const navItem = explorerNavStack.at(-1); - return React.useCallback(searchValue => { - const matches = { - within: [], - types: [], - fields: [] - }; - if (!schema) { - return matches; - } - const withinType = navItem.def; - const typeMap = schema.getTypeMap(); - let typeNames = Object.keys(typeMap); - if (withinType) { - typeNames = typeNames.filter(n => n !== withinType.name); - typeNames.unshift(withinType.name); - } - for (const typeName of typeNames) { - if (matches.within.length + matches.types.length + matches.fields.length >= 100) { - break; + } = useSchemaContext(t3); + let t4; + if ($[4] !== explorerNavStack) { + t4 = explorerNavStack.at(-1); + $[4] = explorerNavStack; + $[5] = t4; + } else { + t4 = $[5]; + } + const navItem = t4; + let t5; + if ($[6] !== navItem || $[7] !== schema) { + t5 = searchValue => { + const matches = { + within: [], + types: [], + fields: [] + }; + if (!schema) { + return matches; } - const type = typeMap[typeName]; - if (withinType !== type && isMatch(typeName, searchValue)) { - matches.types.push({ - type - }); + const withinType = navItem.def; + const typeMap = schema.getTypeMap(); + let typeNames = Object.keys(typeMap); + if (withinType) { + typeNames = typeNames.filter(n => n !== withinType.name); + typeNames.unshift(withinType.name); } - if (!graphql.isObjectType(type) && !graphql.isInterfaceType(type) && !graphql.isInputObjectType(type)) { - continue; - } - const fields = type.getFields(); - for (const fieldName in fields) { - const field = fields[fieldName]; - let matchingArgs; - if (!isMatch(fieldName, searchValue)) { - if ("args" in field) { - matchingArgs = field.args.filter(arg => isMatch(arg.name, searchValue)); - if (matchingArgs.length === 0) { + for (const typeName of typeNames) { + if (matches.within.length + matches.types.length + matches.fields.length >= 100) { + break; + } + const type = typeMap[typeName]; + if (withinType !== type && isMatch(typeName, searchValue)) { + matches.types.push({ + type + }); + } + if (!graphql.isObjectType(type) && !graphql.isInterfaceType(type) && !graphql.isInputObjectType(type)) { + continue; + } + const fields = type.getFields(); + for (const fieldName in fields) { + const field = fields[fieldName]; + let matchingArgs; + if (!isMatch(fieldName, searchValue)) { + if ("args" in field) { + matchingArgs = field.args.filter(arg => isMatch(arg.name, searchValue)); + if (matchingArgs.length === 0) { + continue; + } + } else { continue; } - } else { - continue; } + matches[withinType === type ? "within" : "fields"].push(...(matchingArgs ? matchingArgs.map(argument => ({ + type, + field, + argument + })) : [{ + type, + field + }])); } - matches[withinType === type ? "within" : "fields"].push(...(matchingArgs ? matchingArgs.map(argument => ({ - type, - field, - argument - })) : [{ - type, - field - }])); } - } - return matches; - }, [navItem.def, schema]); + return matches; + }; + $[6] = navItem; + $[7] = schema; + $[8] = t5; + } else { + t5 = $[8]; + } + return t5; } function isMatch(sourceText, searchValue) { try { @@ -70762,307 +78790,804 @@ function isMatch(sourceText, searchValue) { } } function Type(props) { - return /* @__PURE__ */jsxRuntime.jsx("span", { - className: "graphiql-doc-explorer-search-type", - children: props.type.name - }); + const $ = reactCompilerRuntime.c(2); + let t0; + if ($[0] !== props.type.name) { + t0 = /* @__PURE__ */jsxRuntime.jsx("span", { + className: "graphiql-doc-explorer-search-type", + children: props.type.name + }); + $[0] = props.type.name; + $[1] = t0; + } else { + t0 = $[1]; + } + return t0; } -function Field$1({ - field, - argument -}) { - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [/* @__PURE__ */jsxRuntime.jsx("span", { +function Field$1(t0) { + const $ = reactCompilerRuntime.c(7); + const { + field, + argument + } = t0; + let t1; + if ($[0] !== field.name) { + t1 = /* @__PURE__ */jsxRuntime.jsx("span", { className: "graphiql-doc-explorer-search-field", children: field.name - }), argument ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + }); + $[0] = field.name; + $[1] = t1; + } else { + t1 = $[1]; + } + let t2; + if ($[2] !== argument) { + t2 = argument ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { children: ["(", /* @__PURE__ */jsxRuntime.jsx("span", { className: "graphiql-doc-explorer-search-argument", children: argument.name - }), ":", " ", renderType(argument.type, namedType => /* @__PURE__ */jsxRuntime.jsx(Type, { - type: namedType - })), ")"] - }) : null] + }), ":", " ", renderType(argument.type, _temp$4), ")"] + }) : null; + $[2] = argument; + $[3] = t2; + } else { + t2 = $[3]; + } + let t3; + if ($[4] !== t1 || $[5] !== t2) { + t3 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t1, t2] + }); + $[4] = t1; + $[5] = t2; + $[6] = t3; + } else { + t3 = $[6]; + } + return t3; +} +function _temp$4(namedType) { + return /* @__PURE__ */jsxRuntime.jsx(Type, { + type: namedType }); } function FieldLink(props) { + const $ = reactCompilerRuntime.c(7); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + nonNull: true + }; + $[0] = t0; + } else { + t0 = $[0]; + } const { push - } = useExplorerContext({ - nonNull: true - }); - return /* @__PURE__ */jsxRuntime.jsx("a", { - className: "graphiql-doc-explorer-field-name", - onClick: event => { + } = useExplorerContext(t0); + let t1; + if ($[1] !== props.field || $[2] !== push) { + t1 = event => { event.preventDefault(); push({ name: props.field.name, def: props.field }); - }, - href: "#", - children: props.field.name - }); + }; + $[1] = props.field; + $[2] = push; + $[3] = t1; + } else { + t1 = $[3]; + } + let t2; + if ($[4] !== props.field.name || $[5] !== t1) { + t2 = /* @__PURE__ */jsxRuntime.jsx("a", { + className: "graphiql-doc-explorer-field-name", + onClick: t1, + href: "#", + children: props.field.name + }); + $[4] = props.field.name; + $[5] = t1; + $[6] = t2; + } else { + t2 = $[6]; + } + return t2; } function TypeDocumentation(props) { - return graphql.isNamedType(props.type) ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [props.type.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { - type: "description", - children: props.type.description - }) : null, /* @__PURE__ */jsxRuntime.jsx(ImplementsInterfaces, { - type: props.type - }), /* @__PURE__ */jsxRuntime.jsx(Fields, { - type: props.type - }), /* @__PURE__ */jsxRuntime.jsx(EnumValues, { - type: props.type - }), /* @__PURE__ */jsxRuntime.jsx(PossibleTypes, { - type: props.type - })] - }) : null; + const $ = reactCompilerRuntime.c(2); + let t0; + if ($[0] !== props.type) { + t0 = graphql.isNamedType(props.type) ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [props.type.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + type: "description", + children: props.type.description + }) : null, /* @__PURE__ */jsxRuntime.jsx(ImplementsInterfaces, { + type: props.type + }), /* @__PURE__ */jsxRuntime.jsx(Fields, { + type: props.type + }), /* @__PURE__ */jsxRuntime.jsx(EnumValues, { + type: props.type + }), /* @__PURE__ */jsxRuntime.jsx(PossibleTypes, { + type: props.type + })] + }) : null; + $[0] = props.type; + $[1] = t0; + } else { + t0 = $[1]; + } + return t0; } -function ImplementsInterfaces({ - type -}) { +function ImplementsInterfaces(t0) { + const $ = reactCompilerRuntime.c(5); + const { + type + } = t0; if (!graphql.isObjectType(type)) { return null; } - const interfaces = type.getInterfaces(); - return interfaces.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { - title: "Implements", - children: type.getInterfaces().map(implementedInterface => /* @__PURE__ */jsxRuntime.jsx("div", { - children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { - type: implementedInterface - }) - }, implementedInterface.name)) - }) : null; + let t1; + if ($[0] !== type) { + t1 = type.getInterfaces(); + $[0] = type; + $[1] = t1; + } else { + t1 = $[1]; + } + const interfaces = t1; + let t2; + if ($[2] !== interfaces.length || $[3] !== type) { + t2 = interfaces.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + title: "Implements", + children: type.getInterfaces().map(_temp$3) + }) : null; + $[2] = interfaces.length; + $[3] = type; + $[4] = t2; + } else { + t2 = $[4]; + } + return t2; } -function Fields({ - type -}) { +function _temp$3(implementedInterface) { + return /* @__PURE__ */jsxRuntime.jsx("div", { + children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { + type: implementedInterface + }) + }, implementedInterface.name); +} +function Fields(t0) { + const $ = reactCompilerRuntime.c(12); + const { + type + } = t0; const [showDeprecated, setShowDeprecated] = React.useState(false); - const handleShowDeprecated = React.useCallback(() => { - setShowDeprecated(true); - }, []); + let t1; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t1 = () => { + setShowDeprecated(true); + }; + $[0] = t1; + } else { + t1 = $[0]; + } + const handleShowDeprecated = t1; if (!graphql.isObjectType(type) && !graphql.isInterfaceType(type) && !graphql.isInputObjectType(type)) { return null; } - const fieldMap = type.getFields(); - const fields = []; - const deprecatedFields = []; - for (const field of Object.keys(fieldMap).map(name => fieldMap[name])) { - if (field.deprecationReason) { - deprecatedFields.push(field); - } else { - fields.push(field); + let deprecatedFields; + let fields; + let t2; + if ($[1] !== type) { + const fieldMap = type.getFields(); + fields = []; + deprecatedFields = []; + for (const field of Object.keys(fieldMap).map(name => fieldMap[name])) { + if (field.deprecationReason) { + deprecatedFields.push(field); + } else { + fields.push(field); + } } - } - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [fields.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + t2 = fields.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Fields", - children: fields.map(field => /* @__PURE__ */jsxRuntime.jsx(Field, { - field - }, field.name)) - }) : null, deprecatedFields.length > 0 ? showDeprecated || fields.length === 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + children: fields.map(_temp2$1) + }) : null; + $[1] = type; + $[2] = deprecatedFields; + $[3] = fields; + $[4] = t2; + } else { + deprecatedFields = $[2]; + fields = $[3]; + t2 = $[4]; + } + let t3; + if ($[5] !== deprecatedFields || $[6] !== fields.length || $[7] !== showDeprecated) { + t3 = deprecatedFields.length > 0 ? showDeprecated || fields.length === 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Deprecated Fields", - children: deprecatedFields.map(field => /* @__PURE__ */jsxRuntime.jsx(Field, { - field - }, field.name)) + children: deprecatedFields.map(_temp3$1) }) : /* @__PURE__ */jsxRuntime.jsx(Button$1, { type: "button", onClick: handleShowDeprecated, children: "Show Deprecated Fields" - }) : null] - }); + }) : null; + $[5] = deprecatedFields; + $[6] = fields.length; + $[7] = showDeprecated; + $[8] = t3; + } else { + t3 = $[8]; + } + let t4; + if ($[9] !== t2 || $[10] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t2, t3] + }); + $[9] = t2; + $[10] = t3; + $[11] = t4; + } else { + t4 = $[11]; + } + return t4; } -function Field({ - field -}) { - const args = "args" in field ? field.args.filter(arg => !arg.deprecationReason) : []; - return /* @__PURE__ */jsxRuntime.jsxs("div", { - className: "graphiql-doc-explorer-item", - children: [/* @__PURE__ */jsxRuntime.jsxs("div", { - children: [/* @__PURE__ */jsxRuntime.jsx(FieldLink, { - field - }), args.length > 0 ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: ["(", /* @__PURE__ */jsxRuntime.jsx("span", { - children: args.map(arg => args.length === 1 ? /* @__PURE__ */jsxRuntime.jsx(Argument, { - arg, +function _temp3$1(field_1) { + return /* @__PURE__ */jsxRuntime.jsx(Field, { + field: field_1 + }, field_1.name); +} +function _temp2$1(field_0) { + return /* @__PURE__ */jsxRuntime.jsx(Field, { + field: field_0 + }, field_0.name); +} +function Field(t0) { + const $ = reactCompilerRuntime.c(22); + const { + field + } = t0; + let t1; + let t2; + let t3; + if ($[0] !== field) { + const args = "args" in field ? field.args.filter(_temp4$1) : []; + t3 = "graphiql-doc-explorer-item"; + t1 = /* @__PURE__ */jsxRuntime.jsx(FieldLink, { + field + }); + t2 = args.length > 0 ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: ["(", /* @__PURE__ */jsxRuntime.jsx("span", { + children: args.map(arg_0 => args.length === 1 ? /* @__PURE__ */jsxRuntime.jsx(Argument, { + arg: arg_0, + inline: true + }, arg_0.name) : /* @__PURE__ */jsxRuntime.jsx("div", { + className: "graphiql-doc-explorer-argument-multiple", + children: /* @__PURE__ */jsxRuntime.jsx(Argument, { + arg: arg_0, inline: true - }, arg.name) : /* @__PURE__ */jsxRuntime.jsx("div", { - className: "graphiql-doc-explorer-argument-multiple", - children: /* @__PURE__ */jsxRuntime.jsx(Argument, { - arg, - inline: true - }) - }, arg.name)) - }), ")"] - }) : null, ": ", /* @__PURE__ */jsxRuntime.jsx(TypeLink, { - type: field.type - }), /* @__PURE__ */jsxRuntime.jsx(DefaultValue, { - field - })] - }), field.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + }) + }, arg_0.name)) + }), ")"] + }) : null; + $[0] = field; + $[1] = t1; + $[2] = t2; + $[3] = t3; + } else { + t1 = $[1]; + t2 = $[2]; + t3 = $[3]; + } + let t4; + if ($[4] !== field.type) { + t4 = /* @__PURE__ */jsxRuntime.jsx(TypeLink, { + type: field.type + }); + $[4] = field.type; + $[5] = t4; + } else { + t4 = $[5]; + } + let t5; + if ($[6] !== field) { + t5 = /* @__PURE__ */jsxRuntime.jsx(DefaultValue, { + field + }); + $[6] = field; + $[7] = t5; + } else { + t5 = $[7]; + } + let t6; + if ($[8] !== t1 || $[9] !== t2 || $[10] !== t4 || $[11] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsxs("div", { + children: [t1, t2, ": ", t4, t5] + }); + $[8] = t1; + $[9] = t2; + $[10] = t4; + $[11] = t5; + $[12] = t6; + } else { + t6 = $[12]; + } + let t7; + if ($[13] !== field.description) { + t7 = field.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { type: "description", onlyShowFirstChild: true, children: field.description - }) : null, /* @__PURE__ */jsxRuntime.jsx(DeprecationReason, { + }) : null; + $[13] = field.description; + $[14] = t7; + } else { + t7 = $[14]; + } + let t8; + if ($[15] !== field.deprecationReason) { + t8 = /* @__PURE__ */jsxRuntime.jsx(DeprecationReason, { children: field.deprecationReason - })] - }); + }); + $[15] = field.deprecationReason; + $[16] = t8; + } else { + t8 = $[16]; + } + let t9; + if ($[17] !== t3 || $[18] !== t6 || $[19] !== t7 || $[20] !== t8) { + t9 = /* @__PURE__ */jsxRuntime.jsxs("div", { + className: t3, + children: [t6, t7, t8] + }); + $[17] = t3; + $[18] = t6; + $[19] = t7; + $[20] = t8; + $[21] = t9; + } else { + t9 = $[21]; + } + return t9; } -function EnumValues({ - type -}) { +function _temp4$1(arg) { + return !arg.deprecationReason; +} +function EnumValues(t0) { + const $ = reactCompilerRuntime.c(12); + const { + type + } = t0; const [showDeprecated, setShowDeprecated] = React.useState(false); - const handleShowDeprecated = React.useCallback(() => { - setShowDeprecated(true); - }, []); + let t1; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t1 = () => { + setShowDeprecated(true); + }; + $[0] = t1; + } else { + t1 = $[0]; + } + const handleShowDeprecated = t1; if (!graphql.isEnumType(type)) { return null; } - const values = []; - const deprecatedValues = []; - for (const value of type.getValues()) { - if (value.deprecationReason) { - deprecatedValues.push(value); - } else { - values.push(value); + let deprecatedValues; + let t2; + let values; + if ($[1] !== type) { + values = []; + deprecatedValues = []; + for (const value of type.getValues()) { + if (value.deprecationReason) { + deprecatedValues.push(value); + } else { + values.push(value); + } } - } - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [values.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + t2 = values.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Enum Values", - children: values.map(value => /* @__PURE__ */jsxRuntime.jsx(EnumValue, { - value - }, value.name)) - }) : null, deprecatedValues.length > 0 ? showDeprecated || values.length === 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + children: values.map(_temp5) + }) : null; + $[1] = type; + $[2] = deprecatedValues; + $[3] = t2; + $[4] = values; + } else { + deprecatedValues = $[2]; + t2 = $[3]; + values = $[4]; + } + let t3; + if ($[5] !== deprecatedValues || $[6] !== showDeprecated || $[7] !== values.length) { + t3 = deprecatedValues.length > 0 ? showDeprecated || values.length === 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Deprecated Enum Values", - children: deprecatedValues.map(value => /* @__PURE__ */jsxRuntime.jsx(EnumValue, { - value - }, value.name)) + children: deprecatedValues.map(_temp6) }) : /* @__PURE__ */jsxRuntime.jsx(Button$1, { type: "button", onClick: handleShowDeprecated, children: "Show Deprecated Values" - }) : null] - }); + }) : null; + $[5] = deprecatedValues; + $[6] = showDeprecated; + $[7] = values.length; + $[8] = t3; + } else { + t3 = $[8]; + } + let t4; + if ($[9] !== t2 || $[10] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t2, t3] + }); + $[9] = t2; + $[10] = t3; + $[11] = t4; + } else { + t4 = $[11]; + } + return t4; } -function EnumValue({ - value -}) { - return /* @__PURE__ */jsxRuntime.jsxs("div", { - className: "graphiql-doc-explorer-item", - children: [/* @__PURE__ */jsxRuntime.jsx("div", { +function _temp6(value_1) { + return /* @__PURE__ */jsxRuntime.jsx(EnumValue, { + value: value_1 + }, value_1.name); +} +function _temp5(value_0) { + return /* @__PURE__ */jsxRuntime.jsx(EnumValue, { + value: value_0 + }, value_0.name); +} +function EnumValue(t0) { + const $ = reactCompilerRuntime.c(10); + const { + value + } = t0; + let t1; + if ($[0] !== value.name) { + t1 = /* @__PURE__ */jsxRuntime.jsx("div", { className: "graphiql-doc-explorer-enum-value", children: value.name - }), value.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + }); + $[0] = value.name; + $[1] = t1; + } else { + t1 = $[1]; + } + let t2; + if ($[2] !== value.description) { + t2 = value.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { type: "description", children: value.description - }) : null, value.deprecationReason ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + }) : null; + $[2] = value.description; + $[3] = t2; + } else { + t2 = $[3]; + } + let t3; + if ($[4] !== value.deprecationReason) { + t3 = value.deprecationReason ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { type: "deprecation", children: value.deprecationReason - }) : null] - }); + }) : null; + $[4] = value.deprecationReason; + $[5] = t3; + } else { + t3 = $[5]; + } + let t4; + if ($[6] !== t1 || $[7] !== t2 || $[8] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsxs("div", { + className: "graphiql-doc-explorer-item", + children: [t1, t2, t3] + }); + $[6] = t1; + $[7] = t2; + $[8] = t3; + $[9] = t4; + } else { + t4 = $[9]; + } + return t4; } -function PossibleTypes({ - type -}) { +function PossibleTypes(t0) { + const $ = reactCompilerRuntime.c(7); + const { + type + } = t0; + let t1; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true + }; + $[0] = t1; + } else { + t1 = $[0]; + } const { schema - } = useSchemaContext({ - nonNull: true - }); + } = useSchemaContext(t1); if (!schema || !graphql.isAbstractType(type)) { return null; } - return /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { - title: graphql.isInterfaceType(type) ? "Implementations" : "Possible Types", - children: schema.getPossibleTypes(type).map(possibleType => /* @__PURE__ */jsxRuntime.jsx("div", { - children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { - type: possibleType - }) - }, possibleType.name)) - }); + const t2 = graphql.isInterfaceType(type) ? "Implementations" : "Possible Types"; + let t3; + if ($[1] !== schema || $[2] !== type) { + t3 = schema.getPossibleTypes(type).map(_temp7); + $[1] = schema; + $[2] = type; + $[3] = t3; + } else { + t3 = $[3]; + } + let t4; + if ($[4] !== t2 || $[5] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + title: t2, + children: t3 + }); + $[4] = t2; + $[5] = t3; + $[6] = t4; + } else { + t4 = $[6]; + } + return t4; +} +function _temp7(possibleType) { + return /* @__PURE__ */jsxRuntime.jsx("div", { + children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { + type: possibleType + }) + }, possibleType.name); } function DocExplorer() { + const $ = reactCompilerRuntime.c(40); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + nonNull: true, + caller: DocExplorer + }; + $[0] = t0; + } else { + t0 = $[0]; + } const { fetchError, isFetching, schema, validationErrors - } = useSchemaContext({ - nonNull: true, - caller: DocExplorer - }); + } = useSchemaContext(t0); + let t1; + if ($[1] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: DocExplorer + }; + $[1] = t1; + } else { + t1 = $[1]; + } const { explorerNavStack, pop - } = useExplorerContext({ - nonNull: true, - caller: DocExplorer - }); - const navItem = explorerNavStack.at(-1); - let content = null; - if (fetchError) { - content = /* @__PURE__ */jsxRuntime.jsx("div", { - className: "graphiql-doc-explorer-error", - children: "Error fetching schema" - }); - } else if (validationErrors.length > 0) { - content = /* @__PURE__ */jsxRuntime.jsxs("div", { - className: "graphiql-doc-explorer-error", - children: ["Schema is invalid: ", validationErrors[0].message] - }); - } else if (isFetching) { - content = /* @__PURE__ */jsxRuntime.jsx(Spinner, {}); - } else if (!schema) { - content = /* @__PURE__ */jsxRuntime.jsx("div", { - className: "graphiql-doc-explorer-error", - children: "No GraphQL schema available" - }); - } else if (explorerNavStack.length === 1) { - content = /* @__PURE__ */jsxRuntime.jsx(SchemaDocumentation, { - schema - }); - } else if (graphql.isType(navItem.def)) { - content = /* @__PURE__ */jsxRuntime.jsx(TypeDocumentation, { - type: navItem.def - }); - } else if (navItem.def) { - content = /* @__PURE__ */jsxRuntime.jsx(FieldDocumentation, { - field: navItem.def - }); + } = useExplorerContext(t1); + let content; + let navItem; + if ($[2] !== explorerNavStack || $[3] !== fetchError || $[4] !== isFetching || $[5] !== schema || $[6] !== validationErrors) { + navItem = explorerNavStack.at(-1); + content = null; + if (fetchError) { + let t22; + if ($[9] === Symbol.for("react.memo_cache_sentinel")) { + t22 = /* @__PURE__ */jsxRuntime.jsx("div", { + className: "graphiql-doc-explorer-error", + children: "Error fetching schema" + }); + $[9] = t22; + } else { + t22 = $[9]; + } + content = t22; + } else { + if (validationErrors.length > 0) { + const t22 = validationErrors[0]; + let t32; + if ($[10] !== t22.message) { + t32 = /* @__PURE__ */jsxRuntime.jsxs("div", { + className: "graphiql-doc-explorer-error", + children: ["Schema is invalid: ", t22.message] + }); + $[10] = t22.message; + $[11] = t32; + } else { + t32 = $[11]; + } + content = t32; + } else { + if (isFetching) { + let t22; + if ($[12] === Symbol.for("react.memo_cache_sentinel")) { + t22 = /* @__PURE__ */jsxRuntime.jsx(Spinner, {}); + $[12] = t22; + } else { + t22 = $[12]; + } + content = t22; + } else { + if (!schema) { + let t22; + if ($[13] === Symbol.for("react.memo_cache_sentinel")) { + t22 = /* @__PURE__ */jsxRuntime.jsx("div", { + className: "graphiql-doc-explorer-error", + children: "No GraphQL schema available" + }); + $[13] = t22; + } else { + t22 = $[13]; + } + content = t22; + } else { + if (explorerNavStack.length === 1) { + let t22; + if ($[14] !== schema) { + t22 = /* @__PURE__ */jsxRuntime.jsx(SchemaDocumentation, { + schema + }); + $[14] = schema; + $[15] = t22; + } else { + t22 = $[15]; + } + content = t22; + } else { + if (graphql.isType(navItem.def)) { + let t22; + if ($[16] !== navItem.def) { + t22 = /* @__PURE__ */jsxRuntime.jsx(TypeDocumentation, { + type: navItem.def + }); + $[16] = navItem.def; + $[17] = t22; + } else { + t22 = $[17]; + } + content = t22; + } else { + if (navItem.def) { + let t22; + if ($[18] !== navItem.def) { + t22 = /* @__PURE__ */jsxRuntime.jsx(FieldDocumentation, { + field: navItem.def + }); + $[18] = navItem.def; + $[19] = t22; + } else { + t22 = $[19]; + } + content = t22; + } + } + } + } + } + } + } + $[2] = explorerNavStack; + $[3] = fetchError; + $[4] = isFetching; + $[5] = schema; + $[6] = validationErrors; + $[7] = content; + $[8] = navItem; + } else { + content = $[7]; + navItem = $[8]; } let prevName; if (explorerNavStack.length > 1) { - prevName = explorerNavStack.at(-2).name; + let t22; + if ($[20] !== explorerNavStack) { + t22 = explorerNavStack.at(-2); + $[20] = explorerNavStack; + $[21] = t22; + } else { + t22 = $[21]; + } + prevName = t22.name; } - return /* @__PURE__ */jsxRuntime.jsxs("section", { - className: "graphiql-doc-explorer", - "aria-label": "Documentation Explorer", - children: [/* @__PURE__ */jsxRuntime.jsxs("div", { + let t2; + if ($[22] !== pop || $[23] !== prevName) { + t2 = prevName && /* @__PURE__ */jsxRuntime.jsxs("a", { + href: "#", + className: "graphiql-doc-explorer-back", + onClick: event => { + event.preventDefault(); + pop(); + }, + "aria-label": `Go back to ${prevName}`, + children: [/* @__PURE__ */jsxRuntime.jsx(ChevronLeftIcon, {}), prevName] + }); + $[22] = pop; + $[23] = prevName; + $[24] = t2; + } else { + t2 = $[24]; + } + let t3; + if ($[25] !== navItem.name) { + t3 = /* @__PURE__ */jsxRuntime.jsx("div", { + className: "graphiql-doc-explorer-title", + children: navItem.name + }); + $[25] = navItem.name; + $[26] = t3; + } else { + t3 = $[26]; + } + let t4; + if ($[27] !== t2 || $[28] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsxs("div", { + className: "graphiql-doc-explorer-header-content", + children: [t2, t3] + }); + $[27] = t2; + $[28] = t3; + $[29] = t4; + } else { + t4 = $[29]; + } + let t5; + if ($[30] !== navItem.name) { + t5 = /* @__PURE__ */jsxRuntime.jsx(Search, {}, navItem.name); + $[30] = navItem.name; + $[31] = t5; + } else { + t5 = $[31]; + } + let t6; + if ($[32] !== t4 || $[33] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsxs("div", { className: "graphiql-doc-explorer-header", - children: [/* @__PURE__ */jsxRuntime.jsxs("div", { - className: "graphiql-doc-explorer-header-content", - children: [prevName && /* @__PURE__ */jsxRuntime.jsxs("a", { - href: "#", - className: "graphiql-doc-explorer-back", - onClick: event => { - event.preventDefault(); - pop(); - }, - "aria-label": `Go back to ${prevName}`, - children: [/* @__PURE__ */jsxRuntime.jsx(ChevronLeftIcon, {}), prevName] - }), /* @__PURE__ */jsxRuntime.jsx("div", { - className: "graphiql-doc-explorer-title", - children: navItem.name - })] - }), /* @__PURE__ */jsxRuntime.jsx(Search, {}, navItem.name)] - }), /* @__PURE__ */jsxRuntime.jsx("div", { + children: [t4, t5] + }); + $[32] = t4; + $[33] = t5; + $[34] = t6; + } else { + t6 = $[34]; + } + let t7; + if ($[35] !== content) { + t7 = /* @__PURE__ */jsxRuntime.jsx("div", { className: "graphiql-doc-explorer-content", children: content - })] - }); + }); + $[35] = content; + $[36] = t7; + } else { + t7 = $[36]; + } + let t8; + if ($[37] !== t6 || $[38] !== t7) { + t8 = /* @__PURE__ */jsxRuntime.jsxs("section", { + className: "graphiql-doc-explorer", + "aria-label": "Documentation Explorer", + children: [t6, t7] + }); + $[37] = t6; + $[38] = t7; + $[39] = t8; + } else { + t8 = $[39]; + } + return t8; } const DOC_EXPLORER_PLUGIN = { title: "Documentation Explorer", @@ -71079,13 +79604,16 @@ const HISTORY_PLUGIN = { }; const PluginContext = createNullableContext("PluginContext"); function PluginContextProvider(props) { + const $ = reactCompilerRuntime.c(27); const storage = useStorageContext(); const explorerContext = useExplorerContext(); const historyContext = useHistoryContext(); const hasExplorerContext = Boolean(explorerContext); const hasHistoryContext = Boolean(historyContext); - const plugins = React.useMemo(() => { - const pluginList = []; + let t0; + let pluginList; + if ($[0] !== hasExplorerContext || $[1] !== hasHistoryContext || $[2] !== props.plugins) { + pluginList = []; const pluginTitles = {}; if (hasExplorerContext) { pluginList.push(DOC_EXPLORER_PLUGIN); @@ -71095,7 +79623,15 @@ function PluginContextProvider(props) { pluginList.push(HISTORY_PLUGIN); pluginTitles[HISTORY_PLUGIN.title] = true; } - for (const plugin of props.plugins || []) { + let t12; + if ($[4] !== props.plugins) { + t12 = props.plugins || []; + $[4] = props.plugins; + $[5] = t12; + } else { + t12 = $[5]; + } + for (const plugin of t12) { if (typeof plugin.title !== "string" || !plugin.title) { throw new Error("All GraphiQL plugins must have a unique title"); } @@ -71106,50 +79642,114 @@ function PluginContextProvider(props) { pluginTitles[plugin.title] = true; } } - return pluginList; - }, [hasExplorerContext, hasHistoryContext, props.plugins]); - const [visiblePlugin, internalSetVisiblePlugin] = React.useState(() => { - const storedValue = storage == null ? void 0 : storage.get(STORAGE_KEY$4); - const pluginForStoredValue = plugins.find(plugin => plugin.title === storedValue); - if (pluginForStoredValue) { - return pluginForStoredValue; - } - if (storedValue) { - storage == null ? void 0 : storage.set(STORAGE_KEY$4, ""); - } - if (!props.visiblePlugin) { - return null; - } - return plugins.find(plugin => (typeof props.visiblePlugin === "string" ? plugin.title : plugin) === props.visiblePlugin) || null; - }); + $[0] = hasExplorerContext; + $[1] = hasHistoryContext; + $[2] = props.plugins; + $[3] = pluginList; + } else { + pluginList = $[3]; + } + t0 = pluginList; + const plugins = t0; + let t1; + if ($[6] !== plugins || $[7] !== props.visiblePlugin || $[8] !== storage) { + t1 = () => { + const storedValue = storage == null ? void 0 : storage.get(STORAGE_KEY$4); + const pluginForStoredValue = plugins.find(plugin_0 => plugin_0.title === storedValue); + if (pluginForStoredValue) { + return pluginForStoredValue; + } + if (storedValue) { + storage == null ? void 0 : storage.set(STORAGE_KEY$4, ""); + } + if (!props.visiblePlugin) { + return null; + } + return plugins.find(plugin_1 => (typeof props.visiblePlugin === "string" ? plugin_1.title : plugin_1) === props.visiblePlugin) || null; + }; + $[6] = plugins; + $[7] = props.visiblePlugin; + $[8] = storage; + $[9] = t1; + } else { + t1 = $[9]; + } + const [visiblePlugin, internalSetVisiblePlugin] = React.useState(t1); const { onTogglePluginVisibility, children } = props; - const setVisiblePlugin = React.useCallback(plugin => { - const newVisiblePlugin = plugin ? plugins.find(p => (typeof plugin === "string" ? p.title : p) === plugin) || null : null; - internalSetVisiblePlugin(current => { - if (newVisiblePlugin === current) { - return current; + let t2; + if ($[10] !== onTogglePluginVisibility || $[11] !== plugins) { + t2 = plugin_2 => { + const newVisiblePlugin = plugin_2 ? plugins.find(p => (typeof plugin_2 === "string" ? p.title : p) === plugin_2) || null : null; + internalSetVisiblePlugin(current => { + if (newVisiblePlugin === current) { + return current; + } + onTogglePluginVisibility == null ? void 0 : onTogglePluginVisibility(newVisiblePlugin); + return newVisiblePlugin; + }); + }; + $[10] = onTogglePluginVisibility; + $[11] = plugins; + $[12] = t2; + } else { + t2 = $[12]; + } + const setVisiblePlugin = t2; + let t3; + if ($[13] !== props.visiblePlugin || $[14] !== setVisiblePlugin) { + t3 = () => { + if (props.visiblePlugin) { + setVisiblePlugin(props.visiblePlugin); } - onTogglePluginVisibility == null ? void 0 : onTogglePluginVisibility(newVisiblePlugin); - return newVisiblePlugin; + }; + $[13] = props.visiblePlugin; + $[14] = setVisiblePlugin; + $[15] = t3; + } else { + t3 = $[15]; + } + let t4; + if ($[16] !== plugins || $[17] !== props.visiblePlugin || $[18] !== setVisiblePlugin) { + t4 = [plugins, props.visiblePlugin, setVisiblePlugin]; + $[16] = plugins; + $[17] = props.visiblePlugin; + $[18] = setVisiblePlugin; + $[19] = t4; + } else { + t4 = $[19]; + } + React.useEffect(t3, t4); + let t5; + if ($[20] !== plugins || $[21] !== setVisiblePlugin || $[22] !== visiblePlugin) { + t5 = { + plugins, + setVisiblePlugin, + visiblePlugin + }; + $[20] = plugins; + $[21] = setVisiblePlugin; + $[22] = visiblePlugin; + $[23] = t5; + } else { + t5 = $[23]; + } + const value = t5; + let t6; + if ($[24] !== children || $[25] !== value) { + t6 = /* @__PURE__ */jsxRuntime.jsx(PluginContext.Provider, { + value, + children }); - }, [onTogglePluginVisibility, plugins]); - React.useEffect(() => { - if (props.visiblePlugin) { - setVisiblePlugin(props.visiblePlugin); - } - }, [plugins, props.visiblePlugin, setVisiblePlugin]); - const value = React.useMemo(() => ({ - plugins, - setVisiblePlugin, - visiblePlugin - }), [plugins, setVisiblePlugin, visiblePlugin]); - return /* @__PURE__ */jsxRuntime.jsx(PluginContext.Provider, { - value, - children - }); + $[24] = children; + $[25] = value; + $[26] = t6; + } else { + t6 = $[26]; + } + return t6; } const usePluginContext = createContextHook(PluginContext); const STORAGE_KEY$4 = "visiblePlugin"; @@ -71301,244 +79901,476 @@ function onHasCompletion(_cm, data, schema, explorer, plugin, callback) { } } function useSynchronizeValue(editor, value) { - React.useEffect(() => { - if (editor && typeof value === "string" && value !== editor.getValue()) { - editor.setValue(value); - } - }, [editor, value]); + const $ = reactCompilerRuntime.c(4); + let t0; + let t1; + if ($[0] !== editor || $[1] !== value) { + t0 = () => { + if (editor && typeof value === "string" && value !== editor.getValue()) { + editor.setValue(value); + } + }; + t1 = [editor, value]; + $[0] = editor; + $[1] = value; + $[2] = t0; + $[3] = t1; + } else { + t0 = $[2]; + t1 = $[3]; + } + React.useEffect(t0, t1); } function useSynchronizeOption(editor, option, value) { - React.useEffect(() => { - if (editor) { - editor.setOption(option, value); - } - }, [editor, option, value]); + const $ = reactCompilerRuntime.c(5); + let t0; + let t1; + if ($[0] !== editor || $[1] !== option || $[2] !== value) { + t0 = () => { + if (editor) { + editor.setOption(option, value); + } + }; + t1 = [editor, option, value]; + $[0] = editor; + $[1] = option; + $[2] = value; + $[3] = t0; + $[4] = t1; + } else { + t0 = $[3]; + t1 = $[4]; + } + React.useEffect(t0, t1); } function useChangeHandler(editor, callback, storageKey, tabProperty, caller) { + const $ = reactCompilerRuntime.c(10); + let t0; + if ($[0] !== caller) { + t0 = { + nonNull: true, + caller + }; + $[0] = caller; + $[1] = t0; + } else { + t0 = $[1]; + } const { updateActiveTabValues - } = useEditorContext({ - nonNull: true, - caller - }); + } = useEditorContext(t0); const storage = useStorageContext(); - React.useEffect(() => { - if (!editor) { - return; - } - const store = debounce(500, value => { - if (!storage || storageKey === null) { + let t1; + let t2; + if ($[2] !== callback || $[3] !== editor || $[4] !== storage || $[5] !== storageKey || $[6] !== tabProperty || $[7] !== updateActiveTabValues) { + t1 = () => { + if (!editor) { return; } - storage.set(storageKey, value); - }); - const updateTab = debounce(100, value => { - updateActiveTabValues({ - [tabProperty]: value + const store = debounce(500, value => { + if (!storage || storageKey === null) { + return; + } + storage.set(storageKey, value); }); - }); - const handleChange = (editorInstance, changeObj) => { - if (!changeObj) { - return; - } - const newValue = editorInstance.getValue(); - store(newValue); - updateTab(newValue); - callback == null ? void 0 : callback(newValue); - }; - editor.on("change", handleChange); - return () => editor.off("change", handleChange); - }, [callback, editor, storage, storageKey, tabProperty, updateActiveTabValues]); -} -function useCompletion(editor, callback, caller) { - const { - schema - } = useSchemaContext({ - nonNull: true, - caller - }); - const explorer = useExplorerContext(); - const plugin = usePluginContext(); - React.useEffect(() => { - if (!editor) { - return; - } - const handleCompletion = (instance, changeObj) => { - onHasCompletion(instance, changeObj, schema, explorer, plugin, type => { - callback == null ? void 0 : callback({ - kind: "Type", - type, - schema: schema || void 0 + const updateTab = debounce(100, value_0 => { + updateActiveTabValues({ + [tabProperty]: value_0 }); }); + const handleChange = (editorInstance, changeObj) => { + if (!changeObj) { + return; + } + const newValue = editorInstance.getValue(); + store(newValue); + updateTab(newValue); + callback == null ? void 0 : callback(newValue); + }; + editor.on("change", handleChange); + return () => editor.off("change", handleChange); }; - editor.on( - // @ts-expect-error @TODO additional args for hasCompletion event - "hasCompletion", handleCompletion); - return () => editor.off( - // @ts-expect-error @TODO additional args for hasCompletion event - "hasCompletion", handleCompletion); - }, [callback, editor, explorer, plugin, schema]); + t2 = [callback, editor, storage, storageKey, tabProperty, updateActiveTabValues]; + $[2] = callback; + $[3] = editor; + $[4] = storage; + $[5] = storageKey; + $[6] = tabProperty; + $[7] = updateActiveTabValues; + $[8] = t1; + $[9] = t2; + } else { + t1 = $[8]; + t2 = $[9]; + } + React.useEffect(t1, t2); } -function useKeyMap(editor, keys, callback) { - React.useEffect(() => { - if (!editor) { - return; - } - for (const key of keys) { - editor.removeKeyMap(key); - } - if (callback) { - const keyMap = {}; - for (const key of keys) { - keyMap[key] = () => callback(); - } - editor.addKeyMap(keyMap); - } - }, [editor, keys, callback]); -} -function useCopyQuery({ - caller, - onCopyQuery -} = {}) { - const { - queryEditor - } = useEditorContext({ - nonNull: true, - caller: caller || useCopyQuery - }); - return React.useCallback(() => { - if (!queryEditor) { - return; - } - const query = queryEditor.getValue(); - copyToClipboard(query); - onCopyQuery == null ? void 0 : onCopyQuery(query); - }, [queryEditor, onCopyQuery]); -} -function useMergeQuery({ - caller -} = {}) { - const { - queryEditor - } = useEditorContext({ - nonNull: true, - caller: caller || useMergeQuery - }); +function useCompletion(editor, callback, caller) { + const $ = reactCompilerRuntime.c(9); + let t0; + if ($[0] !== caller) { + t0 = { + nonNull: true, + caller + }; + $[0] = caller; + $[1] = t0; + } else { + t0 = $[1]; + } const { schema - } = useSchemaContext({ - nonNull: true, - caller: useMergeQuery - }); - return React.useCallback(() => { - const documentAST = queryEditor == null ? void 0 : queryEditor.documentAST; - const query = queryEditor == null ? void 0 : queryEditor.getValue(); - if (!documentAST || !query) { - return; - } - queryEditor.setValue(graphql.print(toolkit.mergeAst(documentAST, schema))); - }, [queryEditor, schema]); + } = useSchemaContext(t0); + const explorer = useExplorerContext(); + const plugin = usePluginContext(); + let t1; + let t2; + if ($[2] !== callback || $[3] !== editor || $[4] !== explorer || $[5] !== plugin || $[6] !== schema) { + t1 = () => { + if (!editor) { + return; + } + const handleCompletion = (instance, changeObj) => { + onHasCompletion(instance, changeObj, schema, explorer, plugin, type => { + callback == null ? void 0 : callback({ + kind: "Type", + type, + schema: schema || void 0 + }); + }); + }; + editor.on("hasCompletion", handleCompletion); + return () => editor.off("hasCompletion", handleCompletion); + }; + t2 = [callback, editor, explorer, plugin, schema]; + $[2] = callback; + $[3] = editor; + $[4] = explorer; + $[5] = plugin; + $[6] = schema; + $[7] = t1; + $[8] = t2; + } else { + t1 = $[7]; + t2 = $[8]; + } + React.useEffect(t1, t2); } -function usePrettifyEditors({ - caller -} = {}) { +function useKeyMap(editor, keys, callback) { + const $ = reactCompilerRuntime.c(5); + let t0; + let t1; + if ($[0] !== callback || $[1] !== editor || $[2] !== keys) { + t0 = () => { + if (!editor) { + return; + } + for (const key of keys) { + editor.removeKeyMap(key); + } + if (callback) { + const keyMap = {}; + for (const key_0 of keys) { + keyMap[key_0] = () => callback(); + } + editor.addKeyMap(keyMap); + } + }; + t1 = [editor, keys, callback]; + $[0] = callback; + $[1] = editor; + $[2] = keys; + $[3] = t0; + $[4] = t1; + } else { + t0 = $[3]; + t1 = $[4]; + } + React.useEffect(t0, t1); +} +const _useCopyQuery = useCopyQuery; +const _useMergeQuery = useMergeQuery; +const _usePrettifyEditors = usePrettifyEditors; +const _useAutoCompleteLeafs = useAutoCompleteLeafs; +function useCopyQuery(t0) { + const $ = reactCompilerRuntime.c(7); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + caller, + onCopyQuery + } = t1; + const t2 = caller || _useCopyQuery; + let t3; + if ($[2] !== t2) { + t3 = { + nonNull: true, + caller: t2 + }; + $[2] = t2; + $[3] = t3; + } else { + t3 = $[3]; + } + const { + queryEditor + } = useEditorContext(t3); + let t4; + if ($[4] !== onCopyQuery || $[5] !== queryEditor) { + t4 = () => { + if (!queryEditor) { + return; + } + const query = queryEditor.getValue(); + copyToClipboard(query); + onCopyQuery == null ? void 0 : onCopyQuery(query); + }; + $[4] = onCopyQuery; + $[5] = queryEditor; + $[6] = t4; + } else { + t4 = $[6]; + } + return t4; +} +function useMergeQuery(t0) { + const $ = reactCompilerRuntime.c(8); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + caller + } = t1; + const t2 = caller || _useMergeQuery; + let t3; + if ($[2] !== t2) { + t3 = { + nonNull: true, + caller: t2 + }; + $[2] = t2; + $[3] = t3; + } else { + t3 = $[3]; + } + const { + queryEditor + } = useEditorContext(t3); + let t4; + if ($[4] === Symbol.for("react.memo_cache_sentinel")) { + t4 = { + nonNull: true, + caller: _useMergeQuery + }; + $[4] = t4; + } else { + t4 = $[4]; + } + const { + schema + } = useSchemaContext(t4); + let t5; + if ($[5] !== queryEditor || $[6] !== schema) { + t5 = () => { + const documentAST = queryEditor == null ? void 0 : queryEditor.documentAST; + const query = queryEditor == null ? void 0 : queryEditor.getValue(); + if (!documentAST || !query) { + return; + } + queryEditor.setValue(graphql.print(toolkit.mergeAst(documentAST, schema))); + }; + $[5] = queryEditor; + $[6] = schema; + $[7] = t5; + } else { + t5 = $[7]; + } + return t5; +} +function usePrettifyEditors(t0) { + const $ = reactCompilerRuntime.c(8); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + caller + } = t1; + const t2 = caller || _usePrettifyEditors; + let t3; + if ($[2] !== t2) { + t3 = { + nonNull: true, + caller: t2 + }; + $[2] = t2; + $[3] = t3; + } else { + t3 = $[3]; + } const { queryEditor, headerEditor, variableEditor - } = useEditorContext({ - nonNull: true, - caller: caller || usePrettifyEditors - }); - return React.useCallback(() => { - if (variableEditor) { - const variableEditorContent = variableEditor.getValue(); - try { - const prettifiedVariableEditorContent = JSON.stringify(JSON.parse(variableEditorContent), null, 2); - if (prettifiedVariableEditorContent !== variableEditorContent) { - variableEditor.setValue(prettifiedVariableEditorContent); - } - } catch {} - } - if (headerEditor) { - const headerEditorContent = headerEditor.getValue(); - try { - const prettifiedHeaderEditorContent = JSON.stringify(JSON.parse(headerEditorContent), null, 2); - if (prettifiedHeaderEditorContent !== headerEditorContent) { - headerEditor.setValue(prettifiedHeaderEditorContent); - } - } catch {} - } - if (queryEditor) { - const editorContent = queryEditor.getValue(); - const prettifiedEditorContent = graphql.print(graphql.parse(editorContent)); - if (prettifiedEditorContent !== editorContent) { - queryEditor.setValue(prettifiedEditorContent); + } = useEditorContext(t3); + let t4; + if ($[4] !== headerEditor || $[5] !== queryEditor || $[6] !== variableEditor) { + t4 = () => { + if (variableEditor) { + const variableEditorContent = variableEditor.getValue(); + try { + const prettifiedVariableEditorContent = JSON.stringify(JSON.parse(variableEditorContent), null, 2); + if (prettifiedVariableEditorContent !== variableEditorContent) { + variableEditor.setValue(prettifiedVariableEditorContent); + } + } catch {} } - } - }, [queryEditor, variableEditor, headerEditor]); + if (headerEditor) { + const headerEditorContent = headerEditor.getValue(); + try { + const prettifiedHeaderEditorContent = JSON.stringify(JSON.parse(headerEditorContent), null, 2); + if (prettifiedHeaderEditorContent !== headerEditorContent) { + headerEditor.setValue(prettifiedHeaderEditorContent); + } + } catch {} + } + if (queryEditor) { + const editorContent = queryEditor.getValue(); + const prettifiedEditorContent = graphql.print(graphql.parse(editorContent)); + if (prettifiedEditorContent !== editorContent) { + queryEditor.setValue(prettifiedEditorContent); + } + } + }; + $[4] = headerEditor; + $[5] = queryEditor; + $[6] = variableEditor; + $[7] = t4; + } else { + t4 = $[7]; + } + return t4; } -function useAutoCompleteLeafs({ - getDefaultFieldNames, - caller -} = {}) { +function useAutoCompleteLeafs(t0) { + const $ = reactCompilerRuntime.c(10); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + getDefaultFieldNames, + caller + } = t1; + const t2 = caller || _useAutoCompleteLeafs; + let t3; + if ($[2] !== t2) { + t3 = { + nonNull: true, + caller: t2 + }; + $[2] = t2; + $[3] = t3; + } else { + t3 = $[3]; + } const { schema - } = useSchemaContext({ - nonNull: true, - caller: caller || useAutoCompleteLeafs - }); + } = useSchemaContext(t3); + const t4 = caller || _useAutoCompleteLeafs; + let t5; + if ($[4] !== t4) { + t5 = { + nonNull: true, + caller: t4 + }; + $[4] = t4; + $[5] = t5; + } else { + t5 = $[5]; + } const { queryEditor - } = useEditorContext({ - nonNull: true, - caller: caller || useAutoCompleteLeafs - }); - return React.useCallback(() => { - if (!queryEditor) { - return; - } - const query = queryEditor.getValue(); - const { - insertions, - result - } = toolkit.fillLeafs(schema, query, getDefaultFieldNames); - if (insertions && insertions.length > 0) { - queryEditor.operation(() => { - const cursor = queryEditor.getCursor(); - const cursorIndex = queryEditor.indexFromPos(cursor); - queryEditor.setValue(result || ""); - let added = 0; - const markers = insertions.map(({ - index, - string - }) => queryEditor.markText(queryEditor.posFromIndex(index + added), queryEditor.posFromIndex(index + (added += string.length)), { - className: "auto-inserted-leaf", - clearOnEnter: true, - title: "Automatically added leaf fields" - })); - setTimeout(() => { - for (const marker of markers) { - marker.clear(); + } = useEditorContext(t5); + let t6; + if ($[6] !== getDefaultFieldNames || $[7] !== queryEditor || $[8] !== schema) { + t6 = () => { + if (!queryEditor) { + return; + } + const query = queryEditor.getValue(); + const { + insertions, + result + } = toolkit.fillLeafs(schema, query, getDefaultFieldNames); + if (insertions && insertions.length > 0) { + queryEditor.operation(() => { + const cursor = queryEditor.getCursor(); + const cursorIndex = queryEditor.indexFromPos(cursor); + queryEditor.setValue(result || ""); + let added; + added = 0; + const markers = insertions.map(t7 => { + const { + index, + string + } = t7; + added = added + string.length; + return queryEditor.markText(queryEditor.posFromIndex(index + added), queryEditor.posFromIndex(index + added), { + className: "auto-inserted-leaf", + clearOnEnter: true, + title: "Automatically added leaf fields" + }); + }); + setTimeout(() => { + for (const marker of markers) { + marker.clear(); + } + }, 7e3); + let newCursorIndex = cursorIndex; + for (const { + index: index_0, + string: string_0 + } of insertions) { + if (index_0 < cursorIndex) { + newCursorIndex = newCursorIndex + string_0.length; + } } - }, 7e3); - let newCursorIndex = cursorIndex; - for (const { - index, - string - } of insertions) { - if (index < cursorIndex) { - newCursorIndex += string.length; - } - } - queryEditor.setCursor(queryEditor.posFromIndex(newCursorIndex)); - }); - } - return result; - }, [getDefaultFieldNames, queryEditor, schema]); + queryEditor.setCursor(queryEditor.posFromIndex(newCursorIndex)); + }); + } + return result; + }; + $[6] = getDefaultFieldNames; + $[7] = queryEditor; + $[8] = schema; + $[9] = t6; + } else { + t6 = $[9]; + } + return t6; } const useEditorState = editor => { + "use no memo"; + var _ref2; const context = useEditorContext({ nonNull: true @@ -71561,143 +80393,265 @@ const useVariablesEditorState = () => { const useHeadersEditorState = () => { return useEditorState("header"); }; -function useOptimisticState([upstreamState, upstreamSetState]) { - const lastStateRef = React.useRef({ - /** The last thing that we sent upstream; we're expecting this back */ - pending: null, - /** The last thing we received from upstream */ - last: upstreamState - }); +function useOptimisticState(t0) { + const $ = reactCompilerRuntime.c(12); + const [upstreamState, upstreamSetState] = t0; + let t1; + if ($[0] !== upstreamState) { + t1 = { + pending: null, + last: upstreamState + }; + $[0] = upstreamState; + $[1] = t1; + } else { + t1 = $[1]; + } + const lastStateRef = React.useRef(t1); const [state, setOperationsText] = React.useState(upstreamState); - React.useEffect(() => { - if (lastStateRef.current.last === upstreamState) ;else { - lastStateRef.current.last = upstreamState; - if (lastStateRef.current.pending === null) { - setOperationsText(upstreamState); - } else if (lastStateRef.current.pending === upstreamState) { - lastStateRef.current.pending = null; - if (upstreamState !== state) { - lastStateRef.current.pending = state; - upstreamSetState(state); + let t2; + let t3; + if ($[2] !== state || $[3] !== upstreamSetState || $[4] !== upstreamState) { + t2 = () => { + if (lastStateRef.current.last === upstreamState) ;else { + lastStateRef.current.last = upstreamState; + if (lastStateRef.current.pending === null) { + setOperationsText(upstreamState); + } else { + if (lastStateRef.current.pending === upstreamState) { + lastStateRef.current.pending = null; + if (upstreamState !== state) { + lastStateRef.current.pending = state; + upstreamSetState(state); + } + } else { + lastStateRef.current.pending = null; + setOperationsText(upstreamState); + } } - } else { - lastStateRef.current.pending = null; - setOperationsText(upstreamState); } - } - }, [upstreamState, state, upstreamSetState]); - const setState = React.useCallback(newState => { - setOperationsText(newState); - if (lastStateRef.current.pending === null && lastStateRef.current.last !== newState) { - lastStateRef.current.pending = newState; - upstreamSetState(newState); - } - }, [upstreamSetState]); - return React.useMemo(() => [state, setState], [state, setState]); + }; + t3 = [upstreamState, state, upstreamSetState]; + $[2] = state; + $[3] = upstreamSetState; + $[4] = upstreamState; + $[5] = t2; + $[6] = t3; + } else { + t2 = $[5]; + t3 = $[6]; + } + React.useEffect(t2, t3); + let t4; + if ($[7] !== upstreamSetState) { + t4 = newState => { + setOperationsText(newState); + if (lastStateRef.current.pending === null && lastStateRef.current.last !== newState) { + lastStateRef.current.pending = newState; + upstreamSetState(newState); + } + }; + $[7] = upstreamSetState; + $[8] = t4; + } else { + t4 = $[8]; + } + const setState = t4; + let t5; + if ($[9] !== setState || $[10] !== state) { + t5 = [state, setState]; + $[9] = setState; + $[10] = state; + $[11] = t5; + } else { + t5 = $[11]; + } + return t5; } -function useHeaderEditor({ - editorTheme = DEFAULT_EDITOR_THEME, - keyMap = DEFAULT_KEY_MAP, - onEdit, - readOnly = false -} = {}, caller) { +function importCodeMirrorImports$3() { + return importCodeMirror([// @ts-expect-error + Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/mode/javascript/javascript.js */ "../../../node_modules/codemirror/mode/javascript/javascript.js")))]); +} +const _useHeaderEditor = useHeaderEditor; +function useHeaderEditor(t0, caller) { + const $ = reactCompilerRuntime.c(17); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + editorTheme: t2, + keyMap: t3, + onEdit, + readOnly: t4 + } = t1; + const editorTheme = t2 === void 0 ? DEFAULT_EDITOR_THEME : t2; + const keyMap = t3 === void 0 ? DEFAULT_KEY_MAP : t3; + const readOnly = t4 === void 0 ? false : t4; + const t5 = caller || _useHeaderEditor; + let t6; + if ($[2] !== t5) { + t6 = { + nonNull: true, + caller: t5 + }; + $[2] = t5; + $[3] = t6; + } else { + t6 = $[3]; + } const { initialHeaders, headerEditor, setHeaderEditor, shouldPersistHeaders - } = useEditorContext({ - nonNull: true, - caller: caller || useHeaderEditor - }); + } = useEditorContext(t6); const executionContext = useExecutionContext(); - const merge = useMergeQuery({ - caller: caller || useHeaderEditor - }); - const prettify = usePrettifyEditors({ - caller: caller || useHeaderEditor - }); - const ref = React.useRef(null); - React.useEffect(() => { - let isActive = true; - void importCodeMirror([ - // @ts-expect-error - Promise.resolve().then(() => __webpack_require__(/*! ./javascript.cjs.js */ "../../graphiql-react/dist/javascript.cjs.js")).then(n => n.javascript)]).then(CodeMirror => { - if (!isActive) { - return; - } - const container = ref.current; - if (!container) { - return; - } - const newEditor = CodeMirror(container, { - value: initialHeaders, - lineNumbers: true, - tabSize: 2, - mode: { - name: "javascript", - json: true - }, - theme: editorTheme, - autoCloseBrackets: true, - matchBrackets: true, - showCursorWhenSelecting: true, - readOnly: readOnly ? "nocursor" : false, - foldGutter: true, - gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], - extraKeys: commonKeys - }); - newEditor.addKeyMap({ - "Cmd-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - }, - "Ctrl-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - }, - "Alt-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - }, - "Shift-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - } - }); - newEditor.on("keyup", (editorInstance, event) => { - const { - code, - key, - shiftKey - } = event; - const isLetter = code.startsWith("Key"); - const isNumber = !shiftKey && code.startsWith("Digit"); - if (isLetter || isNumber || key === "_" || key === '"') { - editorInstance.execCommand("autocomplete"); - } - }); - setHeaderEditor(newEditor); - }); - return () => { - isActive = false; + const t7 = caller || _useHeaderEditor; + let t8; + if ($[4] !== t7) { + t8 = { + caller: t7 }; - }, [editorTheme, initialHeaders, readOnly, setHeaderEditor]); + $[4] = t7; + $[5] = t8; + } else { + t8 = $[5]; + } + const merge = useMergeQuery(t8); + const t9 = caller || _useHeaderEditor; + let t10; + if ($[6] !== t9) { + t10 = { + caller: t9 + }; + $[6] = t9; + $[7] = t10; + } else { + t10 = $[7]; + } + const prettify = usePrettifyEditors(t10); + const ref = React.useRef(null); + let t11; + let t12; + if ($[8] !== editorTheme || $[9] !== initialHeaders || $[10] !== readOnly || $[11] !== setHeaderEditor) { + t11 = () => { + let isActive; + isActive = true; + importCodeMirrorImports$3().then(CodeMirror => { + if (!isActive) { + return; + } + const container = ref.current; + if (!container) { + return; + } + const newEditor = CodeMirror(container, { + value: initialHeaders, + lineNumbers: true, + tabSize: 2, + mode: { + name: "javascript", + json: true + }, + theme: editorTheme, + autoCloseBrackets: true, + matchBrackets: true, + showCursorWhenSelecting: true, + readOnly: readOnly ? "nocursor" : false, + foldGutter: true, + gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], + extraKeys: commonKeys + }); + newEditor.addKeyMap({ + "Cmd-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + }, + "Ctrl-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + }, + "Alt-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + }, + "Shift-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + } + }); + newEditor.on("keyup", _temp$2); + setHeaderEditor(newEditor); + }); + return () => { + isActive = false; + }; + }; + t12 = [editorTheme, initialHeaders, readOnly, setHeaderEditor]; + $[8] = editorTheme; + $[9] = initialHeaders; + $[10] = readOnly; + $[11] = setHeaderEditor; + $[12] = t11; + $[13] = t12; + } else { + t11 = $[12]; + t12 = $[13]; + } + React.useEffect(t11, t12); useSynchronizeOption(headerEditor, "keyMap", keyMap); - useChangeHandler(headerEditor, onEdit, shouldPersistHeaders ? STORAGE_KEY$3 : null, "headers", useHeaderEditor); - useKeyMap(headerEditor, ["Cmd-Enter", "Ctrl-Enter"], executionContext == null ? void 0 : executionContext.run); - useKeyMap(headerEditor, ["Shift-Ctrl-P"], prettify); - useKeyMap(headerEditor, ["Shift-Ctrl-M"], merge); + useChangeHandler(headerEditor, onEdit, shouldPersistHeaders ? STORAGE_KEY$3 : null, "headers", _useHeaderEditor); + let t13; + if ($[14] === Symbol.for("react.memo_cache_sentinel")) { + t13 = ["Cmd-Enter", "Ctrl-Enter"]; + $[14] = t13; + } else { + t13 = $[14]; + } + useKeyMap(headerEditor, t13, executionContext == null ? void 0 : executionContext.run); + let t14; + if ($[15] === Symbol.for("react.memo_cache_sentinel")) { + t14 = ["Shift-Ctrl-P"]; + $[15] = t14; + } else { + t14 = $[15]; + } + useKeyMap(headerEditor, t14, prettify); + let t15; + if ($[16] === Symbol.for("react.memo_cache_sentinel")) { + t15 = ["Shift-Ctrl-M"]; + $[16] = t15; + } else { + t15 = $[16]; + } + useKeyMap(headerEditor, t15, merge); return ref; } +function _temp$2(editorInstance, event) { + const { + code, + key, + shiftKey + } = event; + const isLetter = code.startsWith("Key"); + const isNumber = !shiftKey && code.startsWith("Digit"); + if (isLetter || isNumber || key === "_" || key === '"') { + editorInstance.execCommand("autocomplete"); + } +} const STORAGE_KEY$3 = "headers"; const invalidCharacters = Array.from({ length: 11 @@ -71708,20 +80662,79 @@ const sanitizeRegex = new RegExp("[" + invalidCharacters.join("") + "]", "g"); function normalizeWhitespace(line) { return line.replace(sanitizeRegex, " "); } -function useQueryEditor({ - editorTheme = DEFAULT_EDITOR_THEME, - keyMap = DEFAULT_KEY_MAP, - onClickReference, - onCopyQuery, - onEdit, - readOnly = false -} = {}, caller) { +function importCodeMirrorImports$2() { + return importCodeMirror([Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/comment/comment.js */ "../../../node_modules/codemirror/addon/comment/comment.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/search/search.js */ "../../../node_modules/codemirror/addon/search/search.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/hint.js */ "../../codemirror-graphql/esm/hint.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/lint.js */ "../../codemirror-graphql/esm/lint.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/info.js */ "../../codemirror-graphql/esm/info.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/jump.js */ "../../codemirror-graphql/esm/jump.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/mode.js */ "../../codemirror-graphql/esm/mode.js")))]); +} +const _useQueryEditor = useQueryEditor; +function updateVariableEditor(variableEditor, operationFacts) { + variableEditor.state.lint.linterOptions.variableToType = operationFacts == null ? void 0 : operationFacts.variableToType; + variableEditor.options.lint.variableToType = operationFacts == null ? void 0 : operationFacts.variableToType; + variableEditor.options.hintOptions.variableToType = operationFacts == null ? void 0 : operationFacts.variableToType; +} +function updateEditorSchema(editor, schema) { + editor.state.lint.linterOptions.schema = schema; + editor.options.lint.schema = schema; + editor.options.hintOptions.schema = schema; + editor.options.info.schema = schema; + editor.options.jump.schema = schema; +} +function updateEditorValidationRules(editor, validationRules) { + editor.state.lint.linterOptions.validationRules = validationRules; + editor.options.lint.validationRules = validationRules; +} +function updateEditorExternalFragments(editor, externalFragmentList) { + editor.state.lint.linterOptions.externalFragments = externalFragmentList; + editor.options.lint.externalFragments = externalFragmentList; + editor.options.hintOptions.externalFragments = externalFragmentList; +} +function useQueryEditor(t0, caller) { + const $ = reactCompilerRuntime.c(41); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + editorTheme: t2, + keyMap: t3, + onClickReference, + onCopyQuery, + onEdit, + readOnly: t4 + } = t1; + const editorTheme = t2 === void 0 ? DEFAULT_EDITOR_THEME : t2; + const keyMap = t3 === void 0 ? DEFAULT_KEY_MAP : t3; + const readOnly = t4 === void 0 ? false : t4; + const t5 = caller || _useQueryEditor; + let t6; + if ($[2] !== t5) { + t6 = { + nonNull: true, + caller: t5 + }; + $[2] = t5; + $[3] = t6; + } else { + t6 = $[3]; + } const { schema - } = useSchemaContext({ - nonNull: true, - caller: caller || useQueryEditor - }); + } = useSchemaContext(t6); + const t7 = caller || _useQueryEditor; + let t8; + if ($[4] !== t7) { + t8 = { + nonNull: true, + caller: t7 + }; + $[4] = t7; + $[5] = t8; + } else { + t8 = $[5]; + } const { externalFragments, initialQuery, @@ -71731,321 +80744,484 @@ function useQueryEditor({ validationRules, variableEditor, updateActiveTabValues - } = useEditorContext({ - nonNull: true, - caller: caller || useQueryEditor - }); + } = useEditorContext(t8); const executionContext = useExecutionContext(); const storage = useStorageContext(); const explorer = useExplorerContext(); const plugin = usePluginContext(); - const copy = useCopyQuery({ - caller: caller || useQueryEditor, - onCopyQuery - }); - const merge = useMergeQuery({ - caller: caller || useQueryEditor - }); - const prettify = usePrettifyEditors({ - caller: caller || useQueryEditor - }); + const t9 = caller || _useQueryEditor; + let t10; + if ($[6] !== onCopyQuery || $[7] !== t9) { + t10 = { + caller: t9, + onCopyQuery + }; + $[6] = onCopyQuery; + $[7] = t9; + $[8] = t10; + } else { + t10 = $[8]; + } + const copy = useCopyQuery(t10); + const t11 = caller || _useQueryEditor; + let t12; + if ($[9] !== t11) { + t12 = { + caller: t11 + }; + $[9] = t11; + $[10] = t12; + } else { + t12 = $[10]; + } + const merge = useMergeQuery(t12); + const t13 = caller || _useQueryEditor; + let t14; + if ($[11] !== t13) { + t14 = { + caller: t13 + }; + $[11] = t13; + $[12] = t14; + } else { + t14 = $[12]; + } + const prettify = usePrettifyEditors(t14); const ref = React.useRef(null); const codeMirrorRef = React.useRef(); - const onClickReferenceRef = React.useRef(() => {}); - React.useEffect(() => { - onClickReferenceRef.current = reference => { - if (!explorer || !plugin) { - return; - } - plugin.setVisiblePlugin(DOC_EXPLORER_PLUGIN); - switch (reference.kind) { - case "Type": - { - explorer.push({ - name: reference.type.name, - def: reference.type - }); - break; - } - case "Field": - { - explorer.push({ - name: reference.field.name, - def: reference.field - }); - break; - } - case "Argument": - { - if (reference.field) { - explorer.push({ - name: reference.field.name, - def: reference.field - }); - } - break; - } - case "EnumValue": - { - if (reference.type) { + const onClickReferenceRef = React.useRef(_temp$1); + let t15; + let t16; + if ($[13] !== explorer || $[14] !== onClickReference || $[15] !== plugin) { + t15 = () => { + onClickReferenceRef.current = reference => { + if (!explorer || !plugin) { + return; + } + plugin.setVisiblePlugin(DOC_EXPLORER_PLUGIN); + bb47: switch (reference.kind) { + case "Type": + { explorer.push({ name: reference.type.name, def: reference.type }); + break bb47; } - break; - } - } - onClickReference == null ? void 0 : onClickReference(reference); + case "Field": + { + explorer.push({ + name: reference.field.name, + def: reference.field + }); + break bb47; + } + case "Argument": + { + if (reference.field) { + explorer.push({ + name: reference.field.name, + def: reference.field + }); + } + break bb47; + } + case "EnumValue": + { + if (reference.type) { + explorer.push({ + name: reference.type.name, + def: reference.type + }); + } + } + } + onClickReference == null ? void 0 : onClickReference(reference); + }; }; - }, [explorer, onClickReference, plugin]); - React.useEffect(() => { - let isActive = true; - void importCodeMirror([Promise.resolve().then(() => __webpack_require__(/*! ./comment.cjs.js */ "../../graphiql-react/dist/comment.cjs.js")).then(n => n.comment), Promise.resolve().then(() => __webpack_require__(/*! ./search.cjs.js */ "../../graphiql-react/dist/search.cjs.js")).then(n => n.search), Promise.resolve().then(() => __webpack_require__(/*! ./hint.cjs.js */ "../../graphiql-react/dist/hint.cjs.js")), Promise.resolve().then(() => __webpack_require__(/*! ./lint.cjs2.js */ "../../graphiql-react/dist/lint.cjs2.js")), Promise.resolve().then(() => __webpack_require__(/*! ./info.cjs.js */ "../../graphiql-react/dist/info.cjs.js")), Promise.resolve().then(() => __webpack_require__(/*! ./jump.cjs.js */ "../../graphiql-react/dist/jump.cjs.js")), Promise.resolve().then(() => __webpack_require__(/*! ./mode.cjs.js */ "../../graphiql-react/dist/mode.cjs.js"))]).then(CodeMirror => { - if (!isActive) { - return; - } - codeMirrorRef.current = CodeMirror; - const container = ref.current; - if (!container) { - return; - } - const newEditor = CodeMirror(container, { - value: initialQuery, - lineNumbers: true, - tabSize: 2, - foldGutter: true, - mode: "graphql", - theme: editorTheme, - autoCloseBrackets: true, - matchBrackets: true, - showCursorWhenSelecting: true, - readOnly: readOnly ? "nocursor" : false, - lint: { - // @ts-expect-error - schema: void 0, - validationRules: null, - // linting accepts string or FragmentDefinitionNode[] - externalFragments: void 0 - }, - hintOptions: { - // @ts-expect-error - schema: void 0, - closeOnUnfocus: false, - completeSingle: false, - container, - externalFragments: void 0, - autocompleteOptions: { - // for the query editor, restrict to executable type definitions - mode: graphqlLanguageService.GraphQLDocumentMode.EXECUTABLE - } - }, - info: { - schema: void 0, - renderDescription: text => markdown.render(text), - onClick(reference) { - onClickReferenceRef.current(reference); - } - }, - jump: { - schema: void 0, - onClick(reference) { - onClickReferenceRef.current(reference); - } - }, - gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], - extraKeys: { - ...commonKeys, - "Cmd-S"() {}, - "Ctrl-S"() {} + t16 = [explorer, onClickReference, plugin]; + $[13] = explorer; + $[14] = onClickReference; + $[15] = plugin; + $[16] = t15; + $[17] = t16; + } else { + t15 = $[16]; + t16 = $[17]; + } + React.useEffect(t15, t16); + let t17; + let t18; + if ($[18] !== editorTheme || $[19] !== initialQuery || $[20] !== readOnly || $[21] !== setQueryEditor) { + t17 = () => { + let isActive; + isActive = true; + importCodeMirrorImports$2().then(CodeMirror => { + if (!isActive) { + return; } - }); - newEditor.addKeyMap({ - "Cmd-Space"() { - newEditor.showHint({ - completeSingle: true, - container - }); - }, - "Ctrl-Space"() { - newEditor.showHint({ - completeSingle: true, - container - }); - }, - "Alt-Space"() { - newEditor.showHint({ - completeSingle: true, - container - }); - }, - "Shift-Space"() { - newEditor.showHint({ - completeSingle: true, - container - }); - }, - "Shift-Alt-Space"() { - newEditor.showHint({ - completeSingle: true, - container - }); + codeMirrorRef.current = CodeMirror; + const container = ref.current; + if (!container) { + return; } - }); - newEditor.on("keyup", (editorInstance, event) => { - if (AUTO_COMPLETE_AFTER_KEY.test(event.key)) { - editorInstance.execCommand("autocomplete"); - } - }); - let showingHints = false; - newEditor.on("startCompletion", () => { - showingHints = true; - }); - newEditor.on("endCompletion", () => { + const newEditor = CodeMirror(container, { + value: initialQuery, + lineNumbers: true, + tabSize: 2, + foldGutter: true, + mode: "graphql", + theme: editorTheme, + autoCloseBrackets: true, + matchBrackets: true, + showCursorWhenSelecting: true, + readOnly: readOnly ? "nocursor" : false, + lint: { + schema: void 0, + validationRules: null, + externalFragments: void 0 + }, + hintOptions: { + schema: void 0, + closeOnUnfocus: false, + completeSingle: false, + container, + externalFragments: void 0, + autocompleteOptions: { + mode: graphqlLanguageService.GraphQLDocumentMode.EXECUTABLE + } + }, + info: { + schema: void 0, + renderDescription: _temp2, + onClick(reference_0) { + onClickReferenceRef.current(reference_0); + } + }, + jump: { + schema: void 0, + onClick(reference_1) { + onClickReferenceRef.current(reference_1); + } + }, + gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], + extraKeys: { + ...commonKeys, + "Cmd-S"() {}, + "Ctrl-S"() {} + } + }); + newEditor.addKeyMap({ + "Cmd-Space"() { + newEditor.showHint({ + completeSingle: true, + container + }); + }, + "Ctrl-Space"() { + newEditor.showHint({ + completeSingle: true, + container + }); + }, + "Alt-Space"() { + newEditor.showHint({ + completeSingle: true, + container + }); + }, + "Shift-Space"() { + newEditor.showHint({ + completeSingle: true, + container + }); + }, + "Shift-Alt-Space"() { + newEditor.showHint({ + completeSingle: true, + container + }); + } + }); + newEditor.on("keyup", _temp3); + let showingHints; showingHints = false; + newEditor.on("startCompletion", () => { + showingHints = true; + }); + newEditor.on("endCompletion", () => { + showingHints = false; + }); + newEditor.on("keydown", (editorInstance_0, event_0) => { + if (event_0.key === "Escape" && showingHints) { + event_0.stopPropagation(); + } + }); + newEditor.on("beforeChange", _temp4); + newEditor.documentAST = null; + newEditor.operationName = null; + newEditor.operations = null; + newEditor.variableToType = null; + setQueryEditor(newEditor); }); - newEditor.on("keydown", (editorInstance, event) => { - if (event.key === "Escape" && showingHints) { - event.stopPropagation(); - } - }); - newEditor.on("beforeChange", (editorInstance, change) => { - var _a; - if (change.origin === "paste") { - const text = change.text.map(normalizeWhitespace); - (_a = change.update) == null ? void 0 : _a.call(change, change.from, change.to, text); - } - }); - newEditor.documentAST = null; - newEditor.operationName = null; - newEditor.operations = null; - newEditor.variableToType = null; - setQueryEditor(newEditor); - }); - return () => { - isActive = false; + return () => { + isActive = false; + }; }; - }, [editorTheme, initialQuery, readOnly, setQueryEditor]); + t18 = [editorTheme, initialQuery, readOnly, setQueryEditor]; + $[18] = editorTheme; + $[19] = initialQuery; + $[20] = readOnly; + $[21] = setQueryEditor; + $[22] = t17; + $[23] = t18; + } else { + t17 = $[22]; + t18 = $[23]; + } + React.useEffect(t17, t18); useSynchronizeOption(queryEditor, "keyMap", keyMap); - React.useEffect(() => { - if (!queryEditor) { - return; - } - function getAndUpdateOperationFacts(editorInstance) { - var _editorInstance$opera, _editorInstance$opera2, _ref3, _ref4; - var _a; - const operationFacts = graphqlLanguageService.getOperationFacts(schema, editorInstance.getValue()); - const operationName = toolkit.getSelectedOperationName((_editorInstance$opera = editorInstance.operations) !== null && _editorInstance$opera !== void 0 ? _editorInstance$opera : void 0, (_editorInstance$opera2 = editorInstance.operationName) !== null && _editorInstance$opera2 !== void 0 ? _editorInstance$opera2 : void 0, operationFacts == null ? void 0 : operationFacts.operations); - editorInstance.documentAST = (_ref3 = operationFacts == null ? void 0 : operationFacts.documentAST) !== null && _ref3 !== void 0 ? _ref3 : null; - editorInstance.operationName = operationName !== null && operationName !== void 0 ? operationName : null; - editorInstance.operations = (_ref4 = operationFacts == null ? void 0 : operationFacts.operations) !== null && _ref4 !== void 0 ? _ref4 : null; - if (variableEditor) { - variableEditor.state.lint.linterOptions.variableToType = operationFacts == null ? void 0 : operationFacts.variableToType; - variableEditor.options.lint.variableToType = operationFacts == null ? void 0 : operationFacts.variableToType; - variableEditor.options.hintOptions.variableToType = operationFacts == null ? void 0 : operationFacts.variableToType; - (_a = codeMirrorRef.current) == null ? void 0 : _a.signal(variableEditor, "change", variableEditor); + let t19; + let t20; + if ($[24] !== onEdit || $[25] !== queryEditor || $[26] !== schema || $[27] !== setOperationName || $[28] !== storage || $[29] !== updateActiveTabValues || $[30] !== variableEditor) { + t19 = () => { + if (!queryEditor) { + return; } - return operationFacts ? { - ...operationFacts, - operationName - } : null; - } - const handleChange = debounce(100, editorInstance => { - var _ref5; - const query = editorInstance.getValue(); - storage == null ? void 0 : storage.set(STORAGE_KEY_QUERY, query); - const currentOperationName = editorInstance.operationName; - const operationFacts = getAndUpdateOperationFacts(editorInstance); - if ((operationFacts == null ? void 0 : operationFacts.operationName) !== void 0) { - storage == null ? void 0 : storage.set(STORAGE_KEY_OPERATION_NAME, operationFacts.operationName); - } - onEdit == null ? void 0 : onEdit(query, operationFacts == null ? void 0 : operationFacts.documentAST); - if ((operationFacts == null ? void 0 : operationFacts.operationName) && currentOperationName !== operationFacts.operationName) { - setOperationName(operationFacts.operationName); - } - updateActiveTabValues({ - query, - operationName: (_ref5 = operationFacts == null ? void 0 : operationFacts.operationName) !== null && _ref5 !== void 0 ? _ref5 : null + const getAndUpdateOperationFacts = function getAndUpdateOperationFacts2(editorInstance_2) { + var _editorInstance_2$ope, _editorInstance_2$ope2, _ref3, _ref4; + var _a; + const operationFacts = graphqlLanguageService.getOperationFacts(schema, editorInstance_2.getValue()); + const operationName = toolkit.getSelectedOperationName((_editorInstance_2$ope = editorInstance_2.operations) !== null && _editorInstance_2$ope !== void 0 ? _editorInstance_2$ope : void 0, (_editorInstance_2$ope2 = editorInstance_2.operationName) !== null && _editorInstance_2$ope2 !== void 0 ? _editorInstance_2$ope2 : void 0, operationFacts == null ? void 0 : operationFacts.operations); + editorInstance_2.documentAST = (_ref3 = operationFacts == null ? void 0 : operationFacts.documentAST) !== null && _ref3 !== void 0 ? _ref3 : null; + editorInstance_2.operationName = operationName !== null && operationName !== void 0 ? operationName : null; + editorInstance_2.operations = (_ref4 = operationFacts == null ? void 0 : operationFacts.operations) !== null && _ref4 !== void 0 ? _ref4 : null; + if (variableEditor) { + updateVariableEditor(variableEditor, operationFacts); + (_a = codeMirrorRef.current) == null ? void 0 : _a.signal(variableEditor, "change", variableEditor); + } + return operationFacts ? { + ...operationFacts, + operationName + } : null; + }; + const handleChange = debounce(100, editorInstance_3 => { + var _ref5; + const query = editorInstance_3.getValue(); + storage == null ? void 0 : storage.set(STORAGE_KEY_QUERY, query); + const currentOperationName = editorInstance_3.operationName; + const operationFacts_0 = getAndUpdateOperationFacts(editorInstance_3); + if ((operationFacts_0 == null ? void 0 : operationFacts_0.operationName) !== void 0) { + storage == null ? void 0 : storage.set(STORAGE_KEY_OPERATION_NAME, operationFacts_0.operationName); + } + onEdit == null ? void 0 : onEdit(query, operationFacts_0 == null ? void 0 : operationFacts_0.documentAST); + if ((operationFacts_0 == null ? void 0 : operationFacts_0.operationName) && currentOperationName !== operationFacts_0.operationName) { + setOperationName(operationFacts_0.operationName); + } + updateActiveTabValues({ + query, + operationName: (_ref5 = operationFacts_0 == null ? void 0 : operationFacts_0.operationName) !== null && _ref5 !== void 0 ? _ref5 : null + }); }); - }); - getAndUpdateOperationFacts(queryEditor); - queryEditor.on("change", handleChange); - return () => queryEditor.off("change", handleChange); - }, [onEdit, queryEditor, schema, setOperationName, storage, variableEditor, updateActiveTabValues]); + getAndUpdateOperationFacts(queryEditor); + queryEditor.on("change", handleChange); + return () => queryEditor.off("change", handleChange); + }; + t20 = [onEdit, queryEditor, schema, setOperationName, storage, variableEditor, updateActiveTabValues]; + $[24] = onEdit; + $[25] = queryEditor; + $[26] = schema; + $[27] = setOperationName; + $[28] = storage; + $[29] = updateActiveTabValues; + $[30] = variableEditor; + $[31] = t19; + $[32] = t20; + } else { + t19 = $[31]; + t20 = $[32]; + } + React.useEffect(t19, t20); useSynchronizeSchema(queryEditor, schema !== null && schema !== void 0 ? schema : null, codeMirrorRef); useSynchronizeValidationRules(queryEditor, validationRules !== null && validationRules !== void 0 ? validationRules : null, codeMirrorRef); useSynchronizeExternalFragments(queryEditor, externalFragments, codeMirrorRef); - useCompletion(queryEditor, onClickReference || null, useQueryEditor); + useCompletion(queryEditor, onClickReference || null, _useQueryEditor); const run = executionContext == null ? void 0 : executionContext.run; - const runAtCursor = React.useCallback(() => { - var _a; - if (!run || !queryEditor || !queryEditor.operations || !queryEditor.hasFocus()) { - run == null ? void 0 : run(); - return; - } - const cursorIndex = queryEditor.indexFromPos(queryEditor.getCursor()); - let operationName; - for (const operation of queryEditor.operations) { - if (operation.loc && operation.loc.start <= cursorIndex && operation.loc.end >= cursorIndex) { - operationName = (_a = operation.name) == null ? void 0 : _a.value; + let t21; + if ($[33] !== queryEditor || $[34] !== run || $[35] !== setOperationName) { + t21 = () => { + var _a; + if (!run || !queryEditor || !queryEditor.operations || !queryEditor.hasFocus()) { + run == null ? void 0 : run(); + return; } - } - if (operationName && operationName !== queryEditor.operationName) { - setOperationName(operationName); - } - run(); - }, [queryEditor, run, setOperationName]); - useKeyMap(queryEditor, ["Cmd-Enter", "Ctrl-Enter"], runAtCursor); - useKeyMap(queryEditor, ["Shift-Ctrl-C"], copy); - useKeyMap(queryEditor, ["Shift-Ctrl-P", - // Shift-Ctrl-P is hard coded in Firefox for private browsing so adding an alternative to prettify - "Shift-Ctrl-F"], prettify); - useKeyMap(queryEditor, ["Shift-Ctrl-M"], merge); + const cursorIndex = queryEditor.indexFromPos(queryEditor.getCursor()); + let operationName_0; + for (const operation of queryEditor.operations) { + if (operation.loc && operation.loc.start <= cursorIndex && operation.loc.end >= cursorIndex) { + operationName_0 = (_a = operation.name) == null ? void 0 : _a.value; + } + } + if (operationName_0 && operationName_0 !== queryEditor.operationName) { + setOperationName(operationName_0); + } + run(); + }; + $[33] = queryEditor; + $[34] = run; + $[35] = setOperationName; + $[36] = t21; + } else { + t21 = $[36]; + } + const runAtCursor = t21; + let t22; + if ($[37] === Symbol.for("react.memo_cache_sentinel")) { + t22 = ["Cmd-Enter", "Ctrl-Enter"]; + $[37] = t22; + } else { + t22 = $[37]; + } + useKeyMap(queryEditor, t22, runAtCursor); + let t23; + if ($[38] === Symbol.for("react.memo_cache_sentinel")) { + t23 = ["Shift-Ctrl-C"]; + $[38] = t23; + } else { + t23 = $[38]; + } + useKeyMap(queryEditor, t23, copy); + let t24; + if ($[39] === Symbol.for("react.memo_cache_sentinel")) { + t24 = ["Shift-Ctrl-P", "Shift-Ctrl-F"]; + $[39] = t24; + } else { + t24 = $[39]; + } + useKeyMap(queryEditor, t24, prettify); + let t25; + if ($[40] === Symbol.for("react.memo_cache_sentinel")) { + t25 = ["Shift-Ctrl-M"]; + $[40] = t25; + } else { + t25 = $[40]; + } + useKeyMap(queryEditor, t25, merge); return ref; } +function _temp4(editorInstance_1, change) { + var _a; + if (change.origin === "paste") { + const text_0 = change.text.map(normalizeWhitespace); + (_a = change.update) == null ? void 0 : _a.call(change, change.from, change.to, text_0); + } +} +function _temp3(editorInstance, event) { + if (AUTO_COMPLETE_AFTER_KEY.test(event.key)) { + editorInstance.execCommand("autocomplete"); + } +} +function _temp2(text) { + return markdown.render(text); +} +function _temp$1() {} function useSynchronizeSchema(editor, schema, codeMirrorRef) { - React.useEffect(() => { - if (!editor) { - return; - } - const didChange = editor.options.lint.schema !== schema; - editor.state.lint.linterOptions.schema = schema; - editor.options.lint.schema = schema; - editor.options.hintOptions.schema = schema; - editor.options.info.schema = schema; - editor.options.jump.schema = schema; - if (didChange && codeMirrorRef.current) { - codeMirrorRef.current.signal(editor, "change", editor); - } - }, [editor, schema, codeMirrorRef]); + const $ = reactCompilerRuntime.c(5); + let t0; + let t1; + if ($[0] !== codeMirrorRef || $[1] !== editor || $[2] !== schema) { + t0 = () => { + if (!editor) { + return; + } + const didChange = editor.options.lint.schema !== schema; + updateEditorSchema(editor, schema); + if (didChange && codeMirrorRef.current) { + codeMirrorRef.current.signal(editor, "change", editor); + } + }; + t1 = [editor, schema, codeMirrorRef]; + $[0] = codeMirrorRef; + $[1] = editor; + $[2] = schema; + $[3] = t0; + $[4] = t1; + } else { + t0 = $[3]; + t1 = $[4]; + } + React.useEffect(t0, t1); } function useSynchronizeValidationRules(editor, validationRules, codeMirrorRef) { - React.useEffect(() => { - if (!editor) { - return; - } - const didChange = editor.options.lint.validationRules !== validationRules; - editor.state.lint.linterOptions.validationRules = validationRules; - editor.options.lint.validationRules = validationRules; - if (didChange && codeMirrorRef.current) { - codeMirrorRef.current.signal(editor, "change", editor); - } - }, [editor, validationRules, codeMirrorRef]); + const $ = reactCompilerRuntime.c(5); + let t0; + let t1; + if ($[0] !== codeMirrorRef || $[1] !== editor || $[2] !== validationRules) { + t0 = () => { + if (!editor) { + return; + } + const didChange = editor.options.lint.validationRules !== validationRules; + updateEditorValidationRules(editor, validationRules); + if (didChange && codeMirrorRef.current) { + codeMirrorRef.current.signal(editor, "change", editor); + } + }; + t1 = [editor, validationRules, codeMirrorRef]; + $[0] = codeMirrorRef; + $[1] = editor; + $[2] = validationRules; + $[3] = t0; + $[4] = t1; + } else { + t0 = $[3]; + t1 = $[4]; + } + React.useEffect(t0, t1); } function useSynchronizeExternalFragments(editor, externalFragments, codeMirrorRef) { - const externalFragmentList = React.useMemo(() => [...externalFragments.values()], [externalFragments]); - React.useEffect(() => { - if (!editor) { - return; - } - const didChange = editor.options.lint.externalFragments !== externalFragmentList; - editor.state.lint.linterOptions.externalFragments = externalFragmentList; - editor.options.lint.externalFragments = externalFragmentList; - editor.options.hintOptions.externalFragments = externalFragmentList; - if (didChange && codeMirrorRef.current) { - codeMirrorRef.current.signal(editor, "change", editor); - } - }, [editor, externalFragmentList, codeMirrorRef]); + const $ = reactCompilerRuntime.c(9); + let t0; + if ($[0] !== externalFragments) { + t0 = externalFragments.values(); + $[0] = externalFragments; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== t0) { + t1 = [...t0]; + $[2] = t0; + $[3] = t1; + } else { + t1 = $[3]; + } + const externalFragmentList = t1; + let t2; + let t3; + if ($[4] !== codeMirrorRef || $[5] !== editor || $[6] !== externalFragmentList) { + t2 = () => { + if (!editor) { + return; + } + const didChange = editor.options.lint.externalFragments !== externalFragmentList; + updateEditorExternalFragments(editor, externalFragmentList); + if (didChange && codeMirrorRef.current) { + codeMirrorRef.current.signal(editor, "change", editor); + } + }; + t3 = [editor, externalFragmentList, codeMirrorRef]; + $[4] = codeMirrorRef; + $[5] = editor; + $[6] = externalFragmentList; + $[7] = t2; + $[8] = t3; + } else { + t2 = $[7]; + t3 = $[8]; + } + React.useEffect(t2, t3); } const AUTO_COMPLETE_AFTER_KEY = /^[a-zA-Z0-9_@(]$/; const STORAGE_KEY_QUERY = "query"; @@ -72250,325 +81426,606 @@ function clearHeadersFromTabs(storage) { } const DEFAULT_TITLE = ""; const STORAGE_KEY$2 = "tabState"; -function useVariableEditor({ - editorTheme = DEFAULT_EDITOR_THEME, - keyMap = DEFAULT_KEY_MAP, - onClickReference, - onEdit, - readOnly = false -} = {}, caller) { +function importCodeMirrorImports$1() { + return importCodeMirror([Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/variables/hint.js */ "../../codemirror-graphql/esm/variables/hint.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/variables/lint.js */ "../../codemirror-graphql/esm/variables/lint.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/variables/mode.js */ "../../codemirror-graphql/esm/variables/mode.js")))]); +} +const _useVariableEditor = useVariableEditor; +function useVariableEditor(t0, caller) { + const $ = reactCompilerRuntime.c(17); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + editorTheme: t2, + keyMap: t3, + onClickReference, + onEdit, + readOnly: t4 + } = t1; + const editorTheme = t2 === void 0 ? DEFAULT_EDITOR_THEME : t2; + const keyMap = t3 === void 0 ? DEFAULT_KEY_MAP : t3; + const readOnly = t4 === void 0 ? false : t4; + const t5 = caller || _useVariableEditor; + let t6; + if ($[2] !== t5) { + t6 = { + nonNull: true, + caller: t5 + }; + $[2] = t5; + $[3] = t6; + } else { + t6 = $[3]; + } const { initialVariables, variableEditor, setVariableEditor - } = useEditorContext({ - nonNull: true, - caller: caller || useVariableEditor - }); + } = useEditorContext(t6); const executionContext = useExecutionContext(); - const merge = useMergeQuery({ - caller: caller || useVariableEditor - }); - const prettify = usePrettifyEditors({ - caller: caller || useVariableEditor - }); + const t7 = caller || _useVariableEditor; + let t8; + if ($[4] !== t7) { + t8 = { + caller: t7 + }; + $[4] = t7; + $[5] = t8; + } else { + t8 = $[5]; + } + const merge = useMergeQuery(t8); + const t9 = caller || _useVariableEditor; + let t10; + if ($[6] !== t9) { + t10 = { + caller: t9 + }; + $[6] = t9; + $[7] = t10; + } else { + t10 = $[7]; + } + const prettify = usePrettifyEditors(t10); const ref = React.useRef(null); const codeMirrorRef = React.useRef(); - React.useEffect(() => { - let isActive = true; - void importCodeMirror([Promise.resolve().then(() => __webpack_require__(/*! ./hint.cjs2.js */ "../../graphiql-react/dist/hint.cjs2.js")), Promise.resolve().then(() => __webpack_require__(/*! ./lint.cjs3.js */ "../../graphiql-react/dist/lint.cjs3.js")), Promise.resolve().then(() => __webpack_require__(/*! ./mode.cjs2.js */ "../../graphiql-react/dist/mode.cjs2.js"))]).then(CodeMirror => { - if (!isActive) { - return; - } - codeMirrorRef.current = CodeMirror; - const container = ref.current; - if (!container) { - return; - } - const newEditor = CodeMirror(container, { - value: initialVariables, - lineNumbers: true, - tabSize: 2, - mode: "graphql-variables", - theme: editorTheme, - autoCloseBrackets: true, - matchBrackets: true, - showCursorWhenSelecting: true, - readOnly: readOnly ? "nocursor" : false, - foldGutter: true, - lint: { - // @ts-expect-error - variableToType: void 0 - }, - hintOptions: { - closeOnUnfocus: false, - completeSingle: false, - container, - // @ts-expect-error - variableToType: void 0 - }, - gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], - extraKeys: commonKeys - }); - newEditor.addKeyMap({ - "Cmd-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - }, - "Ctrl-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - }, - "Alt-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - }, - "Shift-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); + let t11; + let t12; + if ($[8] !== editorTheme || $[9] !== initialVariables || $[10] !== readOnly || $[11] !== setVariableEditor) { + t11 = () => { + let isActive; + isActive = true; + importCodeMirrorImports$1().then(CodeMirror => { + if (!isActive) { + return; } - }); - newEditor.on("keyup", (editorInstance, event) => { - const { - code, - key, - shiftKey - } = event; - const isLetter = code.startsWith("Key"); - const isNumber = !shiftKey && code.startsWith("Digit"); - if (isLetter || isNumber || key === "_" || key === '"') { - editorInstance.execCommand("autocomplete"); + codeMirrorRef.current = CodeMirror; + const container = ref.current; + if (!container) { + return; } + const newEditor = CodeMirror(container, { + value: initialVariables, + lineNumbers: true, + tabSize: 2, + mode: "graphql-variables", + theme: editorTheme, + autoCloseBrackets: true, + matchBrackets: true, + showCursorWhenSelecting: true, + readOnly: readOnly ? "nocursor" : false, + foldGutter: true, + lint: { + variableToType: void 0 + }, + hintOptions: { + closeOnUnfocus: false, + completeSingle: false, + container, + variableToType: void 0 + }, + gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], + extraKeys: commonKeys + }); + newEditor.addKeyMap({ + "Cmd-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + }, + "Ctrl-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + }, + "Alt-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + }, + "Shift-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + } + }); + newEditor.on("keyup", _temp); + setVariableEditor(newEditor); }); - setVariableEditor(newEditor); - }); - return () => { - isActive = false; + return () => { + isActive = false; + }; }; - }, [editorTheme, initialVariables, readOnly, setVariableEditor]); + t12 = [editorTheme, initialVariables, readOnly, setVariableEditor]; + $[8] = editorTheme; + $[9] = initialVariables; + $[10] = readOnly; + $[11] = setVariableEditor; + $[12] = t11; + $[13] = t12; + } else { + t11 = $[12]; + t12 = $[13]; + } + React.useEffect(t11, t12); useSynchronizeOption(variableEditor, "keyMap", keyMap); - useChangeHandler(variableEditor, onEdit, STORAGE_KEY$1, "variables", useVariableEditor); - useCompletion(variableEditor, onClickReference || null, useVariableEditor); - useKeyMap(variableEditor, ["Cmd-Enter", "Ctrl-Enter"], executionContext == null ? void 0 : executionContext.run); - useKeyMap(variableEditor, ["Shift-Ctrl-P"], prettify); - useKeyMap(variableEditor, ["Shift-Ctrl-M"], merge); + useChangeHandler(variableEditor, onEdit, STORAGE_KEY$1, "variables", _useVariableEditor); + useCompletion(variableEditor, onClickReference || null, _useVariableEditor); + let t13; + if ($[14] === Symbol.for("react.memo_cache_sentinel")) { + t13 = ["Cmd-Enter", "Ctrl-Enter"]; + $[14] = t13; + } else { + t13 = $[14]; + } + useKeyMap(variableEditor, t13, executionContext == null ? void 0 : executionContext.run); + let t14; + if ($[15] === Symbol.for("react.memo_cache_sentinel")) { + t14 = ["Shift-Ctrl-P"]; + $[15] = t14; + } else { + t14 = $[15]; + } + useKeyMap(variableEditor, t14, prettify); + let t15; + if ($[16] === Symbol.for("react.memo_cache_sentinel")) { + t15 = ["Shift-Ctrl-M"]; + $[16] = t15; + } else { + t15 = $[16]; + } + useKeyMap(variableEditor, t15, merge); return ref; } +function _temp(editorInstance, event) { + const { + code, + key, + shiftKey + } = event; + const isLetter = code.startsWith("Key"); + const isNumber = !shiftKey && code.startsWith("Digit"); + if (isLetter || isNumber || key === "_" || key === '"') { + editorInstance.execCommand("autocomplete"); + } +} const STORAGE_KEY$1 = "variables"; const EditorContext = createNullableContext("EditorContext"); function EditorContextProvider(props) { + const $ = reactCompilerRuntime.c(89); const storage = useStorageContext(); const [headerEditor, setHeaderEditor] = React.useState(null); const [queryEditor, setQueryEditor] = React.useState(null); const [responseEditor, setResponseEditor] = React.useState(null); const [variableEditor, setVariableEditor] = React.useState(null); - const [shouldPersistHeaders, setShouldPersistHeadersInternal] = React.useState(() => { - const isStored = (storage == null ? void 0 : storage.get(PERSIST_HEADERS_STORAGE_KEY)) !== null; - return props.shouldPersistHeaders !== false && isStored ? (storage == null ? void 0 : storage.get(PERSIST_HEADERS_STORAGE_KEY)) === "true" : Boolean(props.shouldPersistHeaders); - }); + let t0; + if ($[0] !== props.shouldPersistHeaders || $[1] !== storage) { + t0 = () => { + const isStored = (storage == null ? void 0 : storage.get(PERSIST_HEADERS_STORAGE_KEY)) !== null; + return props.shouldPersistHeaders !== false && isStored ? (storage == null ? void 0 : storage.get(PERSIST_HEADERS_STORAGE_KEY)) === "true" : Boolean(props.shouldPersistHeaders); + }; + $[0] = props.shouldPersistHeaders; + $[1] = storage; + $[2] = t0; + } else { + t0 = $[2]; + } + const [shouldPersistHeaders, setShouldPersistHeadersInternal] = React.useState(t0); useSynchronizeValue(headerEditor, props.headers); useSynchronizeValue(queryEditor, props.query); useSynchronizeValue(responseEditor, props.response); useSynchronizeValue(variableEditor, props.variables); - const storeTabs = useStoreTabs({ - storage, - shouldPersistHeaders - }); - const [initialState] = React.useState(() => { - var _ref13, _props$query, _ref14, _props$variables, _ref15, _props$headers, _props$response, _ref16, _ref17; - const query = (_ref13 = (_props$query = props.query) !== null && _props$query !== void 0 ? _props$query : storage == null ? void 0 : storage.get(STORAGE_KEY_QUERY)) !== null && _ref13 !== void 0 ? _ref13 : null; - const variables = (_ref14 = (_props$variables = props.variables) !== null && _props$variables !== void 0 ? _props$variables : storage == null ? void 0 : storage.get(STORAGE_KEY$1)) !== null && _ref14 !== void 0 ? _ref14 : null; - const headers = (_ref15 = (_props$headers = props.headers) !== null && _props$headers !== void 0 ? _props$headers : storage == null ? void 0 : storage.get(STORAGE_KEY$3)) !== null && _ref15 !== void 0 ? _ref15 : null; - const response = (_props$response = props.response) !== null && _props$response !== void 0 ? _props$response : ""; - const tabState2 = getDefaultTabState({ - query, - variables, - headers, - defaultTabs: props.defaultTabs, - defaultQuery: props.defaultQuery || DEFAULT_QUERY, - defaultHeaders: props.defaultHeaders, + let t1; + if ($[3] !== shouldPersistHeaders || $[4] !== storage) { + t1 = { storage, shouldPersistHeaders - }); - storeTabs(tabState2); - return { - query: (_ref16 = query !== null && query !== void 0 ? query : tabState2.activeTabIndex === 0 ? tabState2.tabs[0].query : null) !== null && _ref16 !== void 0 ? _ref16 : "", - variables: variables !== null && variables !== void 0 ? variables : "", - headers: (_ref17 = headers !== null && headers !== void 0 ? headers : props.defaultHeaders) !== null && _ref17 !== void 0 ? _ref17 : "", - response, - tabState: tabState2 }; - }); - const [tabState, setTabState] = React.useState(initialState.tabState); - const setShouldPersistHeaders = React.useCallback(persist => { - if (persist) { - var _ref18; - storage == null ? void 0 : storage.set(STORAGE_KEY$3, (_ref18 = headerEditor == null ? void 0 : headerEditor.getValue()) !== null && _ref18 !== void 0 ? _ref18 : ""); - const serializedTabs = serializeTabState(tabState, true); - storage == null ? void 0 : storage.set(STORAGE_KEY$2, serializedTabs); - } else { - storage == null ? void 0 : storage.set(STORAGE_KEY$3, ""); - clearHeadersFromTabs(storage); - } - setShouldPersistHeadersInternal(persist); - storage == null ? void 0 : storage.set(PERSIST_HEADERS_STORAGE_KEY, persist.toString()); - }, [storage, tabState, headerEditor]); + $[3] = shouldPersistHeaders; + $[4] = storage; + $[5] = t1; + } else { + t1 = $[5]; + } + const storeTabs = useStoreTabs(t1); + let t2; + if ($[6] !== props.defaultHeaders || $[7] !== props.defaultQuery || $[8] !== props.defaultTabs || $[9] !== props.headers || $[10] !== props.query || $[11] !== props.response || $[12] !== props.variables || $[13] !== shouldPersistHeaders || $[14] !== storage || $[15] !== storeTabs) { + t2 = () => { + var _ref13, _props$query, _ref14, _props$variables, _ref15, _props$headers, _props$response, _ref16, _ref17; + const query = (_ref13 = (_props$query = props.query) !== null && _props$query !== void 0 ? _props$query : storage == null ? void 0 : storage.get(STORAGE_KEY_QUERY)) !== null && _ref13 !== void 0 ? _ref13 : null; + const variables = (_ref14 = (_props$variables = props.variables) !== null && _props$variables !== void 0 ? _props$variables : storage == null ? void 0 : storage.get(STORAGE_KEY$1)) !== null && _ref14 !== void 0 ? _ref14 : null; + const headers = (_ref15 = (_props$headers = props.headers) !== null && _props$headers !== void 0 ? _props$headers : storage == null ? void 0 : storage.get(STORAGE_KEY$3)) !== null && _ref15 !== void 0 ? _ref15 : null; + const response = (_props$response = props.response) !== null && _props$response !== void 0 ? _props$response : ""; + const tabState = getDefaultTabState({ + query, + variables, + headers, + defaultTabs: props.defaultTabs, + defaultQuery: props.defaultQuery || DEFAULT_QUERY, + defaultHeaders: props.defaultHeaders, + storage, + shouldPersistHeaders + }); + storeTabs(tabState); + return { + query: (_ref16 = query !== null && query !== void 0 ? query : tabState.activeTabIndex === 0 ? tabState.tabs[0].query : null) !== null && _ref16 !== void 0 ? _ref16 : "", + variables: variables !== null && variables !== void 0 ? variables : "", + headers: (_ref17 = headers !== null && headers !== void 0 ? headers : props.defaultHeaders) !== null && _ref17 !== void 0 ? _ref17 : "", + response, + tabState + }; + }; + $[6] = props.defaultHeaders; + $[7] = props.defaultQuery; + $[8] = props.defaultTabs; + $[9] = props.headers; + $[10] = props.query; + $[11] = props.response; + $[12] = props.variables; + $[13] = shouldPersistHeaders; + $[14] = storage; + $[15] = storeTabs; + $[16] = t2; + } else { + t2 = $[16]; + } + const [initialState] = React.useState(t2); + const [tabState_0, setTabState] = React.useState(initialState.tabState); + let t3; + if ($[17] !== headerEditor || $[18] !== storage || $[19] !== tabState_0) { + t3 = persist => { + if (persist) { + var _ref18; + storage == null ? void 0 : storage.set(STORAGE_KEY$3, (_ref18 = headerEditor == null ? void 0 : headerEditor.getValue()) !== null && _ref18 !== void 0 ? _ref18 : ""); + const serializedTabs = serializeTabState(tabState_0, true); + storage == null ? void 0 : storage.set(STORAGE_KEY$2, serializedTabs); + } else { + storage == null ? void 0 : storage.set(STORAGE_KEY$3, ""); + clearHeadersFromTabs(storage); + } + setShouldPersistHeadersInternal(persist); + storage == null ? void 0 : storage.set(PERSIST_HEADERS_STORAGE_KEY, persist.toString()); + }; + $[17] = headerEditor; + $[18] = storage; + $[19] = tabState_0; + $[20] = t3; + } else { + t3 = $[20]; + } + const setShouldPersistHeaders = t3; const lastShouldPersistHeadersProp = React.useRef(); - React.useEffect(() => { - const propValue = Boolean(props.shouldPersistHeaders); - if ((lastShouldPersistHeadersProp == null ? void 0 : lastShouldPersistHeadersProp.current) !== propValue) { - setShouldPersistHeaders(propValue); - lastShouldPersistHeadersProp.current = propValue; - } - }, [props.shouldPersistHeaders, setShouldPersistHeaders]); - const synchronizeActiveTabValues = useSynchronizeActiveTabValues({ - queryEditor, - variableEditor, - headerEditor, - responseEditor - }); + let t4; + let t5; + if ($[21] !== props.shouldPersistHeaders || $[22] !== setShouldPersistHeaders) { + t4 = () => { + const propValue = Boolean(props.shouldPersistHeaders); + if ((lastShouldPersistHeadersProp == null ? void 0 : lastShouldPersistHeadersProp.current) !== propValue) { + setShouldPersistHeaders(propValue); + lastShouldPersistHeadersProp.current = propValue; + } + }; + t5 = [props.shouldPersistHeaders, setShouldPersistHeaders]; + $[21] = props.shouldPersistHeaders; + $[22] = setShouldPersistHeaders; + $[23] = t4; + $[24] = t5; + } else { + t4 = $[23]; + t5 = $[24]; + } + React.useEffect(t4, t5); + let t6; + if ($[25] !== headerEditor || $[26] !== queryEditor || $[27] !== responseEditor || $[28] !== variableEditor) { + t6 = { + queryEditor, + variableEditor, + headerEditor, + responseEditor + }; + $[25] = headerEditor; + $[26] = queryEditor; + $[27] = responseEditor; + $[28] = variableEditor; + $[29] = t6; + } else { + t6 = $[29]; + } + const synchronizeActiveTabValues = useSynchronizeActiveTabValues(t6); const { onTabChange, defaultHeaders, defaultQuery, children } = props; - const setEditorValues = useSetEditorValues({ - queryEditor, - variableEditor, - headerEditor, - responseEditor, - defaultHeaders - }); - const addTab = React.useCallback(() => { - setTabState(current => { - const updatedValues = synchronizeActiveTabValues(current); - const updated = { - tabs: [...updatedValues.tabs, createTab({ - headers: defaultHeaders, - query: defaultQuery !== null && defaultQuery !== void 0 ? defaultQuery : DEFAULT_QUERY - })], - activeTabIndex: updatedValues.tabs.length - }; - storeTabs(updated); - setEditorValues(updated.tabs[updated.activeTabIndex]); - onTabChange == null ? void 0 : onTabChange(updated); - return updated; - }); - }, [defaultHeaders, defaultQuery, onTabChange, setEditorValues, storeTabs, synchronizeActiveTabValues]); - const changeTab = React.useCallback(index => { - setTabState(current => { - const updated = { - ...current, - activeTabIndex: index - }; - storeTabs(updated); - setEditorValues(updated.tabs[updated.activeTabIndex]); - onTabChange == null ? void 0 : onTabChange(updated); - return updated; - }); - }, [onTabChange, setEditorValues, storeTabs]); - const moveTab = React.useCallback(newOrder => { - setTabState(current => { - const activeTab = current.tabs[current.activeTabIndex]; - const updated = { - tabs: newOrder, - activeTabIndex: newOrder.indexOf(activeTab) - }; - storeTabs(updated); - setEditorValues(updated.tabs[updated.activeTabIndex]); - onTabChange == null ? void 0 : onTabChange(updated); - return updated; - }); - }, [onTabChange, setEditorValues, storeTabs]); - const closeTab = React.useCallback(index => { - setTabState(current => { - const updated = { - tabs: current.tabs.filter((_tab, i) => index !== i), - activeTabIndex: Math.max(current.activeTabIndex - 1, 0) - }; - storeTabs(updated); - setEditorValues(updated.tabs[updated.activeTabIndex]); - onTabChange == null ? void 0 : onTabChange(updated); - return updated; - }); - }, [onTabChange, setEditorValues, storeTabs]); - const updateActiveTabValues = React.useCallback(partialTab => { - setTabState(current => { - const updated = setPropertiesInActiveTab(current, partialTab); - storeTabs(updated); - onTabChange == null ? void 0 : onTabChange(updated); - return updated; - }); - }, [onTabChange, storeTabs]); + let t7; + if ($[30] !== defaultHeaders || $[31] !== headerEditor || $[32] !== queryEditor || $[33] !== responseEditor || $[34] !== variableEditor) { + t7 = { + queryEditor, + variableEditor, + headerEditor, + responseEditor, + defaultHeaders + }; + $[30] = defaultHeaders; + $[31] = headerEditor; + $[32] = queryEditor; + $[33] = responseEditor; + $[34] = variableEditor; + $[35] = t7; + } else { + t7 = $[35]; + } + const setEditorValues = useSetEditorValues(t7); + let t8; + if ($[36] !== defaultHeaders || $[37] !== defaultQuery || $[38] !== onTabChange || $[39] !== setEditorValues || $[40] !== storeTabs || $[41] !== synchronizeActiveTabValues) { + t8 = () => { + setTabState(current => { + const updatedValues = synchronizeActiveTabValues(current); + const updated = { + tabs: [...updatedValues.tabs, createTab({ + headers: defaultHeaders, + query: defaultQuery !== null && defaultQuery !== void 0 ? defaultQuery : DEFAULT_QUERY + })], + activeTabIndex: updatedValues.tabs.length + }; + storeTabs(updated); + setEditorValues(updated.tabs[updated.activeTabIndex]); + onTabChange == null ? void 0 : onTabChange(updated); + return updated; + }); + }; + $[36] = defaultHeaders; + $[37] = defaultQuery; + $[38] = onTabChange; + $[39] = setEditorValues; + $[40] = storeTabs; + $[41] = synchronizeActiveTabValues; + $[42] = t8; + } else { + t8 = $[42]; + } + const addTab = t8; + let t9; + if ($[43] !== onTabChange || $[44] !== setEditorValues || $[45] !== storeTabs) { + t9 = index => { + setTabState(current_0 => { + const updated_0 = { + ...current_0, + activeTabIndex: index + }; + storeTabs(updated_0); + setEditorValues(updated_0.tabs[updated_0.activeTabIndex]); + onTabChange == null ? void 0 : onTabChange(updated_0); + return updated_0; + }); + }; + $[43] = onTabChange; + $[44] = setEditorValues; + $[45] = storeTabs; + $[46] = t9; + } else { + t9 = $[46]; + } + const changeTab = t9; + let t10; + if ($[47] !== onTabChange || $[48] !== setEditorValues || $[49] !== storeTabs) { + t10 = newOrder => { + setTabState(current_1 => { + const activeTab = current_1.tabs[current_1.activeTabIndex]; + const updated_1 = { + tabs: newOrder, + activeTabIndex: newOrder.indexOf(activeTab) + }; + storeTabs(updated_1); + setEditorValues(updated_1.tabs[updated_1.activeTabIndex]); + onTabChange == null ? void 0 : onTabChange(updated_1); + return updated_1; + }); + }; + $[47] = onTabChange; + $[48] = setEditorValues; + $[49] = storeTabs; + $[50] = t10; + } else { + t10 = $[50]; + } + const moveTab = t10; + let t11; + if ($[51] !== onTabChange || $[52] !== setEditorValues || $[53] !== storeTabs) { + t11 = index_0 => { + setTabState(current_2 => { + const updated_2 = { + tabs: current_2.tabs.filter((_tab, i) => index_0 !== i), + activeTabIndex: Math.max(current_2.activeTabIndex - 1, 0) + }; + storeTabs(updated_2); + setEditorValues(updated_2.tabs[updated_2.activeTabIndex]); + onTabChange == null ? void 0 : onTabChange(updated_2); + return updated_2; + }); + }; + $[51] = onTabChange; + $[52] = setEditorValues; + $[53] = storeTabs; + $[54] = t11; + } else { + t11 = $[54]; + } + const closeTab = t11; + let t12; + if ($[55] !== onTabChange || $[56] !== storeTabs) { + t12 = partialTab => { + setTabState(current_3 => { + const updated_3 = setPropertiesInActiveTab(current_3, partialTab); + storeTabs(updated_3); + onTabChange == null ? void 0 : onTabChange(updated_3); + return updated_3; + }); + }; + $[55] = onTabChange; + $[56] = storeTabs; + $[57] = t12; + } else { + t12 = $[57]; + } + const updateActiveTabValues = t12; const { onEditOperationName } = props; - const setOperationName = React.useCallback(operationName => { - if (!queryEditor) { - return; - } - queryEditor.operationName = operationName; - updateActiveTabValues({ - operationName - }); - onEditOperationName == null ? void 0 : onEditOperationName(operationName); - }, [onEditOperationName, queryEditor, updateActiveTabValues]); - const externalFragments = React.useMemo(() => { - const map = /* @__PURE__ */new Map(); + let t13; + if ($[58] !== onEditOperationName || $[59] !== queryEditor || $[60] !== updateActiveTabValues) { + t13 = operationName => { + if (!queryEditor) { + return; + } + updateQueryEditor(queryEditor, operationName); + updateActiveTabValues({ + operationName + }); + onEditOperationName == null ? void 0 : onEditOperationName(operationName); + }; + $[58] = onEditOperationName; + $[59] = queryEditor; + $[60] = updateActiveTabValues; + $[61] = t13; + } else { + t13 = $[61]; + } + const setOperationName = t13; + let t14; + let map; + if ($[62] !== props.externalFragments) { + map = /* @__PURE__ */new Map(); if (Array.isArray(props.externalFragments)) { for (const fragment of props.externalFragments) { map.set(fragment.name.value, fragment); } - } else if (typeof props.externalFragments === "string") { - graphql.visit(graphql.parse(props.externalFragments, {}), { - FragmentDefinition(fragment) { - map.set(fragment.name.value, fragment); + } else { + if (typeof props.externalFragments === "string") { + graphql.visit(graphql.parse(props.externalFragments, {}), { + FragmentDefinition(fragment_0) { + map.set(fragment_0.name.value, fragment_0); + } + }); + } else { + if (props.externalFragments) { + throw new Error("The `externalFragments` prop must either be a string that contains the fragment definitions in SDL or a list of FragmentDefinitionNode objects."); } - }); - } else if (props.externalFragments) { - throw new Error("The `externalFragments` prop must either be a string that contains the fragment definitions in SDL or a list of FragmentDefinitionNode objects."); + } } - return map; - }, [props.externalFragments]); - const validationRules = React.useMemo(() => props.validationRules || [], [props.validationRules]); - const value = React.useMemo(() => ({ - ...tabState, - addTab, - changeTab, - moveTab, - closeTab, - updateActiveTabValues, - headerEditor, - queryEditor, - responseEditor, - variableEditor, - setHeaderEditor, - setQueryEditor, - setResponseEditor, - setVariableEditor, - setOperationName, - initialQuery: initialState.query, - initialVariables: initialState.variables, - initialHeaders: initialState.headers, - initialResponse: initialState.response, - externalFragments, - validationRules, - shouldPersistHeaders, - setShouldPersistHeaders - }), [tabState, addTab, changeTab, moveTab, closeTab, updateActiveTabValues, headerEditor, queryEditor, responseEditor, variableEditor, setOperationName, initialState, externalFragments, validationRules, shouldPersistHeaders, setShouldPersistHeaders]); - return /* @__PURE__ */jsxRuntime.jsx(EditorContext.Provider, { - value, - children - }); + $[62] = props.externalFragments; + $[63] = map; + } else { + map = $[63]; + } + t14 = map; + const externalFragments = t14; + let t15; + if ($[64] !== props.validationRules) { + t15 = props.validationRules || []; + $[64] = props.validationRules; + $[65] = t15; + } else { + t15 = $[65]; + } + const validationRules = t15; + let t16; + if ($[66] !== addTab || $[67] !== changeTab || $[68] !== closeTab || $[69] !== externalFragments || $[70] !== headerEditor || $[71] !== initialState.headers || $[72] !== initialState.query || $[73] !== initialState.response || $[74] !== initialState.variables || $[75] !== moveTab || $[76] !== queryEditor || $[77] !== responseEditor || $[78] !== setOperationName || $[79] !== setShouldPersistHeaders || $[80] !== shouldPersistHeaders || $[81] !== tabState_0 || $[82] !== updateActiveTabValues || $[83] !== validationRules || $[84] !== variableEditor) { + t16 = { + ...tabState_0, + addTab, + changeTab, + moveTab, + closeTab, + updateActiveTabValues, + headerEditor, + queryEditor, + responseEditor, + variableEditor, + setHeaderEditor, + setQueryEditor, + setResponseEditor, + setVariableEditor, + setOperationName, + initialQuery: initialState.query, + initialVariables: initialState.variables, + initialHeaders: initialState.headers, + initialResponse: initialState.response, + externalFragments, + validationRules, + shouldPersistHeaders, + setShouldPersistHeaders + }; + $[66] = addTab; + $[67] = changeTab; + $[68] = closeTab; + $[69] = externalFragments; + $[70] = headerEditor; + $[71] = initialState.headers; + $[72] = initialState.query; + $[73] = initialState.response; + $[74] = initialState.variables; + $[75] = moveTab; + $[76] = queryEditor; + $[77] = responseEditor; + $[78] = setOperationName; + $[79] = setShouldPersistHeaders; + $[80] = shouldPersistHeaders; + $[81] = tabState_0; + $[82] = updateActiveTabValues; + $[83] = validationRules; + $[84] = variableEditor; + $[85] = t16; + } else { + t16 = $[85]; + } + const value = t16; + let t17; + if ($[86] !== children || $[87] !== value) { + t17 = /* @__PURE__ */jsxRuntime.jsx(EditorContext.Provider, { + value, + children + }); + $[86] = children; + $[87] = value; + $[88] = t17; + } else { + t17 = $[88]; + } + return t17; +} +function updateQueryEditor(queryEditor, operationName) { + queryEditor.operationName = operationName; } const useEditorContext = createContextHook(EditorContext); const PERSIST_HEADERS_STORAGE_KEY = "shouldPersistHeaders"; @@ -72604,73 +82061,177 @@ const DEFAULT_QUERY = `# Welcome to GraphiQL # `; -function HeaderEditor({ - isHidden, - ...hookArgs -}) { +function HeaderEditor(t0) { + const $ = reactCompilerRuntime.c(13); + let hookArgs; + let isHidden; + if ($[0] !== t0) { + ({ + isHidden, + ...hookArgs + } = t0); + $[0] = t0; + $[1] = hookArgs; + $[2] = isHidden; + } else { + hookArgs = $[1]; + isHidden = $[2]; + } + let t1; + if ($[3] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: HeaderEditor + }; + $[3] = t1; + } else { + t1 = $[3]; + } const { headerEditor - } = useEditorContext({ - nonNull: true, - caller: HeaderEditor - }); + } = useEditorContext(t1); const ref = useHeaderEditor(hookArgs, HeaderEditor); - React.useEffect(() => { - if (!isHidden) { - headerEditor == null ? void 0 : headerEditor.refresh(); - } - }, [headerEditor, isHidden]); - return /* @__PURE__ */jsxRuntime.jsx("div", { - className: clsx.clsx("graphiql-editor", isHidden && "hidden"), - ref - }); + let t2; + let t3; + if ($[4] !== headerEditor || $[5] !== isHidden) { + t2 = () => { + if (!isHidden) { + headerEditor == null ? void 0 : headerEditor.refresh(); + } + }; + t3 = [headerEditor, isHidden]; + $[4] = headerEditor; + $[5] = isHidden; + $[6] = t2; + $[7] = t3; + } else { + t2 = $[6]; + t3 = $[7]; + } + React.useEffect(t2, t3); + const t4 = isHidden && "hidden"; + let t5; + if ($[8] !== t4) { + t5 = clsx.clsx("graphiql-editor", t4); + $[8] = t4; + $[9] = t5; + } else { + t5 = $[9]; + } + let t6; + if ($[10] !== ref || $[11] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsx("div", { + className: t5, + ref + }); + $[10] = ref; + $[11] = t5; + $[12] = t6; + } else { + t6 = $[12]; + } + return t6; } function ImagePreview(props) { var _a; - const [dimensions, setDimensions] = React.useState({ - width: null, - height: null - }); + const $ = reactCompilerRuntime.c(14); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + width: null, + height: null + }; + $[0] = t0; + } else { + t0 = $[0]; + } + const [dimensions, setDimensions] = React.useState(t0); const [mime, setMime] = React.useState(null); const ref = React.useRef(null); const src = (_a = tokenToURL(props.token)) == null ? void 0 : _a.href; - React.useEffect(() => { - if (!ref.current) { - return; - } - if (!src) { - setDimensions({ - width: null, - height: null - }); - setMime(null); - return; - } - fetch(src, { - method: "HEAD" - }).then(response => { - setMime(response.headers.get("Content-Type")); - }).catch(() => { - setMime(null); - }); - }, [src]); - const dims = dimensions.width !== null && dimensions.height !== null ? /* @__PURE__ */jsxRuntime.jsxs("div", { - children: [dimensions.width, "x", dimensions.height, mime === null ? null : " " + mime] - }) : null; - return /* @__PURE__ */jsxRuntime.jsxs("div", { - children: [/* @__PURE__ */jsxRuntime.jsx("img", { - onLoad: () => { - var _ref19, _ref20; - var _a2, _b; + let t1; + let t2; + if ($[1] !== src) { + t1 = () => { + if (!ref.current) { + return; + } + if (!src) { setDimensions({ - width: (_ref19 = (_a2 = ref.current) == null ? void 0 : _a2.naturalWidth) !== null && _ref19 !== void 0 ? _ref19 : null, - height: (_ref20 = (_b = ref.current) == null ? void 0 : _b.naturalHeight) !== null && _ref20 !== void 0 ? _ref20 : null + width: null, + height: null }); - }, + setMime(null); + return; + } + fetch(src, { + method: "HEAD" + }).then(response => { + setMime(response.headers.get("Content-Type")); + }).catch(() => { + setMime(null); + }); + }; + t2 = [src]; + $[1] = src; + $[2] = t1; + $[3] = t2; + } else { + t1 = $[2]; + t2 = $[3]; + } + React.useEffect(t1, t2); + let t3; + if ($[4] !== dimensions.height || $[5] !== dimensions.width || $[6] !== mime) { + t3 = dimensions.width !== null && dimensions.height !== null ? /* @__PURE__ */jsxRuntime.jsxs("div", { + children: [dimensions.width, "x", dimensions.height, mime === null ? null : " " + mime] + }) : null; + $[4] = dimensions.height; + $[5] = dimensions.width; + $[6] = mime; + $[7] = t3; + } else { + t3 = $[7]; + } + const dims = t3; + let t4; + if ($[8] === Symbol.for("react.memo_cache_sentinel")) { + t4 = () => { + var _ref19, _ref20; + var _a2, _b; + setDimensions({ + width: (_ref19 = (_a2 = ref.current) == null ? void 0 : _a2.naturalWidth) !== null && _ref19 !== void 0 ? _ref19 : null, + height: (_ref20 = (_b = ref.current) == null ? void 0 : _b.naturalHeight) !== null && _ref20 !== void 0 ? _ref20 : null + }); + }; + $[8] = t4; + } else { + t4 = $[8]; + } + let t5; + if ($[9] !== src) { + t5 = /* @__PURE__ */jsxRuntime.jsx("img", { + onLoad: t4, ref, src - }), dims] - }); + }); + $[9] = src; + $[10] = t5; + } else { + t5 = $[10]; + } + let t6; + if ($[11] !== dims || $[12] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsxs("div", { + children: [t5, dims] + }); + $[11] = dims; + $[12] = t5; + $[13] = t6; + } else { + t6 = $[13]; + } + return t6; } ImagePreview.shouldRender = function shouldRender(token) { const url = tokenToURL(token); @@ -72694,513 +82255,1050 @@ function isImageURL(url) { return /\.(bmp|gif|jpe?g|png|svg|webp)$/.test(url.pathname); } function QueryEditor(props) { + const $ = reactCompilerRuntime.c(2); const ref = useQueryEditor(props, QueryEditor); - return /* @__PURE__ */jsxRuntime.jsx("div", { - className: "graphiql-editor", - ref + let t0; + if ($[0] !== ref) { + t0 = /* @__PURE__ */jsxRuntime.jsx("div", { + className: "graphiql-editor", + ref + }); + $[0] = ref; + $[1] = t0; + } else { + t0 = $[1]; + } + return t0; +} +function importCodeMirrorImports() { + return importCodeMirror([Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/fold/foldgutter.js */ "../../../node_modules/codemirror/addon/fold/foldgutter.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/fold/brace-fold.js */ "../../../node_modules/codemirror/addon/fold/brace-fold.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/dialog/dialog.js */ "../../../node_modules/codemirror/addon/dialog/dialog.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/search/search.js */ "../../../node_modules/codemirror/addon/search/search.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/search/searchcursor.js */ "../../../node_modules/codemirror/addon/search/searchcursor.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/search/jump-to-line.js */ "../../../node_modules/codemirror/addon/search/jump-to-line.js"))), // @ts-expect-error + Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/keymap/sublime.js */ "../../../node_modules/codemirror/keymap/sublime.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/results/mode.js */ "../../codemirror-graphql/esm/results/mode.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/utils/info-addon.js */ "../../codemirror-graphql/esm/utils/info-addon.js")))], { + useCommonAddons: false }); } -function useResponseEditor({ - responseTooltip, - editorTheme = DEFAULT_EDITOR_THEME, - keyMap = DEFAULT_KEY_MAP -} = {}, caller) { +const _useResponseEditor = useResponseEditor; +function useResponseEditor(t0, caller) { + const $ = reactCompilerRuntime.c(19); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + responseTooltip, + editorTheme: t2, + keyMap: t3 + } = t1; + const editorTheme = t2 === void 0 ? DEFAULT_EDITOR_THEME : t2; + const keyMap = t3 === void 0 ? DEFAULT_KEY_MAP : t3; + const t4 = caller || _useResponseEditor; + let t5; + if ($[2] !== t4) { + t5 = { + nonNull: true, + caller: t4 + }; + $[2] = t4; + $[3] = t5; + } else { + t5 = $[3]; + } const { fetchError, validationErrors - } = useSchemaContext({ - nonNull: true, - caller: caller || useResponseEditor - }); + } = useSchemaContext(t5); + const t6 = caller || _useResponseEditor; + let t7; + if ($[4] !== t6) { + t7 = { + nonNull: true, + caller: t6 + }; + $[4] = t6; + $[5] = t7; + } else { + t7 = $[5]; + } const { initialResponse, responseEditor, setResponseEditor - } = useEditorContext({ - nonNull: true, - caller: caller || useResponseEditor - }); + } = useEditorContext(t7); const ref = React.useRef(null); const responseTooltipRef = React.useRef(responseTooltip); - React.useEffect(() => { - responseTooltipRef.current = responseTooltip; - }, [responseTooltip]); - React.useEffect(() => { - let isActive = true; - void importCodeMirror([Promise.resolve().then(() => __webpack_require__(/*! ./foldgutter.cjs.js */ "../../graphiql-react/dist/foldgutter.cjs.js")).then(n => n.foldgutter), Promise.resolve().then(() => __webpack_require__(/*! ./brace-fold.cjs.js */ "../../graphiql-react/dist/brace-fold.cjs.js")).then(n => n.braceFold), Promise.resolve().then(() => __webpack_require__(/*! ./dialog.cjs.js */ "../../graphiql-react/dist/dialog.cjs.js")).then(n => n.dialog), Promise.resolve().then(() => __webpack_require__(/*! ./search.cjs.js */ "../../graphiql-react/dist/search.cjs.js")).then(n => n.search), Promise.resolve().then(() => __webpack_require__(/*! ./searchcursor.cjs.js */ "../../graphiql-react/dist/searchcursor.cjs.js")).then(n => n.searchcursor), Promise.resolve().then(() => __webpack_require__(/*! ./jump-to-line.cjs.js */ "../../graphiql-react/dist/jump-to-line.cjs.js")).then(n => n.jumpToLine), - // @ts-expect-error - Promise.resolve().then(() => __webpack_require__(/*! ./sublime.cjs.js */ "../../graphiql-react/dist/sublime.cjs.js")).then(n => n.sublime), Promise.resolve().then(() => __webpack_require__(/*! ./mode.cjs3.js */ "../../graphiql-react/dist/mode.cjs3.js")), Promise.resolve().then(() => __webpack_require__(/*! ./info-addon.cjs.js */ "../../graphiql-react/dist/info-addon.cjs.js"))], { - useCommonAddons: false - }).then(CodeMirror => { - if (!isActive) { - return; - } - const tooltipDiv = document.createElement("div"); - CodeMirror.registerHelper("info", "graphql-results", (token, _options, _cm, pos) => { - const infoElements = []; - const ResponseTooltipComponent = responseTooltipRef.current; - if (ResponseTooltipComponent) { - infoElements.push( /* @__PURE__ */jsxRuntime.jsx(ResponseTooltipComponent, { - pos, - token - })); - } - if (ImagePreview.shouldRender(token)) { - infoElements.push( /* @__PURE__ */jsxRuntime.jsx(ImagePreview, { - token - }, "image-preview")); - } - if (!infoElements.length) { - ReactDOM.unmountComponentAtNode(tooltipDiv); - return null; - } - ReactDOM.render(infoElements, tooltipDiv); - return tooltipDiv; - }); - const container = ref.current; - if (!container) { - return; - } - const newEditor = CodeMirror(container, { - value: initialResponse, - lineWrapping: true, - readOnly: true, - theme: editorTheme, - mode: "graphql-results", - foldGutter: true, - gutters: ["CodeMirror-foldgutter"], - // @ts-expect-error - info: true, - extraKeys: commonKeys - }); - setResponseEditor(newEditor); - }); - return () => { - isActive = false; + let t8; + let t9; + if ($[6] !== responseTooltip) { + t8 = () => { + responseTooltipRef.current = responseTooltip; }; - }, [editorTheme, initialResponse, setResponseEditor]); + t9 = [responseTooltip]; + $[6] = responseTooltip; + $[7] = t8; + $[8] = t9; + } else { + t8 = $[7]; + t9 = $[8]; + } + React.useEffect(t8, t9); + let t10; + let t11; + if ($[9] !== editorTheme || $[10] !== initialResponse || $[11] !== setResponseEditor) { + t10 = () => { + let isActive; + isActive = true; + importCodeMirrorImports().then(CodeMirror => { + if (!isActive) { + return; + } + const tooltipDiv = document.createElement("div"); + CodeMirror.registerHelper("info", "graphql-results", (token, _options, _cm, pos) => { + const infoElements = []; + const ResponseTooltipComponent = responseTooltipRef.current; + if (ResponseTooltipComponent) { + infoElements.push( /* @__PURE__ */jsxRuntime.jsx(ResponseTooltipComponent, { + pos, + token + })); + } + if (ImagePreview.shouldRender(token)) { + infoElements.push( /* @__PURE__ */jsxRuntime.jsx(ImagePreview, { + token + }, "image-preview")); + } + if (!infoElements.length) { + ReactDOM.unmountComponentAtNode(tooltipDiv); + return null; + } + ReactDOM.render(infoElements, tooltipDiv); + return tooltipDiv; + }); + const container = ref.current; + if (!container) { + return; + } + const newEditor = CodeMirror(container, { + value: initialResponse, + lineWrapping: true, + readOnly: true, + theme: editorTheme, + mode: "graphql-results", + foldGutter: true, + gutters: ["CodeMirror-foldgutter"], + info: true, + extraKeys: commonKeys + }); + setResponseEditor(newEditor); + }); + return () => { + isActive = false; + }; + }; + t11 = [editorTheme, initialResponse, setResponseEditor]; + $[9] = editorTheme; + $[10] = initialResponse; + $[11] = setResponseEditor; + $[12] = t10; + $[13] = t11; + } else { + t10 = $[12]; + t11 = $[13]; + } + React.useEffect(t10, t11); useSynchronizeOption(responseEditor, "keyMap", keyMap); - React.useEffect(() => { - if (fetchError) { - responseEditor == null ? void 0 : responseEditor.setValue(fetchError); - } - if (validationErrors.length > 0) { - responseEditor == null ? void 0 : responseEditor.setValue(toolkit.formatError(validationErrors)); - } - }, [responseEditor, fetchError, validationErrors]); + let t12; + let t13; + if ($[14] !== fetchError || $[15] !== responseEditor || $[16] !== validationErrors) { + t12 = () => { + if (fetchError) { + responseEditor == null ? void 0 : responseEditor.setValue(fetchError); + } + if (validationErrors.length > 0) { + responseEditor == null ? void 0 : responseEditor.setValue(toolkit.formatError(validationErrors)); + } + }; + t13 = [responseEditor, fetchError, validationErrors]; + $[14] = fetchError; + $[15] = responseEditor; + $[16] = validationErrors; + $[17] = t12; + $[18] = t13; + } else { + t12 = $[17]; + t13 = $[18]; + } + React.useEffect(t12, t13); return ref; } function ResponseEditor(props) { + const $ = reactCompilerRuntime.c(2); const ref = useResponseEditor(props, ResponseEditor); - return /* @__PURE__ */jsxRuntime.jsx("section", { - className: "result-window", - "aria-label": "Result Window", - "aria-live": "polite", - "aria-atomic": "true", - ref - }); + let t0; + if ($[0] !== ref) { + t0 = /* @__PURE__ */jsxRuntime.jsx("section", { + className: "result-window", + "aria-label": "Result Window", + "aria-live": "polite", + "aria-atomic": "true", + ref + }); + $[0] = ref; + $[1] = t0; + } else { + t0 = $[1]; + } + return t0; } -function VariableEditor({ - isHidden, - ...hookArgs -}) { +function VariableEditor(t0) { + const $ = reactCompilerRuntime.c(13); + let hookArgs; + let isHidden; + if ($[0] !== t0) { + ({ + isHidden, + ...hookArgs + } = t0); + $[0] = t0; + $[1] = hookArgs; + $[2] = isHidden; + } else { + hookArgs = $[1]; + isHidden = $[2]; + } + let t1; + if ($[3] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: VariableEditor + }; + $[3] = t1; + } else { + t1 = $[3]; + } const { variableEditor - } = useEditorContext({ - nonNull: true, - caller: VariableEditor - }); + } = useEditorContext(t1); const ref = useVariableEditor(hookArgs, VariableEditor); - React.useEffect(() => { - if (variableEditor && !isHidden) { - variableEditor.refresh(); - } - }, [variableEditor, isHidden]); - return /* @__PURE__ */jsxRuntime.jsx("div", { - className: clsx.clsx("graphiql-editor", isHidden && "hidden"), - ref - }); + let t2; + let t3; + if ($[4] !== isHidden || $[5] !== variableEditor) { + t2 = () => { + if (variableEditor && !isHidden) { + variableEditor.refresh(); + } + }; + t3 = [variableEditor, isHidden]; + $[4] = isHidden; + $[5] = variableEditor; + $[6] = t2; + $[7] = t3; + } else { + t2 = $[6]; + t3 = $[7]; + } + React.useEffect(t2, t3); + const t4 = isHidden && "hidden"; + let t5; + if ($[8] !== t4) { + t5 = clsx.clsx("graphiql-editor", t4); + $[8] = t4; + $[9] = t5; + } else { + t5 = $[9]; + } + let t6; + if ($[10] !== ref || $[11] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsx("div", { + className: t5, + ref + }); + $[10] = ref; + $[11] = t5; + $[12] = t6; + } else { + t6 = $[12]; + } + return t6; } -function GraphiQLProvider({ - children, - dangerouslyAssumeSchemaIsValid, - defaultQuery, - defaultHeaders, - defaultTabs, - externalFragments, - fetcher, - getDefaultFieldNames, - headers, - inputValueDeprecation, - introspectionQueryName, - maxHistoryLength, - onEditOperationName, - onSchemaChange, - onTabChange, - onTogglePluginVisibility, - operationName, - plugins, - query, - response, - schema, - schemaDescription, - shouldPersistHeaders, - storage, - validationRules, - variables, - visiblePlugin -}) { - return /* @__PURE__ */jsxRuntime.jsx(StorageContextProvider, { +function GraphiQLProvider(t0) { + const $ = reactCompilerRuntime.c(39); + const { + children, + dangerouslyAssumeSchemaIsValid, + defaultQuery, + defaultHeaders, + defaultTabs, + externalFragments, + fetcher, + getDefaultFieldNames, + headers, + inputValueDeprecation, + introspectionQueryName, + maxHistoryLength, + onEditOperationName, + onSchemaChange, + onTabChange, + onTogglePluginVisibility, + operationName, + plugins, + query, + response, + schema, + schemaDescription, + shouldPersistHeaders, storage, - children: /* @__PURE__ */jsxRuntime.jsx(HistoryContextProvider, { - maxHistoryLength, - children: /* @__PURE__ */jsxRuntime.jsx(EditorContextProvider, { - defaultQuery, - defaultHeaders, - defaultTabs, - externalFragments, - headers, - onEditOperationName, - onTabChange, - query, - response, - shouldPersistHeaders, - validationRules, - variables, - children: /* @__PURE__ */jsxRuntime.jsx(SchemaContextProvider, { - dangerouslyAssumeSchemaIsValid, - fetcher, - inputValueDeprecation, - introspectionQueryName, - onSchemaChange, - schema, - schemaDescription, - children: /* @__PURE__ */jsxRuntime.jsx(ExecutionContextProvider, { - getDefaultFieldNames, - fetcher, - operationName, - children: /* @__PURE__ */jsxRuntime.jsx(ExplorerContextProvider, { - children: /* @__PURE__ */jsxRuntime.jsx(PluginContextProvider, { - onTogglePluginVisibility, - plugins, - visiblePlugin, - children - }) - }) - }) - }) + validationRules, + variables, + visiblePlugin + } = t0; + let t1; + if ($[0] !== children || $[1] !== onTogglePluginVisibility || $[2] !== plugins || $[3] !== visiblePlugin) { + t1 = /* @__PURE__ */jsxRuntime.jsx(ExplorerContextProvider, { + children: /* @__PURE__ */jsxRuntime.jsx(PluginContextProvider, { + onTogglePluginVisibility, + plugins, + visiblePlugin, + children }) - }) - }); + }); + $[0] = children; + $[1] = onTogglePluginVisibility; + $[2] = plugins; + $[3] = visiblePlugin; + $[4] = t1; + } else { + t1 = $[4]; + } + let t2; + if ($[5] !== fetcher || $[6] !== getDefaultFieldNames || $[7] !== operationName || $[8] !== t1) { + t2 = /* @__PURE__ */jsxRuntime.jsx(ExecutionContextProvider, { + getDefaultFieldNames, + fetcher, + operationName, + children: t1 + }); + $[5] = fetcher; + $[6] = getDefaultFieldNames; + $[7] = operationName; + $[8] = t1; + $[9] = t2; + } else { + t2 = $[9]; + } + let t3; + if ($[10] !== dangerouslyAssumeSchemaIsValid || $[11] !== fetcher || $[12] !== inputValueDeprecation || $[13] !== introspectionQueryName || $[14] !== onSchemaChange || $[15] !== schema || $[16] !== schemaDescription || $[17] !== t2) { + t3 = /* @__PURE__ */jsxRuntime.jsx(SchemaContextProvider, { + dangerouslyAssumeSchemaIsValid, + fetcher, + inputValueDeprecation, + introspectionQueryName, + onSchemaChange, + schema, + schemaDescription, + children: t2 + }); + $[10] = dangerouslyAssumeSchemaIsValid; + $[11] = fetcher; + $[12] = inputValueDeprecation; + $[13] = introspectionQueryName; + $[14] = onSchemaChange; + $[15] = schema; + $[16] = schemaDescription; + $[17] = t2; + $[18] = t3; + } else { + t3 = $[18]; + } + let t4; + if ($[19] !== defaultHeaders || $[20] !== defaultQuery || $[21] !== defaultTabs || $[22] !== externalFragments || $[23] !== headers || $[24] !== onEditOperationName || $[25] !== onTabChange || $[26] !== query || $[27] !== response || $[28] !== shouldPersistHeaders || $[29] !== t3 || $[30] !== validationRules || $[31] !== variables) { + t4 = /* @__PURE__ */jsxRuntime.jsx(EditorContextProvider, { + defaultQuery, + defaultHeaders, + defaultTabs, + externalFragments, + headers, + onEditOperationName, + onTabChange, + query, + response, + shouldPersistHeaders, + validationRules, + variables, + children: t3 + }); + $[19] = defaultHeaders; + $[20] = defaultQuery; + $[21] = defaultTabs; + $[22] = externalFragments; + $[23] = headers; + $[24] = onEditOperationName; + $[25] = onTabChange; + $[26] = query; + $[27] = response; + $[28] = shouldPersistHeaders; + $[29] = t3; + $[30] = validationRules; + $[31] = variables; + $[32] = t4; + } else { + t4 = $[32]; + } + let t5; + if ($[33] !== maxHistoryLength || $[34] !== t4) { + t5 = /* @__PURE__ */jsxRuntime.jsx(HistoryContextProvider, { + maxHistoryLength, + children: t4 + }); + $[33] = maxHistoryLength; + $[34] = t4; + $[35] = t5; + } else { + t5 = $[35]; + } + let t6; + if ($[36] !== storage || $[37] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsx(StorageContextProvider, { + storage, + children: t5 + }); + $[36] = storage; + $[37] = t5; + $[38] = t6; + } else { + t6 = $[38]; + } + return t6; } -function useTheme(defaultTheme = null) { +function useTheme(t0) { + const $ = reactCompilerRuntime.c(11); + const defaultTheme = t0 === void 0 ? null : t0; const storageContext = useStorageContext(); - const [theme, setThemeInternal] = React.useState(() => { - if (!storageContext) { - return null; - } - const stored = storageContext.get(STORAGE_KEY); - switch (stored) { - case "light": - return "light"; - case "dark": - return "dark"; - default: - if (typeof stored === "string") { - storageContext.set(STORAGE_KEY, ""); - } - return defaultTheme; - } - }); - React.useLayoutEffect(() => { - if (typeof window === "undefined") { - return; - } - document.body.classList.remove("graphiql-light", "graphiql-dark"); - if (theme) { - document.body.classList.add(`graphiql-${theme}`); - } - }, [theme]); - const setTheme = React.useCallback(newTheme => { - storageContext == null ? void 0 : storageContext.set(STORAGE_KEY, newTheme || ""); - setThemeInternal(newTheme); - }, [storageContext]); - return React.useMemo(() => ({ - theme, - setTheme - }), [theme, setTheme]); + let t1; + if ($[0] !== defaultTheme || $[1] !== storageContext) { + t1 = () => { + if (!storageContext) { + return null; + } + const stored = storageContext.get(STORAGE_KEY); + switch (stored) { + case "light": + { + return "light"; + } + case "dark": + { + return "dark"; + } + default: + { + if (typeof stored === "string") { + storageContext.set(STORAGE_KEY, ""); + } + return defaultTheme; + } + } + }; + $[0] = defaultTheme; + $[1] = storageContext; + $[2] = t1; + } else { + t1 = $[2]; + } + const [theme, setThemeInternal] = React.useState(t1); + let t2; + let t3; + if ($[3] !== theme) { + t2 = () => { + if (typeof window === "undefined") { + return; + } + document.body.classList.remove("graphiql-light", "graphiql-dark"); + if (theme) { + document.body.classList.add(`graphiql-${theme}`); + } + }; + t3 = [theme]; + $[3] = theme; + $[4] = t2; + $[5] = t3; + } else { + t2 = $[4]; + t3 = $[5]; + } + React.useLayoutEffect(t2, t3); + let t4; + if ($[6] !== storageContext) { + t4 = newTheme => { + storageContext == null ? void 0 : storageContext.set(STORAGE_KEY, newTheme || ""); + setThemeInternal(newTheme); + }; + $[6] = storageContext; + $[7] = t4; + } else { + t4 = $[7]; + } + const setTheme = t4; + let t5; + if ($[8] !== setTheme || $[9] !== theme) { + t5 = { + theme, + setTheme + }; + $[8] = setTheme; + $[9] = theme; + $[10] = t5; + } else { + t5 = $[10]; + } + return t5; } const STORAGE_KEY = "theme"; -function useDragResize({ - defaultSizeRelation = DEFAULT_FLEX, - direction, - initiallyHidden, - onHiddenElementChange, - sizeThresholdFirst = 100, - sizeThresholdSecond = 100, - storageKey -}) { +function useDragResize(t0) { + const $ = reactCompilerRuntime.c(31); + const { + defaultSizeRelation: t1, + direction, + initiallyHidden, + onHiddenElementChange, + sizeThresholdFirst: t2, + sizeThresholdSecond: t3, + storageKey + } = t0; + const defaultSizeRelation = t1 === void 0 ? DEFAULT_FLEX : t1; + const sizeThresholdFirst = t2 === void 0 ? 100 : t2; + const sizeThresholdSecond = t3 === void 0 ? 100 : t3; const storage = useStorageContext(); - const store = React.useMemo(() => debounce(500, value => { - if (storageKey) { - storage == null ? void 0 : storage.set(storageKey, value); - } - }), [storage, storageKey]); - const [hiddenElement, setHiddenElement] = React.useState(() => { - const storedValue = storageKey && (storage == null ? void 0 : storage.get(storageKey)); - if (storedValue === HIDE_FIRST || initiallyHidden === "first") { - return "first"; - } - if (storedValue === HIDE_SECOND || initiallyHidden === "second") { - return "second"; - } - return null; - }); - const setHiddenElementWithCallback = React.useCallback(element => { - if (element !== hiddenElement) { - setHiddenElement(element); - onHiddenElementChange == null ? void 0 : onHiddenElementChange(element); - } - }, [hiddenElement, onHiddenElementChange]); + let t4; + if ($[0] !== storage || $[1] !== storageKey) { + t4 = debounce(500, value => { + if (storageKey) { + storage == null ? void 0 : storage.set(storageKey, value); + } + }); + $[0] = storage; + $[1] = storageKey; + $[2] = t4; + } else { + t4 = $[2]; + } + const store = t4; + let t5; + if ($[3] !== initiallyHidden || $[4] !== storage || $[5] !== storageKey) { + t5 = () => { + const storedValue = storageKey && (storage == null ? void 0 : storage.get(storageKey)); + if (storedValue === HIDE_FIRST || initiallyHidden === "first") { + return "first"; + } + if (storedValue === HIDE_SECOND || initiallyHidden === "second") { + return "second"; + } + return null; + }; + $[3] = initiallyHidden; + $[4] = storage; + $[5] = storageKey; + $[6] = t5; + } else { + t5 = $[6]; + } + const [hiddenElement, setHiddenElement] = React.useState(t5); + let t6; + if ($[7] !== hiddenElement || $[8] !== onHiddenElementChange) { + t6 = element => { + if (element !== hiddenElement) { + setHiddenElement(element); + onHiddenElementChange == null ? void 0 : onHiddenElementChange(element); + } + }; + $[7] = hiddenElement; + $[8] = onHiddenElementChange; + $[9] = t6; + } else { + t6 = $[9]; + } + const setHiddenElementWithCallback = t6; const firstRef = React.useRef(null); const dragBarRef = React.useRef(null); const secondRef = React.useRef(null); const defaultFlexRef = React.useRef(`${defaultSizeRelation}`); - React.useLayoutEffect(() => { - const storedValue = storageKey && (storage == null ? void 0 : storage.get(storageKey)) || defaultFlexRef.current; - if (firstRef.current) { - firstRef.current.style.display = "flex"; - firstRef.current.style.flex = storedValue === HIDE_FIRST || storedValue === HIDE_SECOND ? defaultFlexRef.current : storedValue; - } - if (secondRef.current) { - secondRef.current.style.display = "flex"; - secondRef.current.style.flex = "1"; - } - if (dragBarRef.current) { - dragBarRef.current.style.display = "flex"; - } - }, [direction, storage, storageKey]); - const hide = React.useCallback(resizableElement => { - const element = resizableElement === "first" ? firstRef.current : secondRef.current; - if (!element) { - return; - } - element.style.left = "-1000px"; - element.style.position = "absolute"; - element.style.opacity = "0"; - element.style.height = "500px"; - element.style.width = "500px"; - if (firstRef.current) { - const flex = parseFloat(firstRef.current.style.flex); - if (!Number.isFinite(flex) || flex < 1) { - firstRef.current.style.flex = "1"; - } - } - }, []); - const show = React.useCallback(resizableElement => { - const element = resizableElement === "first" ? firstRef.current : secondRef.current; - if (!element) { - return; - } - element.style.width = ""; - element.style.height = ""; - element.style.opacity = ""; - element.style.position = ""; - element.style.left = ""; - if (storage && storageKey) { - const storedValue = storage.get(storageKey); - if (firstRef.current && storedValue !== HIDE_FIRST && storedValue !== HIDE_SECOND) { - firstRef.current.style.flex = storedValue || defaultFlexRef.current; - } - } - }, [storage, storageKey]); - React.useLayoutEffect(() => { - if (hiddenElement === "first") { - hide("first"); - } else { - show("first"); - } - if (hiddenElement === "second") { - hide("second"); - } else { - show("second"); - } - }, [hiddenElement, hide, show]); - React.useEffect(() => { - if (!dragBarRef.current || !firstRef.current || !secondRef.current) { - return; - } - const dragBarContainer = dragBarRef.current; - const firstContainer = firstRef.current; - const wrapper = firstContainer.parentElement; - const eventProperty = direction === "horizontal" ? "clientX" : "clientY"; - const rectProperty = direction === "horizontal" ? "left" : "top"; - const adjacentRectProperty = direction === "horizontal" ? "right" : "bottom"; - const sizeProperty = direction === "horizontal" ? "clientWidth" : "clientHeight"; - function handleMouseDown(downEvent) { - downEvent.preventDefault(); - const offset = downEvent[eventProperty] - dragBarContainer.getBoundingClientRect()[rectProperty]; - function handleMouseMove(moveEvent) { - if (moveEvent.buttons === 0) { - return handleMouseUp(); - } - const firstSize = moveEvent[eventProperty] - wrapper.getBoundingClientRect()[rectProperty] - offset; - const secondSize = wrapper.getBoundingClientRect()[adjacentRectProperty] - moveEvent[eventProperty] + offset - dragBarContainer[sizeProperty]; - if (firstSize < sizeThresholdFirst) { - setHiddenElementWithCallback("first"); - store(HIDE_FIRST); - } else if (secondSize < sizeThresholdSecond) { - setHiddenElementWithCallback("second"); - store(HIDE_SECOND); - } else { - setHiddenElementWithCallback(null); - const newFlex = `${firstSize / secondSize}`; - firstContainer.style.flex = newFlex; - store(newFlex); - } - } - function handleMouseUp() { - document.removeEventListener("mousemove", handleMouseMove); - document.removeEventListener("mouseup", handleMouseUp); - } - document.addEventListener("mousemove", handleMouseMove); - document.addEventListener("mouseup", handleMouseUp); - } - dragBarContainer.addEventListener("mousedown", handleMouseDown); - function reset() { + let t7; + if ($[10] !== storage || $[11] !== storageKey) { + t7 = () => { + const storedValue_0 = storageKey && (storage == null ? void 0 : storage.get(storageKey)) || defaultFlexRef.current; if (firstRef.current) { - firstRef.current.style.flex = defaultFlexRef.current; + firstRef.current.style.display = "flex"; + firstRef.current.style.flex = storedValue_0 === HIDE_FIRST || storedValue_0 === HIDE_SECOND ? defaultFlexRef.current : storedValue_0; + } + if (secondRef.current) { + secondRef.current.style.display = "flex"; + secondRef.current.style.flex = "1"; + } + if (dragBarRef.current) { + dragBarRef.current.style.display = "flex"; } - store(defaultFlexRef.current); - setHiddenElementWithCallback(null); - } - dragBarContainer.addEventListener("dblclick", reset); - return () => { - dragBarContainer.removeEventListener("mousedown", handleMouseDown); - dragBarContainer.removeEventListener("dblclick", reset); }; - }, [direction, setHiddenElementWithCallback, sizeThresholdFirst, sizeThresholdSecond, store]); - return React.useMemo(() => ({ - dragBarRef, - hiddenElement, - firstRef, - setHiddenElement, - secondRef - }), [hiddenElement, setHiddenElement]); + $[10] = storage; + $[11] = storageKey; + $[12] = t7; + } else { + t7 = $[12]; + } + let t8; + if ($[13] !== direction || $[14] !== storage || $[15] !== storageKey) { + t8 = [direction, storage, storageKey]; + $[13] = direction; + $[14] = storage; + $[15] = storageKey; + $[16] = t8; + } else { + t8 = $[16]; + } + React.useLayoutEffect(t7, t8); + let t10; + let t9; + if ($[17] !== hiddenElement || $[18] !== storage || $[19] !== storageKey) { + t9 = () => { + const hide = resizableElement => { + const element_0 = resizableElement === "first" ? firstRef.current : secondRef.current; + if (!element_0) { + return; + } + element_0.style.left = "-1000px"; + element_0.style.position = "absolute"; + element_0.style.opacity = "0"; + element_0.style.height = "500px"; + element_0.style.width = "500px"; + if (firstRef.current) { + const flex = parseFloat(firstRef.current.style.flex); + if (!Number.isFinite(flex) || flex < 1) { + firstRef.current.style.flex = "1"; + } + } + }; + const show = resizableElement_0 => { + const element_1 = resizableElement_0 === "first" ? firstRef.current : secondRef.current; + if (!element_1) { + return; + } + element_1.style.width = ""; + element_1.style.height = ""; + element_1.style.opacity = ""; + element_1.style.position = ""; + element_1.style.left = ""; + if (storage && storageKey) { + const storedValue_1 = storage.get(storageKey); + if (firstRef.current && storedValue_1 !== HIDE_FIRST && storedValue_1 !== HIDE_SECOND) { + firstRef.current.style.flex = storedValue_1 || defaultFlexRef.current; + } + } + }; + if (hiddenElement === "first") { + hide("first"); + } else { + show("first"); + } + if (hiddenElement === "second") { + hide("second"); + } else { + show("second"); + } + }; + t10 = [hiddenElement, storage, storageKey]; + $[17] = hiddenElement; + $[18] = storage; + $[19] = storageKey; + $[20] = t10; + $[21] = t9; + } else { + t10 = $[20]; + t9 = $[21]; + } + React.useLayoutEffect(t9, t10); + let t11; + let t12; + if ($[22] !== direction || $[23] !== setHiddenElementWithCallback || $[24] !== sizeThresholdFirst || $[25] !== sizeThresholdSecond || $[26] !== store) { + t11 = () => { + if (!dragBarRef.current || !firstRef.current || !secondRef.current) { + return; + } + const dragBarContainer = dragBarRef.current; + const firstContainer = firstRef.current; + const wrapper = firstContainer.parentElement; + const eventProperty = direction === "horizontal" ? "clientX" : "clientY"; + const rectProperty = direction === "horizontal" ? "left" : "top"; + const adjacentRectProperty = direction === "horizontal" ? "right" : "bottom"; + const sizeProperty = direction === "horizontal" ? "clientWidth" : "clientHeight"; + const handleMouseDown = function handleMouseDown2(downEvent) { + downEvent.preventDefault(); + const offset = downEvent[eventProperty] - dragBarContainer.getBoundingClientRect()[rectProperty]; + const handleMouseMove = function handleMouseMove2(moveEvent) { + if (moveEvent.buttons === 0) { + return handleMouseUp(); + } + const firstSize = moveEvent[eventProperty] - wrapper.getBoundingClientRect()[rectProperty] - offset; + const secondSize = wrapper.getBoundingClientRect()[adjacentRectProperty] - moveEvent[eventProperty] + offset - dragBarContainer[sizeProperty]; + if (firstSize < sizeThresholdFirst) { + setHiddenElementWithCallback("first"); + store(HIDE_FIRST); + } else { + if (secondSize < sizeThresholdSecond) { + setHiddenElementWithCallback("second"); + store(HIDE_SECOND); + } else { + setHiddenElementWithCallback(null); + const newFlex = `${firstSize / secondSize}`; + firstContainer.style.flex = newFlex; + store(newFlex); + } + } + }; + function handleMouseUp() { + document.removeEventListener("mousemove", handleMouseMove); + document.removeEventListener("mouseup", handleMouseUp); + } + document.addEventListener("mousemove", handleMouseMove); + document.addEventListener("mouseup", handleMouseUp); + }; + dragBarContainer.addEventListener("mousedown", handleMouseDown); + const reset = function reset2() { + if (firstRef.current) { + firstRef.current.style.flex = defaultFlexRef.current; + } + store(defaultFlexRef.current); + setHiddenElementWithCallback(null); + }; + dragBarContainer.addEventListener("dblclick", reset); + return () => { + dragBarContainer.removeEventListener("mousedown", handleMouseDown); + dragBarContainer.removeEventListener("dblclick", reset); + }; + }; + t12 = [direction, setHiddenElementWithCallback, sizeThresholdFirst, sizeThresholdSecond, store]; + $[22] = direction; + $[23] = setHiddenElementWithCallback; + $[24] = sizeThresholdFirst; + $[25] = sizeThresholdSecond; + $[26] = store; + $[27] = t11; + $[28] = t12; + } else { + t11 = $[27]; + t12 = $[28]; + } + React.useEffect(t11, t12); + let t13; + if ($[29] !== hiddenElement) { + t13 = { + dragBarRef, + hiddenElement, + firstRef, + setHiddenElement, + secondRef + }; + $[29] = hiddenElement; + $[30] = t13; + } else { + t13 = $[30]; + } + return t13; } const DEFAULT_FLEX = 1; const HIDE_FIRST = "hide-first"; const HIDE_SECOND = "hide-second"; -const ToolbarButton = React.forwardRef(({ - label, - onClick, - ...props -}, ref) => { +const ToolbarButton = React.forwardRef((t0, ref) => { + const $ = reactCompilerRuntime.c(19); + let label; + let onClick; + let props; + if ($[0] !== t0) { + ({ + label, + onClick, + ...props + } = t0); + $[0] = t0; + $[1] = label; + $[2] = onClick; + $[3] = props; + } else { + label = $[1]; + onClick = $[2]; + props = $[3]; + } const [error, setError] = React.useState(null); - const handleClick = React.useCallback(event => { - try { - onClick == null ? void 0 : onClick(event); - setError(null); - } catch (err) { - setError(err instanceof Error ? err : new Error(`Toolbar button click failed: ${err}`)); - } - }, [onClick]); - return /* @__PURE__ */jsxRuntime.jsx(Tooltip, { - label, - children: /* @__PURE__ */jsxRuntime.jsx(UnStyledButton, { + let t1; + if ($[4] !== onClick) { + t1 = event => { + try { + if (onClick) { + onClick(event); + } + setError(null); + } catch (t22) { + const err = t22; + setError(err instanceof Error ? err : new Error(`Toolbar button click failed: ${err}`)); + } + }; + $[4] = onClick; + $[5] = t1; + } else { + t1 = $[5]; + } + const handleClick = t1; + const t2 = error && "error"; + let t3; + if ($[6] !== props.className || $[7] !== t2) { + t3 = clsx.clsx("graphiql-toolbar-button", t2, props.className); + $[6] = props.className; + $[7] = t2; + $[8] = t3; + } else { + t3 = $[8]; + } + const t4 = error ? error.message : label; + const t5 = error ? "true" : props["aria-invalid"]; + let t6; + if ($[9] !== handleClick || $[10] !== props || $[11] !== ref || $[12] !== t3 || $[13] !== t4 || $[14] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsx(UnStyledButton, { ...props, ref, type: "button", - className: clsx.clsx("graphiql-toolbar-button", error && "error", props.className), + className: t3, onClick: handleClick, - "aria-label": error ? error.message : label, - "aria-invalid": error ? "true" : props["aria-invalid"] - }) - }); + "aria-label": t4, + "aria-invalid": t5 + }); + $[9] = handleClick; + $[10] = props; + $[11] = ref; + $[12] = t3; + $[13] = t4; + $[14] = t5; + $[15] = t6; + } else { + t6 = $[15]; + } + let t7; + if ($[16] !== label || $[17] !== t6) { + t7 = /* @__PURE__ */jsxRuntime.jsx(Tooltip, { + label, + children: t6 + }); + $[16] = label; + $[17] = t6; + $[18] = t7; + } else { + t7 = $[18]; + } + return t7; }); ToolbarButton.displayName = "ToolbarButton"; function ExecuteButton() { + const $ = reactCompilerRuntime.c(19); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + nonNull: true, + caller: ExecuteButton + }; + $[0] = t0; + } else { + t0 = $[0]; + } const { queryEditor, setOperationName - } = useEditorContext({ - nonNull: true, - caller: ExecuteButton - }); + } = useEditorContext(t0); + let t1; + if ($[1] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: ExecuteButton + }; + $[1] = t1; + } else { + t1 = $[1]; + } const { isFetching, isSubscribed, operationName, run, stop - } = useExecutionContext({ - nonNull: true, - caller: ExecuteButton - }); - const operations = (queryEditor == null ? void 0 : queryEditor.operations) || []; + } = useExecutionContext(t1); + let t2; + if ($[2] !== (queryEditor == null ? void 0 : queryEditor.operations)) { + t2 = (queryEditor == null ? void 0 : queryEditor.operations) || []; + $[2] = queryEditor == null ? void 0 : queryEditor.operations; + $[3] = t2; + } else { + t2 = $[3]; + } + const operations = t2; const hasOptions = operations.length > 1 && typeof operationName !== "string"; const isRunning = isFetching || isSubscribed; const label = `${isRunning ? "Stop" : "Execute"} query (Ctrl-Enter)`; - const buttonProps = { - type: "button", - className: "graphiql-execute-button", - children: isRunning ? /* @__PURE__ */jsxRuntime.jsx(StopIcon, {}) : /* @__PURE__ */jsxRuntime.jsx(PlayIcon, {}), - "aria-label": label - }; - return hasOptions && !isRunning ? /* @__PURE__ */jsxRuntime.jsxs(DropdownMenu, { - children: [/* @__PURE__ */jsxRuntime.jsx(Tooltip, { + let t3; + if ($[4] !== isRunning) { + t3 = isRunning ? /* @__PURE__ */jsxRuntime.jsx(StopIcon, {}) : /* @__PURE__ */jsxRuntime.jsx(PlayIcon, {}); + $[4] = isRunning; + $[5] = t3; + } else { + t3 = $[5]; + } + let t4; + if ($[6] !== label || $[7] !== t3) { + t4 = { + type: "button", + className: "graphiql-execute-button", + children: t3, + "aria-label": label + }; + $[6] = label; + $[7] = t3; + $[8] = t4; + } else { + t4 = $[8]; + } + const buttonProps = t4; + let t5; + if ($[9] !== buttonProps || $[10] !== hasOptions || $[11] !== isRunning || $[12] !== label || $[13] !== operations || $[14] !== queryEditor || $[15] !== run || $[16] !== setOperationName || $[17] !== stop) { + t5 = hasOptions && !isRunning ? /* @__PURE__ */jsxRuntime.jsxs(DropdownMenu, { + children: [/* @__PURE__ */jsxRuntime.jsx(Tooltip, { + label, + children: /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Button, { + ...buttonProps + }) + }), /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Content, { + children: operations.map((operation, i) => { + const opName = operation.name ? operation.name.value : ``; + return /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Item, { + onSelect: () => { + var _a; + const selectedOperationName = (_a = operation.name) == null ? void 0 : _a.value; + if (queryEditor && selectedOperationName && selectedOperationName !== queryEditor.operationName) { + setOperationName(selectedOperationName); + } + run(); + }, + children: opName + }, `${opName}-${i}`); + }) + })] + }) : /* @__PURE__ */jsxRuntime.jsx(Tooltip, { label, - children: /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Button, { - ...buttonProps - }) - }), /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Content, { - children: operations.map((operation, i) => { - const opName = operation.name ? operation.name.value : ``; - return /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Item, { - onSelect: () => { - var _a; - const selectedOperationName = (_a = operation.name) == null ? void 0 : _a.value; - if (queryEditor && selectedOperationName && selectedOperationName !== queryEditor.operationName) { - setOperationName(selectedOperationName); - } + children: /* @__PURE__ */jsxRuntime.jsx("button", { + ...buttonProps, + onClick: () => { + if (isRunning) { + stop(); + } else { run(); - }, - children: opName - }, `${opName}-${i}`); - }) - })] - }) : /* @__PURE__ */jsxRuntime.jsx(Tooltip, { - label, - children: /* @__PURE__ */jsxRuntime.jsx("button", { - ...buttonProps, - onClick: () => { - if (isRunning) { - stop(); - } else { - run(); + } } - } - }) - }); + }) + }); + $[9] = buttonProps; + $[10] = hasOptions; + $[11] = isRunning; + $[12] = label; + $[13] = operations; + $[14] = queryEditor; + $[15] = run; + $[16] = setOperationName; + $[17] = stop; + $[18] = t5; + } else { + t5 = $[18]; + } + return t5; } -const ToolbarMenuRoot = ({ - button, - children, - label, - ...props -}) => /* @__PURE__ */jsxRuntime.jsxs(DropdownMenu, { - ...props, - children: [/* @__PURE__ */jsxRuntime.jsx(Tooltip, { - label, - children: /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Button, { - className: clsx.clsx("graphiql-un-styled graphiql-toolbar-menu", props.className), +const ToolbarMenuRoot = t0 => { + const $ = reactCompilerRuntime.c(20); + let button; + let children; + let label; + let props; + if ($[0] !== t0) { + ({ + button, + children, + label, + ...props + } = t0); + $[0] = t0; + $[1] = button; + $[2] = children; + $[3] = label; + $[4] = props; + } else { + button = $[1]; + children = $[2]; + label = $[3]; + props = $[4]; + } + let t1; + if ($[5] !== props.className) { + t1 = clsx.clsx("graphiql-un-styled graphiql-toolbar-menu", props.className); + $[5] = props.className; + $[6] = t1; + } else { + t1 = $[6]; + } + let t2; + if ($[7] !== button || $[8] !== label || $[9] !== t1) { + t2 = /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Button, { + className: t1, "aria-label": label, children: button - }) - }), /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Content, { - children - })] -}); + }); + $[7] = button; + $[8] = label; + $[9] = t1; + $[10] = t2; + } else { + t2 = $[10]; + } + let t3; + if ($[11] !== label || $[12] !== t2) { + t3 = /* @__PURE__ */jsxRuntime.jsx(Tooltip, { + label, + children: t2 + }); + $[11] = label; + $[12] = t2; + $[13] = t3; + } else { + t3 = $[13]; + } + let t4; + if ($[14] !== children) { + t4 = /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Content, { + children + }); + $[14] = children; + $[15] = t4; + } else { + t4 = $[15]; + } + let t5; + if ($[16] !== props || $[17] !== t3 || $[18] !== t4) { + t5 = /* @__PURE__ */jsxRuntime.jsxs(DropdownMenu, { + ...props, + children: [t3, t4] + }); + $[16] = props; + $[17] = t3; + $[18] = t4; + $[19] = t5; + } else { + t5 = $[19]; + } + return t5; +}; const ToolbarMenu = createComponentGroup(ToolbarMenuRoot, { Item: DropdownMenu.Item }); @@ -73311,4833 +83409,13 @@ exports.useVariablesEditorState = useVariablesEditorState; /***/ }), -/***/ "../../graphiql-react/dist/info-addon.cjs.js": -/*!***************************************************!*\ - !*** ../../graphiql-react/dist/info-addon.cjs.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -codemirror.CodeMirror.defineOption("info", false, (cm, options, old) => { - if (old && old !== codemirror.CodeMirror.Init) { - const oldOnMouseOver = cm.state.info.onMouseOver; - codemirror.CodeMirror.off(cm.getWrapperElement(), "mouseover", oldOnMouseOver); - clearTimeout(cm.state.info.hoverTimeout); - delete cm.state.info; - } - if (options) { - const state = cm.state.info = createState(options); - state.onMouseOver = onMouseOver.bind(null, cm); - codemirror.CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); - } -}); -function createState(options) { - return { - options: options instanceof Function ? { - render: options - } : options === true ? {} : options - }; -} -function getHoverTime(cm) { - const { - options - } = cm.state.info; - return (options === null || options === void 0 ? void 0 : options.hoverTime) || 500; -} -function onMouseOver(cm, e) { - const state = cm.state.info; - const target = e.target || e.srcElement; - if (!(target instanceof HTMLElement)) { - return; - } - if (target.nodeName !== "SPAN" || state.hoverTimeout !== void 0) { - return; - } - const box = target.getBoundingClientRect(); - const onMouseMove = function () { - clearTimeout(state.hoverTimeout); - state.hoverTimeout = setTimeout(onHover, hoverTime); - }; - const onMouseOut = function () { - codemirror.CodeMirror.off(document, "mousemove", onMouseMove); - codemirror.CodeMirror.off(cm.getWrapperElement(), "mouseout", onMouseOut); - clearTimeout(state.hoverTimeout); - state.hoverTimeout = void 0; - }; - const onHover = function () { - codemirror.CodeMirror.off(document, "mousemove", onMouseMove); - codemirror.CodeMirror.off(cm.getWrapperElement(), "mouseout", onMouseOut); - state.hoverTimeout = void 0; - onMouseHover(cm, box); - }; - const hoverTime = getHoverTime(cm); - state.hoverTimeout = setTimeout(onHover, hoverTime); - codemirror.CodeMirror.on(document, "mousemove", onMouseMove); - codemirror.CodeMirror.on(cm.getWrapperElement(), "mouseout", onMouseOut); -} -function onMouseHover(cm, box) { - const pos = cm.coordsChar({ - left: (box.left + box.right) / 2, - top: (box.top + box.bottom) / 2 - }, "window"); - const state = cm.state.info; - const { - options - } = state; - const render = options.render || cm.getHelper(pos, "info"); - if (render) { - const token = cm.getTokenAt(pos, true); - if (token) { - const info = render(token, options, cm, pos); - if (info) { - showPopup(cm, box, info); - } - } - } -} -function showPopup(cm, box, info) { - const popup = document.createElement("div"); - popup.className = "CodeMirror-info"; - popup.append(info); - document.body.append(popup); - const popupBox = popup.getBoundingClientRect(); - const popupStyle = window.getComputedStyle(popup); - const popupWidth = popupBox.right - popupBox.left + parseFloat(popupStyle.marginLeft) + parseFloat(popupStyle.marginRight); - const popupHeight = popupBox.bottom - popupBox.top + parseFloat(popupStyle.marginTop) + parseFloat(popupStyle.marginBottom); - let topPos = box.bottom; - if (popupHeight > window.innerHeight - box.bottom - 15 && box.top > window.innerHeight - box.bottom) { - topPos = box.top - popupHeight; - } - if (topPos < 0) { - topPos = box.bottom; - } - let leftPos = Math.max(0, window.innerWidth - popupWidth - 15); - if (leftPos > box.left) { - leftPos = box.left; - } - popup.style.opacity = "1"; - popup.style.top = topPos + "px"; - popup.style.left = leftPos + "px"; - let popupTimeout; - const onMouseOverPopup = function () { - clearTimeout(popupTimeout); - }; - const onMouseOut = function () { - clearTimeout(popupTimeout); - popupTimeout = setTimeout(hidePopup, 200); - }; - const hidePopup = function () { - codemirror.CodeMirror.off(popup, "mouseover", onMouseOverPopup); - codemirror.CodeMirror.off(popup, "mouseout", onMouseOut); - codemirror.CodeMirror.off(cm.getWrapperElement(), "mouseout", onMouseOut); - if (popup.style.opacity) { - popup.style.opacity = "0"; - setTimeout(() => { - if (popup.parentNode) { - popup.remove(); - } - }, 600); - } else if (popup.parentNode) { - popup.remove(); - } - }; - codemirror.CodeMirror.on(popup, "mouseover", onMouseOverPopup); - codemirror.CodeMirror.on(popup, "mouseout", onMouseOut); - codemirror.CodeMirror.on(cm.getWrapperElement(), "mouseout", onMouseOut); -} - -/***/ }), - -/***/ "../../graphiql-react/dist/info.cjs.js": -/*!*********************************************!*\ - !*** ../../graphiql-react/dist/info.cjs.js ***! - \*********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const SchemaReference = __webpack_require__(/*! ./SchemaReference.cjs.js */ "../../graphiql-react/dist/SchemaReference.cjs.js"); -__webpack_require__(/*! ./info-addon.cjs.js */ "../../graphiql-react/dist/info-addon.cjs.js"); -codemirror.CodeMirror.registerHelper("info", "graphql", (token, options) => { - var _a; - if (!options.schema || !token.state) { - return; - } - const { - kind, - step - } = token.state; - const typeInfo = SchemaReference.getTypeInfo(options.schema, token.state); - if (kind === "Field" && step === 0 && typeInfo.fieldDef || kind === "AliasedField" && step === 2 && typeInfo.fieldDef || kind === "ObjectField" && step === 0 && typeInfo.fieldDef) { - const header = document.createElement("div"); - header.className = "CodeMirror-info-header"; - renderField(header, typeInfo, options); - const into = document.createElement("div"); - into.append(header); - renderDescription(into, options, typeInfo.fieldDef); - return into; - } - if (kind === "Directive" && step === 1 && typeInfo.directiveDef) { - const header = document.createElement("div"); - header.className = "CodeMirror-info-header"; - renderDirective(header, typeInfo, options); - const into = document.createElement("div"); - into.append(header); - renderDescription(into, options, typeInfo.directiveDef); - return into; - } - if (kind === "Argument" && step === 0 && typeInfo.argDef) { - const header = document.createElement("div"); - header.className = "CodeMirror-info-header"; - renderArg(header, typeInfo, options); - const into = document.createElement("div"); - into.append(header); - renderDescription(into, options, typeInfo.argDef); - return into; - } - if (kind === "EnumValue" && ((_a = typeInfo.enumValue) === null || _a === void 0 ? void 0 : _a.description)) { - const header = document.createElement("div"); - header.className = "CodeMirror-info-header"; - renderEnumValue(header, typeInfo, options); - const into = document.createElement("div"); - into.append(header); - renderDescription(into, options, typeInfo.enumValue); - return into; - } - if (kind === "NamedType" && typeInfo.type && typeInfo.type.description) { - const header = document.createElement("div"); - header.className = "CodeMirror-info-header"; - renderType(header, typeInfo, options, typeInfo.type); - const into = document.createElement("div"); - into.append(header); - renderDescription(into, options, typeInfo.type); - return into; - } -}); -function renderField(into, typeInfo, options) { - renderQualifiedField(into, typeInfo, options); - renderTypeAnnotation(into, typeInfo, options, typeInfo.type); -} -function renderQualifiedField(into, typeInfo, options) { - var _a; - const fieldName = ((_a = typeInfo.fieldDef) === null || _a === void 0 ? void 0 : _a.name) || ""; - text(into, fieldName, "field-name", options, SchemaReference.getFieldReference(typeInfo)); -} -function renderDirective(into, typeInfo, options) { - var _a; - const name = "@" + (((_a = typeInfo.directiveDef) === null || _a === void 0 ? void 0 : _a.name) || ""); - text(into, name, "directive-name", options, SchemaReference.getDirectiveReference(typeInfo)); -} -function renderArg(into, typeInfo, options) { - var _a; - const name = ((_a = typeInfo.argDef) === null || _a === void 0 ? void 0 : _a.name) || ""; - text(into, name, "arg-name", options, SchemaReference.getArgumentReference(typeInfo)); - renderTypeAnnotation(into, typeInfo, options, typeInfo.inputType); -} -function renderEnumValue(into, typeInfo, options) { - var _a; - const name = ((_a = typeInfo.enumValue) === null || _a === void 0 ? void 0 : _a.name) || ""; - renderType(into, typeInfo, options, typeInfo.inputType); - text(into, "."); - text(into, name, "enum-value", options, SchemaReference.getEnumValueReference(typeInfo)); -} -function renderTypeAnnotation(into, typeInfo, options, t) { - const typeSpan = document.createElement("span"); - typeSpan.className = "type-name-pill"; - if (t instanceof graphql.GraphQLNonNull) { - renderType(typeSpan, typeInfo, options, t.ofType); - text(typeSpan, "!"); - } else if (t instanceof graphql.GraphQLList) { - text(typeSpan, "["); - renderType(typeSpan, typeInfo, options, t.ofType); - text(typeSpan, "]"); - } else { - text(typeSpan, (t === null || t === void 0 ? void 0 : t.name) || "", "type-name", options, SchemaReference.getTypeReference(typeInfo, t)); - } - into.append(typeSpan); -} -function renderType(into, typeInfo, options, t) { - if (t instanceof graphql.GraphQLNonNull) { - renderType(into, typeInfo, options, t.ofType); - text(into, "!"); - } else if (t instanceof graphql.GraphQLList) { - text(into, "["); - renderType(into, typeInfo, options, t.ofType); - text(into, "]"); - } else { - text(into, (t === null || t === void 0 ? void 0 : t.name) || "", "type-name", options, SchemaReference.getTypeReference(typeInfo, t)); - } -} -function renderDescription(into, options, def) { - const { - description - } = def; - if (description) { - const descriptionDiv = document.createElement("div"); - descriptionDiv.className = "info-description"; - if (options.renderDescription) { - descriptionDiv.innerHTML = options.renderDescription(description); - } else { - descriptionDiv.append(document.createTextNode(description)); - } - into.append(descriptionDiv); - } - renderDeprecation(into, options, def); -} -function renderDeprecation(into, options, def) { - const reason = def.deprecationReason; - if (reason) { - const deprecationDiv = document.createElement("div"); - deprecationDiv.className = "info-deprecation"; - into.append(deprecationDiv); - const label = document.createElement("span"); - label.className = "info-deprecation-label"; - label.append(document.createTextNode("Deprecated")); - deprecationDiv.append(label); - const reasonDiv = document.createElement("div"); - reasonDiv.className = "info-deprecation-reason"; - if (options.renderDescription) { - reasonDiv.innerHTML = options.renderDescription(reason); - } else { - reasonDiv.append(document.createTextNode(reason)); - } - deprecationDiv.append(reasonDiv); - } -} -function text(into, content, className = "", options = { - onClick: null -}, ref = null) { - if (className) { - const { - onClick - } = options; - let node; - if (onClick) { - node = document.createElement("a"); - node.href = "javascript:void 0"; - node.addEventListener("click", e => { - e.preventDefault(); - onClick(ref, e); - }); - } else { - node = document.createElement("span"); - } - node.className = className; - node.append(document.createTextNode(content)); - into.append(node); - } else { - into.append(document.createTextNode(content)); - } -} - -/***/ }), - -/***/ "../../graphiql-react/dist/javascript.cjs.js": -/*!***************************************************!*\ - !*** ../../graphiql-react/dist/javascript.cjs.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var javascript$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - CodeMirror.defineMode("javascript", function (config, parserConfig) { - var indentUnit = config.indentUnit; - var statementIndent = parserConfig.statementIndent; - var jsonldMode = parserConfig.jsonld; - var jsonMode = parserConfig.json || jsonldMode; - var trackScope = parserConfig.trackScope !== false; - var isTS = parserConfig.typescript; - var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; - var keywords = function () { - function kw(type2) { - return { - type: type2, - style: "keyword" - }; - } - var A = kw("keyword a"), - B = kw("keyword b"), - C = kw("keyword c"), - D = kw("keyword d"); - var operator = kw("operator"), - atom = { - type: "atom", - style: "atom" - }; - return { - "if": kw("if"), - "while": A, - "with": A, - "else": B, - "do": B, - "try": B, - "finally": B, - "return": D, - "break": D, - "continue": D, - "new": kw("new"), - "delete": C, - "void": C, - "throw": C, - "debugger": kw("debugger"), - "var": kw("var"), - "const": kw("var"), - "let": kw("var"), - "function": kw("function"), - "catch": kw("catch"), - "for": kw("for"), - "switch": kw("switch"), - "case": kw("case"), - "default": kw("default"), - "in": operator, - "typeof": operator, - "instanceof": operator, - "true": atom, - "false": atom, - "null": atom, - "undefined": atom, - "NaN": atom, - "Infinity": atom, - "this": kw("this"), - "class": kw("class"), - "super": kw("atom"), - "yield": C, - "export": kw("export"), - "import": kw("import"), - "extends": C, - "await": C - }; - }(); - var isOperatorChar = /[+\-*&%=<>!?|~^@]/; - var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; - function readRegexp(stream) { - var escaped = false, - next, - inSet = false; - while ((next = stream.next()) != null) { - if (!escaped) { - if (next == "/" && !inSet) return; - if (next == "[") inSet = true;else if (inSet && next == "]") inSet = false; - } - escaped = !escaped && next == "\\"; - } - } - var type, content; - function ret(tp, style, cont2) { - type = tp; - content = cont2; - return style; - } - function tokenBase(stream, state) { - var ch = stream.next(); - if (ch == '"' || ch == "'") { - state.tokenize = tokenString(ch); - return state.tokenize(stream, state); - } else if (ch == "." && stream.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/)) { - return ret("number", "number"); - } else if (ch == "." && stream.match("..")) { - return ret("spread", "meta"); - } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { - return ret(ch); - } else if (ch == "=" && stream.eat(">")) { - return ret("=>", "operator"); - } else if (ch == "0" && stream.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) { - return ret("number", "number"); - } else if (/\d/.test(ch)) { - stream.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/); - return ret("number", "number"); - } else if (ch == "/") { - if (stream.eat("*")) { - state.tokenize = tokenComment; - return tokenComment(stream, state); - } else if (stream.eat("/")) { - stream.skipToEnd(); - return ret("comment", "comment"); - } else if (expressionAllowed(stream, state, 1)) { - readRegexp(stream); - stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/); - return ret("regexp", "string-2"); - } else { - stream.eat("="); - return ret("operator", "operator", stream.current()); - } - } else if (ch == "`") { - state.tokenize = tokenQuasi; - return tokenQuasi(stream, state); - } else if (ch == "#" && stream.peek() == "!") { - stream.skipToEnd(); - return ret("meta", "meta"); - } else if (ch == "#" && stream.eatWhile(wordRE)) { - return ret("variable", "property"); - } else if (ch == "<" && stream.match("!--") || ch == "-" && stream.match("->") && !/\S/.test(stream.string.slice(0, stream.start))) { - stream.skipToEnd(); - return ret("comment", "comment"); - } else if (isOperatorChar.test(ch)) { - if (ch != ">" || !state.lexical || state.lexical.type != ">") { - if (stream.eat("=")) { - if (ch == "!" || ch == "=") stream.eat("="); - } else if (/[<>*+\-|&?]/.test(ch)) { - stream.eat(ch); - if (ch == ">") stream.eat(ch); - } - } - if (ch == "?" && stream.eat(".")) return ret("."); - return ret("operator", "operator", stream.current()); - } else if (wordRE.test(ch)) { - stream.eatWhile(wordRE); - var word = stream.current(); - if (state.lastType != ".") { - if (keywords.propertyIsEnumerable(word)) { - var kw = keywords[word]; - return ret(kw.type, kw.style, word); - } - if (word == "async" && stream.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/, false)) return ret("async", "keyword", word); - } - return ret("variable", "variable", word); - } - } - function tokenString(quote) { - return function (stream, state) { - var escaped = false, - next; - if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)) { - state.tokenize = tokenBase; - return ret("jsonld-keyword", "meta"); - } - while ((next = stream.next()) != null) { - if (next == quote && !escaped) break; - escaped = !escaped && next == "\\"; - } - if (!escaped) state.tokenize = tokenBase; - return ret("string", "string"); - }; - } - function tokenComment(stream, state) { - var maybeEnd = false, - ch; - while (ch = stream.next()) { - if (ch == "/" && maybeEnd) { - state.tokenize = tokenBase; - break; - } - maybeEnd = ch == "*"; - } - return ret("comment", "comment"); - } - function tokenQuasi(stream, state) { - var escaped = false, - next; - while ((next = stream.next()) != null) { - if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { - state.tokenize = tokenBase; - break; - } - escaped = !escaped && next == "\\"; - } - return ret("quasi", "string-2", stream.current()); - } - var brackets = "([{}])"; - function findFatArrow(stream, state) { - if (state.fatArrowAt) state.fatArrowAt = null; - var arrow = stream.string.indexOf("=>", stream.start); - if (arrow < 0) return; - if (isTS) { - var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow)); - if (m) arrow = m.index; - } - var depth = 0, - sawSomething = false; - for (var pos = arrow - 1; pos >= 0; --pos) { - var ch = stream.string.charAt(pos); - var bracket = brackets.indexOf(ch); - if (bracket >= 0 && bracket < 3) { - if (!depth) { - ++pos; - break; - } - if (--depth == 0) { - if (ch == "(") sawSomething = true; - break; - } - } else if (bracket >= 3 && bracket < 6) { - ++depth; - } else if (wordRE.test(ch)) { - sawSomething = true; - } else if (/["'\/`]/.test(ch)) { - for (;; --pos) { - if (pos == 0) return; - var next = stream.string.charAt(pos - 1); - if (next == ch && stream.string.charAt(pos - 2) != "\\") { - pos--; - break; - } - } - } else if (sawSomething && !depth) { - ++pos; - break; - } - } - if (sawSomething && !depth) state.fatArrowAt = pos; - } - var atomicTypes = { - "atom": true, - "number": true, - "variable": true, - "string": true, - "regexp": true, - "this": true, - "import": true, - "jsonld-keyword": true - }; - function JSLexical(indented, column, type2, align, prev, info) { - this.indented = indented; - this.column = column; - this.type = type2; - this.prev = prev; - this.info = info; - if (align != null) this.align = align; - } - function inScope(state, varname) { - if (!trackScope) return false; - for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; - for (var cx2 = state.context; cx2; cx2 = cx2.prev) { - for (var v = cx2.vars; v; v = v.next) if (v.name == varname) return true; - } - } - function parseJS(state, style, type2, content2, stream) { - var cc = state.cc; - cx.state = state; - cx.stream = stream; - cx.marked = null, cx.cc = cc; - cx.style = style; - if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; - while (true) { - var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; - if (combinator(type2, content2)) { - while (cc.length && cc[cc.length - 1].lex) cc.pop()(); - if (cx.marked) return cx.marked; - if (type2 == "variable" && inScope(state, content2)) return "variable-2"; - return style; - } - } - } - var cx = { - state: null, - column: null, - marked: null, - cc: null - }; - function pass() { - for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); - } - function cont() { - pass.apply(null, arguments); - return true; - } - function inList(name, list) { - for (var v = list; v; v = v.next) if (v.name == name) return true; - return false; - } - function register(varname) { - var state = cx.state; - cx.marked = "def"; - if (!trackScope) return; - if (state.context) { - if (state.lexical.info == "var" && state.context && state.context.block) { - var newContext = registerVarScoped(varname, state.context); - if (newContext != null) { - state.context = newContext; - return; - } - } else if (!inList(varname, state.localVars)) { - state.localVars = new Var(varname, state.localVars); - return; - } - } - if (parserConfig.globalVars && !inList(varname, state.globalVars)) state.globalVars = new Var(varname, state.globalVars); - } - function registerVarScoped(varname, context) { - if (!context) { - return null; - } else if (context.block) { - var inner = registerVarScoped(varname, context.prev); - if (!inner) return null; - if (inner == context.prev) return context; - return new Context(inner, context.vars, true); - } else if (inList(varname, context.vars)) { - return context; - } else { - return new Context(context.prev, new Var(varname, context.vars), false); - } - } - function isModifier(name) { - return name == "public" || name == "private" || name == "protected" || name == "abstract" || name == "readonly"; - } - function Context(prev, vars, block2) { - this.prev = prev; - this.vars = vars; - this.block = block2; - } - function Var(name, next) { - this.name = name; - this.next = next; - } - var defaultVars = new Var("this", new Var("arguments", null)); - function pushcontext() { - cx.state.context = new Context(cx.state.context, cx.state.localVars, false); - cx.state.localVars = defaultVars; - } - function pushblockcontext() { - cx.state.context = new Context(cx.state.context, cx.state.localVars, true); - cx.state.localVars = null; - } - pushcontext.lex = pushblockcontext.lex = true; - function popcontext() { - cx.state.localVars = cx.state.context.vars; - cx.state.context = cx.state.context.prev; - } - popcontext.lex = true; - function pushlex(type2, info) { - var result = function () { - var state = cx.state, - indent = state.indented; - if (state.lexical.type == "stat") indent = state.lexical.indented;else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) indent = outer.indented; - state.lexical = new JSLexical(indent, cx.stream.column(), type2, null, state.lexical, info); - }; - result.lex = true; - return result; - } - function poplex() { - var state = cx.state; - if (state.lexical.prev) { - if (state.lexical.type == ")") state.indented = state.lexical.indented; - state.lexical = state.lexical.prev; - } - } - poplex.lex = true; - function expect(wanted) { - function exp(type2) { - if (type2 == wanted) return cont();else if (wanted == ";" || type2 == "}" || type2 == ")" || type2 == "]") return pass();else return cont(exp); - } - return exp; - } - function statement(type2, value) { - if (type2 == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex); - if (type2 == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex); - if (type2 == "keyword b") return cont(pushlex("form"), statement, poplex); - if (type2 == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex); - if (type2 == "debugger") return cont(expect(";")); - if (type2 == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext); - if (type2 == ";") return cont(); - if (type2 == "if") { - if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) cx.state.cc.pop()(); - return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse); - } - if (type2 == "function") return cont(functiondef); - if (type2 == "for") return cont(pushlex("form"), pushblockcontext, forspec, statement, popcontext, poplex); - if (type2 == "class" || isTS && value == "interface") { - cx.marked = "keyword"; - return cont(pushlex("form", type2 == "class" ? type2 : value), className, poplex); - } - if (type2 == "variable") { - if (isTS && value == "declare") { - cx.marked = "keyword"; - return cont(statement); - } else if (isTS && (value == "module" || value == "enum" || value == "type") && cx.stream.match(/^\s*\w/, false)) { - cx.marked = "keyword"; - if (value == "enum") return cont(enumdef);else if (value == "type") return cont(typename, expect("operator"), typeexpr, expect(";"));else return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex); - } else if (isTS && value == "namespace") { - cx.marked = "keyword"; - return cont(pushlex("form"), expression, statement, poplex); - } else if (isTS && value == "abstract") { - cx.marked = "keyword"; - return cont(statement); - } else { - return cont(pushlex("stat"), maybelabel); - } - } - if (type2 == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext, block, poplex, poplex, popcontext); - if (type2 == "case") return cont(expression, expect(":")); - if (type2 == "default") return cont(expect(":")); - if (type2 == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext); - if (type2 == "export") return cont(pushlex("stat"), afterExport, poplex); - if (type2 == "import") return cont(pushlex("stat"), afterImport, poplex); - if (type2 == "async") return cont(statement); - if (value == "@") return cont(expression, statement); - return pass(pushlex("stat"), expression, expect(";"), poplex); - } - function maybeCatchBinding(type2) { - if (type2 == "(") return cont(funarg, expect(")")); - } - function expression(type2, value) { - return expressionInner(type2, value, false); - } - function expressionNoComma(type2, value) { - return expressionInner(type2, value, true); - } - function parenExpr(type2) { - if (type2 != "(") return pass(); - return cont(pushlex(")"), maybeexpression, expect(")"), poplex); - } - function expressionInner(type2, value, noComma) { - if (cx.state.fatArrowAt == cx.stream.start) { - var body = noComma ? arrowBodyNoComma : arrowBody; - if (type2 == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext);else if (type2 == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); - } - var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; - if (atomicTypes.hasOwnProperty(type2)) return cont(maybeop); - if (type2 == "function") return cont(functiondef, maybeop); - if (type2 == "class" || isTS && value == "interface") { - cx.marked = "keyword"; - return cont(pushlex("form"), classExpression, poplex); - } - if (type2 == "keyword c" || type2 == "async") return cont(noComma ? expressionNoComma : expression); - if (type2 == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); - if (type2 == "operator" || type2 == "spread") return cont(noComma ? expressionNoComma : expression); - if (type2 == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); - if (type2 == "{") return contCommasep(objprop, "}", null, maybeop); - if (type2 == "quasi") return pass(quasi, maybeop); - if (type2 == "new") return cont(maybeTarget(noComma)); - return cont(); - } - function maybeexpression(type2) { - if (type2.match(/[;\}\)\],]/)) return pass(); - return pass(expression); - } - function maybeoperatorComma(type2, value) { - if (type2 == ",") return cont(maybeexpression); - return maybeoperatorNoComma(type2, value, false); - } - function maybeoperatorNoComma(type2, value, noComma) { - var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; - var expr = noComma == false ? expression : expressionNoComma; - if (type2 == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); - if (type2 == "operator") { - if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me); - if (isTS && value == "<" && cx.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/, false)) return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me); - if (value == "?") return cont(expression, expect(":"), expr); - return cont(expr); - } - if (type2 == "quasi") { - return pass(quasi, me); - } - if (type2 == ";") return; - if (type2 == "(") return contCommasep(expressionNoComma, ")", "call", me); - if (type2 == ".") return cont(property, me); - if (type2 == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); - if (isTS && value == "as") { - cx.marked = "keyword"; - return cont(typeexpr, me); - } - if (type2 == "regexp") { - cx.state.lastType = cx.marked = "operator"; - cx.stream.backUp(cx.stream.pos - cx.stream.start - 1); - return cont(expr); - } - } - function quasi(type2, value) { - if (type2 != "quasi") return pass(); - if (value.slice(value.length - 2) != "${") return cont(quasi); - return cont(maybeexpression, continueQuasi); - } - function continueQuasi(type2) { - if (type2 == "}") { - cx.marked = "string-2"; - cx.state.tokenize = tokenQuasi; - return cont(quasi); - } - } - function arrowBody(type2) { - findFatArrow(cx.stream, cx.state); - return pass(type2 == "{" ? statement : expression); - } - function arrowBodyNoComma(type2) { - findFatArrow(cx.stream, cx.state); - return pass(type2 == "{" ? statement : expressionNoComma); - } - function maybeTarget(noComma) { - return function (type2) { - if (type2 == ".") return cont(noComma ? targetNoComma : target);else if (type2 == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma);else return pass(noComma ? expressionNoComma : expression); - }; - } - function target(_, value) { - if (value == "target") { - cx.marked = "keyword"; - return cont(maybeoperatorComma); - } - } - function targetNoComma(_, value) { - if (value == "target") { - cx.marked = "keyword"; - return cont(maybeoperatorNoComma); - } - } - function maybelabel(type2) { - if (type2 == ":") return cont(poplex, statement); - return pass(maybeoperatorComma, expect(";"), poplex); - } - function property(type2) { - if (type2 == "variable") { - cx.marked = "property"; - return cont(); - } - } - function objprop(type2, value) { - if (type2 == "async") { - cx.marked = "property"; - return cont(objprop); - } else if (type2 == "variable" || cx.style == "keyword") { - cx.marked = "property"; - if (value == "get" || value == "set") return cont(getterSetter); - var m; - if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false))) cx.state.fatArrowAt = cx.stream.pos + m[0].length; - return cont(afterprop); - } else if (type2 == "number" || type2 == "string") { - cx.marked = jsonldMode ? "property" : cx.style + " property"; - return cont(afterprop); - } else if (type2 == "jsonld-keyword") { - return cont(afterprop); - } else if (isTS && isModifier(value)) { - cx.marked = "keyword"; - return cont(objprop); - } else if (type2 == "[") { - return cont(expression, maybetype, expect("]"), afterprop); - } else if (type2 == "spread") { - return cont(expressionNoComma, afterprop); - } else if (value == "*") { - cx.marked = "keyword"; - return cont(objprop); - } else if (type2 == ":") { - return pass(afterprop); - } - } - function getterSetter(type2) { - if (type2 != "variable") return pass(afterprop); - cx.marked = "property"; - return cont(functiondef); - } - function afterprop(type2) { - if (type2 == ":") return cont(expressionNoComma); - if (type2 == "(") return pass(functiondef); - } - function commasep(what, end, sep) { - function proceed(type2, value) { - if (sep ? sep.indexOf(type2) > -1 : type2 == ",") { - var lex = cx.state.lexical; - if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; - return cont(function (type3, value2) { - if (type3 == end || value2 == end) return pass(); - return pass(what); - }, proceed); - } - if (type2 == end || value == end) return cont(); - if (sep && sep.indexOf(";") > -1) return pass(what); - return cont(expect(end)); - } - return function (type2, value) { - if (type2 == end || value == end) return cont(); - return pass(what, proceed); - }; - } - function contCommasep(what, end, info) { - for (var i = 3; i < arguments.length; i++) cx.cc.push(arguments[i]); - return cont(pushlex(end, info), commasep(what, end), poplex); - } - function block(type2) { - if (type2 == "}") return cont(); - return pass(statement, block); - } - function maybetype(type2, value) { - if (isTS) { - if (type2 == ":") return cont(typeexpr); - if (value == "?") return cont(maybetype); - } - } - function maybetypeOrIn(type2, value) { - if (isTS && (type2 == ":" || value == "in")) return cont(typeexpr); - } - function mayberettype(type2) { - if (isTS && type2 == ":") { - if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr);else return cont(typeexpr); - } - } - function isKW(_, value) { - if (value == "is") { - cx.marked = "keyword"; - return cont(); - } - } - function typeexpr(type2, value) { - if (value == "keyof" || value == "typeof" || value == "infer" || value == "readonly") { - cx.marked = "keyword"; - return cont(value == "typeof" ? expressionNoComma : typeexpr); - } - if (type2 == "variable" || value == "void") { - cx.marked = "type"; - return cont(afterType); - } - if (value == "|" || value == "&") return cont(typeexpr); - if (type2 == "string" || type2 == "number" || type2 == "atom") return cont(afterType); - if (type2 == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType); - if (type2 == "{") return cont(pushlex("}"), typeprops, poplex, afterType); - if (type2 == "(") return cont(commasep(typearg, ")"), maybeReturnType, afterType); - if (type2 == "<") return cont(commasep(typeexpr, ">"), typeexpr); - if (type2 == "quasi") { - return pass(quasiType, afterType); - } - } - function maybeReturnType(type2) { - if (type2 == "=>") return cont(typeexpr); - } - function typeprops(type2) { - if (type2.match(/[\}\)\]]/)) return cont(); - if (type2 == "," || type2 == ";") return cont(typeprops); - return pass(typeprop, typeprops); - } - function typeprop(type2, value) { - if (type2 == "variable" || cx.style == "keyword") { - cx.marked = "property"; - return cont(typeprop); - } else if (value == "?" || type2 == "number" || type2 == "string") { - return cont(typeprop); - } else if (type2 == ":") { - return cont(typeexpr); - } else if (type2 == "[") { - return cont(expect("variable"), maybetypeOrIn, expect("]"), typeprop); - } else if (type2 == "(") { - return pass(functiondecl, typeprop); - } else if (!type2.match(/[;\}\)\],]/)) { - return cont(); - } - } - function quasiType(type2, value) { - if (type2 != "quasi") return pass(); - if (value.slice(value.length - 2) != "${") return cont(quasiType); - return cont(typeexpr, continueQuasiType); - } - function continueQuasiType(type2) { - if (type2 == "}") { - cx.marked = "string-2"; - cx.state.tokenize = tokenQuasi; - return cont(quasiType); - } - } - function typearg(type2, value) { - if (type2 == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg); - if (type2 == ":") return cont(typeexpr); - if (type2 == "spread") return cont(typearg); - return pass(typeexpr); - } - function afterType(type2, value) { - if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType); - if (value == "|" || type2 == "." || value == "&") return cont(typeexpr); - if (type2 == "[") return cont(typeexpr, expect("]"), afterType); - if (value == "extends" || value == "implements") { - cx.marked = "keyword"; - return cont(typeexpr); - } - if (value == "?") return cont(typeexpr, expect(":"), typeexpr); - } - function maybeTypeArgs(_, value) { - if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType); - } - function typeparam() { - return pass(typeexpr, maybeTypeDefault); - } - function maybeTypeDefault(_, value) { - if (value == "=") return cont(typeexpr); - } - function vardef(_, value) { - if (value == "enum") { - cx.marked = "keyword"; - return cont(enumdef); - } - return pass(pattern, maybetype, maybeAssign, vardefCont); - } - function pattern(type2, value) { - if (isTS && isModifier(value)) { - cx.marked = "keyword"; - return cont(pattern); - } - if (type2 == "variable") { - register(value); - return cont(); - } - if (type2 == "spread") return cont(pattern); - if (type2 == "[") return contCommasep(eltpattern, "]"); - if (type2 == "{") return contCommasep(proppattern, "}"); - } - function proppattern(type2, value) { - if (type2 == "variable" && !cx.stream.match(/^\s*:/, false)) { - register(value); - return cont(maybeAssign); - } - if (type2 == "variable") cx.marked = "property"; - if (type2 == "spread") return cont(pattern); - if (type2 == "}") return pass(); - if (type2 == "[") return cont(expression, expect("]"), expect(":"), proppattern); - return cont(expect(":"), pattern, maybeAssign); - } - function eltpattern() { - return pass(pattern, maybeAssign); - } - function maybeAssign(_type, value) { - if (value == "=") return cont(expressionNoComma); - } - function vardefCont(type2) { - if (type2 == ",") return cont(vardef); - } - function maybeelse(type2, value) { - if (type2 == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); - } - function forspec(type2, value) { - if (value == "await") return cont(forspec); - if (type2 == "(") return cont(pushlex(")"), forspec1, poplex); - } - function forspec1(type2) { - if (type2 == "var") return cont(vardef, forspec2); - if (type2 == "variable") return cont(forspec2); - return pass(forspec2); - } - function forspec2(type2, value) { - if (type2 == ")") return cont(); - if (type2 == ";") return cont(forspec2); - if (value == "in" || value == "of") { - cx.marked = "keyword"; - return cont(expression, forspec2); - } - return pass(expression, forspec2); - } - function functiondef(type2, value) { - if (value == "*") { - cx.marked = "keyword"; - return cont(functiondef); - } - if (type2 == "variable") { - register(value); - return cont(functiondef); - } - if (type2 == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext); - if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef); - } - function functiondecl(type2, value) { - if (value == "*") { - cx.marked = "keyword"; - return cont(functiondecl); - } - if (type2 == "variable") { - register(value); - return cont(functiondecl); - } - if (type2 == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, popcontext); - if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondecl); - } - function typename(type2, value) { - if (type2 == "keyword" || type2 == "variable") { - cx.marked = "type"; - return cont(typename); - } else if (value == "<") { - return cont(pushlex(">"), commasep(typeparam, ">"), poplex); - } - } - function funarg(type2, value) { - if (value == "@") cont(expression, funarg); - if (type2 == "spread") return cont(funarg); - if (isTS && isModifier(value)) { - cx.marked = "keyword"; - return cont(funarg); - } - if (isTS && type2 == "this") return cont(maybetype, maybeAssign); - return pass(pattern, maybetype, maybeAssign); - } - function classExpression(type2, value) { - if (type2 == "variable") return className(type2, value); - return classNameAfter(type2, value); - } - function className(type2, value) { - if (type2 == "variable") { - register(value); - return cont(classNameAfter); - } - } - function classNameAfter(type2, value) { - if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter); - if (value == "extends" || value == "implements" || isTS && type2 == ",") { - if (value == "implements") cx.marked = "keyword"; - return cont(isTS ? typeexpr : expression, classNameAfter); - } - if (type2 == "{") return cont(pushlex("}"), classBody, poplex); - } - function classBody(type2, value) { - if (type2 == "async" || type2 == "variable" && (value == "static" || value == "get" || value == "set" || isTS && isModifier(value)) && cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false)) { - cx.marked = "keyword"; - return cont(classBody); - } - if (type2 == "variable" || cx.style == "keyword") { - cx.marked = "property"; - return cont(classfield, classBody); - } - if (type2 == "number" || type2 == "string") return cont(classfield, classBody); - if (type2 == "[") return cont(expression, maybetype, expect("]"), classfield, classBody); - if (value == "*") { - cx.marked = "keyword"; - return cont(classBody); - } - if (isTS && type2 == "(") return pass(functiondecl, classBody); - if (type2 == ";" || type2 == ",") return cont(classBody); - if (type2 == "}") return cont(); - if (value == "@") return cont(expression, classBody); - } - function classfield(type2, value) { - if (value == "!") return cont(classfield); - if (value == "?") return cont(classfield); - if (type2 == ":") return cont(typeexpr, maybeAssign); - if (value == "=") return cont(expressionNoComma); - var context = cx.state.lexical.prev, - isInterface = context && context.info == "interface"; - return pass(isInterface ? functiondecl : functiondef); - } - function afterExport(type2, value) { - if (value == "*") { - cx.marked = "keyword"; - return cont(maybeFrom, expect(";")); - } - if (value == "default") { - cx.marked = "keyword"; - return cont(expression, expect(";")); - } - if (type2 == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";")); - return pass(statement); - } - function exportField(type2, value) { - if (value == "as") { - cx.marked = "keyword"; - return cont(expect("variable")); - } - if (type2 == "variable") return pass(expressionNoComma, exportField); - } - function afterImport(type2) { - if (type2 == "string") return cont(); - if (type2 == "(") return pass(expression); - if (type2 == ".") return pass(maybeoperatorComma); - return pass(importSpec, maybeMoreImports, maybeFrom); - } - function importSpec(type2, value) { - if (type2 == "{") return contCommasep(importSpec, "}"); - if (type2 == "variable") register(value); - if (value == "*") cx.marked = "keyword"; - return cont(maybeAs); - } - function maybeMoreImports(type2) { - if (type2 == ",") return cont(importSpec, maybeMoreImports); - } - function maybeAs(_type, value) { - if (value == "as") { - cx.marked = "keyword"; - return cont(importSpec); - } - } - function maybeFrom(_type, value) { - if (value == "from") { - cx.marked = "keyword"; - return cont(expression); - } - } - function arrayLiteral(type2) { - if (type2 == "]") return cont(); - return pass(commasep(expressionNoComma, "]")); - } - function enumdef() { - return pass(pushlex("form"), pattern, expect("{"), pushlex("}"), commasep(enummember, "}"), poplex, poplex); - } - function enummember() { - return pass(pattern, maybeAssign); - } - function isContinuedStatement(state, textAfter) { - return state.lastType == "operator" || state.lastType == "," || isOperatorChar.test(textAfter.charAt(0)) || /[,.]/.test(textAfter.charAt(0)); - } - function expressionAllowed(stream, state, backUp) { - return state.tokenize == tokenBase && /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) || state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))); - } - return { - startState: function (basecolumn) { - var state = { - tokenize: tokenBase, - lastType: "sof", - cc: [], - lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), - localVars: parserConfig.localVars, - context: parserConfig.localVars && new Context(null, null, false), - indented: basecolumn || 0 - }; - if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars; - return state; - }, - token: function (stream, state) { - if (stream.sol()) { - if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; - state.indented = stream.indentation(); - findFatArrow(stream, state); - } - if (state.tokenize != tokenComment && stream.eatSpace()) return null; - var style = state.tokenize(stream, state); - if (type == "comment") return style; - state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; - return parseJS(state, style, type, content, stream); - }, - indent: function (state, textAfter) { - if (state.tokenize == tokenComment || state.tokenize == tokenQuasi) return CodeMirror.Pass; - if (state.tokenize != tokenBase) return 0; - var firstChar = textAfter && textAfter.charAt(0), - lexical = state.lexical, - top; - if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { - var c = state.cc[i]; - if (c == poplex) lexical = lexical.prev;else if (c != maybeelse && c != popcontext) break; - } - while ((lexical.type == "stat" || lexical.type == "form") && (firstChar == "}" || (top = state.cc[state.cc.length - 1]) && (top == maybeoperatorComma || top == maybeoperatorNoComma) && !/^[,\.=+\-*:?[\(]/.test(textAfter))) lexical = lexical.prev; - if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") lexical = lexical.prev; - var type2 = lexical.type, - closing = firstChar == type2; - if (type2 == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0);else if (type2 == "form" && firstChar == "{") return lexical.indented;else if (type2 == "form") return lexical.indented + indentUnit;else if (type2 == "stat") return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);else if (lexical.align) return lexical.column + (closing ? 0 : 1);else return lexical.indented + (closing ? 0 : indentUnit); - }, - electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, - blockCommentStart: jsonMode ? null : "/*", - blockCommentEnd: jsonMode ? null : "*/", - blockCommentContinue: jsonMode ? null : " * ", - lineComment: jsonMode ? null : "//", - fold: "brace", - closeBrackets: "()[]{}''\"\"``", - helperType: jsonMode ? "json" : "javascript", - jsonldMode, - jsonMode, - expressionAllowed, - skipExpression: function (state) { - parseJS(state, "atom", "atom", "true", new CodeMirror.StringStream("", 2, null)); - } - }; - }); - CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); - CodeMirror.defineMIME("text/javascript", "javascript"); - CodeMirror.defineMIME("text/ecmascript", "javascript"); - CodeMirror.defineMIME("application/javascript", "javascript"); - CodeMirror.defineMIME("application/x-javascript", "javascript"); - CodeMirror.defineMIME("application/ecmascript", "javascript"); - CodeMirror.defineMIME("application/json", { - name: "javascript", - json: true - }); - CodeMirror.defineMIME("application/x-json", { - name: "javascript", - json: true - }); - CodeMirror.defineMIME("application/manifest+json", { - name: "javascript", - json: true - }); - CodeMirror.defineMIME("application/ld+json", { - name: "javascript", - jsonld: true - }); - CodeMirror.defineMIME("text/typescript", { - name: "javascript", - typescript: true - }); - CodeMirror.defineMIME("application/typescript", { - name: "javascript", - typescript: true - }); - }); -})(); -var javascriptExports = javascript$2.exports; -const javascript = /* @__PURE__ */codemirror.getDefaultExportFromCjs(javascriptExports); -const javascript$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: javascript -}, [javascriptExports]); -exports.javascript = javascript$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/jump-to-line.cjs.js": -/*!*****************************************************!*\ - !*** ../../graphiql-react/dist/jump-to-line.cjs.js ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -const dialog = __webpack_require__(/*! ./dialog.cjs.js */ "../../graphiql-react/dist/dialog.cjs.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var jumpToLine$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror(), dialog.dialogExports); - })(function (CodeMirror) { - CodeMirror.defineOption("search", { - bottom: false - }); - function dialog2(cm, text, shortText, deflt, f) { - if (cm.openDialog) cm.openDialog(text, f, { - value: deflt, - selectValueOnOpen: true, - bottom: cm.options.search.bottom - });else f(prompt(shortText, deflt)); - } - function getJumpDialog(cm) { - return cm.phrase("Jump to line:") + ' ' + cm.phrase("(Use line:column or scroll% syntax)") + ""; - } - function interpretLine(cm, string) { - var num = Number(string); - if (/^[-+]/.test(string)) return cm.getCursor().line + num;else return num - 1; - } - CodeMirror.commands.jumpToLine = function (cm) { - var cur = cm.getCursor(); - dialog2(cm, getJumpDialog(cm), cm.phrase("Jump to line:"), cur.line + 1 + ":" + cur.ch, function (posStr) { - if (!posStr) return; - var match; - if (match = /^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(posStr)) { - cm.setCursor(interpretLine(cm, match[1]), Number(match[2])); - } else if (match = /^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(posStr)) { - var line = Math.round(cm.lineCount() * Number(match[1]) / 100); - if (/^[-+]/.test(match[1])) line = cur.line + line + 1; - cm.setCursor(line - 1, cur.ch); - } else if (match = /^\s*\:?\s*([\+\-]?\d+)\s*/.exec(posStr)) { - cm.setCursor(interpretLine(cm, match[1]), cur.ch); - } - }); - }; - CodeMirror.keyMap["default"]["Alt-G"] = "jumpToLine"; - }); -})(); -var jumpToLineExports = jumpToLine$2.exports; -const jumpToLine = /* @__PURE__ */codemirror.getDefaultExportFromCjs(jumpToLineExports); -const jumpToLine$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: jumpToLine -}, [jumpToLineExports]); -exports.jumpToLine = jumpToLine$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/jump.cjs.js": -/*!*********************************************!*\ - !*** ../../graphiql-react/dist/jump.cjs.js ***! - \*********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const SchemaReference = __webpack_require__(/*! ./SchemaReference.cjs.js */ "../../graphiql-react/dist/SchemaReference.cjs.js"); -codemirror.CodeMirror.defineOption("jump", false, (cm, options, old) => { - if (old && old !== codemirror.CodeMirror.Init) { - const oldOnMouseOver = cm.state.jump.onMouseOver; - codemirror.CodeMirror.off(cm.getWrapperElement(), "mouseover", oldOnMouseOver); - const oldOnMouseOut = cm.state.jump.onMouseOut; - codemirror.CodeMirror.off(cm.getWrapperElement(), "mouseout", oldOnMouseOut); - codemirror.CodeMirror.off(document, "keydown", cm.state.jump.onKeyDown); - delete cm.state.jump; - } - if (options) { - const state = cm.state.jump = { - options, - onMouseOver: onMouseOver.bind(null, cm), - onMouseOut: onMouseOut.bind(null, cm), - onKeyDown: onKeyDown.bind(null, cm) - }; - codemirror.CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); - codemirror.CodeMirror.on(cm.getWrapperElement(), "mouseout", state.onMouseOut); - codemirror.CodeMirror.on(document, "keydown", state.onKeyDown); - } -}); -function onMouseOver(cm, event) { - const target = event.target || event.srcElement; - if (!(target instanceof HTMLElement)) { - return; - } - if ((target === null || target === void 0 ? void 0 : target.nodeName) !== "SPAN") { - return; - } - const box = target.getBoundingClientRect(); - const cursor = { - left: (box.left + box.right) / 2, - top: (box.top + box.bottom) / 2 - }; - cm.state.jump.cursor = cursor; - if (cm.state.jump.isHoldingModifier) { - enableJumpMode(cm); - } -} -function onMouseOut(cm) { - if (!cm.state.jump.isHoldingModifier && cm.state.jump.cursor) { - cm.state.jump.cursor = null; - return; - } - if (cm.state.jump.isHoldingModifier && cm.state.jump.marker) { - disableJumpMode(cm); - } -} -function onKeyDown(cm, event) { - if (cm.state.jump.isHoldingModifier || !isJumpModifier(event.key)) { - return; - } - cm.state.jump.isHoldingModifier = true; - if (cm.state.jump.cursor) { - enableJumpMode(cm); - } - const onKeyUp = upEvent => { - if (upEvent.code !== event.code) { - return; - } - cm.state.jump.isHoldingModifier = false; - if (cm.state.jump.marker) { - disableJumpMode(cm); - } - codemirror.CodeMirror.off(document, "keyup", onKeyUp); - codemirror.CodeMirror.off(document, "click", onClick); - cm.off("mousedown", onMouseDown); - }; - const onClick = clickEvent => { - const { - destination, - options - } = cm.state.jump; - if (destination) { - options.onClick(destination, clickEvent); - } - }; - const onMouseDown = (_, downEvent) => { - if (cm.state.jump.destination) { - downEvent.codemirrorIgnore = true; - } - }; - codemirror.CodeMirror.on(document, "keyup", onKeyUp); - codemirror.CodeMirror.on(document, "click", onClick); - cm.on("mousedown", onMouseDown); -} -const isMac = typeof navigator !== "undefined" && navigator.userAgent.includes("Mac"); -function isJumpModifier(key) { - return key === (isMac ? "Meta" : "Control"); -} -function enableJumpMode(cm) { - if (cm.state.jump.marker) { - return; - } - const { - cursor, - options - } = cm.state.jump; - const pos = cm.coordsChar(cursor); - const token = cm.getTokenAt(pos, true); - const getDestination = options.getDestination || cm.getHelper(pos, "jump"); - if (getDestination) { - const destination = getDestination(token, options, cm); - if (destination) { - const marker = cm.markText({ - line: pos.line, - ch: token.start - }, { - line: pos.line, - ch: token.end - }, { - className: "CodeMirror-jump-token" - }); - cm.state.jump.marker = marker; - cm.state.jump.destination = destination; - } - } -} -function disableJumpMode(cm) { - const { - marker - } = cm.state.jump; - cm.state.jump.marker = null; - cm.state.jump.destination = null; - marker.clear(); -} -codemirror.CodeMirror.registerHelper("jump", "graphql", (token, options) => { - if (!options.schema || !options.onClick || !token.state) { - return; - } - const { - state - } = token; - const { - kind, - step - } = state; - const typeInfo = SchemaReference.getTypeInfo(options.schema, state); - if (kind === "Field" && step === 0 && typeInfo.fieldDef || kind === "AliasedField" && step === 2 && typeInfo.fieldDef) { - return SchemaReference.getFieldReference(typeInfo); - } - if (kind === "Directive" && step === 1 && typeInfo.directiveDef) { - return SchemaReference.getDirectiveReference(typeInfo); - } - if (kind === "Argument" && step === 0 && typeInfo.argDef) { - return SchemaReference.getArgumentReference(typeInfo); - } - if (kind === "EnumValue" && typeInfo.enumValue) { - return SchemaReference.getEnumValueReference(typeInfo); - } - if (kind === "NamedType" && typeInfo.type) { - return SchemaReference.getTypeReference(typeInfo); - } -}); - -/***/ }), - -/***/ "../../graphiql-react/dist/lint.cjs.js": -/*!*********************************************!*\ - !*** ../../graphiql-react/dist/lint.cjs.js ***! - \*********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var lint$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - var GUTTER_ID = "CodeMirror-lint-markers"; - var LINT_LINE_ID = "CodeMirror-lint-line-"; - function showTooltip(cm, e, content) { - var tt = document.createElement("div"); - tt.className = "CodeMirror-lint-tooltip cm-s-" + cm.options.theme; - tt.appendChild(content.cloneNode(true)); - if (cm.state.lint.options.selfContain) cm.getWrapperElement().appendChild(tt);else document.body.appendChild(tt); - function position(e2) { - if (!tt.parentNode) return CodeMirror.off(document, "mousemove", position); - tt.style.top = Math.max(0, e2.clientY - tt.offsetHeight - 5) + "px"; - tt.style.left = e2.clientX + 5 + "px"; - } - CodeMirror.on(document, "mousemove", position); - position(e); - if (tt.style.opacity != null) tt.style.opacity = 1; - return tt; - } - function rm(elt) { - if (elt.parentNode) elt.parentNode.removeChild(elt); - } - function hideTooltip(tt) { - if (!tt.parentNode) return; - if (tt.style.opacity == null) rm(tt); - tt.style.opacity = 0; - setTimeout(function () { - rm(tt); - }, 600); - } - function showTooltipFor(cm, e, content, node) { - var tooltip = showTooltip(cm, e, content); - function hide() { - CodeMirror.off(node, "mouseout", hide); - if (tooltip) { - hideTooltip(tooltip); - tooltip = null; - } - } - var poll = setInterval(function () { - if (tooltip) for (var n = node;; n = n.parentNode) { - if (n && n.nodeType == 11) n = n.host; - if (n == document.body) return; - if (!n) { - hide(); - break; - } - } - if (!tooltip) return clearInterval(poll); - }, 400); - CodeMirror.on(node, "mouseout", hide); - } - function LintState(cm, conf, hasGutter) { - this.marked = []; - if (conf instanceof Function) conf = { - getAnnotations: conf - }; - if (!conf || conf === true) conf = {}; - this.options = {}; - this.linterOptions = conf.options || {}; - for (var prop in defaults) this.options[prop] = defaults[prop]; - for (var prop in conf) { - if (defaults.hasOwnProperty(prop)) { - if (conf[prop] != null) this.options[prop] = conf[prop]; - } else if (!conf.options) { - this.linterOptions[prop] = conf[prop]; - } - } - this.timeout = null; - this.hasGutter = hasGutter; - this.onMouseOver = function (e) { - onMouseOver(cm, e); - }; - this.waitingFor = 0; - } - var defaults = { - highlightLines: false, - tooltips: true, - delay: 500, - lintOnChange: true, - getAnnotations: null, - async: false, - selfContain: null, - formatAnnotation: null, - onUpdateLinting: null - }; - function clearMarks(cm) { - var state = cm.state.lint; - if (state.hasGutter) cm.clearGutter(GUTTER_ID); - if (state.options.highlightLines) clearErrorLines(cm); - for (var i = 0; i < state.marked.length; ++i) state.marked[i].clear(); - state.marked.length = 0; - } - function clearErrorLines(cm) { - cm.eachLine(function (line) { - var has = line.wrapClass && /\bCodeMirror-lint-line-\w+\b/.exec(line.wrapClass); - if (has) cm.removeLineClass(line, "wrap", has[0]); - }); - } - function makeMarker(cm, labels, severity, multiple, tooltips) { - var marker = document.createElement("div"), - inner = marker; - marker.className = "CodeMirror-lint-marker CodeMirror-lint-marker-" + severity; - if (multiple) { - inner = marker.appendChild(document.createElement("div")); - inner.className = "CodeMirror-lint-marker CodeMirror-lint-marker-multiple"; - } - if (tooltips != false) CodeMirror.on(inner, "mouseover", function (e) { - showTooltipFor(cm, e, labels, inner); - }); - return marker; - } - function getMaxSeverity(a, b) { - if (a == "error") return a;else return b; - } - function groupByLine(annotations) { - var lines = []; - for (var i = 0; i < annotations.length; ++i) { - var ann = annotations[i], - line = ann.from.line; - (lines[line] || (lines[line] = [])).push(ann); - } - return lines; - } - function annotationTooltip(ann) { - var severity = ann.severity; - if (!severity) severity = "error"; - var tip = document.createElement("div"); - tip.className = "CodeMirror-lint-message CodeMirror-lint-message-" + severity; - if (typeof ann.messageHTML != "undefined") { - tip.innerHTML = ann.messageHTML; - } else { - tip.appendChild(document.createTextNode(ann.message)); - } - return tip; - } - function lintAsync(cm, getAnnotations) { - var state = cm.state.lint; - var id = ++state.waitingFor; - function abort() { - id = -1; - cm.off("change", abort); - } - cm.on("change", abort); - getAnnotations(cm.getValue(), function (annotations, arg2) { - cm.off("change", abort); - if (state.waitingFor != id) return; - if (arg2 && annotations instanceof CodeMirror) annotations = arg2; - cm.operation(function () { - updateLinting(cm, annotations); - }); - }, state.linterOptions, cm); - } - function startLinting(cm) { - var state = cm.state.lint; - if (!state) return; - var options = state.options; - var getAnnotations = options.getAnnotations || cm.getHelper(CodeMirror.Pos(0, 0), "lint"); - if (!getAnnotations) return; - if (options.async || getAnnotations.async) { - lintAsync(cm, getAnnotations); - } else { - var annotations = getAnnotations(cm.getValue(), state.linterOptions, cm); - if (!annotations) return; - if (annotations.then) annotations.then(function (issues) { - cm.operation(function () { - updateLinting(cm, issues); - }); - });else cm.operation(function () { - updateLinting(cm, annotations); - }); - } - } - function updateLinting(cm, annotationsNotSorted) { - var state = cm.state.lint; - if (!state) return; - var options = state.options; - clearMarks(cm); - var annotations = groupByLine(annotationsNotSorted); - for (var line = 0; line < annotations.length; ++line) { - var anns = annotations[line]; - if (!anns) continue; - var message = []; - anns = anns.filter(function (item) { - return message.indexOf(item.message) > -1 ? false : message.push(item.message); - }); - var maxSeverity = null; - var tipLabel = state.hasGutter && document.createDocumentFragment(); - for (var i = 0; i < anns.length; ++i) { - var ann = anns[i]; - var severity = ann.severity; - if (!severity) severity = "error"; - maxSeverity = getMaxSeverity(maxSeverity, severity); - if (options.formatAnnotation) ann = options.formatAnnotation(ann); - if (state.hasGutter) tipLabel.appendChild(annotationTooltip(ann)); - if (ann.to) state.marked.push(cm.markText(ann.from, ann.to, { - className: "CodeMirror-lint-mark CodeMirror-lint-mark-" + severity, - __annotation: ann - })); - } - if (state.hasGutter) cm.setGutterMarker(line, GUTTER_ID, makeMarker(cm, tipLabel, maxSeverity, annotations[line].length > 1, options.tooltips)); - if (options.highlightLines) cm.addLineClass(line, "wrap", LINT_LINE_ID + maxSeverity); - } - if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm); - } - function onChange(cm) { - var state = cm.state.lint; - if (!state) return; - clearTimeout(state.timeout); - state.timeout = setTimeout(function () { - startLinting(cm); - }, state.options.delay); - } - function popupTooltips(cm, annotations, e) { - var target = e.target || e.srcElement; - var tooltip = document.createDocumentFragment(); - for (var i = 0; i < annotations.length; i++) { - var ann = annotations[i]; - tooltip.appendChild(annotationTooltip(ann)); - } - showTooltipFor(cm, e, tooltip, target); - } - function onMouseOver(cm, e) { - var target = e.target || e.srcElement; - if (!/\bCodeMirror-lint-mark-/.test(target.className)) return; - var box = target.getBoundingClientRect(), - x = (box.left + box.right) / 2, - y = (box.top + box.bottom) / 2; - var spans = cm.findMarksAt(cm.coordsChar({ - left: x, - top: y - }, "client")); - var annotations = []; - for (var i = 0; i < spans.length; ++i) { - var ann = spans[i].__annotation; - if (ann) annotations.push(ann); - } - if (annotations.length) popupTooltips(cm, annotations, e); - } - CodeMirror.defineOption("lint", false, function (cm, val, old) { - if (old && old != CodeMirror.Init) { - clearMarks(cm); - if (cm.state.lint.options.lintOnChange !== false) cm.off("change", onChange); - CodeMirror.off(cm.getWrapperElement(), "mouseover", cm.state.lint.onMouseOver); - clearTimeout(cm.state.lint.timeout); - delete cm.state.lint; - } - if (val) { - var gutters = cm.getOption("gutters"), - hasLintGutter = false; - for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true; - var state = cm.state.lint = new LintState(cm, val, hasLintGutter); - if (state.options.lintOnChange) cm.on("change", onChange); - if (state.options.tooltips != false && state.options.tooltips != "gutter") CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); - startLinting(cm); - } - }); - CodeMirror.defineExtension("performLint", function () { - startLinting(this); - }); - }); -})(); -var lintExports = lint$2.exports; -const lint = /* @__PURE__ */codemirror.getDefaultExportFromCjs(lintExports); -const lint$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: lint -}, [lintExports]); -exports.lint = lint$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/lint.cjs2.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/lint.cjs2.js ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); -const SEVERITY = ["error", "warning", "information", "hint"]; -const TYPE = { - "GraphQL: Validation": "validation", - "GraphQL: Deprecation": "deprecation", - "GraphQL: Syntax": "syntax" -}; -codemirror.CodeMirror.registerHelper("lint", "graphql", (text, options) => { - const { - schema, - validationRules, - externalFragments - } = options; - const rawResults = graphqlLanguageService.getDiagnostics(text, schema, validationRules, void 0, externalFragments); - const results = rawResults.map(error => ({ - message: error.message, - severity: error.severity ? SEVERITY[error.severity - 1] : SEVERITY[0], - type: error.source ? TYPE[error.source] : void 0, - from: codemirror.CodeMirror.Pos(error.range.start.line, error.range.start.character), - to: codemirror.CodeMirror.Pos(error.range.end.line, error.range.end.character) - })); - return results; -}); - -/***/ }), - -/***/ "../../graphiql-react/dist/lint.cjs3.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/lint.cjs3.js ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -function jsonParse(str) { - string = str; - strLen = str.length; - start = end = lastEnd = -1; - ch(); - lex(); - const ast = parseObj(); - expect("EOF"); - return ast; -} -let string; -let strLen; -let start; -let end; -let lastEnd; -let code; -let kind; -function parseObj() { - const nodeStart = start; - const members = []; - expect("{"); - if (!skip("}")) { - do { - members.push(parseMember()); - } while (skip(",")); - expect("}"); - } - return { - kind: "Object", - start: nodeStart, - end: lastEnd, - members - }; -} -function parseMember() { - const nodeStart = start; - const key = kind === "String" ? curToken() : null; - expect("String"); - expect(":"); - const value = parseVal(); - return { - kind: "Member", - start: nodeStart, - end: lastEnd, - key, - value - }; -} -function parseArr() { - const nodeStart = start; - const values = []; - expect("["); - if (!skip("]")) { - do { - values.push(parseVal()); - } while (skip(",")); - expect("]"); - } - return { - kind: "Array", - start: nodeStart, - end: lastEnd, - values - }; -} -function parseVal() { - switch (kind) { - case "[": - return parseArr(); - case "{": - return parseObj(); - case "String": - case "Number": - case "Boolean": - case "Null": - const token = curToken(); - lex(); - return token; - } - expect("Value"); -} -function curToken() { - return { - kind, - start, - end, - value: JSON.parse(string.slice(start, end)) - }; -} -function expect(str) { - if (kind === str) { - lex(); - return; - } - let found; - if (kind === "EOF") { - found = "[end of file]"; - } else if (end - start > 1) { - found = "`" + string.slice(start, end) + "`"; - } else { - const match = string.slice(start).match(/^.+?\b/); - found = "`" + (match ? match[0] : string[start]) + "`"; - } - throw syntaxError(`Expected ${str} but found ${found}.`); -} -class JSONSyntaxError extends Error { - constructor(message, position) { - super(message); - this.position = position; - } -} -function syntaxError(message) { - return new JSONSyntaxError(message, { - start, - end - }); -} -function skip(k) { - if (kind === k) { - lex(); - return true; - } -} -function ch() { - if (end < strLen) { - end++; - code = end === strLen ? 0 : string.charCodeAt(end); - } - return code; -} -function lex() { - lastEnd = end; - while (code === 9 || code === 10 || code === 13 || code === 32) { - ch(); - } - if (code === 0) { - kind = "EOF"; - return; - } - start = end; - switch (code) { - case 34: - kind = "String"; - return readString(); - case 45: - case 48: - case 49: - case 50: - case 51: - case 52: - case 53: - case 54: - case 55: - case 56: - case 57: - kind = "Number"; - return readNumber(); - case 102: - if (string.slice(start, start + 5) !== "false") { - break; - } - end += 4; - ch(); - kind = "Boolean"; - return; - case 110: - if (string.slice(start, start + 4) !== "null") { - break; - } - end += 3; - ch(); - kind = "Null"; - return; - case 116: - if (string.slice(start, start + 4) !== "true") { - break; - } - end += 3; - ch(); - kind = "Boolean"; - return; - } - kind = string[start]; - ch(); -} -function readString() { - ch(); - while (code !== 34 && code > 31) { - if (code === 92) { - code = ch(); - switch (code) { - case 34: - case 47: - case 92: - case 98: - case 102: - case 110: - case 114: - case 116: - ch(); - break; - case 117: - ch(); - readHex(); - readHex(); - readHex(); - readHex(); - break; - default: - throw syntaxError("Bad character escape sequence."); - } - } else if (end === strLen) { - throw syntaxError("Unterminated string."); - } else { - ch(); - } - } - if (code === 34) { - ch(); - return; - } - throw syntaxError("Unterminated string."); -} -function readHex() { - if (code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102) { - return ch(); - } - throw syntaxError("Expected hexadecimal digit."); -} -function readNumber() { - if (code === 45) { - ch(); - } - if (code === 48) { - ch(); - } else { - readDigits(); - } - if (code === 46) { - ch(); - readDigits(); - } - if (code === 69 || code === 101) { - code = ch(); - if (code === 43 || code === 45) { - ch(); - } - readDigits(); - } -} -function readDigits() { - if (code < 48 || code > 57) { - throw syntaxError("Expected decimal digit."); - } - do { - ch(); - } while (code >= 48 && code <= 57); -} -codemirror.CodeMirror.registerHelper("lint", "graphql-variables", (text, options, editor) => { - if (!text) { - return []; - } - let ast; - try { - ast = jsonParse(text); - } catch (error) { - if (error instanceof JSONSyntaxError) { - return [lintError(editor, error.position, error.message)]; - } - throw error; - } - const { - variableToType - } = options; - if (!variableToType) { - return []; - } - return validateVariables(editor, variableToType, ast); -}); -function validateVariables(editor, variableToType, variablesAST) { - var _a; - const errors = []; - for (const member of variablesAST.members) { - if (member) { - const variableName = (_a = member.key) === null || _a === void 0 ? void 0 : _a.value; - const type = variableToType[variableName]; - if (type) { - for (const [node, message] of validateValue(type, member.value)) { - errors.push(lintError(editor, node, message)); - } - } else { - errors.push(lintError(editor, member.key, `Variable "$${variableName}" does not appear in any GraphQL query.`)); - } - } - } - return errors; -} -function validateValue(type, valueAST) { - if (!type || !valueAST) { - return []; - } - if (type instanceof graphql.GraphQLNonNull) { - if (valueAST.kind === "Null") { - return [[valueAST, `Type "${type}" is non-nullable and cannot be null.`]]; - } - return validateValue(type.ofType, valueAST); - } - if (valueAST.kind === "Null") { - return []; - } - if (type instanceof graphql.GraphQLList) { - const itemType = type.ofType; - if (valueAST.kind === "Array") { - const values = valueAST.values || []; - return mapCat(values, item => validateValue(itemType, item)); - } - return validateValue(itemType, valueAST); - } - if (type instanceof graphql.GraphQLInputObjectType) { - if (valueAST.kind !== "Object") { - return [[valueAST, `Type "${type}" must be an Object.`]]; - } - const providedFields = /* @__PURE__ */Object.create(null); - const fieldErrors = mapCat(valueAST.members, member => { - var _a; - const fieldName = (_a = member === null || member === void 0 ? void 0 : member.key) === null || _a === void 0 ? void 0 : _a.value; - providedFields[fieldName] = true; - const inputField = type.getFields()[fieldName]; - if (!inputField) { - return [[member.key, `Type "${type}" does not have a field "${fieldName}".`]]; - } - const fieldType = inputField ? inputField.type : void 0; - return validateValue(fieldType, member.value); - }); - for (const fieldName of Object.keys(type.getFields())) { - const field = type.getFields()[fieldName]; - if (!providedFields[fieldName] && field.type instanceof graphql.GraphQLNonNull && !field.defaultValue) { - fieldErrors.push([valueAST, `Object of type "${type}" is missing required field "${fieldName}".`]); - } - } - return fieldErrors; - } - if (type.name === "Boolean" && valueAST.kind !== "Boolean" || type.name === "String" && valueAST.kind !== "String" || type.name === "ID" && valueAST.kind !== "Number" && valueAST.kind !== "String" || type.name === "Float" && valueAST.kind !== "Number" || type.name === "Int" && (valueAST.kind !== "Number" || (valueAST.value | 0) !== valueAST.value)) { - return [[valueAST, `Expected value of type "${type}".`]]; - } - if ((type instanceof graphql.GraphQLEnumType || type instanceof graphql.GraphQLScalarType) && (valueAST.kind !== "String" && valueAST.kind !== "Number" && valueAST.kind !== "Boolean" && valueAST.kind !== "Null" || isNullish(type.parseValue(valueAST.value)))) { - return [[valueAST, `Expected value of type "${type}".`]]; - } - return []; -} -function lintError(editor, node, message) { - return { - message, - severity: "error", - type: "validation", - from: editor.posFromIndex(node.start), - to: editor.posFromIndex(node.end) - }; -} -function isNullish(value) { - return value === null || value === void 0 || value !== value; -} -function mapCat(array, mapper) { - return Array.prototype.concat.apply([], array.map(mapper)); -} - -/***/ }), - -/***/ "../../graphiql-react/dist/matchbrackets.cjs.js": -/*!******************************************************!*\ - !*** ../../graphiql-react/dist/matchbrackets.cjs.js ***! - \******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -const matchbrackets$2 = __webpack_require__(/*! ./matchbrackets.cjs2.js */ "../../graphiql-react/dist/matchbrackets.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var matchbracketsExports = matchbrackets$2.requireMatchbrackets(); -const matchbrackets = /* @__PURE__ */codemirror.getDefaultExportFromCjs(matchbracketsExports); -const matchbrackets$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: matchbrackets -}, [matchbracketsExports]); -exports.matchbrackets = matchbrackets$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/matchbrackets.cjs2.js": -/*!*******************************************************!*\ - !*** ../../graphiql-react/dist/matchbrackets.cjs2.js ***! - \*******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -var matchbrackets = { - exports: {} -}; -var hasRequiredMatchbrackets; -function requireMatchbrackets() { - if (hasRequiredMatchbrackets) return matchbrackets.exports; - hasRequiredMatchbrackets = 1; - (function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - var ie_lt8 = /MSIE \d/.test(navigator.userAgent) && (document.documentMode == null || document.documentMode < 8); - var Pos = CodeMirror.Pos; - var matching = { - "(": ")>", - ")": "(<", - "[": "]>", - "]": "[<", - "{": "}>", - "}": "{<", - "<": ">>", - ">": "<<" - }; - function bracketRegex(config) { - return config && config.bracketRegex || /[(){}[\]]/; - } - function findMatchingBracket(cm, where, config) { - var line = cm.getLineHandle(where.line), - pos = where.ch - 1; - var afterCursor = config && config.afterCursor; - if (afterCursor == null) afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className); - var re = bracketRegex(config); - var match = !afterCursor && pos >= 0 && re.test(line.text.charAt(pos)) && matching[line.text.charAt(pos)] || re.test(line.text.charAt(pos + 1)) && matching[line.text.charAt(++pos)]; - if (!match) return null; - var dir = match.charAt(1) == ">" ? 1 : -1; - if (config && config.strict && dir > 0 != (pos == where.ch)) return null; - var style = cm.getTokenTypeAt(Pos(where.line, pos + 1)); - var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style, config); - if (found == null) return null; - return { - from: Pos(where.line, pos), - to: found && found.pos, - match: found && found.ch == match.charAt(0), - forward: dir > 0 - }; - } - function scanForBracket(cm, where, dir, style, config) { - var maxScanLen = config && config.maxScanLineLength || 1e4; - var maxScanLines = config && config.maxScanLines || 1e3; - var stack = []; - var re = bracketRegex(config); - var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1) : Math.max(cm.firstLine() - 1, where.line - maxScanLines); - for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) { - var line = cm.getLine(lineNo); - if (!line) continue; - var pos = dir > 0 ? 0 : line.length - 1, - end = dir > 0 ? line.length : -1; - if (line.length > maxScanLen) continue; - if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0); - for (; pos != end; pos += dir) { - var ch = line.charAt(pos); - if (re.test(ch) && (style === void 0 || (cm.getTokenTypeAt(Pos(lineNo, pos + 1)) || "") == (style || ""))) { - var match = matching[ch]; - if (match && match.charAt(1) == ">" == dir > 0) stack.push(ch);else if (!stack.length) return { - pos: Pos(lineNo, pos), - ch - };else stack.pop(); - } - } - } - return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null; - } - function matchBrackets(cm, autoclear, config) { - var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1e3, - highlightNonMatching = config && config.highlightNonMatching; - var marks = [], - ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) { - var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, config); - if (match && (match.match || highlightNonMatching !== false) && cm.getLine(match.from.line).length <= maxHighlightLen) { - var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; - marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), { - className: style - })); - if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen) marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), { - className: style - })); - } - } - if (marks.length) { - if (ie_lt8 && cm.state.focused) cm.focus(); - var clear = function () { - cm.operation(function () { - for (var i2 = 0; i2 < marks.length; i2++) marks[i2].clear(); - }); - }; - if (autoclear) setTimeout(clear, 800);else return clear; - } - } - function doMatchBrackets(cm) { - cm.operation(function () { - if (cm.state.matchBrackets.currentlyHighlighted) { - cm.state.matchBrackets.currentlyHighlighted(); - cm.state.matchBrackets.currentlyHighlighted = null; - } - cm.state.matchBrackets.currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets); - }); - } - function clearHighlighted(cm) { - if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) { - cm.state.matchBrackets.currentlyHighlighted(); - cm.state.matchBrackets.currentlyHighlighted = null; - } - } - CodeMirror.defineOption("matchBrackets", false, function (cm, val, old) { - if (old && old != CodeMirror.Init) { - cm.off("cursorActivity", doMatchBrackets); - cm.off("focus", doMatchBrackets); - cm.off("blur", clearHighlighted); - clearHighlighted(cm); - } - if (val) { - cm.state.matchBrackets = typeof val == "object" ? val : {}; - cm.on("cursorActivity", doMatchBrackets); - cm.on("focus", doMatchBrackets); - cm.on("blur", clearHighlighted); - } - }); - CodeMirror.defineExtension("matchBrackets", function () { - matchBrackets(this, true); - }); - CodeMirror.defineExtension("findMatchingBracket", function (pos, config, oldConfig) { - if (oldConfig || typeof config == "boolean") { - if (!oldConfig) { - config = config ? { - strict: true - } : null; - } else { - oldConfig.strict = config; - config = oldConfig; - } - } - return findMatchingBracket(this, pos, config); - }); - CodeMirror.defineExtension("scanForBracket", function (pos, dir, style, config) { - return scanForBracket(this, pos, dir, style, config); - }); - }); - })(); - return matchbrackets.exports; -} -exports.requireMatchbrackets = requireMatchbrackets; - -/***/ }), - -/***/ "../../graphiql-react/dist/mode-indent.cjs.js": -/*!****************************************************!*\ - !*** ../../graphiql-react/dist/mode-indent.cjs.js ***! - \****************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -function indent(state, textAfter) { - var _a, _b; - const { - levels, - indentLevel - } = state; - const level = !levels || levels.length === 0 ? indentLevel : levels.at(-1) - (((_a = this.electricInput) === null || _a === void 0 ? void 0 : _a.test(textAfter)) ? 1 : 0); - return (level || 0) * (((_b = this.config) === null || _b === void 0 ? void 0 : _b.indentUnit) || 0); -} -exports.indent = indent; - -/***/ }), - -/***/ "../../graphiql-react/dist/mode.cjs.js": -/*!*********************************************!*\ - !*** ../../graphiql-react/dist/mode.cjs.js ***! - \*********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); -const modeIndent = __webpack_require__(/*! ./mode-indent.cjs.js */ "../../graphiql-react/dist/mode-indent.cjs.js"); -const graphqlModeFactory = config => { - const parser = graphqlLanguageService.onlineParser({ - eatWhitespace: stream => stream.eatWhile(graphqlLanguageService.isIgnored), - lexRules: graphqlLanguageService.LexRules, - parseRules: graphqlLanguageService.ParseRules, - editorConfig: { - tabSize: config.tabSize - } - }); - return { - config, - startState: parser.startState, - token: parser.token, - indent: modeIndent.indent, - electricInput: /^\s*[})\]]/, - fold: "brace", - lineComment: "#", - closeBrackets: { - pairs: '()[]{}""', - explode: "()[]{}" - } - }; -}; -codemirror.CodeMirror.defineMode("graphql", graphqlModeFactory); - -/***/ }), - -/***/ "../../graphiql-react/dist/mode.cjs2.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/mode.cjs2.js ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); -const modeIndent = __webpack_require__(/*! ./mode-indent.cjs.js */ "../../graphiql-react/dist/mode-indent.cjs.js"); -codemirror.CodeMirror.defineMode("graphql-variables", config => { - const parser = graphqlLanguageService.onlineParser({ - eatWhitespace: stream => stream.eatSpace(), - lexRules: LexRules, - parseRules: ParseRules, - editorConfig: { - tabSize: config.tabSize - } - }); - return { - config, - startState: parser.startState, - token: parser.token, - indent: modeIndent.indent, - electricInput: /^\s*[}\]]/, - fold: "brace", - closeBrackets: { - pairs: '[]{}""', - explode: "[]{}" - } - }; -}); -const LexRules = { - Punctuation: /^\[|]|\{|\}|:|,/, - Number: /^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/, - String: /^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/, - Keyword: /^true|false|null/ -}; -const ParseRules = { - Document: [graphqlLanguageService.p("{"), graphqlLanguageService.list("Variable", graphqlLanguageService.opt(graphqlLanguageService.p(","))), graphqlLanguageService.p("}")], - Variable: [namedKey("variable"), graphqlLanguageService.p(":"), "Value"], - Value(token) { - switch (token.kind) { - case "Number": - return "NumberValue"; - case "String": - return "StringValue"; - case "Punctuation": - switch (token.value) { - case "[": - return "ListValue"; - case "{": - return "ObjectValue"; - } - return null; - case "Keyword": - switch (token.value) { - case "true": - case "false": - return "BooleanValue"; - case "null": - return "NullValue"; - } - return null; - } - }, - NumberValue: [graphqlLanguageService.t("Number", "number")], - StringValue: [graphqlLanguageService.t("String", "string")], - BooleanValue: [graphqlLanguageService.t("Keyword", "builtin")], - NullValue: [graphqlLanguageService.t("Keyword", "keyword")], - ListValue: [graphqlLanguageService.p("["), graphqlLanguageService.list("Value", graphqlLanguageService.opt(graphqlLanguageService.p(","))), graphqlLanguageService.p("]")], - ObjectValue: [graphqlLanguageService.p("{"), graphqlLanguageService.list("ObjectField", graphqlLanguageService.opt(graphqlLanguageService.p(","))), graphqlLanguageService.p("}")], - ObjectField: [namedKey("attribute"), graphqlLanguageService.p(":"), "Value"] -}; -function namedKey(style) { - return { - style, - match: token => token.kind === "String", - update(state, token) { - state.name = token.value.slice(1, -1); - } - }; -} - -/***/ }), - -/***/ "../../graphiql-react/dist/mode.cjs3.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/mode.cjs3.js ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); -const modeIndent = __webpack_require__(/*! ./mode-indent.cjs.js */ "../../graphiql-react/dist/mode-indent.cjs.js"); -codemirror.CodeMirror.defineMode("graphql-results", config => { - const parser = graphqlLanguageService.onlineParser({ - eatWhitespace: stream => stream.eatSpace(), - lexRules: LexRules, - parseRules: ParseRules, - editorConfig: { - tabSize: config.tabSize - } - }); - return { - config, - startState: parser.startState, - token: parser.token, - indent: modeIndent.indent, - electricInput: /^\s*[}\]]/, - fold: "brace", - closeBrackets: { - pairs: '[]{}""', - explode: "[]{}" - } - }; -}); -const LexRules = { - Punctuation: /^\[|]|\{|\}|:|,/, - Number: /^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/, - String: /^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/, - Keyword: /^true|false|null/ -}; -const ParseRules = { - Document: [graphqlLanguageService.p("{"), graphqlLanguageService.list("Entry", graphqlLanguageService.p(",")), graphqlLanguageService.p("}")], - Entry: [graphqlLanguageService.t("String", "def"), graphqlLanguageService.p(":"), "Value"], - Value(token) { - switch (token.kind) { - case "Number": - return "NumberValue"; - case "String": - return "StringValue"; - case "Punctuation": - switch (token.value) { - case "[": - return "ListValue"; - case "{": - return "ObjectValue"; - } - return null; - case "Keyword": - switch (token.value) { - case "true": - case "false": - return "BooleanValue"; - case "null": - return "NullValue"; - } - return null; - } - }, - NumberValue: [graphqlLanguageService.t("Number", "number")], - StringValue: [graphqlLanguageService.t("String", "string")], - BooleanValue: [graphqlLanguageService.t("Keyword", "builtin")], - NullValue: [graphqlLanguageService.t("Keyword", "keyword")], - ListValue: [graphqlLanguageService.p("["), graphqlLanguageService.list("Value", graphqlLanguageService.p(",")), graphqlLanguageService.p("]")], - ObjectValue: [graphqlLanguageService.p("{"), graphqlLanguageService.list("ObjectField", graphqlLanguageService.p(",")), graphqlLanguageService.p("}")], - ObjectField: [graphqlLanguageService.t("String", "property"), graphqlLanguageService.p(":"), "Value"] -}; - -/***/ }), - -/***/ "../../graphiql-react/dist/search.cjs.js": -/*!***********************************************!*\ - !*** ../../graphiql-react/dist/search.cjs.js ***! - \***********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -const searchcursor = __webpack_require__(/*! ./searchcursor.cjs2.js */ "../../graphiql-react/dist/searchcursor.cjs2.js"); -const dialog = __webpack_require__(/*! ./dialog.cjs.js */ "../../graphiql-react/dist/dialog.cjs.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var search$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror(), searchcursor.requireSearchcursor(), dialog.dialogExports); - })(function (CodeMirror) { - CodeMirror.defineOption("search", { - bottom: false - }); - function searchOverlay(query, caseInsensitive) { - if (typeof query == "string") query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g");else if (!query.global) query = new RegExp(query.source, query.ignoreCase ? "gi" : "g"); - return { - token: function (stream) { - query.lastIndex = stream.pos; - var match = query.exec(stream.string); - if (match && match.index == stream.pos) { - stream.pos += match[0].length || 1; - return "searching"; - } else if (match) { - stream.pos = match.index; - } else { - stream.skipToEnd(); - } - } - }; - } - function SearchState() { - this.posFrom = this.posTo = this.lastQuery = this.query = null; - this.overlay = null; - } - function getSearchState(cm) { - return cm.state.search || (cm.state.search = new SearchState()); - } - function queryCaseInsensitive(query) { - return typeof query == "string" && query == query.toLowerCase(); - } - function getSearchCursor(cm, query, pos) { - return cm.getSearchCursor(query, pos, { - caseFold: queryCaseInsensitive(query), - multiline: true - }); - } - function persistentDialog(cm, text, deflt, onEnter, onKeyDown) { - cm.openDialog(text, onEnter, { - value: deflt, - selectValueOnOpen: true, - closeOnEnter: false, - onClose: function () { - clearSearch(cm); - }, - onKeyDown, - bottom: cm.options.search.bottom - }); - } - function dialog2(cm, text, shortText, deflt, f) { - if (cm.openDialog) cm.openDialog(text, f, { - value: deflt, - selectValueOnOpen: true, - bottom: cm.options.search.bottom - });else f(prompt(shortText, deflt)); - } - function confirmDialog(cm, text, shortText, fs) { - if (cm.openConfirm) cm.openConfirm(text, fs);else if (confirm(shortText)) fs[0](); - } - function parseString(string) { - return string.replace(/\\([nrt\\])/g, function (match, ch) { - if (ch == "n") return "\n"; - if (ch == "r") return "\r"; - if (ch == "t") return " "; - if (ch == "\\") return "\\"; - return match; - }); - } - function parseQuery(query) { - var isRE = query.match(/^\/(.*)\/([a-z]*)$/); - if (isRE) { - try { - query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); - } catch (e) {} - } else { - query = parseString(query); - } - if (typeof query == "string" ? query == "" : query.test("")) query = /x^/; - return query; - } - function startSearch(cm, state, query) { - state.queryText = query; - state.query = parseQuery(query); - cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query)); - state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query)); - cm.addOverlay(state.overlay); - if (cm.showMatchesOnScrollbar) { - if (state.annotate) { - state.annotate.clear(); - state.annotate = null; - } - state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query)); - } - } - function doSearch(cm, rev, persistent, immediate) { - var state = getSearchState(cm); - if (state.query) return findNext(cm, rev); - var q = cm.getSelection() || state.lastQuery; - if (q instanceof RegExp && q.source == "x^") q = null; - if (persistent && cm.openDialog) { - var hiding = null; - var searchNext = function (query, event) { - CodeMirror.e_stop(event); - if (!query) return; - if (query != state.queryText) { - startSearch(cm, state, query); - state.posFrom = state.posTo = cm.getCursor(); - } - if (hiding) hiding.style.opacity = 1; - findNext(cm, event.shiftKey, function (_, to) { - var dialog3; - if (to.line < 3 && document.querySelector && (dialog3 = cm.display.wrapper.querySelector(".CodeMirror-dialog")) && dialog3.getBoundingClientRect().bottom - 4 > cm.cursorCoords(to, "window").top) (hiding = dialog3).style.opacity = 0.4; - }); - }; - persistentDialog(cm, getQueryDialog(cm), q, searchNext, function (event, query) { - var keyName = CodeMirror.keyName(event); - var extra = cm.getOption("extraKeys"), - cmd = extra && extra[keyName] || CodeMirror.keyMap[cm.getOption("keyMap")][keyName]; - if (cmd == "findNext" || cmd == "findPrev" || cmd == "findPersistentNext" || cmd == "findPersistentPrev") { - CodeMirror.e_stop(event); - startSearch(cm, getSearchState(cm), query); - cm.execCommand(cmd); - } else if (cmd == "find" || cmd == "findPersistent") { - CodeMirror.e_stop(event); - searchNext(query, event); - } - }); - if (immediate && q) { - startSearch(cm, state, q); - findNext(cm, rev); - } - } else { - dialog2(cm, getQueryDialog(cm), "Search for:", q, function (query) { - if (query && !state.query) cm.operation(function () { - startSearch(cm, state, query); - state.posFrom = state.posTo = cm.getCursor(); - findNext(cm, rev); - }); - }); - } - } - function findNext(cm, rev, callback) { - cm.operation(function () { - var state = getSearchState(cm); - var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo); - if (!cursor.find(rev)) { - cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0)); - if (!cursor.find(rev)) return; - } - cm.setSelection(cursor.from(), cursor.to()); - cm.scrollIntoView({ - from: cursor.from(), - to: cursor.to() - }, 20); - state.posFrom = cursor.from(); - state.posTo = cursor.to(); - if (callback) callback(cursor.from(), cursor.to()); - }); - } - function clearSearch(cm) { - cm.operation(function () { - var state = getSearchState(cm); - state.lastQuery = state.query; - if (!state.query) return; - state.query = state.queryText = null; - cm.removeOverlay(state.overlay); - if (state.annotate) { - state.annotate.clear(); - state.annotate = null; - } - }); - } - function el(tag, attrs) { - var element = tag ? document.createElement(tag) : document.createDocumentFragment(); - for (var key in attrs) { - element[key] = attrs[key]; - } - for (var i = 2; i < arguments.length; i++) { - var child = arguments[i]; - element.appendChild(typeof child == "string" ? document.createTextNode(child) : child); - } - return element; - } - function getQueryDialog(cm) { - return el("", null, el("span", { - className: "CodeMirror-search-label" - }, cm.phrase("Search:")), " ", el("input", { - type: "text", - "style": "width: 10em", - className: "CodeMirror-search-field" - }), " ", el("span", { - style: "color: #888", - className: "CodeMirror-search-hint" - }, cm.phrase("(Use /re/ syntax for regexp search)"))); - } - function getReplaceQueryDialog(cm) { - return el("", null, " ", el("input", { - type: "text", - "style": "width: 10em", - className: "CodeMirror-search-field" - }), " ", el("span", { - style: "color: #888", - className: "CodeMirror-search-hint" - }, cm.phrase("(Use /re/ syntax for regexp search)"))); - } - function getReplacementQueryDialog(cm) { - return el("", null, el("span", { - className: "CodeMirror-search-label" - }, cm.phrase("With:")), " ", el("input", { - type: "text", - "style": "width: 10em", - className: "CodeMirror-search-field" - })); - } - function getDoReplaceConfirm(cm) { - return el("", null, el("span", { - className: "CodeMirror-search-label" - }, cm.phrase("Replace?")), " ", el("button", {}, cm.phrase("Yes")), " ", el("button", {}, cm.phrase("No")), " ", el("button", {}, cm.phrase("All")), " ", el("button", {}, cm.phrase("Stop"))); - } - function replaceAll(cm, query, text) { - cm.operation(function () { - for (var cursor = getSearchCursor(cm, query); cursor.findNext();) { - if (typeof query != "string") { - var match = cm.getRange(cursor.from(), cursor.to()).match(query); - cursor.replace(text.replace(/\$(\d)/g, function (_, i) { - return match[i]; - })); - } else cursor.replace(text); - } - }); - } - function replace(cm, all) { - if (cm.getOption("readOnly")) return; - var query = cm.getSelection() || getSearchState(cm).lastQuery; - var dialogText = all ? cm.phrase("Replace all:") : cm.phrase("Replace:"); - var fragment = el("", null, el("span", { - className: "CodeMirror-search-label" - }, dialogText), getReplaceQueryDialog(cm)); - dialog2(cm, fragment, dialogText, query, function (query2) { - if (!query2) return; - query2 = parseQuery(query2); - dialog2(cm, getReplacementQueryDialog(cm), cm.phrase("Replace with:"), "", function (text) { - text = parseString(text); - if (all) { - replaceAll(cm, query2, text); - } else { - clearSearch(cm); - var cursor = getSearchCursor(cm, query2, cm.getCursor("from")); - var advance = function () { - var start = cursor.from(), - match; - if (!(match = cursor.findNext())) { - cursor = getSearchCursor(cm, query2); - if (!(match = cursor.findNext()) || start && cursor.from().line == start.line && cursor.from().ch == start.ch) return; - } - cm.setSelection(cursor.from(), cursor.to()); - cm.scrollIntoView({ - from: cursor.from(), - to: cursor.to() - }); - confirmDialog(cm, getDoReplaceConfirm(cm), cm.phrase("Replace?"), [function () { - doReplace(match); - }, advance, function () { - replaceAll(cm, query2, text); - }]); - }; - var doReplace = function (match) { - cursor.replace(typeof query2 == "string" ? text : text.replace(/\$(\d)/g, function (_, i) { - return match[i]; - })); - advance(); - }; - advance(); - } - }); - }); - } - CodeMirror.commands.find = function (cm) { - clearSearch(cm); - doSearch(cm); - }; - CodeMirror.commands.findPersistent = function (cm) { - clearSearch(cm); - doSearch(cm, false, true); - }; - CodeMirror.commands.findPersistentNext = function (cm) { - doSearch(cm, false, true, true); - }; - CodeMirror.commands.findPersistentPrev = function (cm) { - doSearch(cm, true, true, true); - }; - CodeMirror.commands.findNext = doSearch; - CodeMirror.commands.findPrev = function (cm) { - doSearch(cm, true); - }; - CodeMirror.commands.clearSearch = clearSearch; - CodeMirror.commands.replace = replace; - CodeMirror.commands.replaceAll = function (cm) { - replace(cm, true); - }; - }); -})(); -var searchExports = search$2.exports; -const search = /* @__PURE__ */codemirror.getDefaultExportFromCjs(searchExports); -const search$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: search -}, [searchExports]); -exports.search = search$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/searchcursor.cjs.js": -/*!*****************************************************!*\ - !*** ../../graphiql-react/dist/searchcursor.cjs.js ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -const searchcursor$2 = __webpack_require__(/*! ./searchcursor.cjs2.js */ "../../graphiql-react/dist/searchcursor.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var searchcursorExports = searchcursor$2.requireSearchcursor(); -const searchcursor = /* @__PURE__ */codemirror.getDefaultExportFromCjs(searchcursorExports); -const searchcursor$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: searchcursor -}, [searchcursorExports]); -exports.searchcursor = searchcursor$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/searchcursor.cjs2.js": -/*!******************************************************!*\ - !*** ../../graphiql-react/dist/searchcursor.cjs2.js ***! - \******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -var searchcursor = { - exports: {} -}; -var hasRequiredSearchcursor; -function requireSearchcursor() { - if (hasRequiredSearchcursor) return searchcursor.exports; - hasRequiredSearchcursor = 1; - (function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - var Pos = CodeMirror.Pos; - function regexpFlags(regexp) { - var flags = regexp.flags; - return flags != null ? flags : (regexp.ignoreCase ? "i" : "") + (regexp.global ? "g" : "") + (regexp.multiline ? "m" : ""); - } - function ensureFlags(regexp, flags) { - var current = regexpFlags(regexp), - target = current; - for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1) target += flags.charAt(i); - return current == target ? regexp : new RegExp(regexp.source, target); - } - function maybeMultiline(regexp) { - return /\\s|\\n|\n|\\W|\\D|\[\^/.test(regexp.source); - } - function searchRegexpForward(doc, regexp, start) { - regexp = ensureFlags(regexp, "g"); - for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) { - regexp.lastIndex = ch; - var string = doc.getLine(line), - match = regexp.exec(string); - if (match) return { - from: Pos(line, match.index), - to: Pos(line, match.index + match[0].length), - match - }; - } - } - function searchRegexpForwardMultiline(doc, regexp, start) { - if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start); - regexp = ensureFlags(regexp, "gm"); - var string, - chunk = 1; - for (var line = start.line, last = doc.lastLine(); line <= last;) { - for (var i = 0; i < chunk; i++) { - if (line > last) break; - var curLine = doc.getLine(line++); - string = string == null ? curLine : string + "\n" + curLine; - } - chunk = chunk * 2; - regexp.lastIndex = start.ch; - var match = regexp.exec(string); - if (match) { - var before = string.slice(0, match.index).split("\n"), - inside = match[0].split("\n"); - var startLine = start.line + before.length - 1, - startCh = before[before.length - 1].length; - return { - from: Pos(startLine, startCh), - to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), - match - }; - } - } - } - function lastMatchIn(string, regexp, endMargin) { - var match, - from = 0; - while (from <= string.length) { - regexp.lastIndex = from; - var newMatch = regexp.exec(string); - if (!newMatch) break; - var end = newMatch.index + newMatch[0].length; - if (end > string.length - endMargin) break; - if (!match || end > match.index + match[0].length) match = newMatch; - from = newMatch.index + 1; - } - return match; - } - function searchRegexpBackward(doc, regexp, start) { - regexp = ensureFlags(regexp, "g"); - for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) { - var string = doc.getLine(line); - var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch); - if (match) return { - from: Pos(line, match.index), - to: Pos(line, match.index + match[0].length), - match - }; - } - } - function searchRegexpBackwardMultiline(doc, regexp, start) { - if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start); - regexp = ensureFlags(regexp, "gm"); - var string, - chunkSize = 1, - endMargin = doc.getLine(start.line).length - start.ch; - for (var line = start.line, first = doc.firstLine(); line >= first;) { - for (var i = 0; i < chunkSize && line >= first; i++) { - var curLine = doc.getLine(line--); - string = string == null ? curLine : curLine + "\n" + string; - } - chunkSize *= 2; - var match = lastMatchIn(string, regexp, endMargin); - if (match) { - var before = string.slice(0, match.index).split("\n"), - inside = match[0].split("\n"); - var startLine = line + before.length, - startCh = before[before.length - 1].length; - return { - from: Pos(startLine, startCh), - to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), - match - }; - } - } - } - var doFold, noFold; - if (String.prototype.normalize) { - doFold = function (str) { - return str.normalize("NFD").toLowerCase(); - }; - noFold = function (str) { - return str.normalize("NFD"); - }; - } else { - doFold = function (str) { - return str.toLowerCase(); - }; - noFold = function (str) { - return str; - }; - } - function adjustPos(orig, folded, pos, foldFunc) { - if (orig.length == folded.length) return pos; - for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) { - if (min == max) return min; - var mid = min + max >> 1; - var len = foldFunc(orig.slice(0, mid)).length; - if (len == pos) return mid;else if (len > pos) max = mid;else min = mid + 1; - } - } - function searchStringForward(doc, query, start, caseFold) { - if (!query.length) return null; - var fold = caseFold ? doFold : noFold; - var lines = fold(query).split(/\r|\n\r?/); - search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) { - var orig = doc.getLine(line).slice(ch), - string = fold(orig); - if (lines.length == 1) { - var found = string.indexOf(lines[0]); - if (found == -1) continue search; - var start = adjustPos(orig, string, found, fold) + ch; - return { - from: Pos(line, adjustPos(orig, string, found, fold) + ch), - to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch) - }; - } else { - var cutFrom = string.length - lines[0].length; - if (string.slice(cutFrom) != lines[0]) continue search; - for (var i = 1; i < lines.length - 1; i++) if (fold(doc.getLine(line + i)) != lines[i]) continue search; - var end = doc.getLine(line + lines.length - 1), - endString = fold(end), - lastLine = lines[lines.length - 1]; - if (endString.slice(0, lastLine.length) != lastLine) continue search; - return { - from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch), - to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold)) - }; - } - } - } - function searchStringBackward(doc, query, start, caseFold) { - if (!query.length) return null; - var fold = caseFold ? doFold : noFold; - var lines = fold(query).split(/\r|\n\r?/); - search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) { - var orig = doc.getLine(line); - if (ch > -1) orig = orig.slice(0, ch); - var string = fold(orig); - if (lines.length == 1) { - var found = string.lastIndexOf(lines[0]); - if (found == -1) continue search; - return { - from: Pos(line, adjustPos(orig, string, found, fold)), - to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold)) - }; - } else { - var lastLine = lines[lines.length - 1]; - if (string.slice(0, lastLine.length) != lastLine) continue search; - for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++) if (fold(doc.getLine(start + i)) != lines[i]) continue search; - var top = doc.getLine(line + 1 - lines.length), - topString = fold(top); - if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search; - return { - from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)), - to: Pos(line, adjustPos(orig, string, lastLine.length, fold)) - }; - } - } - } - function SearchCursor(doc, query, pos, options) { - this.atOccurrence = false; - this.afterEmptyMatch = false; - this.doc = doc; - pos = pos ? doc.clipPos(pos) : Pos(0, 0); - this.pos = { - from: pos, - to: pos - }; - var caseFold; - if (typeof options == "object") { - caseFold = options.caseFold; - } else { - caseFold = options; - options = null; - } - if (typeof query == "string") { - if (caseFold == null) caseFold = false; - this.matches = function (reverse, pos2) { - return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos2, caseFold); - }; - } else { - query = ensureFlags(query, "gm"); - if (!options || options.multiline !== false) this.matches = function (reverse, pos2) { - return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos2); - };else this.matches = function (reverse, pos2) { - return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos2); - }; - } - } - SearchCursor.prototype = { - findNext: function () { - return this.find(false); - }, - findPrevious: function () { - return this.find(true); - }, - find: function (reverse) { - var head = this.doc.clipPos(reverse ? this.pos.from : this.pos.to); - if (this.afterEmptyMatch && this.atOccurrence) { - head = Pos(head.line, head.ch); - if (reverse) { - head.ch--; - if (head.ch < 0) { - head.line--; - head.ch = (this.doc.getLine(head.line) || "").length; - } - } else { - head.ch++; - if (head.ch > (this.doc.getLine(head.line) || "").length) { - head.ch = 0; - head.line++; - } - } - if (CodeMirror.cmpPos(head, this.doc.clipPos(head)) != 0) { - return this.atOccurrence = false; - } - } - var result = this.matches(reverse, head); - this.afterEmptyMatch = result && CodeMirror.cmpPos(result.from, result.to) == 0; - if (result) { - this.pos = result; - this.atOccurrence = true; - return this.pos.match || true; - } else { - var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0); - this.pos = { - from: end, - to: end - }; - return this.atOccurrence = false; - } - }, - from: function () { - if (this.atOccurrence) return this.pos.from; - }, - to: function () { - if (this.atOccurrence) return this.pos.to; - }, - replace: function (newText, origin) { - if (!this.atOccurrence) return; - var lines = CodeMirror.splitLines(newText); - this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin); - this.pos.to = Pos(this.pos.from.line + lines.length - 1, lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0)); - } - }; - CodeMirror.defineExtension("getSearchCursor", function (query, pos, caseFold) { - return new SearchCursor(this.doc, query, pos, caseFold); - }); - CodeMirror.defineDocExtension("getSearchCursor", function (query, pos, caseFold) { - return new SearchCursor(this, query, pos, caseFold); - }); - CodeMirror.defineExtension("selectMatches", function (query, caseFold) { - var ranges = []; - var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold); - while (cur.findNext()) { - if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break; - ranges.push({ - anchor: cur.from(), - head: cur.to() - }); - } - if (ranges.length) this.setSelections(ranges, 0); - }); - }); - })(); - return searchcursor.exports; -} -exports.requireSearchcursor = requireSearchcursor; - -/***/ }), - -/***/ "../../graphiql-react/dist/show-hint.cjs.js": -/*!**************************************************!*\ - !*** ../../graphiql-react/dist/show-hint.cjs.js ***! - \**************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var showHint$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - var HINT_ELEMENT_CLASS = "CodeMirror-hint"; - var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active"; - CodeMirror.showHint = function (cm, getHints, options) { - if (!getHints) return cm.showHint(options); - if (options && options.async) getHints.async = true; - var newOpts = { - hint: getHints - }; - if (options) for (var prop in options) newOpts[prop] = options[prop]; - return cm.showHint(newOpts); - }; - CodeMirror.defineExtension("showHint", function (options) { - options = parseOptions(this, this.getCursor("start"), options); - var selections = this.listSelections(); - if (selections.length > 1) return; - if (this.somethingSelected()) { - if (!options.hint.supportsSelection) return; - for (var i = 0; i < selections.length; i++) if (selections[i].head.line != selections[i].anchor.line) return; - } - if (this.state.completionActive) this.state.completionActive.close(); - var completion = this.state.completionActive = new Completion(this, options); - if (!completion.options.hint) return; - CodeMirror.signal(this, "startCompletion", this); - completion.update(true); - }); - CodeMirror.defineExtension("closeHint", function () { - if (this.state.completionActive) this.state.completionActive.close(); - }); - function Completion(cm, options) { - this.cm = cm; - this.options = options; - this.widget = null; - this.debounce = 0; - this.tick = 0; - this.startPos = this.cm.getCursor("start"); - this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length; - if (this.options.updateOnCursorActivity) { - var self = this; - cm.on("cursorActivity", this.activityFunc = function () { - self.cursorActivity(); - }); - } - } - var requestAnimationFrame = window.requestAnimationFrame || function (fn) { - return setTimeout(fn, 1e3 / 60); - }; - var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout; - Completion.prototype = { - close: function () { - if (!this.active()) return; - this.cm.state.completionActive = null; - this.tick = null; - if (this.options.updateOnCursorActivity) { - this.cm.off("cursorActivity", this.activityFunc); - } - if (this.widget && this.data) CodeMirror.signal(this.data, "close"); - if (this.widget) this.widget.close(); - CodeMirror.signal(this.cm, "endCompletion", this.cm); - }, - active: function () { - return this.cm.state.completionActive == this; - }, - pick: function (data, i) { - var completion = data.list[i], - self = this; - this.cm.operation(function () { - if (completion.hint) completion.hint(self.cm, data, completion);else self.cm.replaceRange(getText(completion), completion.from || data.from, completion.to || data.to, "complete"); - CodeMirror.signal(data, "pick", completion); - self.cm.scrollIntoView(); - }); - if (this.options.closeOnPick) { - this.close(); - } - }, - cursorActivity: function () { - if (this.debounce) { - cancelAnimationFrame(this.debounce); - this.debounce = 0; - } - var identStart = this.startPos; - if (this.data) { - identStart = this.data.from; - } - var pos = this.cm.getCursor(), - line = this.cm.getLine(pos.line); - if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch || pos.ch < identStart.ch || this.cm.somethingSelected() || !pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1))) { - this.close(); - } else { - var self = this; - this.debounce = requestAnimationFrame(function () { - self.update(); - }); - if (this.widget) this.widget.disable(); - } - }, - update: function (first) { - if (this.tick == null) return; - var self = this, - myTick = ++this.tick; - fetchHints(this.options.hint, this.cm, this.options, function (data) { - if (self.tick == myTick) self.finishUpdate(data, first); - }); - }, - finishUpdate: function (data, first) { - if (this.data) CodeMirror.signal(this.data, "update"); - var picked = this.widget && this.widget.picked || first && this.options.completeSingle; - if (this.widget) this.widget.close(); - this.data = data; - if (data && data.list.length) { - if (picked && data.list.length == 1) { - this.pick(data, 0); - } else { - this.widget = new Widget(this, data); - CodeMirror.signal(data, "shown"); - } - } - } - }; - function parseOptions(cm, pos, options) { - var editor = cm.options.hintOptions; - var out = {}; - for (var prop in defaultOptions) out[prop] = defaultOptions[prop]; - if (editor) { - for (var prop in editor) if (editor[prop] !== void 0) out[prop] = editor[prop]; - } - if (options) { - for (var prop in options) if (options[prop] !== void 0) out[prop] = options[prop]; - } - if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos); - return out; - } - function getText(completion) { - if (typeof completion == "string") return completion;else return completion.text; - } - function buildKeyMap(completion, handle) { - var baseMap = { - Up: function () { - handle.moveFocus(-1); - }, - Down: function () { - handle.moveFocus(1); - }, - PageUp: function () { - handle.moveFocus(-handle.menuSize() + 1, true); - }, - PageDown: function () { - handle.moveFocus(handle.menuSize() - 1, true); - }, - Home: function () { - handle.setFocus(0); - }, - End: function () { - handle.setFocus(handle.length - 1); - }, - Enter: handle.pick, - Tab: handle.pick, - Esc: handle.close - }; - var mac = /Mac/.test(navigator.platform); - if (mac) { - baseMap["Ctrl-P"] = function () { - handle.moveFocus(-1); - }; - baseMap["Ctrl-N"] = function () { - handle.moveFocus(1); - }; - } - var custom = completion.options.customKeys; - var ourMap = custom ? {} : baseMap; - function addBinding(key2, val) { - var bound; - if (typeof val != "string") bound = function (cm) { - return val(cm, handle); - };else if (baseMap.hasOwnProperty(val)) bound = baseMap[val];else bound = val; - ourMap[key2] = bound; - } - if (custom) { - for (var key in custom) if (custom.hasOwnProperty(key)) addBinding(key, custom[key]); - } - var extra = completion.options.extraKeys; - if (extra) { - for (var key in extra) if (extra.hasOwnProperty(key)) addBinding(key, extra[key]); - } - return ourMap; - } - function getHintElement(hintsElement, el) { - while (el && el != hintsElement) { - if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el; - el = el.parentNode; - } - } - function Widget(completion, data) { - this.id = "cm-complete-" + Math.floor(Math.random(1e6)); - this.completion = completion; - this.data = data; - this.picked = false; - var widget = this, - cm = completion.cm; - var ownerDocument = cm.getInputField().ownerDocument; - var parentWindow = ownerDocument.defaultView || ownerDocument.parentWindow; - var hints = this.hints = ownerDocument.createElement("ul"); - hints.setAttribute("role", "listbox"); - hints.setAttribute("aria-expanded", "true"); - hints.id = this.id; - var theme = completion.cm.options.theme; - hints.className = "CodeMirror-hints " + theme; - this.selectedHint = data.selectedHint || 0; - var completions = data.list; - for (var i = 0; i < completions.length; ++i) { - var elt = hints.appendChild(ownerDocument.createElement("li")), - cur = completions[i]; - var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS); - if (cur.className != null) className = cur.className + " " + className; - elt.className = className; - if (i == this.selectedHint) elt.setAttribute("aria-selected", "true"); - elt.id = this.id + "-" + i; - elt.setAttribute("role", "option"); - if (cur.render) cur.render(elt, data, cur);else elt.appendChild(ownerDocument.createTextNode(cur.displayText || getText(cur))); - elt.hintId = i; - } - var container = completion.options.container || ownerDocument.body; - var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null); - var left = pos.left, - top = pos.bottom, - below = true; - var offsetLeft = 0, - offsetTop = 0; - if (container !== ownerDocument.body) { - var isContainerPositioned = ["absolute", "relative", "fixed"].indexOf(parentWindow.getComputedStyle(container).position) !== -1; - var offsetParent = isContainerPositioned ? container : container.offsetParent; - var offsetParentPosition = offsetParent.getBoundingClientRect(); - var bodyPosition = ownerDocument.body.getBoundingClientRect(); - offsetLeft = offsetParentPosition.left - bodyPosition.left - offsetParent.scrollLeft; - offsetTop = offsetParentPosition.top - bodyPosition.top - offsetParent.scrollTop; - } - hints.style.left = left - offsetLeft + "px"; - hints.style.top = top - offsetTop + "px"; - var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth); - var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight); - container.appendChild(hints); - cm.getInputField().setAttribute("aria-autocomplete", "list"); - cm.getInputField().setAttribute("aria-owns", this.id); - cm.getInputField().setAttribute("aria-activedescendant", this.id + "-" + this.selectedHint); - var box = completion.options.moveOnOverlap ? hints.getBoundingClientRect() : new DOMRect(); - var scrolls = completion.options.paddingForScrollbar ? hints.scrollHeight > hints.clientHeight + 1 : false; - var startScroll; - setTimeout(function () { - startScroll = cm.getScrollInfo(); - }); - var overlapY = box.bottom - winH; - if (overlapY > 0) { - var height = box.bottom - box.top, - curTop = pos.top - (pos.bottom - box.top); - if (curTop - height > 0) { - hints.style.top = (top = pos.top - height - offsetTop) + "px"; - below = false; - } else if (height > winH) { - hints.style.height = winH - 5 + "px"; - hints.style.top = (top = pos.bottom - box.top - offsetTop) + "px"; - var cursor = cm.getCursor(); - if (data.from.ch != cursor.ch) { - pos = cm.cursorCoords(cursor); - hints.style.left = (left = pos.left - offsetLeft) + "px"; - box = hints.getBoundingClientRect(); - } - } - } - var overlapX = box.right - winW; - if (scrolls) overlapX += cm.display.nativeBarWidth; - if (overlapX > 0) { - if (box.right - box.left > winW) { - hints.style.width = winW - 5 + "px"; - overlapX -= box.right - box.left - winW; - } - hints.style.left = (left = pos.left - overlapX - offsetLeft) + "px"; - } - if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling) node.style.paddingRight = cm.display.nativeBarWidth + "px"; - cm.addKeyMap(this.keyMap = buildKeyMap(completion, { - moveFocus: function (n, avoidWrap) { - widget.changeActive(widget.selectedHint + n, avoidWrap); - }, - setFocus: function (n) { - widget.changeActive(n); - }, - menuSize: function () { - return widget.screenAmount(); - }, - length: completions.length, - close: function () { - completion.close(); - }, - pick: function () { - widget.pick(); - }, - data - })); - if (completion.options.closeOnUnfocus) { - var closingOnBlur; - cm.on("blur", this.onBlur = function () { - closingOnBlur = setTimeout(function () { - completion.close(); - }, 100); - }); - cm.on("focus", this.onFocus = function () { - clearTimeout(closingOnBlur); - }); - } - cm.on("scroll", this.onScroll = function () { - var curScroll = cm.getScrollInfo(), - editor = cm.getWrapperElement().getBoundingClientRect(); - if (!startScroll) startScroll = cm.getScrollInfo(); - var newTop = top + startScroll.top - curScroll.top; - var point = newTop - (parentWindow.pageYOffset || (ownerDocument.documentElement || ownerDocument.body).scrollTop); - if (!below) point += hints.offsetHeight; - if (point <= editor.top || point >= editor.bottom) return completion.close(); - hints.style.top = newTop + "px"; - hints.style.left = left + startScroll.left - curScroll.left + "px"; - }); - CodeMirror.on(hints, "dblclick", function (e) { - var t = getHintElement(hints, e.target || e.srcElement); - if (t && t.hintId != null) { - widget.changeActive(t.hintId); - widget.pick(); - } - }); - CodeMirror.on(hints, "click", function (e) { - var t = getHintElement(hints, e.target || e.srcElement); - if (t && t.hintId != null) { - widget.changeActive(t.hintId); - if (completion.options.completeOnSingleClick) widget.pick(); - } - }); - CodeMirror.on(hints, "mousedown", function () { - setTimeout(function () { - cm.focus(); - }, 20); - }); - var selectedHintRange = this.getSelectedHintRange(); - if (selectedHintRange.from !== 0 || selectedHintRange.to !== 0) { - this.scrollToActive(); - } - CodeMirror.signal(data, "select", completions[this.selectedHint], hints.childNodes[this.selectedHint]); - return true; - } - Widget.prototype = { - close: function () { - if (this.completion.widget != this) return; - this.completion.widget = null; - if (this.hints.parentNode) this.hints.parentNode.removeChild(this.hints); - this.completion.cm.removeKeyMap(this.keyMap); - var input = this.completion.cm.getInputField(); - input.removeAttribute("aria-activedescendant"); - input.removeAttribute("aria-owns"); - var cm = this.completion.cm; - if (this.completion.options.closeOnUnfocus) { - cm.off("blur", this.onBlur); - cm.off("focus", this.onFocus); - } - cm.off("scroll", this.onScroll); - }, - disable: function () { - this.completion.cm.removeKeyMap(this.keyMap); - var widget = this; - this.keyMap = { - Enter: function () { - widget.picked = true; - } - }; - this.completion.cm.addKeyMap(this.keyMap); - }, - pick: function () { - this.completion.pick(this.data, this.selectedHint); - }, - changeActive: function (i, avoidWrap) { - if (i >= this.data.list.length) i = avoidWrap ? this.data.list.length - 1 : 0;else if (i < 0) i = avoidWrap ? 0 : this.data.list.length - 1; - if (this.selectedHint == i) return; - var node = this.hints.childNodes[this.selectedHint]; - if (node) { - node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, ""); - node.removeAttribute("aria-selected"); - } - node = this.hints.childNodes[this.selectedHint = i]; - node.className += " " + ACTIVE_HINT_ELEMENT_CLASS; - node.setAttribute("aria-selected", "true"); - this.completion.cm.getInputField().setAttribute("aria-activedescendant", node.id); - this.scrollToActive(); - CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node); - }, - scrollToActive: function () { - var selectedHintRange = this.getSelectedHintRange(); - var node1 = this.hints.childNodes[selectedHintRange.from]; - var node2 = this.hints.childNodes[selectedHintRange.to]; - var firstNode = this.hints.firstChild; - if (node1.offsetTop < this.hints.scrollTop) this.hints.scrollTop = node1.offsetTop - firstNode.offsetTop;else if (node2.offsetTop + node2.offsetHeight > this.hints.scrollTop + this.hints.clientHeight) this.hints.scrollTop = node2.offsetTop + node2.offsetHeight - this.hints.clientHeight + firstNode.offsetTop; - }, - screenAmount: function () { - return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1; - }, - getSelectedHintRange: function () { - var margin = this.completion.options.scrollMargin || 0; - return { - from: Math.max(0, this.selectedHint - margin), - to: Math.min(this.data.list.length - 1, this.selectedHint + margin) - }; - } - }; - function applicableHelpers(cm, helpers) { - if (!cm.somethingSelected()) return helpers; - var result = []; - for (var i = 0; i < helpers.length; i++) if (helpers[i].supportsSelection) result.push(helpers[i]); - return result; - } - function fetchHints(hint, cm, options, callback) { - if (hint.async) { - hint(cm, callback, options); - } else { - var result = hint(cm, options); - if (result && result.then) result.then(callback);else callback(result); - } - } - function resolveAutoHints(cm, pos) { - var helpers = cm.getHelpers(pos, "hint"), - words; - if (helpers.length) { - var resolved = function (cm2, callback, options) { - var app = applicableHelpers(cm2, helpers); - function run(i) { - if (i == app.length) return callback(null); - fetchHints(app[i], cm2, options, function (result) { - if (result && result.list.length > 0) callback(result);else run(i + 1); - }); - } - run(0); - }; - resolved.async = true; - resolved.supportsSelection = true; - return resolved; - } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) { - return function (cm2) { - return CodeMirror.hint.fromList(cm2, { - words - }); - }; - } else if (CodeMirror.hint.anyword) { - return function (cm2, options) { - return CodeMirror.hint.anyword(cm2, options); - }; - } else { - return function () {}; - } - } - CodeMirror.registerHelper("hint", "auto", { - resolve: resolveAutoHints - }); - CodeMirror.registerHelper("hint", "fromList", function (cm, options) { - var cur = cm.getCursor(), - token = cm.getTokenAt(cur); - var term, - from = CodeMirror.Pos(cur.line, token.start), - to = cur; - if (token.start < cur.ch && /\w/.test(token.string.charAt(cur.ch - token.start - 1))) { - term = token.string.substr(0, cur.ch - token.start); - } else { - term = ""; - from = cur; - } - var found = []; - for (var i = 0; i < options.words.length; i++) { - var word = options.words[i]; - if (word.slice(0, term.length) == term) found.push(word); - } - if (found.length) return { - list: found, - from, - to - }; - }); - CodeMirror.commands.autocomplete = CodeMirror.showHint; - var defaultOptions = { - hint: CodeMirror.hint.auto, - completeSingle: true, - alignWithWord: true, - closeCharacters: /[\s()\[\]{};:>,]/, - closeOnPick: true, - closeOnUnfocus: true, - updateOnCursorActivity: true, - completeOnSingleClick: true, - container: null, - customKeys: null, - extraKeys: null, - paddingForScrollbar: true, - moveOnOverlap: true - }; - CodeMirror.defineOption("hintOptions", null); - }); -})(); -var showHintExports = showHint$2.exports; -const showHint = /* @__PURE__ */codemirror.getDefaultExportFromCjs(showHintExports); -const showHint$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: showHint -}, [showHintExports]); -exports.showHint = showHint$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/sublime.cjs.js": -/*!************************************************!*\ - !*** ../../graphiql-react/dist/sublime.cjs.js ***! - \************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -const searchcursor = __webpack_require__(/*! ./searchcursor.cjs2.js */ "../../graphiql-react/dist/searchcursor.cjs2.js"); -const matchbrackets = __webpack_require__(/*! ./matchbrackets.cjs2.js */ "../../graphiql-react/dist/matchbrackets.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var sublime$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror(), searchcursor.requireSearchcursor(), matchbrackets.requireMatchbrackets()); - })(function (CodeMirror) { - var cmds = CodeMirror.commands; - var Pos = CodeMirror.Pos; - function findPosSubword(doc, start, dir) { - if (dir < 0 && start.ch == 0) return doc.clipPos(Pos(start.line - 1)); - var line = doc.getLine(start.line); - if (dir > 0 && start.ch >= line.length) return doc.clipPos(Pos(start.line + 1, 0)); - var state = "start", - type, - startPos = start.ch; - for (var pos = startPos, e = dir < 0 ? 0 : line.length, i = 0; pos != e; pos += dir, i++) { - var next = line.charAt(dir < 0 ? pos - 1 : pos); - var cat = next != "_" && CodeMirror.isWordChar(next) ? "w" : "o"; - if (cat == "w" && next.toUpperCase() == next) cat = "W"; - if (state == "start") { - if (cat != "o") { - state = "in"; - type = cat; - } else startPos = pos + dir; - } else if (state == "in") { - if (type != cat) { - if (type == "w" && cat == "W" && dir < 0) pos--; - if (type == "W" && cat == "w" && dir > 0) { - if (pos == startPos + 1) { - type = "w"; - continue; - } else pos--; - } - break; - } - } - } - return Pos(start.line, pos); - } - function moveSubword(cm, dir) { - cm.extendSelectionsBy(function (range) { - if (cm.display.shift || cm.doc.extend || range.empty()) return findPosSubword(cm.doc, range.head, dir);else return dir < 0 ? range.from() : range.to(); - }); - } - cmds.goSubwordLeft = function (cm) { - moveSubword(cm, -1); - }; - cmds.goSubwordRight = function (cm) { - moveSubword(cm, 1); - }; - cmds.scrollLineUp = function (cm) { - var info = cm.getScrollInfo(); - if (!cm.somethingSelected()) { - var visibleBottomLine = cm.lineAtHeight(info.top + info.clientHeight, "local"); - if (cm.getCursor().line >= visibleBottomLine) cm.execCommand("goLineUp"); - } - cm.scrollTo(null, info.top - cm.defaultTextHeight()); - }; - cmds.scrollLineDown = function (cm) { - var info = cm.getScrollInfo(); - if (!cm.somethingSelected()) { - var visibleTopLine = cm.lineAtHeight(info.top, "local") + 1; - if (cm.getCursor().line <= visibleTopLine) cm.execCommand("goLineDown"); - } - cm.scrollTo(null, info.top + cm.defaultTextHeight()); - }; - cmds.splitSelectionByLine = function (cm) { - var ranges = cm.listSelections(), - lineRanges = []; - for (var i = 0; i < ranges.length; i++) { - var from = ranges[i].from(), - to = ranges[i].to(); - for (var line = from.line; line <= to.line; ++line) if (!(to.line > from.line && line == to.line && to.ch == 0)) lineRanges.push({ - anchor: line == from.line ? from : Pos(line, 0), - head: line == to.line ? to : Pos(line) - }); - } - cm.setSelections(lineRanges, 0); - }; - cmds.singleSelectionTop = function (cm) { - var range = cm.listSelections()[0]; - cm.setSelection(range.anchor, range.head, { - scroll: false - }); - }; - cmds.selectLine = function (cm) { - var ranges = cm.listSelections(), - extended = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - extended.push({ - anchor: Pos(range.from().line, 0), - head: Pos(range.to().line + 1, 0) - }); - } - cm.setSelections(extended); - }; - function insertLine(cm, above) { - if (cm.isReadOnly()) return CodeMirror.Pass; - cm.operation(function () { - var len = cm.listSelections().length, - newSelection = [], - last = -1; - for (var i = 0; i < len; i++) { - var head = cm.listSelections()[i].head; - if (head.line <= last) continue; - var at = Pos(head.line + (above ? 0 : 1), 0); - cm.replaceRange("\n", at, null, "+insertLine"); - cm.indentLine(at.line, null, true); - newSelection.push({ - head: at, - anchor: at - }); - last = head.line + 1; - } - cm.setSelections(newSelection); - }); - cm.execCommand("indentAuto"); - } - cmds.insertLineAfter = function (cm) { - return insertLine(cm, false); - }; - cmds.insertLineBefore = function (cm) { - return insertLine(cm, true); - }; - function wordAt(cm, pos) { - var start = pos.ch, - end = start, - line = cm.getLine(pos.line); - while (start && CodeMirror.isWordChar(line.charAt(start - 1))) --start; - while (end < line.length && CodeMirror.isWordChar(line.charAt(end))) ++end; - return { - from: Pos(pos.line, start), - to: Pos(pos.line, end), - word: line.slice(start, end) - }; - } - cmds.selectNextOccurrence = function (cm) { - var from = cm.getCursor("from"), - to = cm.getCursor("to"); - var fullWord = cm.state.sublimeFindFullWord == cm.doc.sel; - if (CodeMirror.cmpPos(from, to) == 0) { - var word = wordAt(cm, from); - if (!word.word) return; - cm.setSelection(word.from, word.to); - fullWord = true; - } else { - var text = cm.getRange(from, to); - var query = fullWord ? new RegExp("\\b" + text + "\\b") : text; - var cur = cm.getSearchCursor(query, to); - var found = cur.findNext(); - if (!found) { - cur = cm.getSearchCursor(query, Pos(cm.firstLine(), 0)); - found = cur.findNext(); - } - if (!found || isSelectedRange(cm.listSelections(), cur.from(), cur.to())) return; - cm.addSelection(cur.from(), cur.to()); - } - if (fullWord) cm.state.sublimeFindFullWord = cm.doc.sel; - }; - cmds.skipAndSelectNextOccurrence = function (cm) { - var prevAnchor = cm.getCursor("anchor"), - prevHead = cm.getCursor("head"); - cmds.selectNextOccurrence(cm); - if (CodeMirror.cmpPos(prevAnchor, prevHead) != 0) { - cm.doc.setSelections(cm.doc.listSelections().filter(function (sel) { - return sel.anchor != prevAnchor || sel.head != prevHead; - })); - } - }; - function addCursorToSelection(cm, dir) { - var ranges = cm.listSelections(), - newRanges = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - var newAnchor = cm.findPosV(range.anchor, dir, "line", range.anchor.goalColumn); - var newHead = cm.findPosV(range.head, dir, "line", range.head.goalColumn); - newAnchor.goalColumn = range.anchor.goalColumn != null ? range.anchor.goalColumn : cm.cursorCoords(range.anchor, "div").left; - newHead.goalColumn = range.head.goalColumn != null ? range.head.goalColumn : cm.cursorCoords(range.head, "div").left; - var newRange = { - anchor: newAnchor, - head: newHead - }; - newRanges.push(range); - newRanges.push(newRange); - } - cm.setSelections(newRanges); - } - cmds.addCursorToPrevLine = function (cm) { - addCursorToSelection(cm, -1); - }; - cmds.addCursorToNextLine = function (cm) { - addCursorToSelection(cm, 1); - }; - function isSelectedRange(ranges, from, to) { - for (var i = 0; i < ranges.length; i++) if (CodeMirror.cmpPos(ranges[i].from(), from) == 0 && CodeMirror.cmpPos(ranges[i].to(), to) == 0) return true; - return false; - } - var mirror = "(){}[]"; - function selectBetweenBrackets(cm) { - var ranges = cm.listSelections(), - newRanges = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i], - pos = range.head, - opening = cm.scanForBracket(pos, -1); - if (!opening) return false; - for (;;) { - var closing = cm.scanForBracket(pos, 1); - if (!closing) return false; - if (closing.ch == mirror.charAt(mirror.indexOf(opening.ch) + 1)) { - var startPos = Pos(opening.pos.line, opening.pos.ch + 1); - if (CodeMirror.cmpPos(startPos, range.from()) == 0 && CodeMirror.cmpPos(closing.pos, range.to()) == 0) { - opening = cm.scanForBracket(opening.pos, -1); - if (!opening) return false; - } else { - newRanges.push({ - anchor: startPos, - head: closing.pos - }); - break; - } - } - pos = Pos(closing.pos.line, closing.pos.ch + 1); - } - } - cm.setSelections(newRanges); - return true; - } - cmds.selectScope = function (cm) { - selectBetweenBrackets(cm) || cm.execCommand("selectAll"); - }; - cmds.selectBetweenBrackets = function (cm) { - if (!selectBetweenBrackets(cm)) return CodeMirror.Pass; - }; - function puncType(type) { - return !type ? null : /\bpunctuation\b/.test(type) ? type : void 0; - } - cmds.goToBracket = function (cm) { - cm.extendSelectionsBy(function (range) { - var next = cm.scanForBracket(range.head, 1, puncType(cm.getTokenTypeAt(range.head))); - if (next && CodeMirror.cmpPos(next.pos, range.head) != 0) return next.pos; - var prev = cm.scanForBracket(range.head, -1, puncType(cm.getTokenTypeAt(Pos(range.head.line, range.head.ch + 1)))); - return prev && Pos(prev.pos.line, prev.pos.ch + 1) || range.head; - }); - }; - cmds.swapLineUp = function (cm) { - if (cm.isReadOnly()) return CodeMirror.Pass; - var ranges = cm.listSelections(), - linesToMove = [], - at = cm.firstLine() - 1, - newSels = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i], - from = range.from().line - 1, - to = range.to().line; - newSels.push({ - anchor: Pos(range.anchor.line - 1, range.anchor.ch), - head: Pos(range.head.line - 1, range.head.ch) - }); - if (range.to().ch == 0 && !range.empty()) --to; - if (from > at) linesToMove.push(from, to);else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to; - at = to; - } - cm.operation(function () { - for (var i2 = 0; i2 < linesToMove.length; i2 += 2) { - var from2 = linesToMove[i2], - to2 = linesToMove[i2 + 1]; - var line = cm.getLine(from2); - cm.replaceRange("", Pos(from2, 0), Pos(from2 + 1, 0), "+swapLine"); - if (to2 > cm.lastLine()) cm.replaceRange("\n" + line, Pos(cm.lastLine()), null, "+swapLine");else cm.replaceRange(line + "\n", Pos(to2, 0), null, "+swapLine"); - } - cm.setSelections(newSels); - cm.scrollIntoView(); - }); - }; - cmds.swapLineDown = function (cm) { - if (cm.isReadOnly()) return CodeMirror.Pass; - var ranges = cm.listSelections(), - linesToMove = [], - at = cm.lastLine() + 1; - for (var i = ranges.length - 1; i >= 0; i--) { - var range = ranges[i], - from = range.to().line + 1, - to = range.from().line; - if (range.to().ch == 0 && !range.empty()) from--; - if (from < at) linesToMove.push(from, to);else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to; - at = to; - } - cm.operation(function () { - for (var i2 = linesToMove.length - 2; i2 >= 0; i2 -= 2) { - var from2 = linesToMove[i2], - to2 = linesToMove[i2 + 1]; - var line = cm.getLine(from2); - if (from2 == cm.lastLine()) cm.replaceRange("", Pos(from2 - 1), Pos(from2), "+swapLine");else cm.replaceRange("", Pos(from2, 0), Pos(from2 + 1, 0), "+swapLine"); - cm.replaceRange(line + "\n", Pos(to2, 0), null, "+swapLine"); - } - cm.scrollIntoView(); - }); - }; - cmds.toggleCommentIndented = function (cm) { - cm.toggleComment({ - indent: true - }); - }; - cmds.joinLines = function (cm) { - var ranges = cm.listSelections(), - joined = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i], - from = range.from(); - var start = from.line, - end = range.to().line; - while (i < ranges.length - 1 && ranges[i + 1].from().line == end) end = ranges[++i].to().line; - joined.push({ - start, - end, - anchor: !range.empty() && from - }); - } - cm.operation(function () { - var offset = 0, - ranges2 = []; - for (var i2 = 0; i2 < joined.length; i2++) { - var obj = joined[i2]; - var anchor = obj.anchor && Pos(obj.anchor.line - offset, obj.anchor.ch), - head; - for (var line = obj.start; line <= obj.end; line++) { - var actual = line - offset; - if (line == obj.end) head = Pos(actual, cm.getLine(actual).length + 1); - if (actual < cm.lastLine()) { - cm.replaceRange(" ", Pos(actual), Pos(actual + 1, /^\s*/.exec(cm.getLine(actual + 1))[0].length)); - ++offset; - } - } - ranges2.push({ - anchor: anchor || head, - head - }); - } - cm.setSelections(ranges2, 0); - }); - }; - cmds.duplicateLine = function (cm) { - cm.operation(function () { - var rangeCount = cm.listSelections().length; - for (var i = 0; i < rangeCount; i++) { - var range = cm.listSelections()[i]; - if (range.empty()) cm.replaceRange(cm.getLine(range.head.line) + "\n", Pos(range.head.line, 0));else cm.replaceRange(cm.getRange(range.from(), range.to()), range.from()); - } - cm.scrollIntoView(); - }); - }; - function sortLines(cm, caseSensitive, direction) { - if (cm.isReadOnly()) return CodeMirror.Pass; - var ranges = cm.listSelections(), - toSort = [], - selected; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (range.empty()) continue; - var from = range.from().line, - to = range.to().line; - while (i < ranges.length - 1 && ranges[i + 1].from().line == to) to = ranges[++i].to().line; - if (!ranges[i].to().ch) to--; - toSort.push(from, to); - } - if (toSort.length) selected = true;else toSort.push(cm.firstLine(), cm.lastLine()); - cm.operation(function () { - var ranges2 = []; - for (var i2 = 0; i2 < toSort.length; i2 += 2) { - var from2 = toSort[i2], - to2 = toSort[i2 + 1]; - var start = Pos(from2, 0), - end = Pos(to2); - var lines = cm.getRange(start, end, false); - if (caseSensitive) lines.sort(function (a, b) { - return a < b ? -direction : a == b ? 0 : direction; - });else lines.sort(function (a, b) { - var au = a.toUpperCase(), - bu = b.toUpperCase(); - if (au != bu) { - a = au; - b = bu; - } - return a < b ? -direction : a == b ? 0 : direction; - }); - cm.replaceRange(lines, start, end); - if (selected) ranges2.push({ - anchor: start, - head: Pos(to2 + 1, 0) - }); - } - if (selected) cm.setSelections(ranges2, 0); - }); - } - cmds.sortLines = function (cm) { - sortLines(cm, true, 1); - }; - cmds.reverseSortLines = function (cm) { - sortLines(cm, true, -1); - }; - cmds.sortLinesInsensitive = function (cm) { - sortLines(cm, false, 1); - }; - cmds.reverseSortLinesInsensitive = function (cm) { - sortLines(cm, false, -1); - }; - cmds.nextBookmark = function (cm) { - var marks = cm.state.sublimeBookmarks; - if (marks) while (marks.length) { - var current = marks.shift(); - var found = current.find(); - if (found) { - marks.push(current); - return cm.setSelection(found.from, found.to); - } - } - }; - cmds.prevBookmark = function (cm) { - var marks = cm.state.sublimeBookmarks; - if (marks) while (marks.length) { - marks.unshift(marks.pop()); - var found = marks[marks.length - 1].find(); - if (!found) marks.pop();else return cm.setSelection(found.from, found.to); - } - }; - cmds.toggleBookmark = function (cm) { - var ranges = cm.listSelections(); - var marks = cm.state.sublimeBookmarks || (cm.state.sublimeBookmarks = []); - for (var i = 0; i < ranges.length; i++) { - var from = ranges[i].from(), - to = ranges[i].to(); - var found = ranges[i].empty() ? cm.findMarksAt(from) : cm.findMarks(from, to); - for (var j = 0; j < found.length; j++) { - if (found[j].sublimeBookmark) { - found[j].clear(); - for (var k = 0; k < marks.length; k++) if (marks[k] == found[j]) marks.splice(k--, 1); - break; - } - } - if (j == found.length) marks.push(cm.markText(from, to, { - sublimeBookmark: true, - clearWhenEmpty: false - })); - } - }; - cmds.clearBookmarks = function (cm) { - var marks = cm.state.sublimeBookmarks; - if (marks) for (var i = 0; i < marks.length; i++) marks[i].clear(); - marks.length = 0; - }; - cmds.selectBookmarks = function (cm) { - var marks = cm.state.sublimeBookmarks, - ranges = []; - if (marks) for (var i = 0; i < marks.length; i++) { - var found = marks[i].find(); - if (!found) marks.splice(i--, 0);else ranges.push({ - anchor: found.from, - head: found.to - }); - } - if (ranges.length) cm.setSelections(ranges, 0); - }; - function modifyWordOrSelection(cm, mod) { - cm.operation(function () { - var ranges = cm.listSelections(), - indices = [], - replacements = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (range.empty()) { - indices.push(i); - replacements.push(""); - } else replacements.push(mod(cm.getRange(range.from(), range.to()))); - } - cm.replaceSelections(replacements, "around", "case"); - for (var i = indices.length - 1, at; i >= 0; i--) { - var range = ranges[indices[i]]; - if (at && CodeMirror.cmpPos(range.head, at) > 0) continue; - var word = wordAt(cm, range.head); - at = word.from; - cm.replaceRange(mod(word.word), word.from, word.to); - } - }); - } - cmds.smartBackspace = function (cm) { - if (cm.somethingSelected()) return CodeMirror.Pass; - cm.operation(function () { - var cursors = cm.listSelections(); - var indentUnit = cm.getOption("indentUnit"); - for (var i = cursors.length - 1; i >= 0; i--) { - var cursor = cursors[i].head; - var toStartOfLine = cm.getRange({ - line: cursor.line, - ch: 0 - }, cursor); - var column = CodeMirror.countColumn(toStartOfLine, null, cm.getOption("tabSize")); - var deletePos = cm.findPosH(cursor, -1, "char", false); - if (toStartOfLine && !/\S/.test(toStartOfLine) && column % indentUnit == 0) { - var prevIndent = new Pos(cursor.line, CodeMirror.findColumn(toStartOfLine, column - indentUnit, indentUnit)); - if (prevIndent.ch != cursor.ch) deletePos = prevIndent; - } - cm.replaceRange("", deletePos, cursor, "+delete"); - } - }); - }; - cmds.delLineRight = function (cm) { - cm.operation(function () { - var ranges = cm.listSelections(); - for (var i = ranges.length - 1; i >= 0; i--) cm.replaceRange("", ranges[i].anchor, Pos(ranges[i].to().line), "+delete"); - cm.scrollIntoView(); - }); - }; - cmds.upcaseAtCursor = function (cm) { - modifyWordOrSelection(cm, function (str) { - return str.toUpperCase(); - }); - }; - cmds.downcaseAtCursor = function (cm) { - modifyWordOrSelection(cm, function (str) { - return str.toLowerCase(); - }); - }; - cmds.setSublimeMark = function (cm) { - if (cm.state.sublimeMark) cm.state.sublimeMark.clear(); - cm.state.sublimeMark = cm.setBookmark(cm.getCursor()); - }; - cmds.selectToSublimeMark = function (cm) { - var found = cm.state.sublimeMark && cm.state.sublimeMark.find(); - if (found) cm.setSelection(cm.getCursor(), found); - }; - cmds.deleteToSublimeMark = function (cm) { - var found = cm.state.sublimeMark && cm.state.sublimeMark.find(); - if (found) { - var from = cm.getCursor(), - to = found; - if (CodeMirror.cmpPos(from, to) > 0) { - var tmp = to; - to = from; - from = tmp; - } - cm.state.sublimeKilled = cm.getRange(from, to); - cm.replaceRange("", from, to); - } - }; - cmds.swapWithSublimeMark = function (cm) { - var found = cm.state.sublimeMark && cm.state.sublimeMark.find(); - if (found) { - cm.state.sublimeMark.clear(); - cm.state.sublimeMark = cm.setBookmark(cm.getCursor()); - cm.setCursor(found); - } - }; - cmds.sublimeYank = function (cm) { - if (cm.state.sublimeKilled != null) cm.replaceSelection(cm.state.sublimeKilled, null, "paste"); - }; - cmds.showInCenter = function (cm) { - var pos = cm.cursorCoords(null, "local"); - cm.scrollTo(null, (pos.top + pos.bottom) / 2 - cm.getScrollInfo().clientHeight / 2); - }; - function getTarget(cm) { - var from = cm.getCursor("from"), - to = cm.getCursor("to"); - if (CodeMirror.cmpPos(from, to) == 0) { - var word = wordAt(cm, from); - if (!word.word) return; - from = word.from; - to = word.to; - } - return { - from, - to, - query: cm.getRange(from, to), - word - }; - } - function findAndGoTo(cm, forward) { - var target = getTarget(cm); - if (!target) return; - var query = target.query; - var cur = cm.getSearchCursor(query, forward ? target.to : target.from); - if (forward ? cur.findNext() : cur.findPrevious()) { - cm.setSelection(cur.from(), cur.to()); - } else { - cur = cm.getSearchCursor(query, forward ? Pos(cm.firstLine(), 0) : cm.clipPos(Pos(cm.lastLine()))); - if (forward ? cur.findNext() : cur.findPrevious()) cm.setSelection(cur.from(), cur.to());else if (target.word) cm.setSelection(target.from, target.to); - } - } - cmds.findUnder = function (cm) { - findAndGoTo(cm, true); - }; - cmds.findUnderPrevious = function (cm) { - findAndGoTo(cm, false); - }; - cmds.findAllUnder = function (cm) { - var target = getTarget(cm); - if (!target) return; - var cur = cm.getSearchCursor(target.query); - var matches = []; - var primaryIndex = -1; - while (cur.findNext()) { - matches.push({ - anchor: cur.from(), - head: cur.to() - }); - if (cur.from().line <= target.from.line && cur.from().ch <= target.from.ch) primaryIndex++; - } - cm.setSelections(matches, primaryIndex); - }; - var keyMap = CodeMirror.keyMap; - keyMap.macSublime = { - "Cmd-Left": "goLineStartSmart", - "Shift-Tab": "indentLess", - "Shift-Ctrl-K": "deleteLine", - "Alt-Q": "wrapLines", - "Ctrl-Left": "goSubwordLeft", - "Ctrl-Right": "goSubwordRight", - "Ctrl-Alt-Up": "scrollLineUp", - "Ctrl-Alt-Down": "scrollLineDown", - "Cmd-L": "selectLine", - "Shift-Cmd-L": "splitSelectionByLine", - "Esc": "singleSelectionTop", - "Cmd-Enter": "insertLineAfter", - "Shift-Cmd-Enter": "insertLineBefore", - "Cmd-D": "selectNextOccurrence", - "Shift-Cmd-Space": "selectScope", - "Shift-Cmd-M": "selectBetweenBrackets", - "Cmd-M": "goToBracket", - "Cmd-Ctrl-Up": "swapLineUp", - "Cmd-Ctrl-Down": "swapLineDown", - "Cmd-/": "toggleCommentIndented", - "Cmd-J": "joinLines", - "Shift-Cmd-D": "duplicateLine", - "F5": "sortLines", - "Shift-F5": "reverseSortLines", - "Cmd-F5": "sortLinesInsensitive", - "Shift-Cmd-F5": "reverseSortLinesInsensitive", - "F2": "nextBookmark", - "Shift-F2": "prevBookmark", - "Cmd-F2": "toggleBookmark", - "Shift-Cmd-F2": "clearBookmarks", - "Alt-F2": "selectBookmarks", - "Backspace": "smartBackspace", - "Cmd-K Cmd-D": "skipAndSelectNextOccurrence", - "Cmd-K Cmd-K": "delLineRight", - "Cmd-K Cmd-U": "upcaseAtCursor", - "Cmd-K Cmd-L": "downcaseAtCursor", - "Cmd-K Cmd-Space": "setSublimeMark", - "Cmd-K Cmd-A": "selectToSublimeMark", - "Cmd-K Cmd-W": "deleteToSublimeMark", - "Cmd-K Cmd-X": "swapWithSublimeMark", - "Cmd-K Cmd-Y": "sublimeYank", - "Cmd-K Cmd-C": "showInCenter", - "Cmd-K Cmd-G": "clearBookmarks", - "Cmd-K Cmd-Backspace": "delLineLeft", - "Cmd-K Cmd-1": "foldAll", - "Cmd-K Cmd-0": "unfoldAll", - "Cmd-K Cmd-J": "unfoldAll", - "Ctrl-Shift-Up": "addCursorToPrevLine", - "Ctrl-Shift-Down": "addCursorToNextLine", - "Cmd-F3": "findUnder", - "Shift-Cmd-F3": "findUnderPrevious", - "Alt-F3": "findAllUnder", - "Shift-Cmd-[": "fold", - "Shift-Cmd-]": "unfold", - "Cmd-I": "findIncremental", - "Shift-Cmd-I": "findIncrementalReverse", - "Cmd-H": "replace", - "F3": "findNext", - "Shift-F3": "findPrev", - "fallthrough": "macDefault" - }; - CodeMirror.normalizeKeyMap(keyMap.macSublime); - keyMap.pcSublime = { - "Shift-Tab": "indentLess", - "Shift-Ctrl-K": "deleteLine", - "Alt-Q": "wrapLines", - "Ctrl-T": "transposeChars", - "Alt-Left": "goSubwordLeft", - "Alt-Right": "goSubwordRight", - "Ctrl-Up": "scrollLineUp", - "Ctrl-Down": "scrollLineDown", - "Ctrl-L": "selectLine", - "Shift-Ctrl-L": "splitSelectionByLine", - "Esc": "singleSelectionTop", - "Ctrl-Enter": "insertLineAfter", - "Shift-Ctrl-Enter": "insertLineBefore", - "Ctrl-D": "selectNextOccurrence", - "Shift-Ctrl-Space": "selectScope", - "Shift-Ctrl-M": "selectBetweenBrackets", - "Ctrl-M": "goToBracket", - "Shift-Ctrl-Up": "swapLineUp", - "Shift-Ctrl-Down": "swapLineDown", - "Ctrl-/": "toggleCommentIndented", - "Ctrl-J": "joinLines", - "Shift-Ctrl-D": "duplicateLine", - "F9": "sortLines", - "Shift-F9": "reverseSortLines", - "Ctrl-F9": "sortLinesInsensitive", - "Shift-Ctrl-F9": "reverseSortLinesInsensitive", - "F2": "nextBookmark", - "Shift-F2": "prevBookmark", - "Ctrl-F2": "toggleBookmark", - "Shift-Ctrl-F2": "clearBookmarks", - "Alt-F2": "selectBookmarks", - "Backspace": "smartBackspace", - "Ctrl-K Ctrl-D": "skipAndSelectNextOccurrence", - "Ctrl-K Ctrl-K": "delLineRight", - "Ctrl-K Ctrl-U": "upcaseAtCursor", - "Ctrl-K Ctrl-L": "downcaseAtCursor", - "Ctrl-K Ctrl-Space": "setSublimeMark", - "Ctrl-K Ctrl-A": "selectToSublimeMark", - "Ctrl-K Ctrl-W": "deleteToSublimeMark", - "Ctrl-K Ctrl-X": "swapWithSublimeMark", - "Ctrl-K Ctrl-Y": "sublimeYank", - "Ctrl-K Ctrl-C": "showInCenter", - "Ctrl-K Ctrl-G": "clearBookmarks", - "Ctrl-K Ctrl-Backspace": "delLineLeft", - "Ctrl-K Ctrl-1": "foldAll", - "Ctrl-K Ctrl-0": "unfoldAll", - "Ctrl-K Ctrl-J": "unfoldAll", - "Ctrl-Alt-Up": "addCursorToPrevLine", - "Ctrl-Alt-Down": "addCursorToNextLine", - "Ctrl-F3": "findUnder", - "Shift-Ctrl-F3": "findUnderPrevious", - "Alt-F3": "findAllUnder", - "Shift-Ctrl-[": "fold", - "Shift-Ctrl-]": "unfold", - "Ctrl-I": "findIncremental", - "Shift-Ctrl-I": "findIncrementalReverse", - "Ctrl-H": "replace", - "F3": "findNext", - "Shift-F3": "findPrev", - "fallthrough": "pcDefault" - }; - CodeMirror.normalizeKeyMap(keyMap.pcSublime); - var mac = keyMap.default == keyMap.macDefault; - keyMap.sublime = mac ? keyMap.macSublime : keyMap.pcSublime; - }); -})(); -var sublimeExports = sublime$2.exports; -const sublime = /* @__PURE__ */codemirror.getDefaultExportFromCjs(sublimeExports); -const sublime$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: sublime -}, [sublimeExports]); -exports.sublime = sublime$1; - -/***/ }), - /***/ "../../graphiql-toolkit/dist/esm/async-helpers/index.js": /*!**************************************************************!*\ !*** ../../graphiql-toolkit/dist/esm/async-helpers/index.js ***! \**************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78192,6 +83470,7 @@ async function fetcherReturnToPromise(fetcherResult) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78259,6 +83538,7 @@ exports.__forAwait = __forAwait; \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78292,6 +83572,7 @@ function createGraphiQLFetcher(options) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78329,6 +83610,7 @@ var _createFetcher = __webpack_require__(/*! ./createFetcher */ "../../graphiql- \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78445,6 +83727,7 @@ async function getWsFetcher(options, fetcherOpts) { \***************************************************************/ /***/ (function() { +"use strict"; /***/ }), @@ -78455,6 +83738,7 @@ async function getWsFetcher(options, fetcherOpts) { \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78495,6 +83779,7 @@ function formatResult(result) { \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78608,6 +83893,7 @@ function isFieldType(fieldType) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78655,6 +83941,7 @@ Object.keys(_operationName).forEach(function (key) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78762,6 +84049,7 @@ function mergeAst(documentAST, schema) { \*************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78794,6 +84082,7 @@ function getSelectedOperationName(prevOperations, prevSelectedOperationName, ope \************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78863,6 +84152,7 @@ Object.keys(_storage).forEach(function (key) { \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78937,6 +84227,7 @@ const STORAGE_NAMESPACE = "graphiql"; \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78972,6 +84263,7 @@ function createLocalStorage({ \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79074,6 +84366,7 @@ exports.HistoryStore = HistoryStore; \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79132,6 +84425,7 @@ Object.keys(_custom).forEach(function (key) { \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79194,12 +84488,13 @@ exports.QueryStore = QueryStore; /***/ }), -/***/ "./components/GraphiQL.tsx": -/*!*********************************!*\ - !*** ./components/GraphiQL.tsx ***! - \*********************************/ +/***/ "./GraphiQL.tsx": +/*!**********************!*\ + !*** ./GraphiQL.tsx ***! + \**********************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79817,6 +85112,7 @@ function isChildComponentType(child, component) { \***************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -80117,6 +85413,7 @@ var _utils = __webpack_require__(/*! ./utils */ "../../graphql-language-service/ \*************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -80223,6 +85520,7 @@ exports.getFieldInsertText = getFieldInsertText; \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -80863,6 +86161,7 @@ function unwrapType(state) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81085,6 +86384,7 @@ function getDefinitionForArgumentDefinition(path, text, definition) { \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81207,6 +86507,7 @@ function getLocation(node) { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81400,6 +86701,7 @@ function text(into, content) { \******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81535,6 +86837,7 @@ function concatMap(arr, fn) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81615,6 +86918,7 @@ var _getHoverInformation = __webpack_require__(/*! ./getHoverInformation */ "../ \********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81734,6 +87038,7 @@ exports["default"] = CharacterStream; \****************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81788,6 +87093,7 @@ function p(value, style) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81992,6 +87298,7 @@ function type(style) { \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82116,6 +87423,7 @@ function getContextAtPosition(queryText, cursor, schema, contextToken, options) \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82333,6 +87641,7 @@ function getTypeInfo(schema, tokenState) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82494,6 +87803,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de \*****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82715,6 +88025,7 @@ function lex(lexRules, stream) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82763,6 +88074,7 @@ const RuleKinds = exports.RuleKinds = Object.assign(Object.assign({}, _graphql.K \***************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82825,6 +88137,7 @@ var CompletionItemKind; \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82890,6 +88203,7 @@ function locToRange(text, loc) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82930,6 +88244,7 @@ function collectVariables(schema, documentAST) { \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83000,6 +88315,7 @@ exports.getFragmentDependenciesForAST = getFragmentDependenciesForAST; \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83040,6 +88356,7 @@ function pointToOffset(text, point) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83086,6 +88403,7 @@ const getQueryFacts = exports.getQueryFacts = getOperationFacts; \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83325,6 +88643,7 @@ function getVariablesJSONSchema(variableToType, options) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83432,6 +88751,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83479,6 +88799,7 @@ function validateWithCustomRules(schema, ast, customRules, isRelayCompatMode, is \*******************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { +"use strict"; __webpack_require__.r(__webpack_exports__); // extracted by mini-css-extract-plugin @@ -83491,6 +88812,7 @@ __webpack_require__.r(__webpack_exports__); \*******************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { +"use strict"; __webpack_require__.r(__webpack_exports__); // extracted by mini-css-extract-plugin @@ -83503,6 +88825,7 @@ __webpack_require__.r(__webpack_exports__); \***********************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { +"use strict"; __webpack_require__.r(__webpack_exports__); // extracted by mini-css-extract-plugin @@ -83515,6 +88838,7 @@ __webpack_require__.r(__webpack_exports__); \********************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { +"use strict"; __webpack_require__.r(__webpack_exports__); // extracted by mini-css-extract-plugin @@ -83527,6 +88851,7 @@ __webpack_require__.r(__webpack_exports__); \************************/ /***/ (function(module) { +"use strict"; module.exports = window["React"]; /***/ }), @@ -83537,6 +88862,7 @@ module.exports = window["React"]; \***************************/ /***/ (function(module) { +"use strict"; module.exports = window["ReactDOM"]; /***/ }), @@ -83547,6 +88873,7 @@ module.exports = window["ReactDOM"]; \***********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; @@ -90708,6 +96035,7 @@ var Transition = Object.assign(TransitionRoot, { Child, Root: TransitionRoot }); \**************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; if (false) {} else { @@ -90723,6 +96051,7 @@ if (false) {} else { \***************************************************************/ /***/ (function(module) { +"use strict"; function _extends() { @@ -90800,8 +96129,9 @@ module.exports = _extends, module.exports.__esModule = true, module.exports["def /******/ /************************************************************************/ var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +// This entry need to be wrapped in an IIFE because it need to be in strict mode. !function() { +"use strict"; var exports = __webpack_exports__; /*!****************!*\ !*** ./cdn.ts ***! @@ -90815,7 +96145,7 @@ exports["default"] = void 0; var GraphiQLReact = _interopRequireWildcard(__webpack_require__(/*! @graphiql/react */ "../../graphiql-react/dist/index.js")); var _toolkit = __webpack_require__(/*! @graphiql/toolkit */ "../../graphiql-toolkit/dist/esm/index.js"); var GraphQL = _interopRequireWildcard(__webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs")); -var _GraphiQL = __webpack_require__(/*! ./components/GraphiQL */ "./components/GraphiQL.tsx"); +var _GraphiQL = __webpack_require__(/*! ./GraphiQL */ "./GraphiQL.tsx"); __webpack_require__(/*! @graphiql/react/font/roboto.css */ "../../graphiql-react/font/roboto.css"); __webpack_require__(/*! @graphiql/react/font/fira-code.css */ "../../graphiql-react/font/fira-code.css"); __webpack_require__(/*! @graphiql/react/dist/style.css */ "../../graphiql-react/dist/style.css"); diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 1492913d94d3a12bd2e178c2c6d77d7e9b1dce51..4661582a3ffd9468ca9a0efe8fdc95c5c3855d0d 100644 GIT binary patch delta 782 zcmZXS&r20i6vt8D!5_VdM@|lU7- ztXQmEtlCKQFY_zQi4_%z!Elyc419(@J8g}%78sdV3QB9i7w5b(7TtK3K;ux0P-X*4 za>Ziwrj*zouFKn0p(Gs;ldm;EV|Cgmmc|I*Y67WFFBUZ|5CzJYBxp7%G0@X3%b)SQ z?tDO8rL!v_Mvf9UWVSP@o8-18o|wcr%d*tI(6Ogb)fs7T=SdkdQrTK8`owT--$AdJ z+ByF2SE4Otq8Fkf{IS}P9ZzIvjMij$t|@GSghqDCvmKlWJQt}oE)po(40}mlyTzNQ z;W!`2Kucy+H$7wul6?|&kGsPulTt_12afgge(+lxt z7}*_0VA&tb-!_4I3I>ZY3Z(1oG&V?O!iJL>FiZ8(jN}#mGt9FQ9 zV05lv6YJ8otAoarO+$>U^N!7&3C-n4N^k+efZr4#U7As`5m?kCe#tpZ6rI!nsLhK z5SXT*=wVDfTkdYcl>AkNiab_>s}ldvTNhd+;G~`_@}nzc;N;K8#@gDX>l*514W3zY z_DjK%OR8}6v=If^C4LxqB);T^Ob{lFraa$l diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index bfe749fd7191bffdf1f69f1e0d1ba1bd34466a24..d94269b5df242edad06ee43c5e12a766b88bf50c 100644 GIT binary patch delta 3889 zcmaJ^Yit}>71lWRv7@9LC$XJpTj$X~5U(`Vl*Tx=9@GuI=@D zy^szj=hsumFxR2?GtQ9-E?X$7>XLlLMINbmzHf)E8Ih2}w;NAsvdlh9O9&N+9} zShV8L%-nPD{m$z<=iYhmtMxBDS$}BOm@S)KFkAl9idT=6+sf+3UmdA9{P47Cc^##O z^(*1ElvA{WEQ)#)N)7UtV|i_*V%{hT`BO4-4gSpE}pjj<2|M>D)og~)Uj z<}b&)Pgw)QCQo*b$V++q$qg~r@y5yAQ7z8NR+ZpwJ+w{r%EG-oo-`S;V6vo5TcfsG z-acg)ZBf|GPn&}mBTTESmlcLfF(DJW(c^_JH5@=*q}6lqt(}-Chgy8h3l*)}z%ZFh z+TvaFFlpRbLK7V{j#AjIV!(ac3r80k1$>|#x{U^RrX9Y%b}P+?30)2DVvwk}hkfES z>Bz`*%4AB!@WnW+j>{Y|#^*>Jg)gI~xHW(GIPIZi5K|nDL;>liq19l|LmoCM=y8n1 zVb#M9@rFpzd1tw`pX_KgB@2yaFPqnD_VH`lWD6C8+w|p+VSP8ODC>x!zZ=#qPX-#q zdgUEdD#bZ#bVs|PP`)C@Tlxti!29g9D2#RCwVy#9R`-KvS)B0`WQUa#ipHYY*biIh z$(w>~<)_N~2)qkV^%L0Z^T7I)Rj`>SgEBd81hH!X)-M)9gozs}5yV3S@EN1qJvIQX z#`2^vEFq-hn2iKe?%W=@$M8rkCcKmpE9=y%!?r&d$w^kkO+YpHQAjs2r7MPf zirnp3w1Rvpn)Igb94NJfgtB*(J~>`ANr9x)OPNdY5gYsVNNI7rtOKRhRH*iD>a^ss zw7h-8@~wLsS5=rEPOj871c~g~$K<7m&@s{@ou$EakNqA#OCcGy{Xuaow}U`a!|ug5 z;G@ce^2ja<5&bi@$pwSpOqrd^C` zc(OOd^f*xB1g+aoV->^BH(~Ln06P?-hwTfLtSA{!dXdV4E+8pVL`{<0797p50?Ib9p1;26`C~~ zeKUMUIe~G0SwX!|;>(+J_=~sTm6cOr4rLD?7@ZU~Dh(b-XYi@N!I7$IKA_cL-re|j zIA$2_c>HZx>nXB>;$762WP+9e16AI>U!Ur{GXkqeL*?gx5~N#ycY) zt~m|UMh8A~8bX`05+;Y~*FP3vV6kH)aA$&#l`$+o1I=a0AU=Ku)?xn{Sh~DJG{%`6 zeUvU`>DhEut5({E*UrG2s&*Om`Ec1;XsDq%c2@{Wl%r^beAsgqzUCR?Hp5I|s0>~^ z3xByMC9**gW${n{fbObcEy`iTIe2i1j%g_uRuOldgFW>rrlsmI^QGGlod`|B7O}*d zz~9lGPz$#YNWxS2>kF{XXuxw9V6(9mJr`lk z!UnM^G!((+i?FdQ8NuBbpa0vfw=-%FJsf@3MTczsXbv{E`vo>SF42#X2k;9qm)LN(T2iIZSDmv!HX-C;~h)I9n$CWXKA6^Hw zUn`Qf!P*E`-$tYxQ!{6EcjSUIs2rb3cONl;DlX2K6F#Eiaw>F%8fDIAt;{gHw}8+7 z6E+{zsVm7pK4-Gh%u828%2aGZT2`EHE(9P!%LeG4Cx!{+r*CCTD9~hXtVKNLs9Na& z9WJz${Ma(j5te+KgOtMtGl$vtVNKf|r{}NbGx3uV=~NEgWjRo3eEoe`v5;J#-rHp6 z@e~iqEE@XF9r(vNsQEvvsQ+J9(8Y90h{CsBXKx`i$Y{pUO<1?JNmFn)W2v;P zmODT=6=Bc__t6+vs+z%PZo-C@WCLlJtF>fV7|S(r{3f&$YUM51P*V`pFzvItCU!7T ze;yyb1));Qi|6t1EvT!awn=)a9lm%AA}jAUQHNq=sc4V+{sC-* zywA=#1+2aec>m}`AZhBdmmetl%d)a<0dj=@;HKQ)+=eB$7Y*f7`vZdq5|blj=KGba f%Ez+#3H-w8$~t%XjmqbsJdw}m+?PMBe5CTf=j4Os delta 3650 zcmbVPYiv{Z71zz<;I!a`S4c>*210=r50f}?NV*OE@AU)6F~K+{IBeRyB-n8r$8q8i zvQgNY?xnSz=(MA%leQ1*q>XCQSk*hGc1ZhDZCbm18k$Jg@oItc4k8q$b?2PxKw2hE z+LvqJ^FPnudHwIJ->JX;Z2jSBZMtZ>c)H}Z(&I+nUZsNcFtYkWk(g2gj+ioXMnR-U zsU8;gi$vHFP%2;vKO$tZ>TNN<{bK3wR+YD8^j3p86dQ5l&ZDKj*0N^NtEKxJ@aSJk z>q-O4Xwgmjo9@(HSXB$V?M{!&dtWADe!Uj<*zC#9jHRfT6b+eY)>rE^F60a2+@ zozBM0zKw9D=#XI@g?6)30RoAFW3L^3%1ARK5h-GdirsUB=ph06`EQ62F#7o-Y6anJ#^kC6T# zCuzzsUvR)nW!fY@;f8Ll&3xJo&(}W6_9Z*RI(`F6mUren;^Uz1h;k;!bduGr*d)Lq zBJ|F)Q0Dp;oDJ&A>oP1toRTUUHzqyzDREXB<)902iAoaVfFIUii3rqc-8d70)itSI8Q=XRTIsi*gS&8PH>_En@i@g9#n4bd0p&Km-7rzI zD#AKrgrUdFwUja#!EiUmqfm(#_JF-gu#a<&a#G&mAe$P|@heeSg>Ur2;?*knfT__Z z8XjU=@hK*%>{vIxXF`1?C$6A?+GT?Css`k&65olzUd@9~_QKl5lAR#6l!|+BPcJ;F z?KYq3g=TG;R7spWj^i=XzJ&Rwy|6^Hd$@4o4#L&Q`VI5^7ooGHD50B8arkAC)`;)+ zLABOo&h^0tsF+CWlODk_%cl05n^Ul?sKS-ea}1eM87|Leb7va16x*rS1UjL@H=$os7<&eOP{Og|7ly!DXY^X7FJ(kSYT;`f<7=P} zzcvjU2(h0{!(My&#H7(;wKFGwziEFFR>R7q%b*(NP?>7g(6IUWm*6*#R%8;M7RxcG zpAJV}e+9N`OEbxNYH~YMlc>D{t>)pMgL|$|5a7SQwgQ&~&6DI|F@u8$ zE5m67aob6#spV+wU3SAH!#LG%pG1=q#Rk7hbQ*OSeRMzIBm% zhE*-0N&Lk>;D~L1kfjE4rtuye)wE{3_D`s_Psl{&M?jXYMJM*Dd#AeoU+@lENi11VzHTBZ=)Fz_@+X$0&s8;Z1s4 z@r@54Y#$P2m}Vr6B-UJjcAI4t9QVV}R{ZlNxJxzq)`zgE+{$3ckst^Y#xQD^A*iLy&}Hyx>+*t5)T&C#p=^U- zx_}B#7m_fqkb4>Y`xWS@8tPzJx&(aoEael=a`@C$Xwrr;bCv3D9G|@kZQ2l?;I|z9 z?JB&CzrP9T()M3rN@Q8y#eFPn|OH&rh##pbJSzo zZo;W@LRie2$3P0et%=to6`D{5QG+?+#&`e<@XP57-_2!-1vS7f?`=B%72moI)$1)^Y4LDyblsuD zg`P6O$mzI!jxG`nbFgX!i4u=|&lpzE2F7v69BkIM;K4bX7*qI@IjCBe=wy4HJTb!D z{Av>aI0p??WROhpc(d9_mOHmz$sKT$j;HQG!;0}j{nA?4HQK?7VmZv+p^atD-N=IR zPEODFMITLXb}osh@5mh9{1FYJjOqOd-qeaVbzsRoXosBJoAZyO=N{l=V`HAAo|FX1 z=Lvmg7!xg?lrGuKn|JR)`Q7?#I^H*s97*>N_+OSQ6Nw@?U`Qg7 zGgl(<)Y}yJ-+@G0q8xsW*)T0FEl~rn#KzbJJK!|D0YAVISRp+vkp<^tSzL^Ck$4L) z$K9ACkw_-Kh&O(~tGRIoufWSQ(h|gx$cxLdG~R(9VjFCcDJ@X}=i+6!9_!&&Y>(%# z9X8FJmS~D|uqW=q9(c`VX^C<4pP0Z!YbuW5Xe@VmTA~F$9Q^`oQZA4s*Z~_+o{oL+ zO{|Z3v!*5LU`K3%cVk=Jfd-r{TPSx&173pd=|Axt7uE4sG_}`U5$uXKcz1LYI^t94 zloYr!*bJ>7jm>c(IyGNn8O)PCOkI66^(`Pxxp5g@h3l{o?!s&EM=XFDIl{<`V0Ox-a-=0wi=qY?k+Tiv(bhgj4naf&MLH>^=L-7q0gU22YMcT?^2FrS|TqOS#qW&@?a6Pfojo4 z$SO^=K}UE!I+D?`JQK~#A~euvqHC}OpxGJi|kmC8--)J4*FmV zw8JiFV8hTrC!&GPLI?05x|kQEyWtr$fDf@EeuZW@J#X+TY~cPc&qZBs48>~rL@e*Z z%9IoN!eXj|HdqG@q$S#MPqg8|XaEz?xu1##`edws8Qpek(f79CAou_Kv7*dXp`+?( zs_LVwwLLo0&e#BZ$NLM=2A89Oy@F zA3mHvG_)eR8Et4!^awsp`FHG&3krmz^+$A@H7FP|(F_f|HJafr=)p8QmftPN{`btj zL`8nASt!h1dn`+N5<21~XePeIr|@fZe@`wPI+~6iM6=MvHwSOU$FMDCDH1-Mx?w-c z>(I>QD9Zl#ASh5YSQfoeJK6+IZQFRiH`>97cz*(#u{+U`E{tpFbEq zo#es>GhGup%8izbqk&aH=d=;J8@ixJY=88*ThT=}9o>HOWBCR2=-r48U_UyA$I!+3 zCwfFD3l$4Fp zvj{J9|G&tEi)RfQ;X3qV^eya-=_Nw|{m{$|M@K#x&Dbn-)jxqQ%4g9ISEA2vL8oX> ztUruCcNQzS|1WxhrAmcW-U)568xF=k=;GRh9xywiAE1HnK?B-{K6eDo*w5Gye@6qY zS~@)60&Tx7CVjCB7dkNB7#p2{O{u>f4|h9f-C+ zCYGn50p3%F{qF-0#v4yWSD+oOjc&*Klt0Fbn5k^IUoF}gUDfT-j>e*a+>WlLB-+md z==+aFca%+rRQy7PDfu1k=n^_-waSH*wnXQw6WU;}=#Y4SEc*T=bY#=8Cf`VD6?2O6tT-ac%%Hiwt?O2ZT+UVEl*_~D;bXXsKek{7!mZGU$ ziB8!YXa;tm8TlB^*gkaMA3_)7ugJILWFoz4NbPm#i|sHk_Q2XWD&BtzU1ZOrbG!ll z%-D&3MtqBo^y+Hi{nl8AazC`=hcUH1(E+T)yzc*RxiG>r=%V=x9Z6dCU=B2}!e~Qf z(1WN>yx$THs2iGz!RS-xJtw96Zgl6KsSl)vMdJt{rr&xa>)@P~{?&m=VQXE}`wd%0{eW5KCHryK>!Ekg0 zlhKABKu59|?RXg)*eZ1Ky&CI(j`e5J#dra`W4XHFi^m=4`(L8%9ZGWHL312kJQvV_ zGU|nGmj_d+N9zZmnHU?r4PBH;w4M2Az|Y3}YtWHyLf_vL{T5wA$&*}o#uup{J3!aO zSge7QV|gXI$kw3^y@__bEBbZxXEczD=x0E-2I0BlXduXYd6SsH~7ilTv4K-;f@4y+0KUT1ax59PvTxcP@-*IJzpQqN{o) zn$j(3%HKmrv>$EYFxucR=-Rl5wwJgzY~wuWE~$v#uZ{*%4}GuWwd{WvTVE<{csN?V z3GHACnwfjiz#fV9PovMhj84f0w87o+{@1a5BHllT<+z`%NeHAS+HQj;?0;WuONEj3 zLOZ?@T_jV{`?IhbEqG>!Ks?g}y%u{c3g_nt?ko9cQ2exhLMAmy8t) zqEDicEk|E`9ZlV)=v(N>-$$qBGc?d|q9@P}en$iN8+|UVS$OUWbU^uIIa!(uAE=IY z+%Vo~hh-`ELcbB+8SB@hYhed^Fzv&dcnoV`f$P!|g|R)FiILGsXh3(P0pEuVB$-$g zE)vgRYi_K<+IR;2VX;i}@D*w(nvrMGwekWQ@EUYmZHx7L&;Y+g12`Vb=dc*%%q_y2 zDTDd_{BOjCBkh6C;T>oL^U%fhH2R^m4&5amqhB_^i{-SI;V8Wd%}8r>t@K3$n1iG7 zaWv3GtFUHrVNLgcH7=a9q1Xz?qT6pRI`=2h7k@)Xp58hHm<|0BSr}c64X`+lk3Nj9 zm9^2WXvRK3Gr1p=j`UkD^jGwSf6+P0+9r4v8c2y)E{~3^HX3;IXb1HDp6L67(Tt9b z-WBWTql<7!8}`2)ucX2TH^&D)h!1>@Hh2V^;mLTva@+9peSI|5FQE+{M5pKk8o*yz z8ZU2`mMDdl(fY1vzXRGO!<>zaH)g~e^U#K#M(1=b`i*BNI-)~pho{lN|Hh%1t$o-{ zg(c4ZVT}asr+E)7S<7#WI-e+%asgNoa?!qXBF|N4N`paX-2^kD(n_>J(C19bFqe z(VuMkqwPG7zW*#5_$%l@cE$QHkoS^_@44^*`3c?kg*%7U+!ZTPo{iVz>uAGSyM)!7 z2R$DOpaJzl1Mi1+G#Y(=BAS6au{h2`fAg^dE4lyQ=E4_#LAS+))D6D9qCY-Y=o${D z;pn1y8U4K9imrvP(K$Vd{)Qx@Tj;P58c<2}v!!~p720k;%y9od%7q<2fu?#Xw#PN- zoL)o^qKxh#Lj}wh;HM@qp$U5{~O^h zDvam!^g~ze2rP)>(Yc?4j%X>mCRRo_p_%&-{cZUlXrLGI zMobJ2<+124n1HE2|C`H&5iLL)d>Rep6?9~;$MU9F-i8MFE;=Q9qu-z@{s|5668c=m zkYEngDK1m|OY`ta~v zPBfE+FqLAooyM`g9ol|hB3Vm)f8o>ML^ZU@} zzd;Y0W3j%#h>)og=+u@)->-w&-T%$wjjqwbXh%24@^tit2hkBdiLQ;+=t$m1&xgI} z9Dk2?bUvDSWOy$h+HP6&eqHO`|E*$0Z?vP4SPmy*aa@8nycPX3ozKwc&Y&mUKWJbz zM} z-xaMNfR1PwI>HHPdv~LO&qp)$d@R3?KL5cO_P;Oer$UdTi|{(Gwdqa*8vuA%$TFEk5dc^CTJ7wB&J25t8UI?%H>vj07LFHm8`|3$AH8x~VR^o3H< z+Gu84#d2?S+m1#*R;OcCd@R<#hp9!09jHHs)v(4*q2C*lT-fm#^ufvKNN1oO&qq`J zY;-l+;U=t(d(p-BADV$Y){o*gvH$g={K1e%SCx^JdAd* z8T}Q@p=gm?!=F_2$JW%pgl@mH*aI_92;Xx1qUE{R4!^^mSYcvXVi-=x>+mSLJ4#P- zakBpgb726J(7AaUT||4LnQjXQN+UGoH)Bg&icZ;&XsS=4Q54qek{L?u7&lneh2#eA#{8F4_yO)Ml+^_MV13y?N_6_ zpa@pP5}4e^MMo|SAluY1cX_cS3BcWv~WMqH1@wAo7Yg`NE@IhTraeK5<1uO(U0Bb=m_4#I`|g4eg8mH z{12Lm?01GaE{q0tJ$jJ!!&>+>ZpF{;WdA#N58V~!SXZ8(F0SoS|?GNAnEA}bxOioRbz-ftP}lij#*)%HgN@I>?^n~FyIFjm0Fu{iEP z8#;;xb_$(>b7&xc$NQJh2<5zJCa*zvSE*R;5lklfaN(Ih5N+TNbT02jNAM^*vZd(P z@|9?Z-=hKijD9;ljm0qQ%<#u-6|gwvhp;@pimtH(XnW@{_4)q~7j}5X-64R&(Xv>X z`WomW9E5Fg0=kH{paGsnGk6i5nk@H(%w35FnitJ%VRRQ%i1ke{wf|dlVXAwek@Z7I zHVixA7&PS@qwivA%AcSeo713-+Ly_zuh9@94-1-WxhBhqhM<9mw@)W(G%ZM%%k9mLIq`e*Ql}g$=KY zZbJ{6&(M*dKr{4vEMG!9zHD|dADV%Z=s+r?1F09wZP4et$NC|${+8LSRwJ55g$K<2 z@xi5NF?+ru)AA@!@0}c40Sl%4{0LxMTCAwSwK~KbF{yE`y zKK;;!m!JVG!^-#qR>05W{eRFDXFL!_kOK|mDs*v`K=0R#_1B_-wTt$S^&^l>CKI=E z;S1BzIhzw7cmn%UUJ=Xxp&eW?H>{N+Xv5XfZPo;xn%3x4^gvTSB034p;63Q`4`MDq z{~zVTgXINun|z19_#2v{w0WW25*tzOfzJ7Sya`{&npo_?@J**XR-=3$*1(Nu27iwC z^F9i_pgJv*#e-S$3o#?*bhmLrEtp6dF&&KkJr*4JDR)DQ27qq<#=oBRX=E9D$J{q?bTCR>p*aGdiKe~#?pi{93U8GN=zmPbA zRWb2c=(rks!ZkwQZ;l4sH98mxFqybHK5$2d!LtGlcq4i~e4OOMegAFrH}s6ovNSBN zQfL4J(Ll$cpZ9m;b@)Uqe}hda|AsBG=Ci>m=*YK5KSDEb0BtXMk_%IjSQZ+-65Y?G zqK(mjdSO|-1>H`MqjUc}`u^(ZCbYwy@%}!vql3}Y(M->!>XV6rT)0T8q92#_usn{5 z<%Q_)19qY*%UB*#pATI-bVm2Ds0(7@Li7vv|&^5CSyWwfHo$FSHly^WgIRFiGJlgJLwBI{d zCPN1gQQ;gvfi}DXP3`Nk{_R-58x82|SpOs1(3x0HUlrcZfd*O_ZKnp>ep7TUbU@n~ zkmSO-8-*SWQ_u(JqLDw29y~9h9qmM)-;d7i@#r7XOfQA|dC_)Cp$A&ESnh&mqCeVS zawr!@I2mnlRxB?M{&O5k`3LmKZM`=9Qu+?`!|DaJ;kVEf??QLa zC+LZKG}foR9zMP=$12p9dY%1mD!Wlp8%JYVd>Uy=buL^V8aRkPa2%b(i|9d-Wkcw=2--nqbT>4_ zX4n-Q;{x>gy|@66;#8cpF=h%4II$^}>15(^E*w!+OnoSz85w{!GzJ~nU04z4U{!o0 z`U6&@oM&@rxH;NhJG8yN=xU#W20kO+e+aYs`TqFtRVu$bLc__yZea#@4Xi znqW)HH=-kd6>a!iG_d1nz-OZu(GJtLg>9W3T{G99^|iOf{ogF!=oW8`LVqVb5sma= zbR>_VyI~2sIG3X5#hU0_=yRWB|9AIo#T9a3EmZKxU=SY0$TEn~Sy^agZ52&cGv;C;zWE3{g}=5PS_PCu{Gu9Xolusb9@BJXfp9txJdjI zy@*Dd?cK1i^P%OIXosEAk@kuXL+AEZbn#7(<=JS5i_j52gHGXEG{ARKW%l0}TsZP$ z(Nkzg7g7%}@>rj9XXv;9n&PtP)YU;3>vdQb2ce7bUbLMD(0~`9&o7O>?0xtD#`wVY zcw=|;fDds0M|6ZIu@(M_j3QgrDw1X?&4*^_-o}?ww)n5+{=-PO{Ir@B;Sl{=3_P-+; zM1_%!L<1Oyc6>Y9&>S>?`RMb@&|kf*!e;mb4#UzPgunfEKe~92pa;$sAI9y7W~y8) z*ZwdW=DuO9Xb~T1hX!;#+TlQSjf_A8x*46*N%8*OvHSqKHWuTx_#&FAWAXlZtVTK0 zuJFTY?Iag|0U3pkd^*~}186EAMnA@ooL7B(evOhtd3WG91f_~==}+3dsEPM zW}>^~eyoBkkU)}&&*KB%pb;KLGjRqz>;FbGlGq&rxeSfG5PH8Fx_E10H*A7-_%J%x zkE3hn`B>h7X6oHknfDM{8se& zyU+mUq5&*MGx<`yzuo)p|K0I{uj2zJ;{*R;8SZD_8?1$P*cT1p2DHPmXopkKf!rI* zi_xik0quBWEPovR7E{0f`;`kL{TCha6`zE1J}ghU1e%%lXop?!J?xLJi4vcN?brin zQ+^O@V!qEp#@b*9%Ja|CHgJ)AXdh_ zUxZJ`W_Tmz@#t^E4&tL&Zr?0v7rv{C2A)HlsWe?chahfyZNg#c#uNW3d$V52AstMKksVUXPa@3eOG1j+B!) z9(QAR%Z(3*KQ5n-eosG#ZE)OoVb0d0<+LN=Kc{JjKKBd`$Nb-ifA8l`bPA55M|0_; zA?1UxDdi_|G#*61C$#t>wWyPcja)RN;t<}1*Zdf!U@p3v-#|z70h-E-XaE(Dr6p$K zax_C_j)x2m$JUe|!fyB_nu&5J!ry$Dj?Yuxi(UQxKk=t<1nxC8Ps2cK35VwAF80+yiv3*CUa2H ziwjdd9PMBV+VEZIQTrhJrSmx~j&EWX{00s9NAv{z86C(Ow8OvA4zryO<^1Tt%AoyK zJI((0WNJ=@9bJ#UFcx#;RP_D>=t=ernu%AV8_@vXLId6z{Q{d&{t*qd%$ZlqW!>8MPbUSZD=l%q`?<@S4 zmY9HpunK;bWG3ai18vXvTH+l^HSpFOR=5zJA zFr}5TIOUpXAU&`gChzCM)&3ef(miO3PNE$Z{UaP8-LM(uiRe_kfu7~>#rxl*1Iaia zj@F#$QCk(Ag3jog=#5VC2xNfC!~`y!)7#O8XNDVzg=m9Mpbe}**T@=lWba~S{2E=H zmt6>J;Tm*mN}=ypK^J)gwEebd0DUp_^Z!UL{Lr~2KJYSLq`VdFc*CC|g>Rt^zK5p# zGn|e;VLFbw81CN~ogBS8`ViXQlju3H94ov3PjKNX&UYy+x`OChD2g7X<*F|tYoxS zv?W%fz84zcy;uO}VpV(|T@#<9yWu33#mxVNT~HajQSS5)``^{SG~U>XuG&Lb6aPU2 ztNw2oaUFET*P`{EV!1mykfCS>Z$bl_iDv3abkRMBzW*xv+*?U5%5d=oR>Vu_;wtlB z_*`#{j${bhz*KY!?nRH#MQB4Wpi{X8?cf76b6>^sPv~=hVtLHYlC>ZH{#SY`(oSec zBhiMZqX8|5ZpFHkPoN!Kla`)puqxV63#^X)(35R0y7)H7`yZm2_%3<^2_%^~&4mvZ zNDm#CLnCa6E}mg%WGA`aR&wSk9M`o|?iU=u~t;7u{&|WW6;d z`)?{2#i>Z5DSQ?u<7)f}OJzz=e1)gb&-M2+r>7QQ*2~gUi>(2=2uGvu-yF+#pi?yi zT^kRf0W3zRavA1v|F7Y~Rlmau{1Scfr|5Y!Lzym5Pt9pw^nU4RO)NyY8P>u6=+V3& z-hTxh@fI||chHRO#iZL~KNpVR4BGJdXr?UT#XRU#6hyaIQLKO+(W#k?*Wg^Nj4$C} z{0d89y{w^~{^$WTG?vF@O%MP6&m<}w`3y9&MQF;Fpf9XI19&aoe*?|PR&+!kqpAH0 z9l#Ov{Zr_3f1+#P@@(m;ldm}1U)^lUkotC1c)|@tx6Sxio)KM$uKMTE4&FdJdHEI#`qbE3vFls8o(HIyG}vh zpO0ql$>?*j{w4JJ^=KyEMc3Lsbn24Fxv=5C&9rXE@vA!Fc ziNToK1?YP>$NI_WK$7T)7oq__g$yj2c##VmUW2B1TXYYa!b7oqDwh968_bzK1X2?H zG^>UlM6J+(2cRRp5k2CkW9q9MI`YkUh2Q`8a$&>=(T0zrFaCixlr={PFh4r-vS@uR zbmZ5e@3%(-?v6e;44tA|(8YH@`ra~hs$a#_&;MJvFf|{dso95qxEzZ0M`Qgjv3vn- zAT4L;C_DOIA+){>`hE>Gu)1hqP0#?k#PUE)eg5Cfg^TPCw4s@32IirudKPVXeRKyp z!acEkFqV&_9sZ8C^A|d>%W{Pb=0Y=83=O1wF8042*QG+QMHf*^Or z^gNh>1~x0!KaA}uuRzzr8MM92a|g4d?c_z@yCygL-=ni470yvBwBteOVjPL4ZZej{ z`_K`*gf_4)mfu1<`Vd{rd(n{}ik?6-b{2i_Uo?N=^!-KX0G>t9m9??{U9_L%r(786x6$MA#+m5f=&s0;Hw0Q3 z4WJqtP(yUYE#m#|=s-rItA84r*+pnZSEK!H4JH%sb77>PMh~Hp{SRFv=cAeOg%0ze zb6*(EKru7}Wzh~Qq3<<9pKBNIcS1AS9c{l4Ug`cH&V>=(ijHU++VHICT=a#7Xh+YW z&n-vaTOG?AV)?D;E_7g@qX8X313VS$|Fz!F|0}KvDJ+PoZGk>m7fp3*w4rYC{vb4< zn__t?8rW=fgmcjWEI{91jBe-U=+taP-`|a?{eOT9JNOY@{b$iRy%^1Mb?6{J+F%j% z`EuymsEu~e1|2~E=oqw}Dd_XF(TpvM^-o_NKmS)#VZ)oy$li_RPof9WReTKX=sX%| zw*2AwJZSwjXeMf+?bVC-o1>ZO9PNp=*DpW&-?OK4xj-aiS_@B{*DeH`8OAiG<(5NQ4CXGK+qSPqbcne%iYiy z`=ig@6ziv>1Gztz7sc|^XzEv@?W~FS*CA^snb;OC5}%?O_yKL`0y@(4LSZCX(fZuz z$cvy2mO(qHh`wJP%}7ghF?NgP!LfW3IDSiS?-O5=1S}boz1A0H! z?}_!_pn?5>X66){ng7s0a~BTp6+-Wqz|EH6fP z$I@7S1ATuB+VOj6K>N^x=?J!7rU@2H@?CMFeW{LFFAKlEsdX(S6Hh2k}x&ND&4ByZ1 zi9U;^cwifr!|$;XW-XPT7=^8{8NPx;@f6m?Zl!~>(8ab9{q5O1*c|`H`q;Eg2yiM^ z_VfQEF6{6E`crJ-vSEY`@wGILVswO8mk+6Hj{d%|8#cpvI1u;XM66UHJuwBBqH8FB z#n4^}bWLcOouXraT+%Xb+afg7v~KX@;(iPO;pl zUNUT>5wT({n#!rMJQJP6htL-n$MW)6eg)lTo6vp!KKk>-VPxqfE}|#uU$Oijx}DSN zhqaU?887mq9hF5NsE&S!)I&RHhpvU*XzFf6pPPU_cRRYT=c3O)i9WXy&D3k?dGSlE z{|#Mh$xB@L<8h7#VHZ?FJL(c0imuw*(C6l%`+ODp zv9W$8+TK%G%>BPER(u{R68}R-l&w+dum~2U+#uQmn^7KzC2u*Tav;S`8!XtGa5>a9qI+r`pK)y!L>XT?7f1w>-b#1s`3;lIlE3AY! zpdCGkzPBuv*P`vdhaSm?F!k?$oZ`ZiCz^y2fgDHM$zEz$CwXv3S)26vzxet|C9 z<7fuYpo=i`b>ZmFht73lbg}k8cUM33y$QH@;#HUo;M#U%Cx@DN-t6K%D zqa$dK&gl)&+i)-CIp_fTv`$alf*+zIY|tibx8~?b+oGB5jvi?9u^WDwzh~qCeXlm@1rUED*8V(rT?J&I8VoLzdX9S8=+It0S#n$ynizq$jn$?gg*ZQn$Zo& z6ekmVxbVa}7H|9>%h@`GIVym5Tn;^eu0`jtANt-bw4;Ub{`2TSc3>IYhj#oYI*=@# z(^G!}S`^Fs`QM$3X55&DMz$60@N@KqpV4jeFM8k<>=HU?j5gc}4P+pixv^+Qr{fj4 z7(E}JkL9<~jP1s%^q)A!g(Jwoo|FYn>PNFP8m@EE#EU%~$PJNoI@rF+OoKXjju$J9vCRlgWr zl*`a|R$*~`8y&#+Xhtuh?d9mf{%^uX!5-mry$`zI=b@ig3vetxj-Cq{Jwrxvq0beH z7DGo?8XZV8G?0$i2796%KZORm79IGTJ=y=x^$sc=(O2k;$I%E+p_#adEwO2@5XdZa z$`+s_U5<9}Cfe{PSRD7GYvMvQ+x6kOqUifIld+;D`e5I9qpowokAswxwJbeIbc1!UgCQEQzi} zGqyh7--))fH@Y9q++l2orTd02A~$1C$}eG6_y2!f44|TFzi{%+#afi#iJr&mlq>d6 zPyMG8{m};ZVs|VsAguDSxPtQ2csI5fn4TDe@1tw1`k?ULa6C?+ya9)}|0@g*9}W+o ztNkmq!&*av!?6eDN3kpZjMrns8^Rh{fM(_?G}WunjIBpA@)o*FK0x>V_vjQ{!U698 zvO~kFya#=79#+5?umgUI?uH`6!iP{v^c<**KHmln>;`mBUq=_^Z|M73hli=`g|7Zl zSRZe}qzB0=E?j&cpo``px+}g%7t;lFH(Wjyz- zXvRvTBddkB*9M)E-e?BKpaZ!R9Z2#KE_`7P`ocTt2=<{FIe|9tFB(9un}P+=07_yn ztQhNO#QHhdocaZLFMffuvER6`OTI@kkWBo_g^TSH8d=DuzB+H`)xH>-Moc5N&T%^e%KeFT$h^J;Q}5+=!;=12mum=vS_D z@qX@!VZ+^u34BKvtm7Z;0g&WBF_Jy_4ubGj0nRE`q*a={EMiku;~m2m7Fl z>K1H^x1*_g2Yq1=y6S&KJN^aTE&rg~G|%KP#|6<0)89P2F2)DtDtP+>d7BXEd;j=zF=Qg!;nhdzH}p^|2CmLHnDA4mdf73sbxd z{qcD{nvpNij{b+K5n=<%d8URVw_|i6R;K;{x*Iaz9!6Fi{fbrt&1hXr$EN5&nuq(z zL`N=6QMYJcbQjzZy#-BOGCCVwTn|Q{Ku5G9x(-u|4efX@I>4{c0iBHHe=+s%|L3_Q zJWvr`Bu!$uH#Va@7Cj$UqYYd(Eu^j>`g{%SgY9uJF2{11ac6k05}KJ7XhsI10T08} zpa0+L1r^irdYp?MokwvzmboiEF%2I@QfuE+(i-tou_L;QhoRpSlIV+1V}0C+#qbPv!(1~$c_{X#d^Z}v zL3{{*MW^DVkocjeJVS{H4o zRkSNQ!v1K0d{j7jOKDMttSH;Y2HfHdqz=V{^3OXV8z+b=Vpk z&JH7+iB8cY=!v)ntK-{P3(unMmANkjmTbUn12Q-6=(3CGlr*c)SKZmZV#GF(>$wUz@Okr2_#r|l6qhfg)x;ySeUwj08 z{xvL%ThR02DEj`-=oI~demBf`Ae=Al(15$4i*p#3^YecT7e@F4I>%M#hE&!=w@rKW z#Ubd66VQG95t@-t&;#rj^c*;c2GD6d8} z{hz@_+XZ0+9no#o3q2Qx$MSk~u6JTRJc%W-)WXnFYxKR&=u{2Fd}(YyY)X07q7d*- zG{b3+gg?A${0RI1Iw~em;bM6M+u$WM!sd^LshErRQ~m(`p5OJc_$M4_Dl;ArQ&SRa zQm%lNZ~%J$esnjyh-PLjnz7AEF5GrsqTB8mdemM*Q(0hf_-a)Zt?!ARgcHz%;Jmisg?nGvy;_JIB!g{zl)s?1{Mli*aFu_0h%E8(mC;(2ho-4J6UU^(dO+)#wy# zkM-Z9bNnazUY;kzhf_r~z((lvUC}@%A{j^~W^>`E*mGD7*P;9P2Xs-Mj^)46=dvsb zi>@HrQEl|Oj_3gTqN{!g8t_?zoAq07ha2no(bEs500h01vg;1rJ;kv==;af_lrFnrm{Txso4aRMly(tIye&B z;ZrySkE0`Lvn&MG2g^_%hc2c?vHoc^6R)Eg+k{TR&RG5=mcPN&VvO~FFJu3EfMj_t zL|iIb30-8h&<0zf&vipT8*V~JGy{EZ4jSkZbPcUW&y{b{=Z@eE{23kajmyJYn6RAv zZ^e8n?C5cHJ1$4p#JcFF=r(kby@Ni#3tfC)qHEwN8qk?opZExBI_&Co4L zE(~BA+VMST$BWRluo!LlmFSjOzblpxqYeFnPRRvyEv2mp+pQ>CZWbL7>!)JsE8P+< z%JaZxbWt2dw^jNJ;WrzFurcK(=nK=Z96o_=ryb}Ir-!jBCSD9DU^R4LL(xp#h_*W! z9pFRA!1(|F;=+_JLl@Ud^n}`r9w;Z!%%rUh2S;wS!_sI6tub}>ql<7LHo;-&R6K_c z;0<(5oJ9lr1B?3kpSCJ|s1!p_sNQHw??4;A7oCDf&_JF;7u)M-L+_%`eS$uB7(L;B zK^NceP{p+(dV8+8(xDxzXe?b zJJC1?6S!{z%*M!X6w}$=yDHRK;aIS{E8WzzMbhY1wU2zGfwi!C| z3uuSgUkj-(h6Y$3t-m&wyP%78IQn5U8(q{-$NL+TT$tkBvEmRq;@{9zUbQw@9(}G6 zy6QWkyQU{P*ZtACe+>Q5c{Y~6MV~v4?v7v40Dni@NoIaMyqF!$K>lc@Sl<*4q#YW- zfLI3wQvYsEWe<0 z`gb(T8zGhX@H*-%p@EM>r)VZR74y)ME{pZ+&`fQ|26zz*x&Lde58u@~qbK1VSQD3H zMcg0DX&XYhHWsITFfPRz=prk=G1wW)Qoa+*;d1l<`WTyGmQ7)Cx5L!m|GR^WI^1{> zec=%H!_1q*&wNAhCdyl}8&-HTq}#6dVH zjTECDbbT-ElHTZ|9gSvY61pbl#PVzCdGKD63rF%T+TkUvg{9vQAFqAT4sSy<@*p~* zmDmnni{(q`E=d0%Wb$fkPq_j*;z>9dZ^zE~HGYA~@*jps{y`(ow<}m2eX%mS?`ynox&T??RqoT!|CYu+kl=QAEMj(8#Gh@L#8yDILn2L@Go?33w#t_D2uMz z2I!~TYBXi*(FS%$KSu*Oh^G1!`dr4xVbK*rJFbo%y-m^keN*?@|F>{qq_fe67Na9v zjduJxI-)J;`S3eBq9VIPAl1+*sf#YUCee1$o@l^>u`Z58+kYA}(SKq&7o~6|8tHCy zB;TMJIfG8kzv#BiwkLGd1#PGwx_yVB?L3UL@C~eu4fciu?Pe@ac^TT?JD6k+5_`FD zL?Vc)kxGx7u);AiNU%P5q45q?VPmU(hhVI8n_%IrA=Fft;u>$3y=y$p{Xonr5y<+{~SRRHBU>rKdv(Xdt z$w`Udo<#n=x!K>)o~I!=PS^ucn$rK*?>NO79Dxw^I!pV zYOBX`t0Wg@U|_766rG38<@4y&e25144Z7Wah@Oe}|3OEV>x;0MOQRjtMW?6(8c5$* ze`~By&gR0i`4RMhc?sRe@5Kkc#QKzfKu^FTUxtxw##CTfj{0xV4l?$Klddp2Ma|Ln zZbEn2o#;RwLZ&>Kc#I1pTpDk@f~Imkn))s1+ISD`aBsZ-J(`IVXyE72j&gn#0xpJ@ z`=E<@G`g6_qif+g?Ct0O7A|^Gk@rC8cno^-jmK6v3H^9}6OH@~I=6qu^5tKLMVS*l z$O@xtqCOgM3v|s~j|MafeSeDe?*G}b;&F5iUqD}c6UXA7c)!8HaK9}&f&plQx1oXE zi+21VI`@mwseL8-ZuDz(&7H>7zyEXDH|eR*{rqSEebBkO3EScHSpE>r)IqF`)xS+o z{qsE|&`h1hj#%$d`0$y99$24XW6XCrwAT&0QeJYH{ojp?U#M`~H2E%kF5ixhd=q-V z^pWsQXfm40edxabA(l@>|BPn+KCG!i==0^#HPir$VRLk#L%(PLo65;l*x-CLHH**> ziP=KCSc zVPW(rErmANG?qJHYVn{APKnNm^-It-@G?4(b?68;qHE#f=#g0e2bQHinf1r8NUGyF zDq5ol&l}hs51<*SbSz}51=`>MG{9TYUrODDCGn|PehVGQVRWRI&RJgJ6uTnAkn ztzx-5=5YTH<-$3=HQu-feQ=Qv;Ipy(YP`P{-F~~#)TjL~JYO8^QLci1yB&e9{^!wl z)}#IGL^HY{lO4D?#D$Be!pU%e)IeWojIQDi=vh7zZ^DOhH2#C02P1z;PdtoUu{w78 zHGEH)j&`&UT{B;!{hUJEKmRNH-&LCVR9LMA(GgWa7gNXRcyuloVrP5?$KtPO2YpY6 z_lKaL8I#ZqPDeYOi$1pq{cL#>U6jwBX8$|)8>ujmPvVUqunOf%SP{#g39GjU`rJr# z4cvh?e1CL4dIUd)&iOKQq-$gS+tH8FZMr|ng&#HtW5svq9Q}aK-5=<-x$JCcuprt& z1x&4ebeFV`^~2FjjYk8U7Rz^IYW1U2@eG=wQ%ITuo19o-#mkhPUe4B^6&OhdQP0xXWN;B~k+ z-p}<%_*t+ldIYz{E;tfhq#Mx1{26+16+It5J8nTo{!Vlsnt`KuwV(eNxG-foE`$II zp^LCCmcU-<0W}3H;}Uf4KSW2eA06T8Xxg9QeqMA6N}!9ae6(rwdUgMgFe0JB>*rJI95K z>WaU@(Rei)P%*T@%IJt2qbY8Wz40;h`@t!6Th;$N?3N~IM#rE>?QQ5{o{moOd~{L2 z{5SjG6mO3Y9KkY_&!TH0|34wpDrkT;(fxgGEVn@e?2b;sP_*MoSP5sK9j!*!$XnPS z52At9{g?gkDsK93*pIhjDq^&u>9PDkbW!vvbYHJP19~IYZ%0S^0Xj7YuqGZsQ=a#~ zuw4tFYpP~4R$Py!{1!BTyU>)*Mmv}n>mNf`|5Eh%ZP*4s!XcQ4W5wquq90y&p_zOV zU5u~A`y0`NFS&yY8~PfZyIoR*PVz4_4>s-laiHM))Zp$E`-^!+*L`;Vh@ zy%KF_C%V@5$NFE9cKG|B=^3eQR1{O&4sEzstiKUmBln;UtUw#yiUx8Z`b#vC5k{O3 zT^kj#G&V#79E@go92Ri@Pv*i0=c64jjlO}Vau?o+pJOd-k|{ht0UJ`j8=dQI=$d&C z?cg(X`yE8rN|nqZ;KpdVt7Z59U@jclM6|;P(7Adfx&&?bIdrPlpd;CW&h0Mrz3xV#ew^NdW?~Y0UQ9>dn}cRz9vaY6G|)9!lNqUfxq%8_+=9ON9y)?gqhFyZJB$YS z2c~vMwvd7R=#-R3Q(rUM0)4J04#JUW#@>td`;uI^iho2K{u7Nf%M}@k8CV#df~RmA zZb27ey(=?Pzw;T36(}#k)Z#>*=$u@m*lMqHHVVh*}mU&rd0 zIY-DyU9`bw=&Ejwrmzb-;z8*CzbV$wj`fdXQ|gzaQ~LwDc1q+7?>EHM=YKmcJgJ7G zBcF+7@ewrTThIXZp;L4K9of-Xe*vA#f6&xs&J{YygDohR!1_1>9l$eayD#Ej?*Hvv zjHTku++jpz^MvhE8y#u;Sni9??Ra!fXP_frh^=uocER7#ZP_AkM&f1ciwiJwzOZN? zM+dSF%enuzap875W(EF(c2MT3jMQ0Q5ACQIR>JXE7nh(@wGZoI#?@hjjnEOcMAuIL zSbs;XzX#3WlbAHMuX14r>(K^3K~tK@9~#Vp&UJ1yBgN3gRuvmzL#&LG(S5!go%0Lm zVy#mkOwAZ{+fGK?TUdboZz`Up!iHZ$51`HHHav{p{}~|UgpoJLT9mt@fzLwUdm#EGIM|7%?G`};sD`ecrf7SeFq`{-7#A*vn^P4m7IgK_ zKtJENqnWvgZqFJe!XoR7HaHXq;4Szd?m@q7_AeO*G8u`PDKNlk51WhnEL-~t-q<>f-T0GfgFXezHo@ApJUJ^~%dR7@Q#=u|F3SO03X!`IRF zH)CphM!!sQVT9kK51x!SenV6CZ>-N%J~WUY%~(0?fYosz-if#4L7ap=D}+V13(Zi@ zieYV(Lo-ti4KUe+3ma^Sj-XR~pdUK2F|j-aePK2l@H{jFkHzvTG&Aeak?uqT`~n?F z@k-&nn&_f#jIG@N)4A}3+KC2m1nuZoEQ`NmH7ry)G}Io=)Btp~4?_nq7M-F=I1lHd zfflF|EQzMRGWuS9Ea?7k#)S>^Lq{+S-M^F2$mgR0EHaTOEi_mQ?XYpQGdj{CXvCw?2FFL|psRj4`raCx zif^OuHK-n@uo-${c19QTSaj-UVA8o-#D$AwIhvv^=miZ7iVs{>GdxfOYjD2}R>s@W5x;<@ zcr6<6c670RgpTY$ET2T%zlaVnN3BpUi$2$=7W?0mtTPohI22tp6l*tb>IFA z`h)T6I*;Of;BFtDbfBJy{`H;H8~_ewJ_W1;CTQT?1?|Cl%-4h3S>J|!oc{Z+=rkFyZ~c> zpFlMpsfqKzNerr?tcIoCD2XvNH0%cISw0fftJ!Q&g*Jfk!DFBvwKqT&zHj&hRKqU~ zzk`*T$7<>{(#S9Xl)WeD54v}uq(r%HhEFz6*39`rqcE5ie{q|40F~Go)Fm4aHUejY zI=nAIUE|>9&i%e0Y|Q)v*b1!G!nw;ffSd`pt6)p#+KdIY!Z~0La2=>Ey$)&%?}B=k z{{!mKMQP>d`KEGpPzx9X>ONlyW&)3ZdKrHSYR96sb`EJ=P`6`A(DU~{hM}avuol#l z?JrPU^d8hRykr}PcqCYX`EpS4&&(dPt#c-_gF0l5K|R1afZ4$*X5R~Hfu}&7jXOf! z|1VK=Xug2D=8@Yu0jWT}N@WA1fF(g4#!8@G&pUu+z~Nv9@CYcL=b(1%Ur=W$YJhX- zl7rfzJfL`MgKh=1L#YP#vVa3%S|69|HYmSed#9mUDk>)uA17>?If(hFc`xQa})`3UIpudD%=N52Mz#r?H7YO zbO+6T+b}{WCoeOo!&d`TgB?LFaDd@pP?vPL8%4L#1ar&+^?;ZMs^d+d2zHzOjLjc{ zy3Ia=x=Si|b{eb&>X3$jYIG;4Gjkm*3Vs1~I16_1^Zc1VcWV?Kp6j44g-=%t0CnHC z2G#jaP`A+@P!FubpjL1b)N8~;P}kPg%{iR$!1PRWfy%27>h^68>XP&XS*Y7J6eTx? z*`PW+4yFYoba(8TK!4_qK^?BXpa@2TBAf&2Fs=vnns69YBj-Ww+yhYYpFr(wv>whv z{Xx&q|29C;ZP5et2Pc6F+z1u}j~M#)wC4e+0wY1sBO26>YyeAuN5SG?#9*i4vY>XT z4yc{zY#0L8*8SffMJxLgRL9pr?ZhikTc0(=@#h3}s7lzpF(~2=pjJKv)ZH=(RH3_| z&cahrdAUQKOI8hx$hy6^Xcx-0$!)xgWX-2b}vUofcSWc{26 zOj^SNpjK8H)TO8i>Mp4Z<_1TBYIFyv7p=2k9`Fa)4$RZvdG(wDYUTSu6+RB?w!P#= z(Y3n?>KZ)*)kvfPPCzVBTbI!0sX-BB1aN}#=-jVqK&_-Am=g>IbxD2&b-RUuD*Pv?72E^W@KaC^thb<6`VG`2i!{i= zB%tE68s-5#_kUp&bzBov$E_TPD;QLv(Vz+}0@c7uv+o9VX3m4!kr$vY)n`!g{67y* zeiTr=sX;9yuh}btp6~y)K+!4f4XWdjpjI#&6wwk;1gk+2>;@Ho22}iQQ1Nd;#eV^H z*!%`Njl~A_a-9NHToF(^RTlL8{%;Kwt)xDvGtkX&45(AR4Addp4=V1e;Xj}ni8;i{ zO9`q_VNg5T!0he849tgsnZT8xcu#|#zyJLVMTh4js1^DQbyl3vFf%B7F;K*{K&`wr zs1*f+y0-m6H98bj{5&u#xB<)tUIX=HjWo>RPce-9U)MAj2Cbw#r~>st5eI@I>IN!q zD5y&@%kVez?*VlN&VoACe}g&;A3$A_ub|FSgyGIkB?mPxINYvP4Gb#S1XRJcpq>l8 zLESbpKsB(%{Kss5161R0K<$Xn2xlkbgSy5kL7j!np#1qk)u{+-A+_8n>aZ=SE$n0g zJeelGh6^_XE%Vl#D_q3 z$nCm-qC&So5xxi2X^hd%%94O;C=;k_oD%qd~23KB!M# zH-Ne{TR}Cx3)C4p40?Y4=N5`O{{ZTACK~4yN)2kB4HRL1P=uAtUmet?Xl(QLpms9Y zZ~&-FF%r}@p8<+zh52`m|$pbA79?+_&bwIk_3+4I@F45-HH zfZB4ydh9 z3+i^t1$r(KsK#1@T4^^>hi?d|IuA zD3hFPoDkGjrUpHYfLc)%P{fTuJy$w{dV&rIwUbLh@ooj#Ik)R1idK9N)a~*S^am47 zc2-&l6hU=Rah*UlGzipT8wF}>rx-3a`vy=uu@h8-`^|m|)Q(&R<5Ayr4@F!00o1jO zKE=6~=|IoQKpn0spblS6Q1LB6tt150ipPRl;XF`z>p(TO3)I#h2gP$5)J|OhJ%9h} zE{YD%R~f*BQ=P+1uX@2wswJP{1mAC zyP)Uqe?CFc3SNU+fzLFjaC}gS$w4)c6I5a$P;n(eHCP)|V~s(@w+B_IFQ~kUhO^AR z7}QQ|o5uaGE!~Ad4V(bAqU)dv-2rv29)n7F2ddyFP+RLW-C1cIP=_rOs54OxR3kNP z-WpWHoj~yp0CnhxO}E$oiDsBPvQ#d}TxRjut zA9+C)s%%&f)Y)hWYN4Io=ICjL0iaeo)a;|oJ{45wvq3$o7ukFtD8eJ4R(Kv%!w*0; z@Gqz{5NoEha~VPL=LEG7cRm!|R;54%)-y+EP=tLz-IilO6oodDI?-=Hqd z15i8n0@RoB-@y!Enpw^zs|3p55QN|D>VP7mzMu#u7|sB7cou-#suiHNdM&6%cY}(* z0E+MisJrL|sJkH2Y-jEd>Z}w26;~P5!kT#O-2a_Xv}OIka^M7T5qK7?0`{Eay!ZP% zScLgYFejLKuJbLFMqn=Hlfiu8ey}6>4r~CnnCHA5zXhz$+;6^PuMO6vzH0@FKlsTo z*#hT{$YNl5>}|nP;7YI;_{i)n7CPViSqc`zo@kMMaSH0tjRGrxQw^_xWtgX0?C1F@ z*w&!CD2ClAnZb{sUPSztI7H<^ALg&Qry}bjo4n@)6=v^Ks>*-KJ$!w14an5P>?YYe3WIjHLt?qnWk@-=IhZ^gpn7!rl`s zM*Lss3-I%QMSsc^;?`T^IcWAG&5tH-Db3!ZiC)Y%Tf9H^4dma_?_d7H3i?}OGaLn2 zNm3HVS?4;Ok|_925*GoIeHPyVY)*l=w#AD3$UKWUt=JlD_lQf1?Hl?t8Y!7f&Z|@mN0)S{QR1U>ju8g z#FT+QGyi|q)siBUFrH&OB>PF6gPzIe$4J_0XX7PF53Nu~^!V8GP~cyhk>n$%IDC?K z*pd@l+?toIm2pb1L%!$wk0&7_MS4N>md?sS%KsF1tqm7kI-Jh$BX}f=6}@W>$(SFm zq~Ugn-(B)NhNIaoq$PF$c_+X~#CiVyM>`63rC@zeM-F)(3i3vVN7k5q7jXx%^JD(5 zH|UKZ839V>p>JY%WiT;Q7{6JQLADFE4F3W@6YTCs$9XJk3gq7*iJ*q8cs7bZvm#;a z&KUgtNPa-<3i6twN5kfC@zvmKg#O8zKF<6obA3V*jfNIklc}-Aj>7e?WP$3T4|-~f z{6dnXuLCZA5yF*#A?Zgmqre^%9!C?WA&La)UbZ+s^I~xDC8Vn?aV4$s{N!FS{a0e= z*{;Nk$o>DA$wUY@5p>ubDs-KM#uVX4_g&o~9Yz5?=Obd<#k>XcTNJFXVB}AVuB7oI zy4L8M@jZZJE7NJ%`;xN``!xl7MbH1y5K8o_Hk8$mqr(@FR7O97Z7F(nV*DUXhEMO= z9H7xzwo4l!jZ17SeA)4R0K-cT{EH|q`38QZsS?C5WMS@>D7R1~M=h}~B*z?+>mk8s zus?w$5pg^5-CJ_dZD=l`D+kW>e6IjXAy z&Y}cYfKa>nO2Mo+mv(`;PT*zi2Z$+Qm+S|q{!fzgT1m(r8fyxM;>%_>kAn{x@TJuI zZ_UX1+pMt(^no-UBz?f)M*bD#zjV7M6Pw*uFwA^W4MkB5e=x*#*o~B6DPnu#--0d) zGjwKr)b&4VgrzBXgVpg*>s?V8l5P-9W=JC7kBt92gl(`r0IM3|Z^X~!a#Ye5AoYp8 zjBh=9VsyzsyF5dTZx=TAb#p4o006twC2CDVBr8J>Y5V@zAH4UkvHd-{E^q z;f9b_U>?jatRyZO{&d(<;j2QktFSG=HWynqxXWSh3l6|8`9c%_dftC^=Ktqod4k%| z;d%m$($M579rIGG5F`flfpy`3k zbGb3_|Ks_`!!B2A*sn7tGT#6}4SWL$^h#Bf9VAVpKoMeg;V;Wr#@LQ+J_S3%v&0Jb zr|2D9?P-cGhienQi`HlnxZF1(jYD!}a0#SG7;6Z^=aH%wyaJ+Q#GR$FRX8`Im%~>E z(f~#%1%6nL7dm6}N^_cQPeZdYB!^=W9D(}z+qoDe*9ho}!z&X^(H9#vh-pTVf)w@2 zQPaO;C`fbqfs}M$5sJQrX9IdWupIV7>$2jdj0(u@&>GA5D6-;#cOI@$32H zx=FXIF)pB)FeAMO=A)@y*w2vI0+d{%q1Nogb8thI_P=696Cn$UZ{VBHE%-hm^O=2XCD3ZtGY7y6i(S%~x zv7ctFBklr)Vqxn;err(j5??WEs__L5jtuKp{Fk1NjvQVvw8x ze@iRe82uq+J2f1B&u`8bB~J3filzefUDF=ezmap8I=P(?&&T|_EZYCAbhC!>CxOv0 ze!-TMx#W$JN$&;8Jewb)!Dux20@7~S-OO*0vlts+XSx!@6`hrKp~<-TQh;G_*C&28 z^YzB>9*y#z1Yd|VgTt)AZ{QeKJeGui)G4wV+f8B$WBYH(k9{mf8xqqC&fVx;6nx=c{|8MFYs5usS(oSeTf_oFNguvB|XOMMfw4g{$Vn^GhP})J_Dr0|O z9DB@Hlf37w^ez59YJeSx1pgt%ery@YiRk(JJ0!-z`8z?9d^opIYz4NvMs^kZTnHax z?_fz1TI7xnwx`=_x#b`624W((}IofqLhnEyccK zluR_z_mEzqu%sW!1&EnM(FH~x$h!~~H)(v2abZB-z88VdBru^Qr}6wJX$ z&%6^!3)!JA*zbUkAZ>!ZHufTr{XtxNe7xJ{>ZeBVO(2fHU*Hkm%W@4NCpJyo!{3m+ zTIlW@80!-9m4F;1?W36_1oXoe2j44e?jrLJBpt<;m0~*~E=&Q*Q^WSyR^b~$jxV-8 zR=goOrQtlvkW6Mi)!}u!vJ%vWi64pg9lxs|ok{v*lkofHKV>XU&anAIh+f)3ykMAs zg`6S!KDp1Z)gb0?MmFqTnE-zTd@1z*cZ)H(&geoyWn1lT3jBfX86E$y)iuS|2!@`_ z$5}DHuk3owuB5~E%2s#R;=RR&6MGikeKaoNU4BX9l4}m`;0fFxbnr?)< znV(|*2z&;%!XDKcXv6#+`XUM}$DaV--w>Z-zK6y(Qs^{xNo3|;IY!Q9;@oZm$1-lS zMd78L6{tkeS`u4PNMB#|1m7|uu{%Ndn#zuxBPI>Sir8GXX!s9Xas8p;g81*?KVgj= z)7O9VA(}_mlW8Im1zs^C@=kLq=BF)C?{2AB5j0teRu!41|5s`*V=jADtRlc2}^aYqZxmSrzbC_`8t6sXuvCXQ3ep>&WJ;wgf4-w7TxW}SOk3;wmgvM zrD$cwYV0*2=z#4bK1odUxipj!e{_l!LLUT{wB}afFAAq53m9Vd+r)1pwrEtY|6h>) zW{%Gk`4xgzBzomH8a#kK4{_PSENt^sMi*~@VF7Z=Ks?Qwn}yw%c*!B-D~_)cJei0q z2(KT1f5NrFiE;I(qr4P9PBZoBwz4(#65DnNrl~OY%-|h}e^?<)_rPRGCG{*fi1_iQ zccO4J^ab!$q1J5;-T!@2I)+>EYywhZ3#Gt*{QVjKLbTn;n^8O#wraMzk`Ol`r#d;3 zo7nfjR|@+M?2=yLn(ahf2^zVG&Apuu%^{ZzWt1UlHrpdv2GJx6?S(82xD21<6#mrA zBN=&m=DFcm$b1BL$q1TFN1^1{{x#cT+liv^{(o21K-rlim=Mg&XiY;q ziG6DRCsPE zfD^{cC?pST1%DGWi9%0kA`^tU(XV0)qM1(CP%!g5*7RRyn??L3YSbpa95vRUbN(G^ zj8Wo4@HUE<0J~cg`W$hnkyUiUT!q6mI1=Am;xl8bNMT7*2Y!C60LOEy(G9%^Ik{Mr zdlSZZB&`CES->F3K3hRA!)>o(*vlHo3|Sm(FUiTmsw8a~&EdMnif@BAEVhRES5f#c z2I5^m2an+4ke##O;}AY!i#mdmGWhcv!E*G4G#!&BN8!Ink(^)@NcV%KxKzI~l48$i zm+dM!Ub#!|18P0h&tFZng2^Cj#HdHnBapP$^+6JvKPpL`AzVPB=cf#SPuL_|D6B9a z`Am*bupY(x*gPxqs>FZ5R-O1Q)bOnTHHD%>EC~S*LXwS@4j^zb3F~2AYb(D*Oblo1 zTv^FWWx6MqxD&R@$Hb2!cdj+RQoBHGPUGnbHpApjMM49JvaoXgzN~8pNjaIH0k43c zNP3Cxl?f1zV_pJ7Mv)>R#I(jO zOoP)0$6`inf+g)4M+kh%{2C;ZnT9QCy0)$KcVfJf#UXXwr?J}bhL=RPh!$WA>Q#el zD?fkYT1D_A46BJw0S1$pjG*TfPGN+xv908K#W2!2)}#vfpf{$83pDhRm_p2V!;={O z3gev>{th0X=wG&LW63G4dwVjZGa(w!>iwC=w15&6pN0Mb|5Iz^PcSBhVq-r`yoA57 z=DLC&ouXSPvW=Jw*61LbS-?E1HT)d^3q~)i;eJa;-ysa&X8oZX0DoFw&zX_e*O!>^$_f|ptsiPH&!Lt zK;Tv@n2dsl7}N0$G_tq&3R0*LtB->(GB09h$(v+3XW$F6)ix(DhliD~lHgtD!}Xs@ z@+*?(L3oN$-2wzX*s2*M|3OSkk~2Woj=3!?TqJh^v7c!`l9%H7&>ym>BG@GlD0to$ zsrg`PuG07NIzs#cOiJ-{7&lQM2YL~L+f#58!D$(Fm^Z<<17CT@SA1`_3=$p1-*WY=?0Ijf?; zXZZd`zluEtjqqn5T|wwxDQ=Bi!rqDo3zK^Ue{*YelJShz`@defh4B!9vJ3iHz;A*(br7pMYF6Bxy;L-Szq}X~rs^fYosh4_9c0 z6_^vwruf)2_6vj=@i!;;F~cjJu=QcSk{C&R=3`8siC&U1!kUVy&;N3>^1~#&K#y#N zW)tw#cEO?H!GTiN{EzG!4<|1Z`2nnEHu@S0J%y(idV6A?5WgG$2ZqG^_2zJz_<`U3 zh;3X-@D3&)oETRUNa_=C6VkW}1UEsD4g7CuZw-BfV;UUSt&rlxFH%_^b(E zBZ>r(n*zTiKQV{Ud$N$|_{*`#sLcPQffK~$Bqkfa(fZQ+q$MqfU?hRv7`-7sP6K60 zhy}q#MsyOI5}ylQa)J48;B{-{5iC$SLos}%W-d14YJr5V4_tfVX05o`iS zL5gJYSoso*LXzbUxWd#NJgbPAgZ>__WBU1zClK!>cr*laS>am(rZF#po*vsHk|Y(t zH5B^;zoZL($#I%&2;n;Be-rbP(Hu_6M0mE~lRSn?Qq>mGSv#fo{l`c_#zQ0trAVb| zJx_W5IG}4Y=^wBZHm@RfT88wo=#{{?(5FNXMPI~N%zO*;EVRSl_jF~$wwuuqF3D%? zS;45FBsnqbs8!YKV7c*J+8|K|99A5fC{tx6M*}H!z zkbvlBq2CAD=N=$qi?X}jarGVRC(QL zd?3wfu?ftc1RRWQ3Vd?B@XZ^SBYR4e69f5Noib&waa81?0Ucr(Nl6T4q z^g!=S9(=Au#8hK+f%q4iJWl=-Mi1j30bYaS9sYkU-#s3~G?EWsNWqqtge)(%tT4X8 zw!xAU+NuflNCcYfN!)tI2YkIL#HU5BM#P_`iJOeW6snBhD`S~IWHN&IBMz_Im4rgC zadaa=k_u-IY?HN*5{M-iu~%_aS5N#=u#Y1rFS!pWQquB|VxMaI?-c3JNXtUb5Z8sg zD)_!wQ%|GVi?eur)xJpq0&9`9h#fggVTmsU!@!+J?lJOVA~Ao4TjePH70LMrjAmqW1b@YN8^a8?^(eMh=#MEVsgFMfMHb@=FAwnlYK5brM`ooJ ziD^J=3^fT)P3&74b-3XVYbP6{0&%q= znM&MvnmS9|2JGW3ekMN2FgWip+9;O!0k|a*m}dez;7jSTaQ=Hk)}E149V4Y7EMN)C zSj`?Im+ujAI%O5Y?L;3|Hl5rvwyjx-iH-j%#ZD7mhDJlMbr%8B8a*KmlqDufWUl`$ zirvJRn9+galC|LqY=vko_AbONqEI*de^GRYHLUpg6xnM{MLs1m_eK*HKQ`cB+Ib%HT@E~ zb8TnTZxiNi8D4R>3b%?96dOWvYQ_cZYr%@xsxq!oxE6EC1PIR1aCF9W^f44zN_={J z)rgf0V=pfRuedcz|W93g{&z0 zbO>s)x`NnFp{FLsE50OpB{Kfgwz>rn-zL`=@~-G!=}ydNcoQ)m!TEzGeu|zy(Fxc{ zfwT~9hTse<7(q}}61=hprJAjxA^Lj?%mXKo^N^g&EB)K9*daSXOj7)H@x7*C7UKM|dBvU2wBI3W zV2xa~!4Y^~n{h{V;mx_hkohZ>+e^v}5 zSXCeJSCTRiIE+r;Gta`jJKb*qXJPAw-U8gmh((bvMs^>3NugjXa*w#i%(pQQvg_WL zoaWdhZP6X!`tN75m)RaxL-VfOB>X~R8c3>9WDvzCVvAtpfy~FSvVr)E8%+lqD1^Qc z`($qiQ&`nZ$d?dUgRucyC)(yxGJ(Aui|6AlY}${NM1$VjhD2 zE6sT2py`|NO~#nn=8tJ~KIB>LQrrN4pr{yILGbzn4h9U8MoNp&%`GnPI8iQ5K>8Q3Z${z1$NyBVQ&QQLgugV zH6?cmV+Qj>y8j0-YLb{1!va=R$S%WbU1NOrD0Byca}?<2#E$55oWtZiLH-2aBcLV(t-!eyXh6_I$buOKh#5&!nHm3}OJ)$en5MiE zkA`1jTWf}qU`t{fU@J}&Y2Z9d{w?hg^R@c??>&XfV+=3DaTXw{4h^)$mjRN)=#{`` zU>AInqKy665>a?GdNoEx{E|x)Ne7Q)Ji6qy%?H!SQ5IQPZz!F^S&|~tEoi@yw>A8T z{W=MaEV(}o_lInOt-L5izhjHWe7L6!I!#F$!O_C>IL22Ndl_;vfS&8`M}b&O;#vc! zuJaIvmqCzcHG<4EQkGTz&A4mir{yE3Cd86r__|tyQ)#|8zNL)nEc8$8HCgyD{c^?; zBT!N)j7EE%3;!IreE7^cyksZ02{Dqs#B{a> ztI^=n@bCZZBVay8$smXWXr==RT`4%!l0IO+La}_NVud&J@R$v;WlOR6^*-jdeoFwTmF(KIftVmRR%bDLLUXl)fUPwn! z{2;|&k++T! zmqy})k=XX?;BRn6v7Cm+JJ9AYZMW8fIT;BI~a*(ctNpga| zkX+V^PiNknq%w@&*d>J__yoaa=KUy|&Ki<$EO8AOHCaG&iNsUjkQun`C z$`X*4gsRvofrD`bh9gkipSG3zXs##Y9QG!piw*gFva9`w=If4On~ZQDN);^hQoP$HO#Vv=nRxawd}4$*z$vV$%0 zm%+D{`M=-{nyN)!T8c`(TmCI?3Euw*SW{eAgS2hyh$Elu9x23f+ z#LbMp<>ilMaZ`2(4DfGQy-dvzSDAnS|IjuaJW8&*fnB@z4h)+X*C$eu2$^e?%@Q`P zs!xu*zV&N|?HSy&eTtQiSgBW=;DE4F5q-=0r|sG%xLuDny}GpP*rr>6 ze{rd$d*#VnBxn2JlG*+9=FVFnY(@s(m5Gaan)N@lIy9(fufWhltLe8>_gh%iluR?@q_1gq>p)NZfb|iz}naBwbjd8ALXrSvq>a4{%{8r8yJJl~n zlQO}fLG8j9(S@(owo_o}f3CSq>hb3xIJDYUovFJb!`pur3FAKx^o#MI24^KM=2zF# zd05wCejj5*@t&4hL6!ZQ%*y%NH_ohB)%+rdU8(GM&F4SfBGvo~&w5qWui{Tr7^Wfd zd;oFhh z!(8|S7DyzLiQnRbf3YYJa;K*y7)zowUW`?7IX1?-@H=dceX^w`D&um@i63GE{0!S+ zzU*mxrBl7dH z7k+|QVb$DeiF!B~ufavw2ERlHeC0(UKO7zKCTvIliPuQf!W?-*XzNFZp$#sI?nP&u zGjCdINoqxVq2*JsIj%;R<`|a8D*4hWa%q7R^J z|7grFi}~j;JLNB8A$%1t#SicbJcOn29A1XS^M{$&#r)(Opg~sa4Fi*Gto`x-gygc=R%xCHB> z4YZDSLw0GRKRUxv=uD=>{6aJ`YtVtd9DNtdkpBX0?{qBBUNE#*1U(I9ld+%{I)J8V zgI&=E`$k8i1DTBOiP^DyJ36pW;`1NS_y0sAbs?7Lx;T^e?Io+k2UnxVtp(cg z^|AbB^o7y!`9w5g55(t7WBGIF@qG=Q*~e%H-^Bbebf9O^h~z7js+UY$M#8lykC$U+ z%y&d9_CY%wiVkcNI-ptT=6w|1{fp2J-@z*QDH_oW(L$G`C9Wo44(nq-tm*lGEEep* zYCJfHZl218LxZ)^jHjf z!qC)3k6|lxhV9T1cZ<*GpbaiVXZjo(nO9R_o4^!3G&CWE6ynvuF~(&V^#065Q)a_r&}*^osr) zi(!q+IsdL*tINZO#AtNJ3(!b>j7#uybVuP>TX>h=#UBtk4bZU|@Vc3XRwVbf$CAy)i$!GWv4#U9|oe z(O=Q_5+y@F`I96pD1n}W%IKOlKzDz8^h)iC)*Fd#vb)gZHY?_zMz7jU=mb7Nm+%m} zIsZbhv5w%-DMuYI&PCVen8Rv3j%$=?xu3Egz3(3z!|3wxpnny-ouun8LaYtc3D zjdpZ%%#T9{n2h=RqmPy2{QJUF6xh-8(bw=Q@;lMHJW)P8uNu7y-PJA8j)tNGxdYux zlhAf&pzqI%Zbc{jQ}lTGWa#K`3S6_A6+%d}&^2p|HrOS4V|+doZD=$)v+-C5r(zR) z5v$@!^t)oIifM_GcmrnP1gwCsCP{cKzQZdqXQg0ebW?V~Oq`2$@HUpizi}KEuN*e* zTx>`FDAvR}Rl@g#o3J(K~oMI*8kjo3%%x&IQ~j6b8_iZ7s%ZBjk;UNX^=gy*vp*2O_+g~!oN_9VK- z8_^GqH_^|C{pd_DsS)09j`hg*Ks%m|wzCAC@d~t`{pbLH!yKOfe@Hl!^U*vt!;Ffd z4V6JJqS|P^EObB}(Ma?`*K#O2zz1;vuEfEZt5&$0Z^b_3XQ7ciimA{4KS(&D)6s0T z!|pDC&Y%|7!mF?v-hzgDetiA}I-qCJ0d9)B5X=9J<%zoCc>#1HCD4h~MC-Re+wE4D^Y07> zP~Z&4q7BbLXYwf8@e}C4oc!VY|O7fH`xnlLocHp?}&aLJ%SG86#5yE^Qus<1Uisv=m49cOVJ6fcN5ZX zGBJUK4c~``YC){93~k^gw1fAfU!nDWLnHH7EWdzGq~O(INw0`jLqmNHy2S0!weN@d zJ^v%(gNbN|b7F<3(UHD@&R_@Hz^CZf>Z54=>Xn{N0%UEaneIk4Mj=Anh()|?u#BqJ2;LG;51tAe0-j(X_#?g^t}x9 zc{Q}(Wc~P{C03xI3;NY-LM-2a?uD)B=K2Wh;34$BD3XI>3+70em0xe_(0y zY0bl)DT8j(2IxdPVIj}|og{2vCc3#6q7`32kI7E-%jQ=xe;#X*FLZ5)NON?rT#pW5 zIu64}(1D&q_e{PPA#zpGCF_SRJ^w>Vc>JD6*ZwH_;_v9pFQ5a=*)n{IEQW5zdYFMD zqO;KuKOcPsjo900BtJph*&qEGlfH14glm+eRj?2`kdiT94xL#obmZ4WTchuHM&Iv) z-UmaY6Jz--^w=#x2e1Nd@1<7p`~Taq!XC82gP4U!(S|Fv4nN=5MMJ$3ZSV_pi4LRn z{=ssXtxZ~@ELK9xJD?r+LO1a(vHX8+lHtKj3T$X$tnfVgjpt2tMqi>G{)&$LG~R?c z+lJ$G3%XR}umw&+C-Nq`mp;H+csQ09X%`|~I!VF?E1;pRi@w+dJyvaEelWV5Z$ppO z+*tl7x_6eL1NahM^F!DP|G@H?)jpi6A!t7<(0-H8lW=BR&=+@MOWcQcRI)<|<(253 zXodbn(-Cdxe)Ro$=zy1@6W9{V-$md16umbNpvOIb$J8cHCYqC|O2Gu|fh*94|3!Cg z_UppEkOv)5Yjort(2j0E>)(t{zeK9p-e1-B+=v7>?Yg(cP_D0{I8QqG0w>*j7u$8-o z(=`N>{*bwfgfISrx8vpA!%{qmHgp7?@fFvH8PvuM@(s|4^ui)I8Xf3#bj|0)@<-8# zK8GH^*JAmH*K_`z@%I!M>eJ|t$(QyBYn6$f-)o}nVtJ34ABcu@WXz94Bbh{x@BPuI z(E)Bj2e=m<;Qk(*f7jw$3Q|`tI?@Xc)I?^u3N;oXefHl$D-{# zgU)<4I)PVXeg_hXWa2XtHF%JALuj}bdZEvx)*J4E+!qxvRGjSnqM9BFQ7Ag30;ymqaUInK7bDJ zH?-cVXrh1kjL3^ltTj5oE@;QS(0+#X=lt8yND3TT676UfTK;$}UyZ)-GTPym`1~Do zw|@~miiY|$8o`_cLOUhU`=ACofYz8gz5|kBt%gwGn%@;GJdPf_XVHOdi{&4qA1a5? zPrGyI%q|-kB2XH=XsVzCZi-H<1zN8&Ix&gF~bWqicH^`hG=pAa!GT^Jo_===mQI3r3?aB+(hoM!yp-MH|?N z-Vbl0Yy2tN(NEET(D!oQ942rX`n(ca-XP}NqW$#3ik|j8;`sf#oW>^9LhxKqd`W5Xo z4+|aDLPOsiEx!(((e>yO4MrQh9Ub^oG*a_peg#_pRkZ%D=zeq){xpp9@A=JfOL(y; z`a(H$tuxV%8>2J37TrV>(Qh=0Jn#e7@z+}?nGtd7PSI5U=S#?+?7_LT3#npk#3=(ro&aUZnaFm$40lO!DJ zR5aA{qD#>ZSEJ|lO?2~}KqHX-*04DXq6009MywvXSFVYUL)&>4%i$YX1`lIpOy(FF zHeXGwNF4p(_Z%ZZkwK#gARKGohd;qo}|1i2{U!bA>4qdyG=m6912pwFC z?(!+H&DBIyZ_$az*icLsM+=11xNE#Ol`i0|_ ziD4kGqXT^(9ncr(J#Z*K|2saueHZ87kJBL(7|N;W$L?e34Ax>j z+rA9Xe9na*Es*AFt9f0Mb-f`aW1}&Z=*{$<$oc<^Uwh=`5))sj#g1%g|+B~ z@kXrh4yHnn9@B&9#d8d;Uv6?Zmi5sF+oBgycQjIc&nPPU!kEtgbw8A`24S!Ps9l3MUU0RF`pG}iQe_?(D#R;OE?zU?8(GEB%JAN zyb2#fJNyV8z!&JZ;)7Tk|Hi>sbV?ZTB&Qoz zDH3kJ_Sgpdqnqbh^f(?wL--@QG^fzeox#+xyC-y%8{Pdy(ekS3Qe>j_v(SOHMkm%8 zJ9_?mkTB#cqU*67`Pb1751|7&5w5 zrg8qA`DYXuqVLfBQMBVfqiNGa1PY=vxg2e{T+G)+>o<+%9b zi>9-goY8X>+>M{1FLav`LOB4vA;+K*dK8V!O7!B|jW&1`ZSWMj_Sx?X6Uv89s4!Yy z8eOuA@p-jmOk|>K+z{OyEzlR+p(F2sb~F+l@T8bu8GR8eQobEMEx({QVfLBfcRj7q zc4wjkco3^$@(~i1NxT^={DOw~4|GZXMF*08e~3r{^m%Etyb3z7`q37#yek^XerWv> z=#t$TpU=SFp8t8V;5YP&J&kUbiyjCKm&DX@LL1CPmm&)ddDrMbG=ihi`gfu2-GkmM zkD#YyH~QYU*xd8~dn~9uD|~IvLf8C%cq=YLzZc}29lqf-#hT=A$J)38jo=sYd16lZ z(5i=i6B>aY$K_ZZKf|_|{vh{^=f499D@;K{xdA=*+t3-m9n1H|{5LWGD;m->=!`F# z8#ZMjbcWT?88<@L{5tg5bwfV`Zo#AlQ%M-|1?c8kgRD(rM=US>P+03sbU;nf20EY} z4UUdO2XqfwZyvhomZ1}R23@-6(EDS{L!5sH@D2s8-2rs7{182kZo;$Z4ALGBKh@?$ z>s^Enpa{CwWzi1mqTg^@#qwd8MSdb0k=M|OfA}!x-#hyP1rDU}ywG4}bSbVv_d+YQ z-Yw`1??yX(5FNm>=sI+>ZAByWH(Ia2Bcc7$Sekr2bRgF!NjS4%Xon-wnN30)o)OC* zi!P6DK#$+HnEwEM?@P43AJ8TE8SUtAOr5GnL%t+Bz+^2FcH9Qt#XZoan1b%o2hd+c ze1oUQqR*iNc?JDE{~m4V z0($K7%nxhV5Pfe1I@7yi{yy|H%*RH!6y0nGV)dH$P|xE4D` zA4W&`IlAc%qBA&w&h%`2o@-G!UIozlMbJnUM+ZZg8Ft9>szGSr8V$Qz}H=@8$wL*7k zZ?xf&==1UDK<Y!o?C9fYhb!Xqjc7-&MfXI1h@L_BMuDfor(-cR^lf8)Eb?=IVg(Yh zWa2OhL;n|goQggjHc4@GAXU&kP#^1HGi-vl$LAZ-_ufF4oG$oA2ZJd>=ZI zZ?HW663Z`sKD1X1r%_%G)A2dXP5+6tB)mvoLeKAR^!)x|1^f%$T<6i_n0sBw=SK&0 z8CtI*`n(o8k$UKWnxYeEAMJ`pvNtBJcnb+T7>DNXj`^8r1CO8`Ekj>ihu7g7X#M;z zgy+T3rKu2YfH#nDgTA*MZ^BLJOc=Y2Yb=-udqHIiI&(H z>UBdK7=mujG3cI2qBEV18Mq{tZ$+2%eYD+=(0coQ!I}PquF>yk$WNgSr)>(~0}7%) zSad><=S+0K58)fQ9Nm;Ry%^qKjXr-FUAp(s`(Z!Y@o#AR$#Wz;9(i60KO$vdWAX#h z7nb6~xDh8{i18{#&sif6F}R@f50PmI9S z`G1^*A$l4e+4Iqt&+~6PlU?#g7~tjTg;YM;4Bh2@(TU7PmtYzC z)$Ic`(ub2IZ0J{XAScn#B({Zo!DvZz4^%}PtQYfb(D%Edo3S@m!<*2F%*BfM8v4cK zd$is;^u1(`H^aYJ=EHFm^g=&YccZ7`8*GIa&L?iZi ze7+iuhXyO74P~OIqajwup6EcP$LDj< z2tA7Kfv3?sejOT-jp#sLK?lA&K0kzP-elqki7q_&1MRT+2Vt$-qMN5j%nw5&bw|uk zL+^!$(V4A?K8LRPI&@&0u?6lxBb8@&m_QNC>G%Hx;EpUNbhNdpV89lDmi(2j43`N`1- zqs!2Nu19CQHRj*NO5{I9BXbVzFzutX#171l?ukz^>3PhtCoM4po1(k>T{L88usvS0 zH+;H1fHu4mXW<@Pgnd2^Uo`$kpV$5*bZ`UurFAw|!yQ-yPvUSa^C{=w-+ImdG%fKM zeuS%V@Moc7zR$z&a2uf?M&r?+0~VkSy^Ia;2-Kn@BD3e?>)Ske6q%O;TMmOqI=;BY=jpd3O{&sz+vQP<2XEp z?(SQ@4>OvJx02tBhPcV$u$hOT6Pk!F!5VY`2XQK1|3fN5$;3VqhOp?7@I@mFyO6&R zjl`GO32Xfr{)%l1b|zo`Xt;v!M4!(=FRHK68}2N61sC}#45SWDPh)SPKhpj3vmf`I z|1!U%B}P%u2Akt%bW@$hW?1Lfu!gteb>v^cTQJve;aH79kJ)7Og1IL;8$I{)F$XS1 zKdx6`L43iypa0uph4;~`bFUBZGxR?A7Cq<3qGz!H`CP|BsEeWL1v&$>a6UTHebMjG&Ga)m(Bj8Kges!>Ix&9@8o{>c z+INik5z*VwiHyT;IQcl||27gIQ&1h7{Sh|fZRpxB#Jczuj>U^lgnIX)9dAIFYAaU8 zUFe6{NpwPI(1=`gGW^D)IC>g7q2C{-Bx7O$x@*^=-+XqVYx)gl;1B3Pa{L*-&o@MO z`%UOflW2sVz)akOWiZ=cA)@8cr5J+#pfVnPo_vIaGkFQUTHivi+V9XMNSq3L;v#fU z6hmiN4qel#Xv3MYyan1`d-VOD=pGq>PV5e>hO>~(nM}Mw!p*Q3U7OF*2EIji`LAdP zXVC%V{X5jV4E^c$O7wYOJcFaqj)(mdA~*(ZZ#)|Ed+}~ugz29D%TI?2C8Cw0b)#8m zgB{Sj{Cac-3(XK&=crVtwbZR9)15MbfE8{OY&LtNc3;4NqMe+!vGun%lY@m=_VA^z#iz0 zH61+-PhbVyj2ZY1cESJ9-QVS0C?ADx+PUb*^9$&}zDH+#6rJ($SpHwkXFt#RcP2&7 zhY*%R2b77v*a6*i-O&aHqM;sxehSXOD!3NiT>G#r{*F%Mk_+MeD(Dh4KyT2NXgj@< zBwWjpXa^I~(A^*Ni_nUzu@Y`WJNgM7=znNOm;DzSu7wWh+UO{(PktfV{$8}b@6dLV zr%2Qyk&naR4cG+Td?U~bccGDZIJyuW$Wv&&_t6=B8Owh|_s*qh>8Xw`N0+7sTJJja z!WxLQo8<2Y(^KEY?h6HpchNQc2%TYCdU|TpU4dRaWusLvgM4i?f?e@W?1%5;=eQ4_ z%$A<;V|_yQ^wj3tg6_3nG4;RyaYc^MKn8l{RzugS4!Ya3&^^!=ok0(Dx8D-;lhOJQ zMVF$HS&J^^mRPN8D(*%H`Z!vD zX>=|6-fQR*yoJtm2m0ak7rOSPa;2xP`bIi_e+xhmC7)a?D@h>FG2723g|^~ zEjsgoXvptG2Ye6O@B?Uso9PEQSpI0tFGJsd4t@Wn_tLC$|W3OZ8Yht1aA#~KaS6TMC+eK8~zXNI7gxIUI8?6m!nIa5zEUbW1<$? zKqGVpZP1IQcPt-)4rBs4&}q>JWBKFJ73is0j}G*0bm05Y0ez27_}BP6d6tATDR4>H z{bkY6HbT#LceKO7(NX9?Cq$>C1Dl7g{nF@Kw8PiXwSOCpz)my*A0h206Q7ds#lvXD z6S2Z6G?Zu24ibe!$NA6!U5<887Hzm%G!w1g5bdZHTCY9&UiX;qm&$YghQ=-M(f zeW3;#vPQAIB|4DqXu|_yeniZVkKTiB;yGwXOVNRDMBjfcmcM%`=iiYYpuh&djTL@D z*Z%M5Ikds_qG2ryqXR2}4zvP#S~BDFma+Ugv|b3eeV}EqJPEw8T7qumxcF=p!F)C6G_&J1&v}sOEmPI z(S~}&=Y7!4b8~b88i848L(9;au0|)aA(p?2&ioy;y${j$KSAD4CiassB)_2{KNIu0 zE)V%4=!mbx)H#pknP`Zcp&fRP<-KBl2wHzsEWaa`--`}-7N$P`=aVp`tI(0YioUo# zRe_&oF||q27r#X}&o7wTr1AMVbf9Thg!*~W=NF?BEQ(IBEIRPoKKJ}*#Rsj>nRJi& z8_|IbM;jOu%kPfmv(X##k@$Q8I6u7x&qMK?l zI*=F8jyIznzK+gdJ9=FA#^*nx4gZSn_ETv6oF#(!(DF-SzAV~)R^> zslWZ2k9EkO2__TO%7)F>ADzK)Y>q3?fgD8#m{Bf0^=r4WXot(tUs%44&hUGDI*qHi ze2BpM3L$a_(ccsPidk5pVtS%44#jbP|KCAkJOx)*3Y%yH+Ta#+PyC3k?Rj+5<*Xda zOQ4%I6J6`p=$dxJH*g5f!17hnQ~$KP7VDGGT{X1V6tDICw;?eCXJcte%;k`fd5G*pmD@bOL{2CN`-X_QV); zDW1m$_)}fZe=8Ch^+HEOu>$!`=rK8fdGKh=pG1$*e=(n@%j5$i2TQB2ZzzU za00z2vNs6r5N!D8{KS=qQ~!9^c3tsJNh|#4&Af` zuZllKVon zdl@gsPou{$i+rwz;YYGI=s-pw$2Xa{pM)cN7QJF$M+dY!mLHAf|HksXjlz{$0Ub~y zbS?X!0~v?5GaVhsV`zsj#OEKP{{r$YR`vYwjs7H6tVwvk7P`dEuqw92OFaK~knpCPiO&2j^u>edF*}7Go0`|8 zr~Wi^IC^|m#r(Hu!zG%Aft5oC+5p|8ZP5>*Zs?{Ph81x4a zHryM_v$Dc5Yl}vv2m0|m3XRw}?1A^86Zi%l*gxoi{zC^+s9AVkp&94jP&TE&8>%Z- z#%1V8-^0DQANSyM&BK~byf*j8Za5x)(FZzlHVjd#r<(w+>6w0o^0_;TC)xoq6{*q5T`t zNDVfJ`Ftu z3(%!lg|_!*eEvQSAA&B??P$mMqUV1hx`Z#I z?|p}M^m}}s=ny7S63cu3Yml(x?&wSgV_lqx-dyW23-_UGeObrQVNJAtOZ3#-fF8#? z(4}}BZTC5JAg`j4+lfZ>0H*%_?=KQw2#M>$=XeP;WRTU{U8c_6wBt5N<~yeK50M=x}cIP3%Vb3G9q5`-cyq`RE=whDPQz z8tEJZLPQE-E*x*o&JfPOYx4;O9=~tVJNzU%@=J$?nN*Hup-a>g zo%v{VMpMuWY#thc)o45Kpx=^@;vmdBEF8<*&|P~d zgKtN_M9=eaw4t+T2n&x1p(~3Hs4n`It26q1Bs$~CXow$=`RA}a`FGIzzo1K$Yb?j! zkrgK4E-i_UtO`1yCg=>hVFnII8=i$O(GqlXu0!|6c61;I(D!~p>!*zi^)Es5wx+zVRNkT2HL&;La`Our+P=SL$~9F1fpG=g=|NVG&Jay|Oq zt+9MO`rduXSm9ChLuU=z;XZW6N6-+TM}AyR6uL7+q!!vyD@@H0uO>eVy>g$8{*Kki z*Bu}B#z1sp|3kl`CFhVZr1LNx7o#&-8Y?`DM(FwIOXw19jqXN6`&IONbaVY2J%vsv zZ9=dhruG`rZ!%GZgfq-UXVg08Z$Kk3D&}XPdt_0}Z^A6{JFz$Bo*3T034QMlwEi6I zg)6Z?{)ZK@|6SJO{M|>wW3vnm$!q9{x1l5bFnR!ckUxrEo!3kXKU_}5N#swUksJBH z5Yh2ysHdQN;bAl~PoaC_c})HM{|*Uv`95^5j-eON6_dlUtBVcDUylxS4%)!8=q}!d z?&`15_s-x|SorSn8jBc28Ktyy$T$h0e5c zGz$%3&*-4&ZRjSRgf87Qbd%0Q+j%Ow7M-|;lYM&!q1ZQO)I@CaJJ!|d>WH*8FP06Op|&?Q=lPGBn< zp}jt*|HM}$obeCn9iMMbxCg4D1L}n~a5L7&|6xbmgg0T@gW>sLwBt$W9(V;^l26fy z9Y-gcV{V8beU4$OD^5}7^hhDMm&`=IT zzf#>D%U57A^4rm4djNg!Pjt<5F9`YKn1g&Rw4M4%5)PmP`eKjhZRlQ@iOygZx)kfs zjy9tW>_PX&5j4c-&?PAFcqp%pE^Qn1y_?VvrMu7pCTEfGg(uOGzKw30FVKo7u_k6) z819EmbW=8s`3`8kUg)N~1?^}WT5kzDf#=X&zaAa%7Gy%n#3v;DR{9nCqt$8j#gdD{ zd9H#kP0eTn^ag8+&Y(RS(gD~Shs69k^t`_q^V`vZ?n3v@m#OERze^W~Um%o4I~tFv z(4dicH0Iaiwd8l8_rgU>!jd#cm#RHB!Qtq!d=^Jw-Y3!%FXMQ${TfTd`}Hw({%<4U zT28>y_#j$w9oEB_u`T|F1F-(GFp~x7K%Yf7<5qMp9ggM4(8#1e86uV&U4kMpUm8>Y z`(IT_q;_L`&;eb`Ug$u^MJJ(~>|S&U9z*Lrg?=Wyj&9PuXuU7dkpGJAp>ycHQthcw zuhvtX|0xt)O@SS~hVF&!G5;;v(NXj`{)yi4*`5yOj^;-<*(GTG%h5el9^C_V&;ez| z@~*MG|I^7(VI&1Ds4xi)(VOUiK0rJE6z%vh8uFjehR;XyE)V6GqvbWwb{eBg(i+`M zUC`4uGUgvj#>CqAU>ADP{EC(Eq7`9J)IpC`S1gOe(VO!@wEhQJ5r0M_Sm>GXLun1H zLB2D3118alZA2rLe2s(+zl+ZB8*~PT(U6`%H`i(Of-1E#Tqq6D$aF#Pje%GOZ$~?r zkEy#K-GtBMHMj{~ij&9$`1`L_VN*0iN7NFXQ5S50x1k|hg@*KfwBgUuf&PFFM^|fBrX`!pLty8@dZ^-~n_%3($}~gU(E9bHE=XCo3RtVjn%R6TF!q*63y0zyL&Dgntiwzzem?<)AL~y z?L_y+hu9f^Me8?S7iQiX?XWKz`rFU}PKf1mVtyIASzlbo`S;W43kv+0JQgeDdLe|k z1lmA#bjHomP~IG!fG))>bk{FIPt6K+t=FLE|3~yg=Z~1Lwm#IWpCsY&Xo8OXTC}0- z(HHxo5f~bs6wBwL16ha;U~SBAjqXJ^^ zpe_2LaxYfJrRYugKGwlMu?kjrG32|T`DvJeFW@rVi*B;fF9nxk1@gPGBL0buJ^#gD zPETY}&H7>UI{;5Peeoh0p5s*(FtX}nx6Wv zTHl2O$bW}MyxD8~Lx<=884@0g%eI6cuZN*`_*Sfm2QUlsydFNJ+M^+U2;EelU~??6 zHGGljf`R|51rWk<>d<$ow=eW(AVePtL zW%3iyd*f+bf`6a`oby(CVjez&{nGg7`|V*fFL*nglBMXTeF2Tkmba6k;k~ioA9NSz zdne4KEZSi+%)}As(kw$ed>!4apP@54j&1Rum~XZtoPxG!B>Q4J9F0zROOix?5^v&l znDK6U;xoJr9Y~9vVZ?o+L(vz3VE{Z=y?g8XZWUUEw$< zOOkL2s-bI{iO#SIx~4avFAT%6I0;>n-_Zg7gQ@%Cz2K$jKuVw?u7%cXiGDcUh~6V( zksCLem>MfAjukedBi)5IbO4>WKQu)*vfh9$Td4fz%5NUKNdVjc30&|@_UyWxFkM7}}?SoovxWwQ(# zi6-dMwnXfhFG{;o9y+*L*)Z!b7qAI2y`-(9oYp>*e}9ba*lP zyet}t%ILuBqaAfY2Rtz57onSaHP-R`Zy@1j_yK$3dAuI4{~|QJ20fM=uqD2Xek`9u z2VQ4ih(JR$-xl4RUC@iHFS;l0LL)RC-7}A4>i_@iITD8O)%ajn%zufl;ZNv`=WqlT z+#l*sLZ3f?PGBiIR&vPI|ssz@hd@RnwRcNF#zY2djF%jF5e;2*53LOkTJNCe&4L(AmGk%R-u*TQn z*i1n`j<=vQKZ`ye@=f>#^a?uQBHxB{Umnd@jy8<8NB7i?F+UvLLzBMc{QHe$8U@aD z1scj%(2L|_G%}wf9~Oz<&|RJLyRams&Ar9{kPFQZ~)zuKcbuRPc)JR4uvJm zIFt-)R+9o>Y>MvA9_SkOMSpI;8EtTC%+EpB`Z=`0SEC=q@~_eNkD(Jeg--Acx)<_) zAG|V2!Uqk|bJ`x=Bx7+T&O|Sszp*P`aX3U^BpRvdXoE}90dB%lxDBtwZ(=^}hcJ;0 zbfS&XO`YsUB8$Y3SYZ{~;oE2jN3kjb%Mra4Uum%o^`Nwb|`Q_-6d#8nN%ue*VNlp8xcpLr9BYd-BE6%`+6eKyE`{xC`CI_oH|D3cM9R!eQ9xmvA4f zz=z16#acM)*YG{zb#&=2{w?g8VwkkyY9!o*jiQ~UWcFI2rPRn zG&~n=XFmE_u^NrUi|B;jLI?03x)ghlasJ(nUr^whA440+@q5^%mt%GEwXh2ILwD`{ zXuT!qURaMd{6=&K8oAx*TJJ+AdNh{*9ZfsV`S*P0J083kUHc;FT2(+hY=Ab@4sG}b z^qAg^UQCl>`D18=o?{7no>mD>RKO|$piC7`$AK?d$qFA2_?a%>C#ftbS zy7sSQZTt~4@Uj!3{A%=$AA~FMS#(03PKJmML{Gy6bT1_zCgDuhqQ_=CX5cs24F8MI zoBbJn=Ie=Gxf8JyEzha zQ#D3!!q(`3I-?EtMQ1b;4e=!Gi96Ac@6u<(ak>RPCAXmwU4*u`5*^SBXoTNH_tZg5 z{r%tZSfS9r;di}PqI;qZ`qir+I>15bxgHhs6VL(Pi*B+<(2k$Ms<;8|=xcP3{DFNi z@3}Crq31aN?&8rDcnqJ84_2ZLy%6(TqVGgMM9=dV=zxyI^5f`|oQ@{WhtGiA=tLT! z$2AMxQ#YLF{9AB01%~`_G-S`9H`F?`gBN4@8|d!eiPk@Yt??udz=jt>{l(~q)iY=$ zx1*bJe|-Kedg1+?Bw<5o|AjR!fUZ>uG^Ewh-P;s>p$EE&MxhtUJ?I1$pnGHk`u;X_ zt@ons{D!u3A(mfCylp30n}o-xC3@`op$$)t<@3;ExCU+DL$u)^&;}A|!6MO0=!_eq zd!s9s!<*0n-iJo`F{IyQVkrqLZbm!a89j)G{sa!ke=!q>q=)*8up#-?=$aov_slW0 zgEQ#yOV5@qwO6i32Ru0DC#3S6zxzlyv&CqK8_~6TJ^D7<@cZaeeSyy8Fgnu{=zF=c zhkAw3B`AsR{u*e#W@w~)qWz7=VxIr|;)7*qs9x~_evK~4shBU4BQ#Jg+7ca5KXi>p zpplr2PGCBEN@im>TpaVq(fSuK_22)wIA^xh%~ug!iks0H+<|Z53{1y1xk6~$qkEt` zR>aZh@qHYP#1izrSc$&30gc3q=zw;j1N|abw(#Ho|AqozJdD1044uL0=znO)a^?;L zEQt=VIvRm%(6wzJ%lpUtXmp^{upd5&*8dNUK)#ETVQorX6h>GVr|_UP8v0#036G+i zZ&03Wso(7^z{=!zq60mF-WR9QO?&|}uyEc`UKfp2L+pq*VI^FjB;hXo5^G_#d?6Bj z(FTX2yLluUx;xR$Hyu6qkHqrlWBKdYl=An{53@Y^!=7n_zCRGXibtatRB{#x*XCKQ zfLqW|e~%8}47xP`p)7?R=XtZfj7{J96*=i z2Tc9_U%tYjpd8vk2Q(u6uquwh`uGI8M4w>;%uyuFtO+`^R_LDT8_WL}%crA}TY^S( z13H1tSj+SOF$qJNeraeh54y&M(MXg*FQ8i32peNHoPeI|XVA4igKp9WMZ=PeKzIKH zw7o~s2t19pyB3pPI9o_~?7oW?enn?~3VpFmvGBYmdXqIo8|sX%?G5Ph8-&hqJlfu5 zbZ^W=PswAL9hac>pDM=rH*_yi;ElH%UDF@19#*|9Tk3B+2VxfaEodmup$!zeJPfcr z+HodYel^y{j_6V)V}5h==U86+3eLZw=ypZe{WqZv-H(oRE_$;)iq?A^Q=2gQD!Mcu zU}@ZkhWsCN4;3yR23!HnH$o$G9XhbyNfK_ZhvS1?=x+ZMy^4Q8L--d~$Fvfm!J6pO zw7^X4iVl1R`rhp567*QFMVIVTbRb`&KiVb#AmOeqTrykgTWt$;jVEGFoQqx*+t5vV z5S_sf=+YfWmo8_i&~Pbq0JYHpHbdL%guZt(x)(-=Jb(XB!rglh`g#5)8k&F6bDCK? zY_dLRgM;x#9E)>s4|=2Z%?J~jfP=|Dht9M>nQW=whLu4lG8Fw7o`$La|DPvFII>OH z4BtRIN?aL6S^!=1OQRK|SECVWk1kO+G$I3{;h;G`aV*X{c{(E?_=l=^59;2gZ z#XryiSdP>%z?{7luZAVYVZggP#qu*kxBAB@gqJQ~93=vvN0cmEo+!wqOhub>0jg%0eq`23q#ex!Ud zgz7|mkgY;^F%KHbE3iG5#lCnOPQ(xKc5GcSY_8YQ$fQ>ad*TW-B3GgVtBtnT03CQ% zeBLoh!WrEd3x=aFOhiZQb7y{k%r8MBvJ#!)W^{l%(KRnzIlNaM-OM$yC5}Narp@R8 zK1KUUen+ALi65~h=C2YOYJ!Hc6S~WLpfl))F3nJ!jd!C1&095iDH`(9=zCSsy_AW* z-w~Za59HV;6GKTj@_Wz`K8k*USdYH&7naBKSO?2i3pZX5bS4j=9W03X4d~7G2G+$x zXrzi(5A9Vz`>UCf^Vf`oGwp_s_y)AWo1*`V&*!7N{t29b&&KjHHNp~BLN{Z5bcUVK zJuo0XzYX2olhJf_kEwtgQ(2iQ84fjF^J`#=O zedyJ@JU)LlKL02_{|Qt7{-3>8__(|RtMNhybfy#05Klwb^kHM>KBtYpe!?~s5k=0kzb9?vD8&z00VK8_0i4t!qwsZAJ8SJ&@fD_Ir@AOdK}kd8T>m*!f!g4 zH41n7by$`BDD+q^LO%`PLeKdbdKIT!2fr37T{H0!PY)Wu;Nbf;80wOySuvw2oM|+Tn_H;?(TkY zcQ2Gu+}(@&|E}}Rxqt4Rr<=9M*39frA|y0gaR=*z>U0^X$MCq}OHiM9#48ct{l{s_ zfjaWVU`_BK*bj_f()ko_64(L#IXE1wU&>q8?YhmT28OJqoonX?8={{Bhk=>OI1_FF z=b$Go>%@6LU5ZHMoB=9;rO{`A1Hc>LRIpKb=Oo{N8Z1$T0M`((6_}6rkLw8=y$}K` zIyYA?!w%qJ?90KiV5UmWy|5iDj{X6x2Ij3C;QjXdaBvX%YfzJRt>S$3d<)dQv#_f3 zeu!Vq87M25hWf5qZ1mjj1p~n=pkBqF!99NbxJ-5Djrg#Jb2n$I=`>as)X7~1%Ym6| zIbRQig1V%~!8Txm+Rmlu59+b|3hF6~P>1JVFOsNigo#1DP%?rFC;-L)i-Cb)71KMJ zzaOZN|ARrjXhwkInFs29u@=+|Z3n0~;|Wk7JMMzw|6GUXUjaWcqy%Hub?(k=pq_#t zP>JI}6v{co-~?ehE|~$?7|p36woA7znz-PF?{t&_Q=xVO^{p1#~i1*)OrU}f+ss1H8rgPnV;kzq5?`}6-T+320! z3Dn(w5LD;KKpp8-P*24JP>p>CRX9Rx#~ugNNu&c6pBGeI2~bZ}6;Sc5!GU0?+26P3 z`A>@>MjNMaE-(#xK2X=b5va$ezuD&)?gy23AJo@=QQA6XH@%^%Rvi zdreT6s%~4i({Tq3ny{xi#+bec)MK^{)Kd}=;xrf))J>WVRHI>_?wRReL2x^m349Co z0h6|K?w#qNF2x?u>vyx!bDOli(|H)E$EX*m$7&#`31))&7_kV{wcQQstJ$-lPU0D; zyjUHa$2SqEOOgfDq(#6SU@cG$4h2(#?)~Pt2L@t@*U`DT@_-^J1?qiJ8`RAh0_tPJ zKv0d02X%4_LB($cRq!aNNw0&tM6o+LcYS6s5WONuoZHo&O(6_}4EKV1AAA8-phRb< za4k?L(he*F4hHpNIsocv_yOvKqIYplBE4ZYusZgiDzi@wz(1sXdFb z!R9si9?a#(V;1VXC=zvdUcoIv6<7gA1Yd%h0_t%~18UM7piZW= z=}kdBmfb+_*Z*VK=&0v{B3=*bTJAOd9H`G`Z-V8)FQ6XFl0BWc=AfSUuArWV{-7FI z0P0P*7F46BLA_Tl89wUC^RJ1%V9+J_1?r{==;hq4`9XCW0_vmHU@#}R5o`(G1NBj} zY;R}suAmC{0rj|!0Cma6gSs?xK{etr|Nh=Q|9UYTGs6W?1Xn=a?GHfRbl*V5#p~lt zoE+37*-S41>O^XSYOo8ayv2sQKs}}xK@IW=%m$`&_jRsOZBUO{TTq4jgPLF}sE+4= zdbKVAb&c19x?~>1lc3_S8{Px;7(NAcDSv@#ICekBo(5DMcL6pkP#shQ_07={)J-!K z)QQXob*a{Xir)l^U?(Wz3!rYc`)2e9vR@7$ajKsB5X)BqJgc-*d*X(a9)*%N{3z+7Mkus*1#Wgw_V=YqO-R)QLEGpK=& z3HAJ6HOC83#IAwPp2I?Ar1VtQo zsFR-<)Cr{nb*YMgimPjSH&F3oKwYZIZZgbypb^~?Eh8a!()xazV-L7S9M6?OiWJf`De$DWq+24REu}2)? zd;*aU)J;^@^k7hv4hMD5%mr0=EvSaKgBtLt;YHB<^S`&*=vuu7)mfC0&WXeam5>zF zNn`}oXbw;lmIfn$^*}uhjX^cu0@OX!5!A_y0M+<>P&eN`P<4(=*YkggjRTXeTcQsELz-dPC*~Rj8KvTbUjTDt{=bOEq>h&%Zib zj6sjvR#5s5P)C0X)Z=so^j;!RjYS#bOqvkX5oZE5KygqLR|6H-(EM#dos1jQC7cZE z5-cCX^RI->7*u#KsG~U#s(}Y)e+#BT4;brAo&i)|Hc&(bK-~jnOs@p$1nPl`YissU zv%5hxK2aOp6e~a#+z9F#?*(;~$Ibo#)I@JV5&r`9Vu?M@`NSg&r~xX1B5n-oT>iZBJJBhC+M zqH3TfZ3C+DKA_?!7)}Q@z&ua`tOxZJ900u^|4*<{1J^+%J^&T?98};BP>n^L~Mn4S*Qpqb5{V+zl|j-(Is0J2+x(7U<8b1%Jz!gxF-vBk~6Hswq%pPZ|!=j zR0eg_H9>XS0#rgDPz48rdW@!kdJ5K>ehgIM+o0lJfhzpV>~W?$Cl&~n!k!yk0QLkc z==o1H!}*?X5Lf`mR4^NO4$Ke!0JDR6XF7l3&>C!uJ{zn92F!B44c`E)jJ^t#{UcZt ztUTL!<1H{e0H()&7c8yM|D()teq^c&*d50>urwGj*ZIDEd9V=r9xxC18PrXcb)NHO zd49tIU!m~b?%75*-MVvQFJ z*P)qif21CI0CDBGDXQ!GAR&C{OvaMbvAF8&U*aD?d?Dfsd%eydLFyhU3x|6uw`mK4 zB>dpBtF`VnWHA^LTm6-T+a4aIH8n~S`(2vh2@kv%&d{c}CZr`dhPUW|PQin-a}1q0#u zXq=PD??U4{jc1@WC6cY!Tk!M8u5)ZAkk^6s}NmsuLe%_BeX}ZgZTeNtQ&U*hHL92^vRI7S?)eU;yOBXe^M}jS&5gJvXFj zh|dqc!QP#HcH(P$Mnhw}NSX+_WC2N0 zi0O^a7r6W=Hg84C;Uls4myF}1f2F{4ayQUq-T%Ycjkqi1jl#bS9{1lA4h5=0CAEgH1&%$o|tmhY$2Lmitj6{ z4mol0HzNLDayJoEkOotN7ifUrLE`*bKH*D!*ERyD;_L>ISJ*FyAUEh|M|T;=XVz2f zvz;hc6a11ma5Tk!hS|lQidm`|IagIh$gWi!CcSgGL3wM1*vcL-Ez;~R6;@c_6 zmyQYe+Qa1!!8-PH$eqBXN6{M-FUdwTDaq@JFDbFZz(wc>@wJ2NU*a~C`|>yDf9_4; zuD0%O;#grstH7-gNLE04QkOx3?Hl?uM{~_2E`^=IB^r@5fafiomx=YW0nQS)i)JFj z^Bnx2^Ur8WGS$biif$!GSbU1;`i9=bNbW!^*@ZsB*?PZJ(>9FQaWwLaeS20jc-!kF zD0tF1Ba-(AdMfnmdjCf!;h~Y=q{GLo4&fU57yn*ww|ss`Vg~fi=r7p!B5x(Jg|SKa zbx+qE@*kk*q`-5qsre>2A>KdVl7Caz|1k};hvWdAOPb&qgT4)tOZZl^zYoDZib>v5 zYy`)8hJ6*Y{RI{#?=Xb=T5=&=7gzx_P@LHEtYYvrhf9)*Sjjr?|9^o^B^=W*#v!mh zWN8Ub0znW2HLx8)&q~Y~P?8t>1>*RfGuK=iI*0y){1Zm3nD4AC*mu%=61!w$@u!0K zPdFt5BJup)!yrj*sQpe7U!o7SqZ??xEfBrK$ESF%u{897eJ^6}TAXrA(a>^y{xrMH z?EHqNDTfiy^;VBv` zh<7#X7sb1Qd+;@j;N*|0TW`J^kG=a3e#YgQG`nsh6PPEKb!Tu$Lm zOnRA^B>4KGS6PXp4@9jjaT`X-MFNXb@CSjF*sp=)7J6Ru@37))vDcy4dwe^m_}!1^ zPDUFgU^ok78m#H4u$r}q$p7qYW)ma%2bP*vc`B7gz&@OqFZj=+r^c6(JV^}c&enC; za%$1ppKwe3h>H^;+{b{nB%CL33Pn0u!Ppe|*IHN72J|At?V)HqYfkpsx6MKXr zlD`=3t#iOdh{s z>iR^16~u4E-WB@?8Y^K_-o`d1T;5{49=V8nr3Q3I4T3xq2FYEpH9?zf3fV5v$U_P& zpkO?F1tAY)jbx>Vd~CRr_(p8Ta0Qo;m(e>ZmpGhVyb^bENLPkC;wTizV1YMiViFBi zvT0hG{T_)2*bgQ*B?TpMC?wg;noW+SxGvkKg4NhZv+2ziMc02Jj$IISr^~^t?G)7) zw6vgK8fTO zzUJT@nq18O9BVxdb!ECJH1Lp|B{bJH+>k%;{oyq1b_IzA=@>4cKKo%b)EiRC00<@3 zAwP}XjlC>;eXk=LMb^>Wd+Zg6n_@g2y%~Hfg4oFv^htdiVx^ax`9sW55kogS#&?kG zyM9|(jj`>dz!hs^1}Cx?!W0x-?kH zk*{Ij!YD4&fKS?yoRfqR*1%61Dh^R^^nW1#L||-UI(sMLwT-P0MIxyHa)9_M_+MF_ z+W0cF(h~2z{BCshz{Mmi#6HF~ z`6DO!5`H7yl^MS#DnkAe*57iFH_nD@&;Bv?qwq$jk?i_As4I|5!f?ES{0@310wwj( zTR@ta^$~q8#Y(ZNVV?}a32&71$4!cCg!sHQG>;g`BX}pV3gMp??y{zVvyDE#83$1j zihd$lQkKiq>>SIBd8MuyJ^gA1+wA$huBUumWJHx*n65U zo|EqVvk^IK**zjYDLm{QfA1>4tz^KXilHoX!}m(lyb7sgNseNvZz z3)m%Dz*vxvW8cFX*=>z@{p?TJ@y3Plgq=hV8sA|Y+u+MfTsicvR;M<$|KRgJ{~}6D z6B#kYfuJc9r9l6U(~uM*+_bn27Tb~KwHp23<*;kqRLVt<4E0`|j+KMP9MLvnznXt*tYAXBB!{pK z#WsxCgB)Xg%jpQ=ReasCH3vu2z~A_8S-u*G#3@W5?i(>r@P7rTJ166IO|}9_Fa)za zByYyHi>ZpSdf7yCZJLf2FXD6*?7;d#vG;Zg)ga%`iVD{n)^Ka2EVfHDkp;dm@OSK~ z^#35w2!SLP1?G}aoD(@^MPCv0h;@Oc8d9JHBysU4HPR;#Nph0slK^oDv}iqz!BM!;}95^RgstokS1ge!@q*~W#ksN(>SUs;pBJh zQ)zU$741yJOURY9G}PW*i^&4Q8J>|ikadWnZ7eyxB9VI#)_1n9k#;$5kw20~j?(;D zawOZyZ$a*BR%Qw(!ave{v&j31-^A_xdDaU?Cgbh@?{poaApdTPD=MdPoD~D#Z1Wc- z_724*r6}+_>lQpQD7c^4byhGXI28R8L-J3fxVjQ2X^*Xd_y0kUk`vMzbQ=Z2HLR|d z>>+prNzGV3`8(YHCjN8g$UuRFoWgwk*&#n}al2?}2K(>C4#%I2TFbx!#5C6PU&AKy z6_|%J7Pgrr_Qd~*Rge8GBaDik9sLiRBrf}HtV`&Z&DH_3!^XSQ@@h~pvFcf&is;`I#asWL?=uBfux`blo5?5bjcawEJT;akbeur17;By~f(YN)ax91iq-` z2Ee#;IOHM3mZP3TRi5N@URGCQ1K_fnSMv&w##3vz=WP;#3 zdP!A4k}~CV3P~Qq6-@qO3iM;&m;B!Nma;!i&R^DSbmN+@>wf}A0y;FGE5wfN7)_PM zFKG->RbujyxSqmw&@1B`7_M2xy<+vl*9)vmekF2Nz%Tj6zBoC>XegLf4x4*9WZ4Pm z0oKMj1!EfmcM-4=yh>MRtf3(gFVjiU!~xbh^n%3jV{)!YR~ur+iNuB0pv;oq@W zC9er}&WF1vUg>+_l_}(t=aBKASGtlUIZ9GK)V)gVG#=u_y~!-z}gOghjBoK`#NJBngci zw<&KEo8L&qk${+m__Jawq~`GFL62#CN5NwbjrY&x{P~hN_kD^S<5&{1dQx-_xSYiI zbSTLz0?0aGkBj{wIF5Ciy-#kU`=lY8k>rdcKMw`!(^vs(S}`S!SNo6pJJ3%!*V`l? zXdo?)A2bz@^#Xkm(?zu@(vh5>eGDV4j^3IWf0pD=i_1jODC7^v_JaKDU}JI`gF)D* zllK$croRI{!DcZ8Cz)~!1bbLZ*`H#)o|G9>dw3Of#7@rduKypl0Uvz()HWx8rVdW)R62heUoULmaNo~;|lNghjoao`@F!~;*OJt46*Pr+>cz3fTCyD7zerAh_ zqQ3)~K(~1a^hquDw^(s4s5?o2(RB|<3e)Iq;%l)=T24mxk}aB!*tFnb$K-lsH{>&7 zo8fB-XAbt6jQcM=yZa#C07^>OwX92U6;5FidRhuhgQx@RrzJYkyydXXLODaxH#F&! z&E#!DiH2Qr0^d(K#}c0>T%7m*8$iGfx|&MTe+29XXHxu%6?=`ZJ26wRZKTms><`!_ zV(ZF7jwC+BEr~r$!!_}*r}%!y}w%iOl(VwD}${nWPK?hS!wnS}cro2}2=!1<7kjBGK62mK%?vC-FZ)uLi!S;7pp8EW!4Owa-qg zx}8QnV%*mu`$8dpy7+%dIqW~M)C_0OY}b4z#0AaX!x~U>C^?d2;B{gn+N3$ym!bwg zWbXP!d<6X488kv9=5K0UC5N=}|CzWZz9p<~5EaCCfMk9k)HM|S3nx(w;vwuaFv))Q zmz?@8{@qU3O7f;sBr^83!i}6Y?Ln+Z9 z;ve{QEg(P=O2QDDnxPJmHx!UGLT?JOPpS~pGhFk-@%_uxu^8+l_LJn5fir;pJ~*4< za~C7~91i`g>tZ7wMM5@fXdWbEXl4?@K8eRZfY@$UJPTx!(&XePHZl3p%yyh&aTzEB z_6g*LVgF&iY5E!DNd%`N=o{1QWiLrcKt60uC~yf|S-NgV!G2aSgqU&G;J^6(Bz`(Y zhOv$j(+RFF_?wa2p1csas@niviJwoLWJzQ_eC|vrm9Xa+Cs9 zD7un;BQQH_mHBFexvbb2vpt}Z#GJrNxIU0m6ul2I!TM{Kc?A6fVHPn{C^66m=W2Xc ztqHj#9hgeLC%K7&t;uP_N`d_o#5=J4WM7Ix%`NW<_5@743i~x{hJUZqD=9(u3F}mr z7U7DWWnYj&8Eo=f6s`lo0Lb=`a|2%w_9k-~$>3nu1I^uFjf zD6j=vGhzy{m&^yNz}c2n1N$7}a)Don`>5x?KgxTQ#gIrM*~FJQ&g&$)ca3kZa((yTLiT?WkQe7Niuk0Y5g)gt z1%|aCih%F4`4#_%`I?(;2e#7`=|SvZeA5}IAHF>_*%n_F>bTqExJ!pcaO@^9r6u<^Lq%QzEQ z@nqP#V%vh=f)&V`r0YMLDUQ+2b_*O!BYp(eg7`1?vq+k!?o3kB;9HCR%)So(`@}w> zaA)v1wuW$a0VV5LTj8sYe-BOTTYf89TWJ2B8%HvV$8?UvHJyN#5SAyP6h(HkKStmZ zbjd!5_p@G*R~f>s#B2lCvjXwoCN`A9E%BdYKbUojRRLbfcYJBcm!woPIZ?{9smR(5 ziDZQ}^9Vdm!ep8l1j%@c{cABJnDjOFE>4OoD?AV3h()6{Sl8Jn#a|!H!;*}!Q%i0f zW%M(UGa#1y3*iPFr|3K>`-YbE09~?*M!wL{f7qW=;6C>8MwHa>C{0`>_fPyDaItYH zzYXy*;pl)*(vN*7z5k0t`ppPl(_uQ29@+^gFd?M7u+3ze7&IHvNPk(*XbQ!H{04Df z!5qYGfII~IS5_D7FLeospF(a8{4Iz}M6^(?j)wcMpixCZI(1a%-W zy-lUuSLk0^MOi7ZU!?&_1af@xoV=^({qb!D>wr6nmkgkwq!sHu&DO(rnxf}vpf`Mf z>g)e!R`8sXaY~}HPft@f@LhnU56Stlm%<*^nz({5A~EOjwzS^9A2u-wjBm&C1cny`-9&%JB%Q%E6n@J71nV{W@927T+u4LFI+JEf z+W_CW&V%5sYzI^h5fY z(U~|4$ctovXaEVLNX$p^!mNSVa?n6|k}9&_OQAaCyr1CH^P2KIFEuhPYq&5JPY`g2u9{vM)^FE=Uif7lN=PHV;IS?)+X@7 zmX#uziAzONHyT-njsJ0qYaQHIDJ2=Kk2*4ONOtq6>9|7cr}J^6|rxu*#+iLLBkK&e~wE1l?0sg zO~_vIf#g!yt`N8r{XP0d)!oxnxnBf~pg@5>zoZzSL^Yv4Xulz=};{$dG9D6$XYLU!y8E%pr!>}UTP zpJXB{DpN+n9tHf3_&8ny`V-s;-*;>vd`81f1JeJ zR(K?sm*U~2DgMhwB>Nhg8DPbZ5}TU!4B}JRj^i6nbCay$|KMv)gY)p`A$Jn%ur+W1 z-!y$S_?Ye@vC2VElf>EVD^TzS>kj^`*w-6jC7XORq&}$&p&xOJG2CI5C1xE>ts-wU zdH2{)gmVo0k~H!Ucm!SIz5dz+Lf8|MnFJJva396r5Y$9YWEK8n_@YC4j1^vrTT{#N zOWJ|Wtih`kD`2PBiisP+oytyNygpyvOp&YroYjm5Buy;lcZj27>j%#inhdc96w`$o15Dpe?iD@%F)&;t`7Mdvz)sjk;gqx^ zp%?xikj=6N>qF|HKs6e?PfR3EqZfIl%J<7gKV(<7B>&weUiZEZ0=K} z0mKDJk}P7s0^dCJv+O064eQdJKfcVS-!n`P&luw4+lhFS?6mygzhDi>UXry=e_yhR zfZ24E+X@dN@By~Ski5h;%**2ZkvH7_ISqJNrOmd>CM{>hhuM^k;Y%P+V#~17!`+;9 zfVd(0d5O*te8td??xI7|mwi7HBn83TPwd$RQ?*GtNUks_H&L_b0Yfs!6j z)@0ulTL(MjGPIPG_y&wH5C1*0uhdy$ACA2qcF7}h<6!$rPHd}jLZ3MoBd7p|1@vB) z24YiSHQ0cJi`eEuCMnOVM1eoRk=XV@yn&dHRy20F^MS%EOKo$I*bw$viLJ-LRV~N+ zCL9qiF`{*w&9E{w=V`71F`w;1iMcZS8DI^F`h#2XzqVp?jPI_m3nd_`{3SSrwwzR2I7WjxDU=S}LxE~G z>3`^J;aQDd4*xcMvsv!T*6ma4PIcO`>Qm$&2=9fvKZ0ng7HcGA8?m>gfl}mMhcppn zv9LF@f)^?F8~SJTbymY>a0OyN1os<#Ca{D+Nn57)X@RRq`UGKk*=PE0;!+XU5rSzn zQ=SHLo9{mo(&Fzya~^D0jBhP*52&+=oU33i;<{r?t)HAcNH+&5=pneUO?w?%Tq8Zq z{xAIb!M7yFHhXNQFAv!Q8z2z9A^Axlj!Yp*3G_PT`eZ-$eB?itEihxt?%Qtq&5Pp~ z>X{MOFH!-|ib{SNa(OQG_j{kzbAFazC4W!Kxqe0Bdpd0NiyXx>Vu#lPf=vTc^YTsd;(@qA0~zamkDu%I@fo|{GezekC#ZD6b5 zz`B)7RGm?xzJEfGe|i7MB|INS`BzL4DLAlOP|Nn7GAsRmC5jXh+A^e5u&34m|F=;* z6;AqZNFG_d9)0gwHkNAi4p>HpB*bLWl!lNi3>D?k17MRSJ+wg?Id4t3S;-6dGX zl;%~urMm_7?%b(UP#XfOcMfUgwRH&crnnA|>Tq~fkD#!S&Yc2Vb$1fO*%TX!^?wK| zJ9&YvI){V>9$wAtfkEA8^o<(OETxJDW~@*;)BkECFk^?1jzKMhGkGFM3pnEExez^| zO_Vsbx_9Z)Eu>>`x4;hYb4H$y2?A=xh#-y`M^XoPB00TyhNcN96Tx#iL%_MnQA-AO z2nh{#)edSiV@LLY71c>=!{P8RL5792G#;;^T8nnUVP0CVs-tIGk`?WoQHIWn@mXD7 zYR{1z0ezxd, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-12 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Jeremy Stretch, 2024\n" +"Last-Translator: marcpaulchand , 2025\n" "Language-Team: French (https://app.transifex.com/netbox-community/teams/178115/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -158,7 +159,7 @@ msgstr "Inactif" #: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 #: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 #: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:339 netbox/ipam/filtersets.py:959 +#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 #: netbox/virtualization/filtersets.py:45 #: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" @@ -170,8 +171,8 @@ msgstr "Région (ID)" #: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 #: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 #: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:346 -#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 +#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 #: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Région (slug)" @@ -181,8 +182,8 @@ msgstr "Région (slug)" #: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 #: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 #: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:352 -#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 +#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 #: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Groupe de sites (ID)" @@ -193,7 +194,7 @@ msgstr "Groupe de sites (ID)" #: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 #: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 #: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:359 netbox/ipam/filtersets.py:979 +#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 #: netbox/virtualization/filtersets.py:65 #: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" @@ -263,8 +264,8 @@ msgstr "Site" #: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 #: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 #: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:238 -#: netbox/ipam/filtersets.py:369 netbox/ipam/filtersets.py:989 +#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 +#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 #: netbox/virtualization/filtersets.py:75 #: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" @@ -283,13 +284,13 @@ msgstr "Numéro d'AS" #: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 #: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:243 +#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 msgid "Provider (ID)" msgstr "Fournisseur (ID)" #: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 #: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:249 +#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 msgid "Provider (slug)" msgstr "Fournisseur (slug)" @@ -318,8 +319,8 @@ msgstr "Type de circuit (slug)" #: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 #: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 #: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:232 netbox/ipam/filtersets.py:363 -#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 +#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 #: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Site (ID)" @@ -673,7 +674,7 @@ msgstr "Identifiant de compte du prestataire" #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -1108,7 +1109,7 @@ msgstr "Affectation" #: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 #: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:999 netbox/ipam/forms/bulk_edit.py:493 +#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 #: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 #: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 #: netbox/ipam/tables/vlans.py:226 @@ -1548,7 +1549,7 @@ msgstr "Bande passante garantie" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -2954,7 +2955,7 @@ msgid "Parent site group (slug)" msgstr "Groupe de sites parents (slug)" #: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Groupe (ID)" @@ -3004,23 +3005,23 @@ msgstr "Fabricant (slug)" #: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" -msgstr "Type de rack (limace)" +msgstr "Type de baie (slug)" #: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" -msgstr "Type de rack (ID)" +msgstr "Type de baie (ID)" #: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 #: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:381 netbox/ipam/filtersets.py:493 -#: netbox/ipam/filtersets.py:1003 netbox/virtualization/filtersets.py:210 +#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 +#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 msgid "Role (ID)" msgstr "Rôle (ID)" #: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 #: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:387 -#: netbox/ipam/filtersets.py:499 netbox/ipam/filtersets.py:1009 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 +#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 #: netbox/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Rôle (slug)" @@ -3218,7 +3219,7 @@ msgstr "VDC (IDENTIFIANT)" msgid "Device model" msgstr "Modèle d'appareil" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 #: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Interface (ID)" @@ -3232,8 +3233,8 @@ msgid "Module bay (ID)" msgstr "Baie modulaire (ID)" #: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:611 netbox/ipam/filtersets.py:851 -#: netbox/ipam/filtersets.py:1115 netbox/virtualization/filtersets.py:161 +#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 +#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 #: netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Appareil (ID)" @@ -3242,8 +3243,8 @@ msgstr "Appareil (ID)" msgid "Rack (name)" msgstr "Baie (nom)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 -#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 +#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 #: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Appareil (nom)" @@ -3295,9 +3296,9 @@ msgstr "VID attribué" #: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 #: netbox/dcim/forms/model_forms.py:1385 #: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:316 -#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 -#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 +#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 +#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 #: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 #: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 #: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 @@ -3324,19 +3325,19 @@ msgstr "VID attribué" msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:322 -#: netbox/ipam/filtersets.py:333 netbox/ipam/filtersets.py:489 -#: netbox/ipam/filtersets.py:590 netbox/ipam/filtersets.py:601 +#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 +#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 +#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (IDENTIFIANT)" #: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 #: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 #: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 #: netbox/templates/vpn/l2vpntermination.html:12 @@ -3441,7 +3442,7 @@ msgstr "Panneau d'alimentation (ID)" #: netbox/templates/inc/panels/tags.html:5 #: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" -msgstr "Balises" +msgstr "Étiquettes" #: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1498 #: netbox/dcim/forms/model_forms.py:488 netbox/dcim/forms/model_forms.py:546 @@ -3498,7 +3499,7 @@ msgstr "Fuseau horaire" #: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 #: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 -#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 #: netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 @@ -3597,7 +3598,7 @@ msgstr "Unité de poids" #: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:256 #: netbox/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" -msgstr "Type de rack" +msgstr "Type de baie" #: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 #: netbox/dcim/forms/model_forms.py:297 @@ -3749,7 +3750,7 @@ msgid "Device Type" msgstr "Type d'appareil" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 @@ -3857,7 +3858,7 @@ msgstr "Cluster" #: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 #: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 #: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:52 netbox/extras/forms/filtersets.py:321 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 #: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 #: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 #: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 @@ -4098,22 +4099,22 @@ msgstr "groupe VLAN" #: netbox/virtualization/forms/bulk_edit.py:248 #: netbox/virtualization/forms/model_forms.py:326 msgid "Untagged VLAN" -msgstr "VLAN non balisé" +msgstr "VLAN non étiqueté" #: netbox/dcim/forms/bulk_edit.py:1508 netbox/dcim/forms/model_forms.py:1376 #: netbox/dcim/tables/devices.py:585 #: netbox/virtualization/forms/bulk_edit.py:256 #: netbox/virtualization/forms/model_forms.py:335 msgid "Tagged VLANs" -msgstr "VLAN balisés" +msgstr "VLAN étiqueté" #: netbox/dcim/forms/bulk_edit.py:1511 msgid "Add tagged VLANs" -msgstr "" +msgstr "Ajouter des VLANs étiquetés" #: netbox/dcim/forms/bulk_edit.py:1520 msgid "Remove tagged VLANs" -msgstr "" +msgstr "Retirer des VLANs étiquetés" #: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" @@ -4161,7 +4162,7 @@ msgstr "Commutation 802.1Q" #: netbox/dcim/forms/bulk_edit.py:1558 msgid "Add/Remove" -msgstr "" +msgstr "Ajouter/Supprimer" #: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" @@ -4170,7 +4171,7 @@ msgstr "Le mode d'interface doit être spécifié pour attribuer des VLAN" #: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 msgid "An access interface cannot have tagged VLANs assigned." msgstr "" -"Des tags de VLAN ne peuvent pas être associés à une interface d'accès." +"Des étiquettes de VLAN ne peuvent pas être associés à une interface d'accès." #: netbox/dcim/forms/bulk_import.py:64 msgid "Name of parent region" @@ -4212,11 +4213,11 @@ msgstr "Emplacement introuvable." #: netbox/dcim/forms/bulk_import.py:185 msgid "The manufacturer of this rack type" -msgstr "Le fabricant de ce type de rack" +msgstr "Le fabricant de ce type de baie" #: netbox/dcim/forms/bulk_import.py:196 msgid "The lowest-numbered position in the rack" -msgstr "La position la plus basse du rack" +msgstr "La position la plus basse de la baie" #: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 msgid "Rail-to-rail width (in inches)" @@ -4228,7 +4229,7 @@ msgstr "Unité pour les dimensions extérieures" #: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 msgid "Unit for rack weights" -msgstr "Unité poids de la baie" +msgstr "Unité de poids de la baie" #: netbox/dcim/forms/bulk_import.py:245 msgid "Name of assigned tenant" @@ -4240,7 +4241,7 @@ msgstr "Nom du rôle attribué" #: netbox/dcim/forms/bulk_import.py:264 msgid "Rack type model" -msgstr "" +msgstr "Modèle de baie" #: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 #: netbox/dcim/forms/bulk_import.py:605 @@ -4656,8 +4657,9 @@ msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " "parent device/VM, or they must be global" msgstr "" -"Les VLAN balisés ({vlans}) doivent appartenir au même site que l'appareil/la" -" machine virtuelle parent de l'interface, ou ils doivent être globaux" +"Les VLAN étiquetés ({vlans}) doivent appartenir au même site que " +"l'appareil/la machine virtuelle parente de l'interface, ou ils doivent être " +"globaux" #: netbox/dcim/forms/common.py:126 msgid "" @@ -4863,7 +4865,7 @@ msgstr "Identifiant" #: netbox/dcim/forms/model_forms.py:259 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" -"Sélectionnez un type de rack prédéfini ou définissez les caractéristiques " +"Sélectionnez un type de baie prédéfini ou définissez les caractéristiques " "physiques ci-dessous." #: netbox/dcim/forms/model_forms.py:265 @@ -5637,7 +5639,7 @@ msgstr "réseaux locaux sans fil" #: netbox/dcim/models/device_components.py:697 #: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" -msgstr "VLAN non balisé" +msgstr "VLAN non étiqueté" #: netbox/dcim/models/device_components.py:703 #: netbox/virtualization/models/virtualmachines.py:341 @@ -5786,7 +5788,7 @@ msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " "interface's parent device, or it must be global." msgstr "" -"Le VLAN non balisé ({untagged_vlan}) doit appartenir au même site que " +"Le VLAN non étiqueté ({untagged_vlan}) doit appartenir au même site que " "l'appareil parent de l'interface, ou il doit être global." #: netbox/dcim/models/device_components.py:990 @@ -6494,11 +6496,11 @@ msgstr "facteur de forme" #: netbox/dcim/models/racks.py:162 msgid "rack type" -msgstr "type de rack" +msgstr "type de baie" #: netbox/dcim/models/racks.py:163 msgid "rack types" -msgstr "types de rayonnages" +msgstr "types de baies" #: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" @@ -6852,7 +6854,7 @@ msgstr "Baies pour modules" msgid "Inventory items" msgstr "Articles d'inventaire" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Module Bay" @@ -7135,7 +7137,7 @@ msgstr "Réservations" #: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" -msgstr "Appareils non rackés" +msgstr "Appareils non mis en baie" #: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 #: netbox/templates/extras/configcontext.html:10 @@ -7584,12 +7586,12 @@ msgstr "Signets" msgid "Show your personal bookmarks" msgstr "Afficher vos favoris personnels" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Type d'action inconnu pour une règle d'événement : {action_type}" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "" @@ -7632,11 +7634,11 @@ msgstr "Groupe de locataires (slug)" #: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 #: netbox/templates/extras/tag.html:11 msgid "Tag" -msgstr "Balise" +msgstr "Étiquette" #: netbox/extras/filtersets.py:629 msgid "Tag (slug)" -msgstr "Tag (slug)" +msgstr "Étiquette (slug)" #: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" @@ -7932,7 +7934,7 @@ msgstr "Type d'action" #: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" -msgstr "Type d'objet balisé" +msgstr "Type d'objet étiqueté" #: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" @@ -9066,7 +9068,7 @@ msgstr "étiquette" #: netbox/extras/models/tags.py:50 msgid "tags" -msgstr "balises" +msgstr "étiquettes" #: netbox/extras/models/tags.py:78 msgid "tagged item" @@ -9395,129 +9397,129 @@ msgstr "Exportation de L2VPN" msgid "Exporting L2VPN (identifier)" msgstr "Exportation de L2VPN (identifiant)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 #: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Préfixe" #: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIRE (ID)" #: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (slug)" -#: netbox/ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "Dans le préfixe" -#: netbox/ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "Dans le préfixe et y compris" -#: netbox/ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "Préfixes contenant ce préfixe ou cette adresse IP" -#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 #: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 #: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Longueur du masque" -#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (IDENTIFIANT)" -#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Numéro de VLAN (1-4094)" -#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 -#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 +#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adresse" -#: netbox/ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "Plages contenant ce préfixe ou cette adresse IP" -#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Préfixe parent" -#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 -#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 +#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Machine virtuelle (nom)" -#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 -#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 +#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 #: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Machine virtuelle (ID)" -#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 #: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Interface (nom)" -#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 #: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "Interface de machine virtuelle (nom)" -#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Interface de machine virtuelle (ID)" -#: netbox/ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "Groupe FHRP (ID)" -#: netbox/ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "Est affecté à une interface" -#: netbox/ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "Est attribué" -#: netbox/ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Service (ID)" -#: netbox/ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "Adresse IP intérieure NAT (ID)" -#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Interface attribuée" -#: netbox/ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Interface de machine virtuelle attribuée" -#: netbox/ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "Adresse IP (ID)" -#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "Adresse IP" -#: netbox/ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "IPv4 principal (ID)" -#: netbox/ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "IPv6 principal (ID)" @@ -9606,7 +9608,7 @@ msgstr "Longueur du préfixe" #: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 #: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" -msgstr "C'est une piscine" +msgstr "C'est une plage d'adresses" #: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 #: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 @@ -10175,7 +10177,7 @@ msgstr "La fonction principale de ce préfixe" #: netbox/ipam/models/ip.py:265 msgid "is a pool" -msgstr "est une piscine" +msgstr "est une plage d'adresses" #: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" @@ -10523,7 +10525,7 @@ msgstr "Profondeur" #: netbox/ipam/tables/ip.py:262 msgid "Pool" -msgstr "Piscine" +msgstr "Plage d'adresses" #: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" @@ -10989,11 +10991,11 @@ msgstr "" #: netbox/netbox/forms/base.py:120 msgid "Add tags" -msgstr "Ajouter des tags" +msgstr "Ajouter des étiquettes" #: netbox/netbox/forms/base.py:125 msgid "Remove tags" -msgstr "Supprimer les tags" +msgstr "Supprimer les étiquettes" #: netbox/netbox/forms/mixins.py:38 #, python-brace-format @@ -11081,7 +11083,7 @@ msgstr "Associer des contacts" #: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" -msgstr "Rôles des baies" +msgstr "Rôles de la baie" #: netbox/netbox/navigation/menu.py:54 msgid "Elevations" @@ -11089,7 +11091,7 @@ msgstr "Élévations" #: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" -msgstr "Types de rayonnages" +msgstr "Types de baie" #: netbox/netbox/navigation/menu.py:76 msgid "Modules" @@ -12197,7 +12199,7 @@ msgstr "Dossiers" #: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" -msgstr "Élévations des rayonnages" +msgstr "Positions en baie" #: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" @@ -12613,7 +12615,7 @@ msgstr "Non connecté" #: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" -msgstr "Surligner l'appareil dans le rack" +msgstr "Surligner l'appareil dans la baie" #: netbox/templates/dcim/device.html:55 msgid "Not racked" @@ -12939,7 +12941,7 @@ msgstr "Non connecté" #: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" -msgstr "Non taggé" +msgstr "Non étiqueté" #: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" @@ -12969,7 +12971,7 @@ msgstr "Unités décroissantes" #: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" -msgstr "Élévation du rack" +msgstr "Position en baie" #: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" @@ -13165,7 +13167,7 @@ msgstr "Afficher la liste" #: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" -msgstr "Sélectionnez la vue du rack" +msgstr "Sélectionnez la vue de la baie" #: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" @@ -13275,7 +13277,7 @@ msgstr "Édition d'un châssis virtuel %(name)s" #: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" -msgstr "Baie/U" +msgstr "Baie/Unité" #: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" @@ -13690,7 +13692,7 @@ msgstr "Tous" #: netbox/templates/extras/tag.html:32 msgid "Tagged Items" -msgstr "Articles taggés" +msgstr "Articles étiquetés" #: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" @@ -13702,11 +13704,11 @@ msgstr "N'importe lequel" #: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" -msgstr "Types d'articles taggés" +msgstr "Types d'articles étiquetés" #: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" -msgstr "Objets taggés" +msgstr "Objets étiquetés" #: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" @@ -15559,12 +15561,12 @@ msgstr "Mémoire (Mo)" #: netbox/virtualization/forms/bulk_edit.py:174 msgid "Disk (MB)" -msgstr "" +msgstr "Disque (Mo)" #: netbox/virtualization/forms/bulk_edit.py:334 #: netbox/virtualization/forms/filtersets.py:251 msgid "Size (MB)" -msgstr "" +msgstr "Taille (Mo)" #: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" @@ -15737,7 +15739,7 @@ msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " "interface's parent virtual machine, or it must be global." msgstr "" -"Le VLAN non taggé ({untagged_vlan}) doit appartenir au même site que la " +"Le VLAN non étiqueté ({untagged_vlan}) doit appartenir au même site que la " "machine virtuelle parente de l'interface, ou il doit être global." #: netbox/virtualization/models/virtualmachines.py:434 @@ -15780,19 +15782,19 @@ msgstr "GRE" #: netbox/vpn/choices.py:39 msgid "WireGuard" -msgstr "" +msgstr "Wireguard" #: netbox/vpn/choices.py:40 msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" #: netbox/vpn/choices.py:41 msgid "L2TP" -msgstr "" +msgstr "L2TP" #: netbox/vpn/choices.py:42 msgid "PPTP" -msgstr "" +msgstr "PPTP" #: netbox/vpn/choices.py:64 msgid "Hub" diff --git a/requirements.txt b/requirements.txt index bd16b5d10..e5ffe8386 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -Django==5.1.3 +Django==5.1.4 django-cors-headers==4.6.0 django-debug-toolbar==4.4.6 django-filter==24.3