{"version":3,"file":"index-COaII4PO.js","sources":["../../node_modules/iconify-icon/dist/iconify-icon.mjs","../../src/components/svg/SVGAppLogo.vue","../../src/components/svg/SVGAppLogoUwU.vue","../../src/components/svg/SVGAppLogoUpdate.vue","../../src/components/elements/AppLogo.vue","../../src/core/event-bus.ts","../../src/components/elements/DialogElement.vue","../../src/components/elements/ChipElement.vue","../../src/components/elements/CollapsibleSection.vue","../../src/components/dialogs/AppAboutDialog.vue","../../node_modules/dexie/dist/dexie.min.js","../../node_modules/dexie/import-wrapper-prod.mjs","../../src/dexie.config.ts","../../src/components/parameters/ParameterGrid.vue","../../src/components/parameters/ParameterCheckbox.vue","../../src/components/parameters/ParameterRadio.vue","../../src/components/parameters/ParameterDivider.vue","../../src/components/parameters/ParameterRadioOption.vue","../../src/components/parameters/ParameterSelect.vue","../../src/core/globals.ts","../../src/utils/utils.ts","../../src/components/parameters/ParameterKeyBinding.vue","../../src/components/parameters/ParameterCategory.vue","../../src/components/dialogs/AppClearDataConfirmDialog.vue","../../src/i18n.config.ts","../../src/utils/dexie-utils.ts","../../node_modules/luxon/src/errors.js","../../node_modules/luxon/src/impl/formats.js","../../node_modules/luxon/src/zone.js","../../node_modules/luxon/src/zones/systemZone.js","../../node_modules/luxon/src/zones/IANAZone.js","../../node_modules/luxon/src/impl/locale.js","../../node_modules/luxon/src/zones/fixedOffsetZone.js","../../node_modules/luxon/src/zones/invalidZone.js","../../node_modules/luxon/src/impl/zoneUtil.js","../../node_modules/luxon/src/impl/digits.js","../../node_modules/luxon/src/settings.js","../../node_modules/luxon/src/impl/invalid.js","../../node_modules/luxon/src/impl/conversions.js","../../node_modules/luxon/src/impl/util.js","../../node_modules/luxon/src/impl/english.js","../../node_modules/luxon/src/impl/formatter.js","../../node_modules/luxon/src/impl/regexParser.js","../../node_modules/luxon/src/duration.js","../../node_modules/luxon/src/interval.js","../../node_modules/luxon/src/info.js","../../node_modules/luxon/src/impl/diff.js","../../node_modules/luxon/src/impl/tokenParser.js","../../node_modules/luxon/src/datetime.js","../../src/core/extras.ts","../../src/components/dialogs/AppSettingsDialog.vue","../../src/components/extras/ExtraSpecialDayElement.vue","../../src/components/main/AppFooter.vue","../../src/components/dialogs/AppInitDialog.vue","../../src/components/elements/ToastElement.vue","../../src/components/main/AppToastBar.vue","../../src/App.vue","../../src/components/elements/PlanetCardElement.vue","../../src/components/main/AppNavigation.vue","../../src/components/main/InlineFooter.vue","../../src/components/dialogs/AppPlanetInfoDialog.vue","../../src/components/dialogs/AppDeleteConfirmDialog.vue","../../src/core/models/change-tracker.model.ts","../../node_modules/nanoid/url-alphabet/index.js","../../node_modules/nanoid/index.browser.js","../../node_modules/seedrandom/lib/alea.js","../../node_modules/seedrandom/lib/xor128.js","../../node_modules/seedrandom/lib/xorwow.js","../../node_modules/seedrandom/lib/xorshift7.js","../../node_modules/seedrandom/lib/xor4096.js","../../node_modules/seedrandom/lib/tychei.js","../../__vite-browser-external","../../node_modules/seedrandom/seedrandom.js","../../node_modules/seedrandom/index.js","../../src/utils/math-utils.ts","../../node_modules/crypto-hash/utilities.js","../../node_modules/crypto-hash/browser.js","../../src/core/models/color-ramp.model.ts","../../src/core/types.ts","../../node_modules/three/src/math/MathUtils.js","../../src/core/models/noise-parameters.model.ts","../../src/core/models/biome-parameters.model.ts","../../src/core/models/displacement-parameters.model.ts","../../src/core/models/planet-data.model.ts","../../src/core/helpers/import.helper.ts","../../src/views/CodexView.vue","../../node_modules/three/examples/jsm/controls/OrbitControls.js","../../src/core/helpers/texture.helper.ts","../../src/core/three/external-data.loader.ts","../../src/assets/glsl/core/lens_flare.vert.glsl?raw","../../src/assets/glsl/core/lens_flare.frag.glsl?raw","../../src/core/three/lens-flare.effect.ts","../../src/assets/glsl/core/atmosphere.frag.glsl?raw","../../src/assets/glsl/core/atmosphere.vert.glsl?raw","../../src/assets/glsl/core/clouds.frag.glsl?raw","../../src/assets/glsl/core/clouds.vert.glsl?raw","../../src/assets/glsl/core/cracks.frag.glsl?raw","../../src/assets/glsl/core/planet.frag.glsl?raw","../../src/assets/glsl/core/planet.vert.glsl?raw","../../src/assets/glsl/core/ring.frag.glsl?raw","../../src/assets/glsl/core/ring.vert.glsl?raw","../../src/assets/glsl/baking/base.vert.glsl?raw","../../src/assets/glsl/baking/bump.frag.glsl?raw","../../src/assets/glsl/baking/clouds.frag.glsl?raw","../../src/assets/glsl/baking/normal.frag.glsl?raw","../../src/assets/glsl/baking/normal.vert.glsl?raw","../../src/assets/glsl/baking/pbr.frag.glsl?raw","../../src/assets/glsl/baking/planet.frag.glsl?raw","../../src/assets/glsl/baking/ring.frag.glsl?raw","../../src/assets/glsl/functions/atmosphere_utils.func.glsl?raw","../../src/assets/glsl/functions/biomes.func.glsl?raw","../../src/assets/glsl/functions/bump.func.glsl?raw","../../src/assets/glsl/functions/color_utils.func.glsl?raw","../../src/assets/glsl/functions/fbm.func.glsl?raw","../../src/assets/glsl/functions/lwd.func.glsl?raw","../../src/assets/glsl/functions/normal.func.glsl?raw","../../src/assets/glsl/functions/voronoise.func.glsl?raw","../../src/core/three/shader.loader.ts","../../src/core/three/component.builder.ts","../../src/utils/three-utils.ts","../../src/core/services/planet-baker.service.ts","../../node_modules/three/examples/jsm/exporters/GLTFExporter.js","../../src/core/helpers/export.helper.ts","../../src/core/helpers/uniform.helper.ts","../../node_modules/three/examples/jsm/libs/stats.module.js","../../src/core/services/planet-editor.service.ts","../../src/utils/debug-utils.ts","../../src/components/elements/InputSliderElement.vue","../../src/components/parameters/ParameterSlider.vue","../../src/components/parameters/ParameterColor.vue","../../src/components/parameters/ParameterBiome.vue","../../src/components/controls/ControlsBiomes.vue","../../src/components/dialogs/AppResetConfirmDialog.vue","../../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../node_modules/@floating-ui/vue/dist/floating-ui.vue.mjs","../../src/components/controls/PlanetInfoControls.vue","../../node_modules/three/examples/jsm/capabilities/WebGL.js","../../src/components/dialogs/AppWebGLErrorDialog.vue","../../src/components/dialogs/AppPlanetErrorDialog.vue","../../src/components/dialogs/AppWarnSaveDialog.vue","../../src/components/dialogs/AppExportProgressDialog.vue","../../src/views/PlanetEditorView.vue","../../src/views/PageNotFoundView.vue","../../src/router.config.ts","../../src/components/parameters/ParameterGroup.vue","../../src/components/parameters/ParameterColorRamp.vue","../../src/main.ts"],"sourcesContent":["/**\n* (c) Iconify\n*\n* For the full copyright and license information, please view the license.txt\n* files at https://github.com/iconify/iconify\n*\n* Licensed under MIT.\n*\n* @license MIT\n* @version 2.3.0\n*/\nconst defaultIconDimensions = Object.freeze(\n {\n left: 0,\n top: 0,\n width: 16,\n height: 16\n }\n);\nconst defaultIconTransformations = Object.freeze({\n rotate: 0,\n vFlip: false,\n hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n ...defaultIconDimensions,\n ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n ...defaultIconProps,\n body: \"\",\n hidden: false\n});\n\nconst defaultIconSizeCustomisations = Object.freeze({\n width: null,\n height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n // Dimensions\n ...defaultIconSizeCustomisations,\n // Transformations\n ...defaultIconTransformations\n});\n\nfunction rotateFromString(value, defaultValue = 0) {\n const units = value.replace(/^-?[0-9.]*/, \"\");\n function cleanup(value2) {\n while (value2 < 0) {\n value2 += 4;\n }\n return value2 % 4;\n }\n if (units === \"\") {\n const num = parseInt(value);\n return isNaN(num) ? 0 : cleanup(num);\n } else if (units !== value) {\n let split = 0;\n switch (units) {\n case \"%\":\n split = 25;\n break;\n case \"deg\":\n split = 90;\n }\n if (split) {\n let num = parseFloat(value.slice(0, value.length - units.length));\n if (isNaN(num)) {\n return 0;\n }\n num = num / split;\n return num % 1 === 0 ? cleanup(num) : 0;\n }\n }\n return defaultValue;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n flip.split(separator).forEach((str) => {\n const value = str.trim();\n switch (value) {\n case \"horizontal\":\n custom.hFlip = true;\n break;\n case \"vertical\":\n custom.vFlip = true;\n break;\n }\n });\n}\n\nconst defaultCustomisations = {\n ...defaultIconCustomisations,\n preserveAspectRatio: '',\n};\n/**\n * Get customisations\n */\nfunction getCustomisations(node) {\n const customisations = {\n ...defaultCustomisations,\n };\n const attr = (key, def) => node.getAttribute(key) || def;\n // Dimensions\n customisations.width = attr('width', null);\n customisations.height = attr('height', null);\n // Rotation\n customisations.rotate = rotateFromString(attr('rotate', ''));\n // Flip\n flipFromString(customisations, attr('flip', ''));\n // SVG attributes\n customisations.preserveAspectRatio = attr('preserveAspectRatio', attr('preserveaspectratio', ''));\n return customisations;\n}\n/**\n * Check if customisations have been updated\n */\nfunction haveCustomisationsChanged(value1, value2) {\n for (const key in defaultCustomisations) {\n if (value1[key] !== value2[key]) {\n return true;\n }\n }\n return false;\n}\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n const colonSeparated = value.split(\":\");\n if (value.slice(0, 1) === \"@\") {\n if (colonSeparated.length < 2 || colonSeparated.length > 3) {\n return null;\n }\n provider = colonSeparated.shift().slice(1);\n }\n if (colonSeparated.length > 3 || !colonSeparated.length) {\n return null;\n }\n if (colonSeparated.length > 1) {\n const name2 = colonSeparated.pop();\n const prefix = colonSeparated.pop();\n const result = {\n // Allow provider without '@': \"provider:prefix:name\"\n provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n prefix,\n name: name2\n };\n return validate && !validateIconName(result) ? null : result;\n }\n const name = colonSeparated[0];\n const dashSeparated = name.split(\"-\");\n if (dashSeparated.length > 1) {\n const result = {\n provider,\n prefix: dashSeparated.shift(),\n name: dashSeparated.join(\"-\")\n };\n return validate && !validateIconName(result) ? null : result;\n }\n if (allowSimpleName && provider === \"\") {\n const result = {\n provider,\n prefix: \"\",\n name\n };\n return validate && !validateIconName(result, allowSimpleName) ? null : result;\n }\n return null;\n};\nconst validateIconName = (icon, allowSimpleName) => {\n if (!icon) {\n return false;\n }\n return !!// Check prefix: cannot be empty, unless allowSimpleName is enabled\n // Check name: cannot be empty\n ((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\nfunction mergeIconTransformations(obj1, obj2) {\n const result = {};\n if (!obj1.hFlip !== !obj2.hFlip) {\n result.hFlip = true;\n }\n if (!obj1.vFlip !== !obj2.vFlip) {\n result.vFlip = true;\n }\n const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n if (rotate) {\n result.rotate = rotate;\n }\n return result;\n}\n\nfunction mergeIconData(parent, child) {\n const result = mergeIconTransformations(parent, child);\n for (const key in defaultExtendedIconProps) {\n if (key in defaultIconTransformations) {\n if (key in parent && !(key in result)) {\n result[key] = defaultIconTransformations[key];\n }\n } else if (key in child) {\n result[key] = child[key];\n } else if (key in parent) {\n result[key] = parent[key];\n }\n }\n return result;\n}\n\nfunction getIconsTree(data, names) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n const resolved = /* @__PURE__ */ Object.create(null);\n function resolve(name) {\n if (icons[name]) {\n return resolved[name] = [];\n }\n if (!(name in resolved)) {\n resolved[name] = null;\n const parent = aliases[name] && aliases[name].parent;\n const value = parent && resolve(parent);\n if (value) {\n resolved[name] = [parent].concat(value);\n }\n }\n return resolved[name];\n }\n (Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n let currentProps = {};\n function parse(name2) {\n currentProps = mergeIconData(\n icons[name2] || aliases[name2],\n currentProps\n );\n }\n parse(name);\n tree.forEach(parse);\n return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n const names = [];\n if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n return names;\n }\n if (data.not_found instanceof Array) {\n data.not_found.forEach((name) => {\n callback(name, null);\n names.push(name);\n });\n }\n const tree = getIconsTree(data);\n for (const name in tree) {\n const item = tree[name];\n if (item) {\n callback(name, internalGetIconData(data, name, item));\n names.push(name);\n }\n }\n return names;\n}\n\nconst optionalPropertyDefaults = {\n provider: \"\",\n aliases: {},\n not_found: {},\n ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n for (const prop in defaults) {\n if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n return false;\n }\n }\n return true;\n}\nfunction quicklyValidateIconSet(obj) {\n if (typeof obj !== \"object\" || obj === null) {\n return null;\n }\n const data = obj;\n if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n return null;\n }\n if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n return null;\n }\n const icons = data.icons;\n for (const name in icons) {\n const icon = icons[name];\n if (\n // Name cannot be empty\n !name || // Must have body\n typeof icon.body !== \"string\" || // Check other props\n !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )\n ) {\n return null;\n }\n }\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n for (const name in aliases) {\n const icon = aliases[name];\n const parent = icon.parent;\n if (\n // Name cannot be empty\n !name || // Parent must be set and point to existing icon\n typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || // Check other props\n !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )\n ) {\n return null;\n }\n }\n return data;\n}\n\nconst dataStorage = /* @__PURE__ */ Object.create(null);\nfunction newStorage(provider, prefix) {\n return {\n provider,\n prefix,\n icons: /* @__PURE__ */ Object.create(null),\n missing: /* @__PURE__ */ new Set()\n };\n}\nfunction getStorage(provider, prefix) {\n const providerStorage = dataStorage[provider] || (dataStorage[provider] = /* @__PURE__ */ Object.create(null));\n return providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\nfunction addIconSet(storage, data) {\n if (!quicklyValidateIconSet(data)) {\n return [];\n }\n return parseIconSet(data, (name, icon) => {\n if (icon) {\n storage.icons[name] = icon;\n } else {\n storage.missing.add(name);\n }\n });\n}\nfunction addIconToStorage(storage, name, icon) {\n try {\n if (typeof icon.body === \"string\") {\n storage.icons[name] = { ...icon };\n return true;\n }\n } catch (err) {\n }\n return false;\n}\nfunction listIcons$1(provider, prefix) {\n let allIcons = [];\n const providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n providers.forEach((provider2) => {\n const prefixes = typeof provider2 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider2] || {});\n prefixes.forEach((prefix2) => {\n const storage = getStorage(provider2, prefix2);\n allIcons = allIcons.concat(\n Object.keys(storage.icons).map(\n (name) => (provider2 !== \"\" ? \"@\" + provider2 + \":\" : \"\") + prefix2 + \":\" + name\n )\n );\n });\n });\n return allIcons;\n}\n\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n if (typeof allow === \"boolean\") {\n simpleNames = allow;\n }\n return simpleNames;\n}\nfunction getIconData(name) {\n const icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n if (icon) {\n const storage = getStorage(icon.provider, icon.prefix);\n const iconName = icon.name;\n return storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n }\n}\nfunction addIcon$1(name, data) {\n const icon = stringToIcon(name, true, simpleNames);\n if (!icon) {\n return false;\n }\n const storage = getStorage(icon.provider, icon.prefix);\n if (data) {\n return addIconToStorage(storage, icon.name, data);\n } else {\n storage.missing.add(icon.name);\n return true;\n }\n}\nfunction addCollection$1(data, provider) {\n if (typeof data !== \"object\") {\n return false;\n }\n if (typeof provider !== \"string\") {\n provider = data.provider || \"\";\n }\n if (simpleNames && !provider && !data.prefix) {\n let added = false;\n if (quicklyValidateIconSet(data)) {\n data.prefix = \"\";\n parseIconSet(data, (name, icon) => {\n if (addIcon$1(name, icon)) {\n added = true;\n }\n });\n }\n return added;\n }\n const prefix = data.prefix;\n if (!validateIconName({\n provider,\n prefix,\n name: \"a\"\n })) {\n return false;\n }\n const storage = getStorage(provider, prefix);\n return !!addIconSet(storage, data);\n}\nfunction iconLoaded$1(name) {\n return !!getIconData(name);\n}\nfunction getIcon$1(name) {\n const result = getIconData(name);\n return result ? {\n ...defaultIconProps,\n ...result\n } : result;\n}\n\nfunction sortIcons(icons) {\n const result = {\n loaded: [],\n missing: [],\n pending: []\n };\n const storage = /* @__PURE__ */ Object.create(null);\n icons.sort((a, b) => {\n if (a.provider !== b.provider) {\n return a.provider.localeCompare(b.provider);\n }\n if (a.prefix !== b.prefix) {\n return a.prefix.localeCompare(b.prefix);\n }\n return a.name.localeCompare(b.name);\n });\n let lastIcon = {\n provider: \"\",\n prefix: \"\",\n name: \"\"\n };\n icons.forEach((icon) => {\n if (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) {\n return;\n }\n lastIcon = icon;\n const provider = icon.provider;\n const prefix = icon.prefix;\n const name = icon.name;\n const providerStorage = storage[provider] || (storage[provider] = /* @__PURE__ */ Object.create(null));\n const localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n let list;\n if (name in localStorage.icons) {\n list = result.loaded;\n } else if (prefix === \"\" || localStorage.missing.has(name)) {\n list = result.missing;\n } else {\n list = result.pending;\n }\n const item = {\n provider,\n prefix,\n name\n };\n list.push(item);\n });\n return result;\n}\n\nfunction removeCallback(storages, id) {\n storages.forEach((storage) => {\n const items = storage.loaderCallbacks;\n if (items) {\n storage.loaderCallbacks = items.filter((row) => row.id !== id);\n }\n });\n}\nfunction updateCallbacks(storage) {\n if (!storage.pendingCallbacksFlag) {\n storage.pendingCallbacksFlag = true;\n setTimeout(() => {\n storage.pendingCallbacksFlag = false;\n const items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n if (!items.length) {\n return;\n }\n let hasPending = false;\n const provider = storage.provider;\n const prefix = storage.prefix;\n items.forEach((item) => {\n const icons = item.icons;\n const oldLength = icons.pending.length;\n icons.pending = icons.pending.filter((icon) => {\n if (icon.prefix !== prefix) {\n return true;\n }\n const name = icon.name;\n if (storage.icons[name]) {\n icons.loaded.push({\n provider,\n prefix,\n name\n });\n } else if (storage.missing.has(name)) {\n icons.missing.push({\n provider,\n prefix,\n name\n });\n } else {\n hasPending = true;\n return true;\n }\n return false;\n });\n if (icons.pending.length !== oldLength) {\n if (!hasPending) {\n removeCallback([storage], item.id);\n }\n item.callback(\n icons.loaded.slice(0),\n icons.missing.slice(0),\n icons.pending.slice(0),\n item.abort\n );\n }\n });\n });\n }\n}\nlet idCounter = 0;\nfunction storeCallback(callback, icons, pendingSources) {\n const id = idCounter++;\n const abort = removeCallback.bind(null, pendingSources, id);\n if (!icons.pending.length) {\n return abort;\n }\n const item = {\n id,\n icons,\n callback,\n abort\n };\n pendingSources.forEach((storage) => {\n (storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n });\n return abort;\n}\n\nconst storage = /* @__PURE__ */ Object.create(null);\nfunction setAPIModule(provider, item) {\n storage[provider] = item;\n}\nfunction getAPIModule(provider) {\n return storage[provider] || storage[\"\"];\n}\n\nfunction listToIcons(list, validate = true, simpleNames = false) {\n const result = [];\n list.forEach((item) => {\n const icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n if (icon) {\n result.push(icon);\n }\n });\n return result;\n}\n\n// src/config.ts\nvar defaultConfig = {\n resources: [],\n index: 0,\n timeout: 2e3,\n rotate: 750,\n random: false,\n dataAfterTimeout: false\n};\n\n// src/query.ts\nfunction sendQuery(config, payload, query, done) {\n const resourcesCount = config.resources.length;\n const startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n let resources;\n if (config.random) {\n let list = config.resources.slice(0);\n resources = [];\n while (list.length > 1) {\n const nextIndex = Math.floor(Math.random() * list.length);\n resources.push(list[nextIndex]);\n list = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n }\n resources = resources.concat(list);\n } else {\n resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n }\n const startTime = Date.now();\n let status = \"pending\";\n let queriesSent = 0;\n let lastError;\n let timer = null;\n let queue = [];\n let doneCallbacks = [];\n if (typeof done === \"function\") {\n doneCallbacks.push(done);\n }\n function resetTimer() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function abort() {\n if (status === \"pending\") {\n status = \"aborted\";\n }\n resetTimer();\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function subscribe(callback, overwrite) {\n if (overwrite) {\n doneCallbacks = [];\n }\n if (typeof callback === \"function\") {\n doneCallbacks.push(callback);\n }\n }\n function getQueryStatus() {\n return {\n startTime,\n payload,\n status,\n queriesSent,\n queriesPending: queue.length,\n subscribe,\n abort\n };\n }\n function failQuery() {\n status = \"failed\";\n doneCallbacks.forEach((callback) => {\n callback(void 0, lastError);\n });\n }\n function clearQueue() {\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function moduleResponse(item, response, data) {\n const isError = response !== \"success\";\n queue = queue.filter((queued) => queued !== item);\n switch (status) {\n case \"pending\":\n break;\n case \"failed\":\n if (isError || !config.dataAfterTimeout) {\n return;\n }\n break;\n default:\n return;\n }\n if (response === \"abort\") {\n lastError = data;\n failQuery();\n return;\n }\n if (isError) {\n lastError = data;\n if (!queue.length) {\n if (!resources.length) {\n failQuery();\n } else {\n execNext();\n }\n }\n return;\n }\n resetTimer();\n clearQueue();\n if (!config.random) {\n const index = config.resources.indexOf(item.resource);\n if (index !== -1 && index !== config.index) {\n config.index = index;\n }\n }\n status = \"completed\";\n doneCallbacks.forEach((callback) => {\n callback(data);\n });\n }\n function execNext() {\n if (status !== \"pending\") {\n return;\n }\n resetTimer();\n const resource = resources.shift();\n if (resource === void 0) {\n if (queue.length) {\n timer = setTimeout(() => {\n resetTimer();\n if (status === \"pending\") {\n clearQueue();\n failQuery();\n }\n }, config.timeout);\n return;\n }\n failQuery();\n return;\n }\n const item = {\n status: \"pending\",\n resource,\n callback: (status2, data) => {\n moduleResponse(item, status2, data);\n }\n };\n queue.push(item);\n queriesSent++;\n timer = setTimeout(execNext, config.rotate);\n query(resource, payload, item.callback);\n }\n setTimeout(execNext);\n return getQueryStatus;\n}\n\n// src/index.ts\nfunction initRedundancy(cfg) {\n const config = {\n ...defaultConfig,\n ...cfg\n };\n let queries = [];\n function cleanup() {\n queries = queries.filter((item) => item().status === \"pending\");\n }\n function query(payload, queryCallback, doneCallback) {\n const query2 = sendQuery(\n config,\n payload,\n queryCallback,\n (data, error) => {\n cleanup();\n if (doneCallback) {\n doneCallback(data, error);\n }\n }\n );\n queries.push(query2);\n return query2;\n }\n function find(callback) {\n return queries.find((value) => {\n return callback(value);\n }) || null;\n }\n const instance = {\n query,\n find,\n setIndex: (index) => {\n config.index = index;\n },\n getIndex: () => config.index,\n cleanup\n };\n return instance;\n}\n\nfunction createAPIConfig(source) {\n let resources;\n if (typeof source.resources === \"string\") {\n resources = [source.resources];\n } else {\n resources = source.resources;\n if (!(resources instanceof Array) || !resources.length) {\n return null;\n }\n }\n const result = {\n // API hosts\n resources,\n // Root path\n path: source.path || \"/\",\n // URL length limit\n maxURL: source.maxURL || 500,\n // Timeout before next host is used.\n rotate: source.rotate || 750,\n // Timeout before failing query.\n timeout: source.timeout || 5e3,\n // Randomise default API end point.\n random: source.random === true,\n // Start index\n index: source.index || 0,\n // Receive data after time out (used if time out kicks in first, then API module sends data anyway).\n dataAfterTimeout: source.dataAfterTimeout !== false\n };\n return result;\n}\nconst configStorage = /* @__PURE__ */ Object.create(null);\nconst fallBackAPISources = [\n \"https://api.simplesvg.com\",\n \"https://api.unisvg.com\"\n];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) {\n if (fallBackAPISources.length === 1) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n if (Math.random() > 0.5) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n fallBackAPI.push(fallBackAPISources.pop());\n }\n }\n}\nconfigStorage[\"\"] = createAPIConfig({\n resources: [\"https://api.iconify.design\"].concat(fallBackAPI)\n});\nfunction addAPIProvider$1(provider, customConfig) {\n const config = createAPIConfig(customConfig);\n if (config === null) {\n return false;\n }\n configStorage[provider] = config;\n return true;\n}\nfunction getAPIConfig(provider) {\n return configStorage[provider];\n}\nfunction listAPIProviders() {\n return Object.keys(configStorage);\n}\n\nfunction emptyCallback$1() {\n}\nconst redundancyCache = /* @__PURE__ */ Object.create(null);\nfunction getRedundancyCache(provider) {\n if (!redundancyCache[provider]) {\n const config = getAPIConfig(provider);\n if (!config) {\n return;\n }\n const redundancy = initRedundancy(config);\n const cachedReundancy = {\n config,\n redundancy\n };\n redundancyCache[provider] = cachedReundancy;\n }\n return redundancyCache[provider];\n}\nfunction sendAPIQuery(target, query, callback) {\n let redundancy;\n let send;\n if (typeof target === \"string\") {\n const api = getAPIModule(target);\n if (!api) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n send = api.send;\n const cached = getRedundancyCache(target);\n if (cached) {\n redundancy = cached.redundancy;\n }\n } else {\n const config = createAPIConfig(target);\n if (config) {\n redundancy = initRedundancy(config);\n const moduleKey = target.resources ? target.resources[0] : \"\";\n const api = getAPIModule(moduleKey);\n if (api) {\n send = api.send;\n }\n }\n }\n if (!redundancy || !send) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n return redundancy.query(query, send, callback)().abort;\n}\n\nfunction emptyCallback() {\n}\nfunction loadedNewIcons(storage) {\n if (!storage.iconsLoaderFlag) {\n storage.iconsLoaderFlag = true;\n setTimeout(() => {\n storage.iconsLoaderFlag = false;\n updateCallbacks(storage);\n });\n }\n}\nfunction checkIconNamesForAPI(icons) {\n const valid = [];\n const invalid = [];\n icons.forEach((name) => {\n (name.match(matchIconName) ? valid : invalid).push(name);\n });\n return {\n valid,\n invalid\n };\n}\nfunction parseLoaderResponse(storage, icons, data) {\n function checkMissing() {\n const pending = storage.pendingIcons;\n icons.forEach((name) => {\n if (pending) {\n pending.delete(name);\n }\n if (!storage.icons[name]) {\n storage.missing.add(name);\n }\n });\n }\n if (data && typeof data === \"object\") {\n try {\n const parsed = addIconSet(storage, data);\n if (!parsed.length) {\n checkMissing();\n return;\n }\n } catch (err) {\n console.error(err);\n }\n }\n checkMissing();\n loadedNewIcons(storage);\n}\nfunction parsePossiblyAsyncResponse(response, callback) {\n if (response instanceof Promise) {\n response.then((data) => {\n callback(data);\n }).catch(() => {\n callback(null);\n });\n } else {\n callback(response);\n }\n}\nfunction loadNewIcons(storage, icons) {\n if (!storage.iconsToLoad) {\n storage.iconsToLoad = icons;\n } else {\n storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n }\n if (!storage.iconsQueueFlag) {\n storage.iconsQueueFlag = true;\n setTimeout(() => {\n storage.iconsQueueFlag = false;\n const { provider, prefix } = storage;\n const icons2 = storage.iconsToLoad;\n delete storage.iconsToLoad;\n if (!icons2 || !icons2.length) {\n return;\n }\n const customIconLoader = storage.loadIcon;\n if (storage.loadIcons && (icons2.length > 1 || !customIconLoader)) {\n parsePossiblyAsyncResponse(\n storage.loadIcons(icons2, prefix, provider),\n (data) => {\n parseLoaderResponse(storage, icons2, data);\n }\n );\n return;\n }\n if (customIconLoader) {\n icons2.forEach((name) => {\n const response = customIconLoader(name, prefix, provider);\n parsePossiblyAsyncResponse(response, (data) => {\n const iconSet = data ? {\n prefix,\n icons: {\n [name]: data\n }\n } : null;\n parseLoaderResponse(storage, [name], iconSet);\n });\n });\n return;\n }\n const { valid, invalid } = checkIconNamesForAPI(icons2);\n if (invalid.length) {\n parseLoaderResponse(storage, invalid, null);\n }\n if (!valid.length) {\n return;\n }\n const api = prefix.match(matchIconName) ? getAPIModule(provider) : null;\n if (!api) {\n parseLoaderResponse(storage, valid, null);\n return;\n }\n const params = api.prepare(provider, prefix, valid);\n params.forEach((item) => {\n sendAPIQuery(provider, item, (data) => {\n parseLoaderResponse(storage, item.icons, data);\n });\n });\n });\n }\n}\nconst loadIcons$1 = (icons, callback) => {\n const cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n const sortedIcons = sortIcons(cleanedIcons);\n if (!sortedIcons.pending.length) {\n let callCallback = true;\n if (callback) {\n setTimeout(() => {\n if (callCallback) {\n callback(\n sortedIcons.loaded,\n sortedIcons.missing,\n sortedIcons.pending,\n emptyCallback\n );\n }\n });\n }\n return () => {\n callCallback = false;\n };\n }\n const newIcons = /* @__PURE__ */ Object.create(null);\n const sources = [];\n let lastProvider, lastPrefix;\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix } = icon;\n if (prefix === lastPrefix && provider === lastProvider) {\n return;\n }\n lastProvider = provider;\n lastPrefix = prefix;\n sources.push(getStorage(provider, prefix));\n const providerNewIcons = newIcons[provider] || (newIcons[provider] = /* @__PURE__ */ Object.create(null));\n if (!providerNewIcons[prefix]) {\n providerNewIcons[prefix] = [];\n }\n });\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix, name } = icon;\n const storage = getStorage(provider, prefix);\n const pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n if (!pendingQueue.has(name)) {\n pendingQueue.add(name);\n newIcons[provider][prefix].push(name);\n }\n });\n sources.forEach((storage) => {\n const list = newIcons[storage.provider][storage.prefix];\n if (list.length) {\n loadNewIcons(storage, list);\n }\n });\n return callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\nconst loadIcon$1 = (icon) => {\n return new Promise((fulfill, reject) => {\n const iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n if (!iconObj) {\n reject(icon);\n return;\n }\n loadIcons$1([iconObj || icon], (loaded) => {\n if (loaded.length && iconObj) {\n const data = getIconData(iconObj);\n if (data) {\n fulfill({\n ...defaultIconProps,\n ...data\n });\n return;\n }\n }\n reject(icon);\n });\n });\n};\n\n/**\n * Test icon string\n */\nfunction testIconObject(value) {\n try {\n const obj = typeof value === 'string' ? JSON.parse(value) : value;\n if (typeof obj.body === 'string') {\n return {\n ...obj,\n };\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n //\n }\n}\n\n/**\n * Parse icon value, load if needed\n */\nfunction parseIconValue(value, onload) {\n if (typeof value === 'object') {\n const data = testIconObject(value);\n return {\n data,\n value,\n };\n }\n if (typeof value !== 'string') {\n // Invalid value\n return {\n value,\n };\n }\n // Check for JSON\n if (value.includes('{')) {\n const data = testIconObject(value);\n if (data) {\n return {\n data,\n value,\n };\n }\n }\n // Parse icon name\n const name = stringToIcon(value, true, true);\n if (!name) {\n return {\n value,\n };\n }\n // Valid icon name: check if data is available\n const data = getIconData(name);\n // Icon data exists or icon has no prefix. Do not load icon from API if icon has no prefix\n if (data !== undefined || !name.prefix) {\n return {\n value,\n name,\n data, // could be 'null' -> icon is missing\n };\n }\n // Load icon\n const loading = loadIcons$1([name], () => onload(value, name, getIconData(name)));\n return {\n value,\n name,\n loading,\n };\n}\n\n// Check for Safari\nlet isBuggedSafari = false;\ntry {\n isBuggedSafari = navigator.vendor.indexOf('Apple') === 0;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n}\ncatch (err) {\n //\n}\n/**\n * Get render mode\n */\nfunction getRenderMode(body, mode) {\n switch (mode) {\n // Force mode\n case 'svg':\n case 'bg':\n case 'mask':\n return mode;\n }\n // Check for animation, use 'style' for animated icons, unless browser is Safari\n // (only , which should be ignored or animations start with '\n return 'svg';\n }\n // Use background or mask\n return body.indexOf('currentColor') === -1 ? 'bg' : 'mask';\n}\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize$1(size, ratio, precision) {\n if (ratio === 1) {\n return size;\n }\n precision = precision || 100;\n if (typeof size === \"number\") {\n return Math.ceil(size * ratio * precision) / precision;\n }\n if (typeof size !== \"string\") {\n return size;\n }\n const oldParts = size.split(unitsSplit);\n if (oldParts === null || !oldParts.length) {\n return size;\n }\n const newParts = [];\n let code = oldParts.shift();\n let isNumber = unitsTest.test(code);\n while (true) {\n if (isNumber) {\n const num = parseFloat(code);\n if (isNaN(num)) {\n newParts.push(code);\n } else {\n newParts.push(Math.ceil(num * ratio * precision) / precision);\n }\n } else {\n newParts.push(code);\n }\n code = oldParts.shift();\n if (code === void 0) {\n return newParts.join(\"\");\n }\n isNumber = !isNumber;\n }\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n let defs = \"\";\n const index = content.indexOf(\"<\" + tag);\n while (index >= 0) {\n const start = content.indexOf(\">\", index);\n const end = content.indexOf(\"\" + tag);\n if (start === -1 || end === -1) {\n break;\n }\n const endEnd = content.indexOf(\">\", end);\n if (endEnd === -1) {\n break;\n }\n defs += content.slice(start + 1, end).trim();\n content = content.slice(0, index).trim() + content.slice(endEnd + 1);\n }\n return {\n defs,\n content\n };\n}\nfunction mergeDefsAndContent(defs, content) {\n return defs ? \"\" + defs + \"\" + content : content;\n}\nfunction wrapSVGContent(body, start, end) {\n const split = splitSVGDefs(body);\n return mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\nfunction iconToSVG(icon, customisations) {\n const fullIcon = {\n ...defaultIconProps,\n ...icon\n };\n const fullCustomisations = {\n ...defaultIconCustomisations,\n ...customisations\n };\n const box = {\n left: fullIcon.left,\n top: fullIcon.top,\n width: fullIcon.width,\n height: fullIcon.height\n };\n let body = fullIcon.body;\n [fullIcon, fullCustomisations].forEach((props) => {\n const transformations = [];\n const hFlip = props.hFlip;\n const vFlip = props.vFlip;\n let rotation = props.rotate;\n if (hFlip) {\n if (vFlip) {\n rotation += 2;\n } else {\n transformations.push(\n \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n );\n transformations.push(\"scale(-1 1)\");\n box.top = box.left = 0;\n }\n } else if (vFlip) {\n transformations.push(\n \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n );\n transformations.push(\"scale(1 -1)\");\n box.top = box.left = 0;\n }\n let tempValue;\n if (rotation < 0) {\n rotation -= Math.floor(rotation / 4) * 4;\n }\n rotation = rotation % 4;\n switch (rotation) {\n case 1:\n tempValue = box.height / 2 + box.top;\n transformations.unshift(\n \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n case 2:\n transformations.unshift(\n \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n );\n break;\n case 3:\n tempValue = box.width / 2 + box.left;\n transformations.unshift(\n \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n }\n if (rotation % 2 === 1) {\n if (box.left !== box.top) {\n tempValue = box.left;\n box.left = box.top;\n box.top = tempValue;\n }\n if (box.width !== box.height) {\n tempValue = box.width;\n box.width = box.height;\n box.height = tempValue;\n }\n }\n if (transformations.length) {\n body = wrapSVGContent(\n body,\n '',\n \"\"\n );\n }\n });\n const customisationsWidth = fullCustomisations.width;\n const customisationsHeight = fullCustomisations.height;\n const boxWidth = box.width;\n const boxHeight = box.height;\n let width;\n let height;\n if (customisationsWidth === null) {\n height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n width = calculateSize$1(height, boxWidth / boxHeight);\n } else {\n width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n height = customisationsHeight === null ? calculateSize$1(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n }\n const attributes = {};\n const setAttr = (prop, value) => {\n if (!isUnsetKeyword(value)) {\n attributes[prop] = value.toString();\n }\n };\n setAttr(\"width\", width);\n setAttr(\"height\", height);\n const viewBox = [box.left, box.top, boxWidth, boxHeight];\n attributes.viewBox = viewBox.join(\" \");\n return {\n attributes,\n viewBox,\n body\n };\n}\n\nfunction iconToHTML$1(body, attributes) {\n let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n for (const attr in attributes) {\n renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n }\n return '\" + body + \"\";\n}\n\nfunction encodeSVGforURL(svg) {\n return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(//g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToData(svg) {\n return \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\nfunction svgToURL$1(svg) {\n return 'url(\"' + svgToData(svg) + '\")';\n}\n\nconst detectFetch = () => {\n let callback;\n try {\n callback = fetch;\n if (typeof callback === \"function\") {\n return callback;\n }\n } catch (err) {\n }\n};\nlet fetchModule = detectFetch();\nfunction setFetch(fetch2) {\n fetchModule = fetch2;\n}\nfunction getFetch() {\n return fetchModule;\n}\nfunction calculateMaxLength(provider, prefix) {\n const config = getAPIConfig(provider);\n if (!config) {\n return 0;\n }\n let result;\n if (!config.maxURL) {\n result = 0;\n } else {\n let maxHostLength = 0;\n config.resources.forEach((item) => {\n const host = item;\n maxHostLength = Math.max(maxHostLength, host.length);\n });\n const url = prefix + \".json?icons=\";\n result = config.maxURL - maxHostLength - config.path.length - url.length;\n }\n return result;\n}\nfunction shouldAbort(status) {\n return status === 404;\n}\nconst prepare = (provider, prefix, icons) => {\n const results = [];\n const maxLength = calculateMaxLength(provider, prefix);\n const type = \"icons\";\n let item = {\n type,\n provider,\n prefix,\n icons: []\n };\n let length = 0;\n icons.forEach((name, index) => {\n length += name.length + 1;\n if (length >= maxLength && index > 0) {\n results.push(item);\n item = {\n type,\n provider,\n prefix,\n icons: []\n };\n length = name.length;\n }\n item.icons.push(name);\n });\n results.push(item);\n return results;\n};\nfunction getPath(provider) {\n if (typeof provider === \"string\") {\n const config = getAPIConfig(provider);\n if (config) {\n return config.path;\n }\n }\n return \"/\";\n}\nconst send = (host, params, callback) => {\n if (!fetchModule) {\n callback(\"abort\", 424);\n return;\n }\n let path = getPath(params.provider);\n switch (params.type) {\n case \"icons\": {\n const prefix = params.prefix;\n const icons = params.icons;\n const iconsList = icons.join(\",\");\n const urlParams = new URLSearchParams({\n icons: iconsList\n });\n path += prefix + \".json?\" + urlParams.toString();\n break;\n }\n case \"custom\": {\n const uri = params.uri;\n path += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n break;\n }\n default:\n callback(\"abort\", 400);\n return;\n }\n let defaultError = 503;\n fetchModule(host + path).then((response) => {\n const status = response.status;\n if (status !== 200) {\n setTimeout(() => {\n callback(shouldAbort(status) ? \"abort\" : \"next\", status);\n });\n return;\n }\n defaultError = 501;\n return response.json();\n }).then((data) => {\n if (typeof data !== \"object\" || data === null) {\n setTimeout(() => {\n if (data === 404) {\n callback(\"abort\", data);\n } else {\n callback(\"next\", defaultError);\n }\n });\n return;\n }\n setTimeout(() => {\n callback(\"success\", data);\n });\n }).catch(() => {\n callback(\"next\", defaultError);\n });\n};\nconst fetchAPIModule = {\n prepare,\n send\n};\n\nfunction setCustomIconsLoader$1(loader, prefix, provider) {\n getStorage(provider || \"\", prefix).loadIcons = loader;\n}\nfunction setCustomIconLoader$1(loader, prefix, provider) {\n getStorage(provider || \"\", prefix).loadIcon = loader;\n}\n\n/**\n * Attribute to add\n */\nconst nodeAttr = 'data-style';\n/**\n * Custom style to add to each node\n */\nlet customStyle = '';\n/**\n * Set custom style to add to all components\n *\n * Affects only components rendered after function call\n */\nfunction appendCustomStyle(style) {\n customStyle = style;\n}\n/**\n * Add/update style node\n */\nfunction updateStyle(parent, inline) {\n // Get node, create if needed\n let styleNode = Array.from(parent.childNodes).find((node) => node.hasAttribute &&\n node.hasAttribute(nodeAttr));\n if (!styleNode) {\n styleNode = document.createElement('style');\n styleNode.setAttribute(nodeAttr, nodeAttr);\n parent.appendChild(styleNode);\n }\n // Update content\n styleNode.textContent =\n ':host{display:inline-block;vertical-align:' +\n (inline ? '-0.125em' : '0') +\n '}span,svg{display:block;margin:auto}' +\n customStyle;\n}\n\n// Core\n/**\n * Get functions and initialise stuff\n */\nfunction exportFunctions() {\n /**\n * Initialise stuff\n */\n // Set API module\n setAPIModule('', fetchAPIModule);\n // Allow simple icon names\n allowSimpleNames(true);\n let _window;\n try {\n _window = window;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n //\n }\n if (_window) {\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection$1(item)) {\n console.error(err);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (const key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider$1(key, value)) {\n console.error(err);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n }\n const _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n };\n return {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n enableCache: (storage) => {\n // No longer used\n },\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n disableCache: (storage) => {\n // No longer used\n },\n iconLoaded: iconLoaded$1,\n iconExists: iconLoaded$1, // deprecated, kept to avoid breaking changes\n getIcon: getIcon$1,\n listIcons: listIcons$1,\n addIcon: addIcon$1,\n addCollection: addCollection$1,\n calculateSize: calculateSize$1,\n buildIcon: iconToSVG,\n iconToHTML: iconToHTML$1,\n svgToURL: svgToURL$1,\n loadIcons: loadIcons$1,\n loadIcon: loadIcon$1,\n addAPIProvider: addAPIProvider$1,\n setCustomIconLoader: setCustomIconLoader$1,\n setCustomIconsLoader: setCustomIconsLoader$1,\n appendCustomStyle,\n _api,\n };\n}\n\n// List of properties to apply\nconst monotoneProps = {\n 'background-color': 'currentColor',\n};\nconst coloredProps = {\n 'background-color': 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n image: 'var(--svg)',\n repeat: 'no-repeat',\n size: '100% 100%',\n};\nconst propsToAddTo = {\n '-webkit-mask': monotoneProps,\n 'mask': monotoneProps,\n 'background': coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + '-' + prop] = propsToAdd[prop];\n }\n}\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value ? value + (value.match(/^[-0-9.]+$/) ? 'px' : '') : 'inherit';\n}\n/**\n * Render node as \n */\nfunction renderSPAN(data, icon, useMask) {\n const node = document.createElement('span');\n // Body\n let body = data.body;\n if (body.indexOf('';\n }\n // Generate SVG as URL\n const renderAttribs = data.attributes;\n const html = iconToHTML$1(body, {\n ...renderAttribs,\n width: icon.width + '',\n height: icon.height + '',\n });\n const url = svgToURL$1(html);\n // Generate style\n const svgStyle = node.style;\n const styles = {\n '--svg': url,\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...(useMask ? monotoneProps : coloredProps),\n };\n // Apply style\n for (const prop in styles) {\n svgStyle.setProperty(prop, styles[prop]);\n }\n return node;\n}\n\nlet policy;\nfunction createPolicy() {\n try {\n policy = window.trustedTypes.createPolicy(\"iconify\", {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n createHTML: (s) => s\n });\n } catch (err) {\n policy = null;\n }\n}\nfunction cleanUpInnerHTML(html) {\n if (policy === void 0) {\n createPolicy();\n }\n return policy ? policy.createHTML(html) : html;\n}\n\n/**\n * Render node as \n */\nfunction renderSVG(data) {\n const node = document.createElement('span');\n // Add style if needed\n const attr = data.attributes;\n let style = '';\n if (!attr.width) {\n style = 'width: inherit;';\n }\n if (!attr.height) {\n style += 'height: inherit;';\n }\n if (style) {\n attr.style = style;\n }\n // Generate SVG\n const html = iconToHTML$1(data.body, attr);\n node.innerHTML = cleanUpInnerHTML(html);\n return node.firstChild;\n}\n\n/**\n * Find icon node\n */\nfunction findIconElement(parent) {\n return Array.from(parent.childNodes).find((node) => {\n const tag = node.tagName &&\n node.tagName.toUpperCase();\n return tag === 'SPAN' || tag === 'SVG';\n });\n}\n/**\n * Render icon\n */\nfunction renderIcon(parent, state) {\n const iconData = state.icon.data;\n const customisations = state.customisations;\n // Render icon\n const renderData = iconToSVG(iconData, customisations);\n if (customisations.preserveAspectRatio) {\n renderData.attributes['preserveAspectRatio'] =\n customisations.preserveAspectRatio;\n }\n const mode = state.renderedMode;\n let node;\n switch (mode) {\n case 'svg':\n node = renderSVG(renderData);\n break;\n default:\n node = renderSPAN(renderData, {\n ...defaultIconProps,\n ...iconData,\n }, mode === 'mask');\n }\n // Set element\n const oldNode = findIconElement(parent);\n if (oldNode) {\n // Replace old element\n if (node.tagName === 'SPAN' && oldNode.tagName === node.tagName) {\n // Swap style instead of whole node\n oldNode.setAttribute('style', node.getAttribute('style'));\n }\n else {\n parent.replaceChild(node, oldNode);\n }\n }\n else {\n // Add new element\n parent.appendChild(node);\n }\n}\n\n/**\n * Set state to PendingState\n */\nfunction setPendingState(icon, inline, lastState) {\n const lastRender = lastState &&\n (lastState.rendered\n ? lastState\n : lastState.lastRender);\n return {\n rendered: false,\n inline,\n icon,\n lastRender,\n };\n}\n\n/**\n * Register 'iconify-icon' component, if it does not exist\n */\nfunction defineIconifyIcon(name = 'iconify-icon') {\n // Check for custom elements registry and HTMLElement\n let customElements;\n let ParentClass;\n try {\n customElements = window.customElements;\n ParentClass = window.HTMLElement;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n return;\n }\n // Make sure registry and HTMLElement exist\n if (!customElements || !ParentClass) {\n return;\n }\n // Check for duplicate\n const ConflictingClass = customElements.get(name);\n if (ConflictingClass) {\n return ConflictingClass;\n }\n // All attributes\n const attributes = [\n // Icon\n 'icon',\n // Mode\n 'mode',\n 'inline',\n 'noobserver',\n // Customisations\n 'width',\n 'height',\n 'rotate',\n 'flip',\n ];\n /**\n * Component class\n */\n const IconifyIcon = class extends ParentClass {\n // Root\n _shadowRoot;\n // Initialised\n _initialised = false;\n // Icon state\n _state;\n // Attributes check queued\n _checkQueued = false;\n // Connected\n _connected = false;\n // Observer\n _observer = null;\n _visible = true;\n /**\n * Constructor\n */\n constructor() {\n super();\n // Attach shadow DOM\n const root = (this._shadowRoot = this.attachShadow({\n mode: 'open',\n }));\n // Add style\n const inline = this.hasAttribute('inline');\n updateStyle(root, inline);\n // Create empty state\n this._state = setPendingState({\n value: '',\n }, inline);\n // Queue icon render\n this._queueCheck();\n }\n /**\n * Connected to DOM\n */\n connectedCallback() {\n this._connected = true;\n this.startObserver();\n }\n /**\n * Disconnected from DOM\n */\n disconnectedCallback() {\n this._connected = false;\n this.stopObserver();\n }\n /**\n * Observed attributes\n */\n static get observedAttributes() {\n return attributes.slice(0);\n }\n /**\n * Observed properties that are different from attributes\n *\n * Experimental! Need to test with various frameworks that support it\n */\n /*\n static get properties() {\n return {\n inline: {\n type: Boolean,\n reflect: true,\n },\n // Not listing other attributes because they are strings or combination\n // of string and another type. Cannot have multiple types\n };\n }\n */\n /**\n * Attribute has changed\n */\n attributeChangedCallback(name) {\n switch (name) {\n case 'inline': {\n // Update immediately: not affected by other attributes\n const newInline = this.hasAttribute('inline');\n const state = this._state;\n if (newInline !== state.inline) {\n // Update style if inline mode changed\n state.inline = newInline;\n updateStyle(this._shadowRoot, newInline);\n }\n break;\n }\n case 'noobserver': {\n const value = this.hasAttribute('noobserver');\n if (value) {\n this.startObserver();\n }\n else {\n this.stopObserver();\n }\n break;\n }\n default:\n // Queue check for other attributes\n this._queueCheck();\n }\n }\n /**\n * Get/set icon\n */\n get icon() {\n const value = this.getAttribute('icon');\n if (value && value.slice(0, 1) === '{') {\n try {\n return JSON.parse(value);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n //\n }\n }\n return value;\n }\n set icon(value) {\n if (typeof value === 'object') {\n value = JSON.stringify(value);\n }\n this.setAttribute('icon', value);\n }\n /**\n * Get/set inline\n */\n get inline() {\n return this.hasAttribute('inline');\n }\n set inline(value) {\n if (value) {\n this.setAttribute('inline', 'true');\n }\n else {\n this.removeAttribute('inline');\n }\n }\n /**\n * Get/set observer\n */\n get observer() {\n return this.hasAttribute('observer');\n }\n set observer(value) {\n if (value) {\n this.setAttribute('observer', 'true');\n }\n else {\n this.removeAttribute('observer');\n }\n }\n /**\n * Restart animation\n */\n restartAnimation() {\n const state = this._state;\n if (state.rendered) {\n const root = this._shadowRoot;\n if (state.renderedMode === 'svg') {\n // Update root node\n try {\n root.lastChild.setCurrentTime(0);\n return;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n // Failed: setCurrentTime() is not supported\n }\n }\n renderIcon(root, state);\n }\n }\n /**\n * Get status\n */\n get status() {\n const state = this._state;\n return state.rendered\n ? 'rendered'\n : state.icon.data === null\n ? 'failed'\n : 'loading';\n }\n /**\n * Queue attributes re-check\n */\n _queueCheck() {\n if (!this._checkQueued) {\n this._checkQueued = true;\n setTimeout(() => {\n this._check();\n });\n }\n }\n /**\n * Check for changes\n */\n _check() {\n if (!this._checkQueued) {\n return;\n }\n this._checkQueued = false;\n const state = this._state;\n // Get icon\n const newIcon = this.getAttribute('icon');\n if (newIcon !== state.icon.value) {\n this._iconChanged(newIcon);\n return;\n }\n // Ignore other attributes if icon is not rendered\n if (!state.rendered || !this._visible) {\n return;\n }\n // Check for mode and attribute changes\n const mode = this.getAttribute('mode');\n const customisations = getCustomisations(this);\n if (state.attrMode !== mode ||\n haveCustomisationsChanged(state.customisations, customisations) ||\n !findIconElement(this._shadowRoot)) {\n this._renderIcon(state.icon, customisations, mode);\n }\n }\n /**\n * Icon value has changed\n */\n _iconChanged(newValue) {\n const icon = parseIconValue(newValue, (value, name, data) => {\n // Asynchronous callback: re-check values to make sure stuff wasn't changed\n const state = this._state;\n if (state.rendered || this.getAttribute('icon') !== value) {\n // Icon data is already available or icon attribute was changed\n return;\n }\n // Change icon\n const icon = {\n value,\n name,\n data,\n };\n if (icon.data) {\n // Render icon\n this._gotIconData(icon);\n }\n else {\n // Nothing to render: update icon in state\n state.icon = icon;\n }\n });\n if (icon.data) {\n // Icon is ready to render\n this._gotIconData(icon);\n }\n else {\n // Pending icon\n this._state = setPendingState(icon, this._state.inline, this._state);\n }\n }\n /**\n * Force render icon on state change\n */\n _forceRender() {\n if (!this._visible) {\n // Remove icon\n const node = findIconElement(this._shadowRoot);\n if (node) {\n this._shadowRoot.removeChild(node);\n }\n return;\n }\n // Re-render icon\n this._queueCheck();\n }\n /**\n * Got new icon data, icon is ready to (re)render\n */\n _gotIconData(icon) {\n this._checkQueued = false;\n this._renderIcon(icon, getCustomisations(this), this.getAttribute('mode'));\n }\n /**\n * Re-render based on icon data\n */\n _renderIcon(icon, customisations, attrMode) {\n // Get mode\n const renderedMode = getRenderMode(icon.data.body, attrMode);\n // Inline was not changed\n const inline = this._state.inline;\n // Set state and render\n renderIcon(this._shadowRoot, (this._state = {\n rendered: true,\n icon,\n inline,\n customisations,\n attrMode,\n renderedMode,\n }));\n }\n /**\n * Start observer\n */\n startObserver() {\n if (!this._observer && !this.hasAttribute('noobserver')) {\n try {\n this._observer = new IntersectionObserver((entries) => {\n const intersecting = entries.some((entry) => entry.isIntersecting);\n if (intersecting !== this._visible) {\n this._visible = intersecting;\n this._forceRender();\n }\n });\n this._observer.observe(this);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n // Something went wrong, possibly observer is not supported\n if (this._observer) {\n try {\n this._observer.disconnect();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n //\n }\n this._observer = null;\n }\n }\n }\n }\n /**\n * Stop observer\n */\n stopObserver() {\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n this._visible = true;\n if (this._connected) {\n // Render icon\n this._forceRender();\n }\n }\n }\n };\n // Add getters and setters\n attributes.forEach((attr) => {\n if (!(attr in IconifyIcon.prototype)) {\n Object.defineProperty(IconifyIcon.prototype, attr, {\n get: function () {\n return this.getAttribute(attr);\n },\n set: function (value) {\n if (value !== null) {\n this.setAttribute(attr, value);\n }\n else {\n this.removeAttribute(attr);\n }\n },\n });\n }\n });\n // Add exported functions: both as static and instance methods\n const functions = exportFunctions();\n for (const key in functions) {\n IconifyIcon[key] = IconifyIcon.prototype[key] = functions[key];\n }\n // Define new component\n customElements.define(name, IconifyIcon);\n return IconifyIcon;\n}\n\n/**\n * Create exported data: either component instance or functions\n */\nconst IconifyIconComponent = defineIconifyIcon() || exportFunctions();\n/**\n * Export functions\n */\nconst { enableCache, disableCache, iconLoaded, iconExists, // deprecated, kept to avoid breaking changes\ngetIcon, listIcons, addIcon, addCollection, calculateSize, buildIcon, iconToHTML, svgToURL, loadIcons, loadIcon, setCustomIconLoader, setCustomIconsLoader, addAPIProvider, _api, } = IconifyIconComponent;\n\nexport { IconifyIconComponent, _api, addAPIProvider, addCollection, addIcon, appendCustomStyle, buildIcon, calculateSize, disableCache, enableCache, getIcon, iconExists, iconLoaded, iconToHTML, listIcons, loadIcon, loadIcons, setCustomIconLoader, setCustomIconsLoader, svgToURL };\n","\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n","\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n","\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n","\n \n \n \n \n \n\n\n\n\n\n","import { ref, type Ref } from 'vue'\nimport type { InfoLevel } from './types'\n\n/**\n * Defines options to pass when registering a window event-listener:\n * - `autoEnable`: if the listener should also be added to the window (default: `true`)\n */\ntype WindowEventRegistryOptions = { autoEnable: boolean }\ntype ToastMessageEvent = { type: InfoLevel; translationKey: string; millis: number }\n\nexport class EventBus {\n public static clearEvent: Ref = ref('')\n public static toastEvent: Ref = ref(null)\n public static clickEvent: Ref = ref(null)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static windowEventRegistry: Map = new Map()\n\n public static sendDataClearEvent() {\n EventBus.clearEvent.value = new Date().toISOString()\n }\n\n public static sendToastEvent(type: InfoLevel, translationKey: string, millis: number) {\n EventBus.toastEvent.value = { type, translationKey, millis }\n }\n\n public static sendClickEvent(evt: MouseEvent) {\n EventBus.clickEvent.value = evt\n }\n\n // ----------------------------------------------------------------------------------------------\n\n /**\n * Registers a window event-listener\n * @param type event-listener type (e.g. `keydown`)\n * @param listener the listener to register\n * @param options registering options (see {@link WindowEventRegistryOptions})\n */\n public static registerWindowEventListener(\n type: K,\n listener: (this: Window, ev: WindowEventMap[K]) => void,\n options?: WindowEventRegistryOptions,\n ) {\n EventBus.windowEventRegistry.set(type, listener)\n if (!options || options.autoEnable) {\n window.addEventListener(type, listener)\n }\n }\n\n public static deregisterWindowEventListener(\n type: K,\n listener: (this: Window, ev: WindowEventMap[K]) => void,\n ) {\n EventBus.windowEventRegistry.delete(type)\n window.removeEventListener(type, listener)\n }\n\n /**\n * Adds the event-listener to the window context using the internal listener ref saved beforehand\n * @param type event-listener type (e.g. `keydown`)\n */\n public static enableWindowEventListener(type: K) {\n const event = EventBus.windowEventRegistry.get(type)\n window.addEventListener(type, event)\n }\n\n /**\n * Removes the event-listener from the window context, but keeps the listener reference\n * @param type event-listener type (e.g. `keydown`)\n */\n public static disableWindowEventListener(type: K) {\n const event = EventBus.windowEventRegistry.get(type)\n window.removeEventListener(type, event)\n }\n}\n","\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n","\n \n \n \n\n\n","\n \n \n \n \n SECTION_TITLE\n \n \n \n \n \n Nothing here yet, sorry :c\n \n \n \n\n\n\n\n\n","\n \n \n \n \n \n \n \n {{ $t('dialog.about.description') }}\n {{ $t('dialog.about.motivation') }}\n \n {{ $t('dialog.about.tech') }}:\n \n \n \n \n \n {{ $t('dialog.about.prefix_framework') }} Vue + Vite\n 3.5.13 6.1.0\n \n \n \n \n \n {{ $t('dialog.about.prefix_engine') }} three.js\n r173\n \n \n \n \n {{ $t('dialog.about.built_with_love') }}\n \n © {{ new Date().getFullYear() }} EepyBerry,\n \n {{ $t('dialog.about.license') }}\n \n \n \n \n {{ $t('dialog.about.changelogs.$title') }}\n \n \n {{ $t('dialog.about.changelogs.02_title') }}\n \n \n {{ $t('dialog.about.changelogs.02_codex') }}\n {{ $t('dialog.about.changelogs.02_ui') }}\n {{ $t('dialog.about.changelogs.02_a11y') }}\n \n \n \n \n {{ $t('dialog.about.changelogs.03_title') }}\n \n \n {{ $t('dialog.about.changelogs.03_biomes') }}\n {{ $t('dialog.about.changelogs.03_linux') }}\n {{ $t('dialog.about.changelogs.03_fixes') }}\n \n \n \n \n {{ $t('dialog.about.changelogs.04_title') }}\n \n \n {{ $t('dialog.about.changelogs.04_params') }}\n {{ $t('dialog.about.changelogs.04_ui') }}\n {{ $t('dialog.about.changelogs.04_misc') }}\n \n \n \n \n \n \n {{ $t('dialog.about.credits.$title') }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ version }}\n \n \n\n\n\n\n\n","(function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).Dexie=t()})(this,function(){\"use strict\";var s=function(e,t){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)};var _=function(){return(_=Object.assign||function(e){for(var t,n=1,r=arguments.length;n.\",Ze=\"String expected.\",et=[],tt=\"__dbnames\",nt=\"readonly\",rt=\"readwrite\";function it(e,t){return e?t?function(){return e.apply(this,arguments)&&t.apply(this,arguments)}:e:t}var ot={type:3,lower:-1/0,lowerOpen:!1,upper:[[]],upperOpen:!1};function at(t){return\"string\"!=typeof t||/\\./.test(t)?function(e){return e}:function(e){return void 0===e[t]&&t in e&&delete(e=S(e))[t],e}}function ut(){throw Y.Type()}function st(e,t){try{var n=ct(e),r=ct(t);if(n!==r)return\"Array\"===n?1:\"Array\"===r?-1:\"binary\"===n?1:\"binary\"===r?-1:\"string\"===n?1:\"string\"===r?-1:\"Date\"===n?1:\"Date\"!==r?NaN:-1;switch(n){case\"number\":case\"Date\":case\"string\":return ts+c&&f(s+b)})})}var h=yt(r)&&r.limit===1/0&&(\"function\"!=typeof w||w===Kt)&&{index:r.index,range:r.range};return f(0).then(function(){if(0=c})).length?(e.forEach(function(u){t.push(function(){var t=h,e=u._cfg.dbschema;fn(s,t,f),fn(s,e,f),h=s._dbSchema=e;var n=an(t,e);n.add.forEach(function(e){un(f,e[0],e[1].primKey,e[1].indexes)}),n.change.forEach(function(e){if(e.recreate)throw new Y.Upgrade(\"Not yet support for changing primary key\");var t=f.objectStore(e.name);e.add.forEach(function(e){return cn(t,e)}),e.change.forEach(function(e){t.deleteIndex(e.name),cn(t,e)}),e.del.forEach(function(e){return t.deleteIndex(e)})});var r=u._cfg.contentUpgrade;if(r&&u._cfg.version>c){Zt(s,f),l._memoizedTables={};var i=g(e);n.del.forEach(function(e){i[e]=t[e]}),tn(s,[s.Transaction.prototype]),en(s,[s.Transaction.prototype],x(i),i),l.schema=i;var o,a=B(r);a&&Le();n=_e.follow(function(){var e;(o=r(l))&&a&&(e=Ue.bind(null,null),o.then(e,e))});return o&&\"function\"==typeof o.then?_e.resolve(o):n.then(function(){return o})}}),t.push(function(e){var t,n,r=u._cfg.dbschema;t=r,n=e,[].slice.call(n.db.objectStoreNames).forEach(function(e){return null==t[e]&&n.db.deleteObjectStore(e)}),tn(s,[s.Transaction.prototype]),en(s,[s.Transaction.prototype],s._storeNames,s._dbSchema),l.schema=s._dbSchema}),t.push(function(e){s.idbdb.objectStoreNames.contains(\"$meta\")&&(Math.ceil(s.idbdb.version/10)===u._cfg.version?(s.idbdb.deleteObjectStore(\"$meta\"),delete s._dbSchema.$meta,s._storeNames=s._storeNames.filter(function(e){return\"$meta\"!==e})):e.objectStore(\"$meta\").put(u._cfg.version,\"version\"))})}),function e(){return t.length?_e.resolve(t.shift()(l.idbtrans)).then(e):_e.resolve()}().then(function(){sn(h,f)})):_e.resolve();var s,c,l,f,t,h}).catch(u)):(x(o).forEach(function(e){un(i,e,o[e].primKey,o[e].indexes)}),Zt(n,i),void _e.follow(function(){return n.on.populate.fire(a)}).catch(u));var e,t})}function on(e,r){sn(e._dbSchema,r),r.db.version%10!=0||r.objectStoreNames.contains(\"$meta\")||r.db.createObjectStore(\"$meta\").add(Math.ceil(r.db.version/10-1),\"version\");var t=ln(0,e.idbdb,r);fn(e,e._dbSchema,r);for(var n=0,i=an(t,e._dbSchema).change;nMath.pow(2,62)?0:e.oldVersion,m=e<1,f.idbdb=l.result,p&&on(f,v),rn(f,e/10,v,n))},n),l.onsuccess=qe(function(){v=null;var e,t,n,r,i,o=f.idbdb=l.result,a=b(o.objectStoreNames);if(0d.limit?t.length=d.limit:e.length===d.limit&&t.length=r.limit&&(!r.values||e.req.values)&&Xn(e.req.query.range,r.query.range)}),!1,i,o];case\"count\":a=o.find(function(e){return Gn(e.req.query.range,r.query.range)});return[a,!!a,i,o]}}(O,c,\"query\",t),a=o[0],e=o[1],u=o[2],s=o[3];return a&&e?a.obsSet=t.obsSet:(e=l.query(t).then(function(e){var t=e.result;if(a&&(a.res=t),i){for(var n=0,r=t.length;n\n settings: EntityTable\n planets: EntityTable\n}\n\n// Schema declaration:\nidb.version(1).stores({\n keyBindings: '++id, action',\n settings: '++id',\n planets: '++id, data._planetName',\n})\n\nexport type { IDBKeyBinding, IDBSettings, IDBPlanet }\nexport { idb, KeyBindingAction }\n","\n \n Add parameters here \n \n\n\n","\n \n ParameterName\n \n \n\n\n\n\n\n","\n \n ParameterName\n \n \n \n \n\n\n\n","\n \n\n\n\n","\n \n\n \n \n \n \n\n\n\n\n\n","\n \n ParameterName\n \n \n \n \n\n\n\n\n\n","import { Vector3 } from 'three'\nimport { ref } from 'vue'\n\n// Responsiveness width thresholds\nexport const XS_WIDTH_THRESHOLD = 568\nexport const SM_WIDTH_THRESHOLD = 768\nexport const MD_WIDTH_THRESHOLD = 1200\n\n// Internationalization\nexport const LOCALE_MAP: { [k: string]: string } = {\n en: 'en-US',\n fr: 'fr-FR',\n de: 'de-DE',\n}\n\n// Accessibility\nexport const A11Y_ANIMATE = ref(true)\n\n// Extras\n\n// Scene object names\nexport const LG_NAME_PLANET = 'Planet'\nexport const LG_NAME_CLOUDS = 'Clouds'\nexport const LG_NAME_ATMOSPHERE = 'Atmosphere'\nexport const LG_NAME_RING = 'RingSystem'\nexport const LG_NAME_SUN = 'Sun'\nexport const LG_NAME_SUNLIGHT = 'SunLight'\nexport const LG_NAME_AMBLIGHT = 'AmbientLight'\n\n// Global threejs axes\nexport const AXIS_X = new Vector3(1, 0, 0)\nexport const AXIS_Y = new Vector3(0, 1, 0)\nexport const AXIS_Z = new Vector3(0, 0, 1)\nexport const AXIS_NX = new Vector3(-1, 0, 0)\nexport const AXIS_NY = new Vector3(0, -1, 0)\nexport const AXIS_NZ = new Vector3(0, 0, -1)\n\n// Miscellaneous\nexport const SUN_INIT_POS = new Vector3(0, 0, 4e3)\nexport const ATMOSPHERE_HEIGHT_DIVIDER = 200.0\n\n// Textures\nexport const TEXTURE_SIZES = {\n SURFACE: 512,\n CLOUDS: 256,\n BIOME: 256,\n RING: 256,\n}\n\n/**\n * Equal to 1/256.0\n */\nexport const MUL_INT8_TO_UNIT = 3.90625e-3\n","import type { RawRGBA } from '@/core/types'\nimport { LOCALE_MAP, MUL_INT8_TO_UNIT } from '@core/globals'\nimport { Color } from 'three'\nimport type { Composer } from 'vue-i18n'\n\nexport function sleep(delay: number): Promise {\n return new Promise((resolve) => setTimeout(resolve, delay))\n}\n\nexport function toRawRGBA(color: Color, a: number): RawRGBA {\n return { r: color.r, g: color.g, b: color.b, a }\n}\n\nexport function mapLocale(locale: string): string {\n return locale.length > 2 ? locale : (LOCALE_MAP[locale] ?? 'en-US')\n}\n\nexport function getPlanetMetaTitle(planetName: string, i18n: Composer): string {\n return `[${planetName}]` + ' · ' + i18n.t('main.$title')\n}\n\nexport function prefersReducedMotion() {\n return (\n window.matchMedia(`(prefers-reduced-motion: reduce)`).matches ||\n window.matchMedia(`(prefers-reduced-motion: reduce)`).matches\n )\n}\n\n// ----------------------------------------------------------------------------\n\nexport function getColorLuminance(color: Color) {\n return 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b\n}\nexport function getLinearRGBLuminance(r: number, g: number, b: number) {\n return 0.2126 * r + 0.7152 * g + 0.0722 * b\n}\nexport function getLinearUint8Luminance(r: number, g: number, b: number) {\n return 0.2126 * (r * MUL_INT8_TO_UNIT) + 0.7152 * (g * MUL_INT8_TO_UNIT) + 0.0722 * (b * MUL_INT8_TO_UNIT)\n}\n","\n \n \n \n \n \n \n \n {{ selected ? '.....' : keyBind?.key }}\n \n \n \n \n \n \n\n\n\n\n","\n \n \n \n \n \n\n\n","\n \n \n \n {{ $t('dialog.clear_data.$title') }}\n \n \n \n {{ $t('dialog.clear_data.message') }}\n \n {{ $t('dialog.clear_data.warning') }}\n \n \n \n \n \n \n {{ $t('dialog.clear_data.$action_cancel') }}\n \n \n \n {{ $t('dialog.clear_data.$action_confirm') }}\n \n \n \n\n\n\n\n","import { createI18n } from 'vue-i18n'\n\nimport enUS from '@assets/i18n/en-US.json'\nimport enUwU from '@assets/i18n/en-UwU.json'\nimport frFR from '@assets/i18n/fr-FR.json'\nimport deDE from '@assets/i18n/de-DE.json'\n\nconst I18N_SUPPORTED_LANGS = ['en', 'en-US', 'en-UwU', 'fr', 'fr-FR', 'de', 'de-DE'] as const\n\n/**\n * Base i18n schema template (derived from {@linkcode enUS en-US} file)\n */\ntype IntlSchema = typeof enUS\n\n/**\n * String literal type derived from {@linkcode I18N_SUPPORTED_LANGS}\n * @see https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#const-assertions\n */\ntype IntlSupportedLangs = (typeof I18N_SUPPORTED_LANGS)[number]\n\nconst i18n = createI18n<[IntlSchema], IntlSupportedLangs>({\n legacy: false,\n fallbackLocale: 'en-US',\n warnHtmlMessage: false,\n messages: {\n en: enUS,\n 'en-US': enUS,\n 'en-UwU': enUwU,\n\n fr: frFR,\n 'fr-FR': frFR,\n\n de: deDE,\n 'de-DE': deDE,\n },\n})\n\nexport { I18N_SUPPORTED_LANGS, type IntlSupportedLangs, i18n }\n","import { idb, KeyBindingAction, type IDBSettings } from '@/dexie.config'\nimport { prefersReducedMotion } from './utils'\nimport { I18N_SUPPORTED_LANGS } from '@/i18n.config'\n\nexport async function initDefaultSettings(): Promise {\n idb.settings.put({\n // general\n theme: 'default',\n locale: navigator.language in I18N_SUPPORTED_LANGS ? navigator.language : 'en-US',\n font: 'default',\n showInitDialog: true,\n // baking\n bakingResolution: 2048,\n bakingPixelize: false,\n // accessibility\n enableEffects: !prefersReducedMotion(),\n enableAnimations: !prefersReducedMotion(),\n // extras\n extrasHologramMode: false,\n extrasShowSpecialDays: true,\n })\n}\n\nexport async function addDefaultKeyBindings(): Promise {\n idb.keyBindings.bulkPut([\n { action: KeyBindingAction.ToggleLensFlare, key: 'L' },\n { action: KeyBindingAction.ToggleBiomes, key: 'B' },\n { action: KeyBindingAction.ToggleClouds, key: 'C' },\n { action: KeyBindingAction.ToggleAtmosphere, key: 'A' },\n { action: KeyBindingAction.TakeScreenshot, key: 'X' },\n ])\n}\n\nexport async function injectMissingSettings(settings: IDBSettings): Promise {\n idb.settings.update(settings.id, {\n // general\n theme: settings.theme ?? 'default',\n locale: settings.locale ?? (navigator.language in I18N_SUPPORTED_LANGS ? navigator.language : 'en-US'),\n font: settings.font ?? 'default',\n showInitDialog: settings.showInitDialog ?? true,\n // baking\n bakingResolution: settings.bakingResolution ?? 2048,\n bakingPixelize: settings.bakingPixelize ?? false,\n // accessibility\n enableEffects: settings.enableEffects ?? !prefersReducedMotion(),\n enableAnimations: settings.enableAnimations ?? !prefersReducedMotion(),\n // extras\n extrasHologramMode: settings.extrasHologramMode ?? false,\n extrasShowSpecialDays: settings.extrasShowSpecialDays ?? true,\n })\n}\n\nexport async function clearData(): Promise {\n const settings = await idb.settings.limit(1).toArray()\n await idb.settings.update(settings[0].id, {\n // general\n theme: 'default',\n locale: navigator.language in I18N_SUPPORTED_LANGS ? navigator.language : 'en-US',\n font: 'default',\n showInitDialog: true,\n // baking\n bakingResolution: 2048,\n bakingPixelize: false,\n // accessibility\n enableEffects: !prefersReducedMotion(),\n enableAnimations: !prefersReducedMotion(),\n // extras\n extrasHologramMode: false,\n })\n await idb.keyBindings.clear()\n await addDefaultKeyBindings()\n await idb.planets.clear()\n}\n\nexport async function initStoragePersistence() {\n try {\n const persist = await tryPersistWithoutPromptingUser()\n switch (persist) {\n case 'never':\n console.warn('Cannot persist storage, continuing in best-effort mode.')\n break\n case 'persisted':\n console.info('Successfully persisted storage silently!')\n break\n case 'prompt':\n console.warn('Storage not persisted, user should be prompted first')\n break\n }\n } catch (_error) {\n console.error('Failed to persist storage despite granted permission, continuing in best-effort mode.')\n }\n}\n\n/** Tries to persist storage without ever prompting user.\n @returns {Promise}\n \"never\" In case persisting is not ever possible. Caller don't bother\n asking user for permission.\n \"prompt\" In case persisting would be possible if prompting user first.\n \"persisted\" In case this call successfully silently persisted the storage,\n or if it was already persisted.\n*/\nexport async function tryPersistWithoutPromptingUser(): Promise {\n if (!navigator.storage || !navigator.storage.persisted) {\n return 'never'\n }\n let persisted = await navigator.storage.persisted()\n if (persisted) {\n return 'persisted'\n }\n if (!navigator.permissions || !navigator.permissions.query) {\n return 'prompt' // It MAY be successful to prompt. Don't know.\n }\n const permission = await navigator.permissions.query({\n name: 'persistent-storage',\n })\n if (permission.state === 'granted') {\n persisted = await navigator.storage.persist()\n if (persisted) {\n return 'persisted'\n } else {\n throw new Error('Failed to persist local storage')\n }\n }\n if (permission.state === 'prompt') {\n return 'prompt'\n }\n return 'never'\n}\n","// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n,\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n,\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The IANA name of this zone.\n * Defaults to `name` if not overwritten by a subclass.\n * @abstract\n * @type {string}\n */\n get ianaName() {\n return this.name;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get isUniversal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {SystemZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new SystemZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"system\";\n }\n\n /** @override **/\n get name() {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"system\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet dtfCache = {};\nfunction makeDTF(zone) {\n if (!dtfCache[zone]) {\n dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n era: \"short\",\n });\n }\n return dtfCache[zone];\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n era: 3,\n hour: 4,\n minute: 5,\n second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date);\n const filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i];\n const pos = typeToPos[type];\n\n if (type === \"era\") {\n filled[pos] = value;\n } else if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nlet ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n if (!ianaZoneCache[name]) {\n ianaZoneCache[name] = new IANAZone(name);\n }\n return ianaZoneCache[name];\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache = {};\n dtfCache = {};\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead.\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return this.isValidZone(s);\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n if (!zone) {\n return false;\n }\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /**\n * The type of zone. `iana` for all instances of `IANAZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"iana\";\n }\n\n /**\n * The name of this zone (i.e. the IANA zone name).\n * @override\n * @type {string}\n */\n get name() {\n return this.zoneName;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns false for all IANA zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return false;\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @override\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n const date = new Date(ts);\n\n if (isNaN(date)) return NaN;\n\n const dtf = makeDTF(this.name);\n let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date);\n\n if (adOrBc === \"BC\") {\n year = -Math.abs(year) + 1;\n }\n\n // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n const adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0,\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /**\n * Return whether this Zone is valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return this.valid;\n }\n}\n","import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlLFCache[key];\n if (!dtf) {\n dtf = new Intl.ListFormat(locString, opts);\n intlLFCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlDTCache = {};\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache[key];\n if (!dtf) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlNumCache = {};\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache[key];\n if (!inf) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache[key] = inf;\n }\n return inf;\n}\n\nlet intlRelCache = {};\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache[key];\n if (!inf) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache[key] = inf;\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else {\n sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n return sysLocaleCache;\n }\n}\n\nlet weekInfoCache = {};\nfunction getCachedWeekInfo(locString) {\n let data = weekInfoCache[locString];\n if (!data) {\n const locale = new Intl.Locale(locString);\n // browsers currently implement this as a property, but spec says it should be a getter function\n data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n weekInfoCache[locString] = data;\n }\n return data;\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n // private subtags and unicode subtags have ordering requirements,\n // and we're not properly parsing this, so just strip out the\n // private ones if they exist.\n const xIndex = localeStr.indexOf(\"-x-\");\n if (xIndex !== -1) {\n localeStr = localeStr.substring(0, xIndex);\n }\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n let selectedStr;\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n selectedStr = localeStr;\n } catch (e) {\n const smaller = localeStr.substring(0, uIndex);\n options = getCachedDTF(smaller).resolvedOptions();\n selectedStr = smaller;\n }\n\n const { numberingSystem, calendar } = options;\n return [selectedStr, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (outputCalendar || numberingSystem) {\n if (!localeStr.includes(\"-u-\")) {\n localeStr += \"-u\";\n }\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2009, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n const mode = loc.listingMode();\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\"\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n const { padTo, floor, ...otherOpts } = opts;\n\n if (!forceSimple || Object.keys(otherOpts).length > 0) {\n const intlOpts = { useGrouping: false, ...opts };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.originalZone = undefined;\n\n let z = undefined;\n if (this.opts.timeZone) {\n // Don't apply any workarounds if a timeZone is explicitly provided in opts\n this.dt = dt;\n } else if (dt.zone.type === \"fixed\") {\n // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n // That is why fixed-offset TZ is set to that unless it is:\n // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n // 2. Unsupported by the browser:\n // - some do not support Etc/\n // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n const gmtOffset = -1 * (dt.offset / 60);\n const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n // we manually apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n } else if (dt.zone.type === \"system\") {\n this.dt = dt;\n } else if (dt.zone.type === \"iana\") {\n this.dt = dt;\n z = dt.zone.name;\n } else {\n // Custom zones can have any offset / offsetName so we just manually\n // apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n\n const intlOpts = { ...this.opts };\n intlOpts.timeZone = intlOpts.timeZone || z;\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n\n format() {\n if (this.originalZone) {\n // If we have to substitute in the actual zone name, we have to use\n // formatToParts so that the timezone can be replaced.\n return this.formatToParts()\n .map(({ value }) => value)\n .join(\"\");\n }\n return this.dtf.format(this.dt.toJSDate());\n }\n\n formatToParts() {\n const parts = this.dtf.formatToParts(this.dt.toJSDate());\n if (this.originalZone) {\n return parts.map((part) => {\n if (part.type === \"timeZoneName\") {\n const offsetName = this.originalZone.offsetName(this.dt.ts, {\n locale: this.dt.locale,\n format: this.opts.timeZoneName,\n });\n return {\n ...part,\n value: offsetName,\n };\n } else {\n return part;\n }\n });\n }\n return parts;\n }\n\n resolvedOptions() {\n return this.dtf.resolvedOptions();\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = { style: \"long\", ...opts };\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\nconst fallbackWeekSettings = {\n firstDay: 1,\n minimalDays: 4,\n weekend: [6, 7],\n};\n\n/**\n * @private\n */\n\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(\n opts.locale,\n opts.numberingSystem,\n opts.outputCalendar,\n opts.weekSettings,\n opts.defaultToEN\n );\n }\n\n static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale;\n // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats\n const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache = {};\n intlNumCache = {};\n intlRelCache = {};\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n }\n\n constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.weekSettings = weekSettings;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode() {\n const isActuallyEn = this.isEnglish();\n const hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n validateWeekSettings(alts.weekSettings) || this.weekSettings,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone({ ...alts, defaultToEN: true });\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone({ ...alts, defaultToEN: false });\n }\n\n months(length, format = false) {\n return listStuff(this, length, English.months, () => {\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n this.monthsCache[formatStr][length] = mapMonths((dt) => this.extract(dt, intl, \"month\"));\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false) {\n return listStuff(this, length, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems() {\n return listStuff(\n this,\n undefined,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n (dt) => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length) {\n return listStuff(this, length, English.eras, () => {\n const intl = { era: length };\n\n // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find((m) => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n listFormatter(opts = {}) {\n return getCachedLF(this.intl, opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\")\n );\n }\n\n getWeekSettings() {\n if (this.weekSettings) {\n return this.weekSettings;\n } else if (!hasLocaleWeekInfo()) {\n return fallbackWeekSettings;\n } else {\n return getCachedWeekInfo(this.locale);\n }\n }\n\n getStartOfWeek() {\n return this.getWeekSettings().firstDay;\n }\n\n getMinDaysInFirstWeek() {\n return this.getWeekSettings().minimalDays;\n }\n\n getWeekendDays() {\n return this.getWeekSettings().weekend;\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n\n toString() {\n return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`;\n }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /**\n * The type of zone. `fixed` for all instances of `FixedOffsetZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"fixed\";\n }\n\n /**\n * The name of this zone.\n * All fixed zones' names always start with \"UTC\" (plus optional offset)\n * @override\n * @type {string}\n */\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n /**\n * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn`\n *\n * @override\n * @type {string}\n */\n get ianaName() {\n if (this.fixed === 0) {\n return \"Etc/UTC\";\n } else {\n return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n }\n }\n\n /**\n * Returns the offset's common name at the specified timestamp.\n *\n * For fixed offset zones this equals to the zone name.\n * @override\n */\n offsetName() {\n return this.name;\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns true for all fixed offset zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return true;\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n *\n * For fixed offset zones, this is constant and does not depend on a timestamp.\n * @override\n * @return {number}\n */\n offset() {\n return this.fixed;\n }\n\n /**\n * Return whether this Zone is equal to another zone (i.e. also fixed and same offset)\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /**\n * Return whether this Zone is valid:\n * All fixed offset zones are valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return true;\n }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"default\") return defaultZone;\n else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n","const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\n// cache of {numberingSystem: {append: regex}}\nlet digitRegexCache = {};\nexport function resetDigitRegexCache() {\n digitRegexCache = {};\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n const ns = numberingSystem || \"latn\";\n\n if (!digitRegexCache[ns]) {\n digitRegexCache[ns] = {};\n }\n if (!digitRegexCache[ns][append]) {\n digitRegexCache[ns][append] = new RegExp(`${numberingSystems[ns]}${append}`);\n }\n\n return digitRegexCache[ns][append];\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport DateTime from \"./datetime.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\nimport { resetDigitRegexCache } from \"./impl/digits.js\";\n\nlet now = () => Date.now(),\n defaultZone = \"system\",\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n twoDigitCutoffYear = 60,\n throwOnInvalid,\n defaultWeekSettings = null;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * Use the value \"system\" to reset this value to the system's time zone.\n * @type {string}\n */\n static set defaultZone(zone) {\n defaultZone = zone;\n }\n\n /**\n * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n * The default value is the system's time zone (the one set on the machine that runs this code).\n * @type {Zone}\n */\n static get defaultZone() {\n return normalizeZone(defaultZone, SystemZone.instance);\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * @typedef {Object} WeekSettings\n * @property {number} firstDay\n * @property {number} minimalDays\n * @property {number[]} weekend\n */\n\n /**\n * @return {WeekSettings|null}\n */\n static get defaultWeekSettings() {\n return defaultWeekSettings;\n }\n\n /**\n * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n * how many days are required in the first week of a year.\n * Does not affect existing instances.\n *\n * @param {WeekSettings|null} weekSettings\n */\n static set defaultWeekSettings(weekSettings) {\n defaultWeekSettings = validateWeekSettings(weekSettings);\n }\n\n /**\n * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n */\n static get twoDigitCutoffYear() {\n return twoDigitCutoffYear;\n }\n\n /**\n * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century\n * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century\n * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950\n * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n */\n static set twoDigitCutoffYear(cutoffYear) {\n twoDigitCutoffYear = cutoffYear % 100;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n DateTime.resetCache();\n resetDigitRegexCache();\n }\n}\n","export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n","import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger,\n isUndefined,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nexport function dayOfWeek(year, month, day) {\n const d = new Date(Date.UTC(year, month - 1, day));\n\n if (year < 100 && year >= 0) {\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n\n const js = d.getUTCDay();\n\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex((i) => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n return ((isoWeekday - startOfWeek + 7) % 7) + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n\n let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData;\n const ordinal = computeOrdinal(year, month, day);\n return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData;\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(ordinalData) };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n const hasLocaleWeekData =\n !isUndefined(obj.localWeekday) ||\n !isUndefined(obj.localWeekNumber) ||\n !isUndefined(obj.localWeekYear);\n if (hasLocaleWeekData) {\n const hasIsoWeekData =\n !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n\n if (hasIsoWeekData) {\n throw new ConflictingSpecificationError(\n \"Cannot mix locale-based week fields with ISO-based week fields\"\n );\n }\n if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n delete obj.localWeekday;\n delete obj.localWeekNumber;\n delete obj.localWeekYear;\n return {\n minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n startOfWeek: loc.getStartOfWeek(),\n };\n } else {\n return { minDaysInFirstWeek: 4, startOfWeek: 1 };\n }\n}\n\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(\n obj.weekNumber,\n 1,\n weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)\n ),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.weekNumber);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n","/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\nexport function hasLocaleWeekInfo() {\n try {\n return (\n typeof Intl !== \"undefined\" &&\n !!Intl.Locale &&\n (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype)\n );\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function validateWeekSettings(settings) {\n if (settings == null) {\n return null;\n } else if (typeof settings !== \"object\") {\n throw new InvalidArgumentError(\"Week settings must be an object\");\n } else {\n if (\n !integerBetween(settings.firstDay, 1, 7) ||\n !integerBetween(settings.minimalDays, 1, 7) ||\n !Array.isArray(settings.weekend) ||\n settings.weekend.some((v) => !integerBetween(v, 1, 7))\n ) {\n throw new InvalidArgumentError(\"Invalid week settings\");\n }\n return {\n firstDay: settings.firstDay,\n minimalDays: settings.minimalDays,\n weekend: Array.from(settings.weekend),\n };\n }\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n const isNeg = input < 0;\n let padded;\n if (isNeg) {\n padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n } else {\n padded = (\"\" + input).padStart(n, \"0\");\n }\n return padded;\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseFloating(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseFloat(string);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, towardZero = false) {\n const factor = 10 ** digits,\n rounder = towardZero ? Math.trunc : Math.round;\n return rounder(number * factor) / factor;\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n // the calculations done by Date.UTC are using year 2000 - which is incorrect\n d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n }\n return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n return -fwdlw + minDaysInFirstWeek - 1;\n}\n\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find((m) => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\n/**\n * Returns the offset's value as a string\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(Math.abs(offset / 60)),\n minutes = Math.trunc(Math.abs(offset % 60)),\n sign = offset >= 0 ? \"+\" : \"-\";\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n case \"techie\":\n return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return [...monthsNarrow];\n case \"short\":\n return [...monthsShort];\n case \"long\":\n return [...monthsLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return [...weekdaysNarrow];\n case \"short\":\n return [...weekdaysShort];\n case \"long\":\n return [...weekdaysLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return [...erasNarrow];\n case \"short\":\n return [...erasShort];\n case \"long\":\n return [...erasLong];\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"],\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hourCycle\",\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n return \"EEE, LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n // white-space is always considered a literal in user-provided formats\n // the \" \" token has a special meaning (see unitForToken)\n\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.format();\n }\n\n dtFormatter(dt, opts = {}) {\n return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n }\n\n formatDateTime(dt, opts) {\n return this.dtFormatter(dt, opts).format();\n }\n\n formatDateTimeParts(dt, opts) {\n return this.dtFormatter(dt, opts).formatToParts();\n }\n\n formatInterval(interval, opts) {\n const df = this.dtFormatter(interval.start, opts);\n return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n }\n\n resolvedOptions(dt, opts) {\n return this.dtFormatter(dt, opts).resolvedOptions();\n }\n\n num(n, p = 0) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = { ...this.opts };\n\n if (p > 0) {\n opts.padTo = p;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = (opts) => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = (token) => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = (length) =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = (token) => {\n // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // fractional seconds\n case \"uu\":\n return this.num(Math.floor(dt.millisecond / 10), 2);\n case \"uuu\":\n return this.num(Math.floor(dt.millisecond / 100));\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"n\":\n return this.num(dt.localWeekNumber);\n case \"nn\":\n return this.num(dt.localWeekNumber, 2);\n case \"ii\":\n return this.num(dt.localWeekYear.toString().slice(-2), 2);\n case \"iiii\":\n return this.num(dt.localWeekYear, 4);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const tokenToField = (token) => {\n switch (token[0]) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"w\":\n return \"week\";\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n default:\n return null;\n }\n },\n tokenToString = (lildur) => (token) => {\n const mapped = tokenToField(token);\n if (mapped) {\n return this.num(lildur.get(mapped), token.length);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t));\n return stringifyTokens(tokens, tokenToString(collapsed));\n }\n}\n","import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n isUndefined,\n parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return (m) =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1),\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hours: int(match, cursor, 0),\n minutes: int(match, cursor + 1, 0),\n seconds: int(match, cursor + 2, 0),\n milliseconds: parseMillis(match[cursor + 3]),\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n match;\n\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n const maybeNegate = (num, force = false) =>\n num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n return [\n {\n years: maybeNegate(parseFloating(yearStr)),\n months: maybeNegate(parseFloating(monthStr)),\n weeks: maybeNegate(parseFloating(weekStr)),\n days: maybeNegate(parseFloating(dayStr)),\n hours: maybeNegate(parseFloating(hourStr)),\n minutes: maybeNegate(parseFloating(minuteStr)),\n seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n },\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr),\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr,\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 =\n /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n extractISOOrdinalData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000,\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000,\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 },\n },\n casualMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n seconds: 91 * 24 * 60 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000,\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000,\n },\n\n ...lowOrderMatrix,\n },\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n },\n ...lowOrderMatrix,\n };\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n matrix: alts.matrix || dur.matrix,\n };\n return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n let sum = vals.milliseconds ?? 0;\n for (const unit of reverseUnits.slice(1)) {\n if (vals[unit]) {\n sum += vals[unit] * matrix[unit][\"milliseconds\"];\n }\n }\n return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n // the logic below assumes the overall value of the duration is positive\n // if this is not the case, factor is used to make it so\n const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n orderedUnits.reduceRight((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const previousVal = vals[previous] * factor;\n const conv = matrix[current][previous];\n\n // if (previousVal < 0):\n // lower order unit is negative (e.g. { years: 2, days: -2 })\n // normalize this by reducing the higher order unit by the appropriate amount\n // and increasing the lower order unit\n // this can never make the higher order unit negative, because this function only operates\n // on positive durations, so the amount of time represented by the lower order unit cannot\n // be larger than the higher order unit\n // else:\n // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n // in this case we attempt to convert as much as possible from the lower order unit into\n // the higher order one\n //\n // Math.floor takes care of both of these cases, rounding away from 0\n // if previousVal < 0 it makes the absolute value larger\n // if previousVal >= it makes the absolute value smaller\n const rollUp = Math.floor(previousVal / conv);\n vals[current] += rollUp * factor;\n vals[previous] -= rollUp * conv * factor;\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n\n // try to convert any decimals into smaller units if possible\n // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n orderedUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const fraction = vals[previous] % 1;\n vals[previous] -= fraction;\n vals[current] += fraction * matrix[previous][current];\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n const newVals = {};\n for (const [key, value] of Object.entries(vals)) {\n if (value !== 0) {\n newVals[key] = value;\n }\n }\n return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n let matrix = accurate ? accurateMatrix : casualMatrix;\n\n if (config.matrix) {\n matrix = config.matrix;\n }\n\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = matrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject({ milliseconds: count }, opts);\n }\n\n /**\n * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {Object} [opts=[]] - options for creating this Duration\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the custom conversion system to use\n * @return {Duration}\n */\n static fromObject(obj, opts = {}) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit),\n loc: Locale.fromObject(opts),\n conversionAccuracy: opts.conversionAccuracy,\n matrix: opts.matrix,\n });\n }\n\n /**\n * Create a Duration from DurationLike.\n *\n * @param {Object | number | Duration} durationLike\n * One of:\n * - object with keys like 'years' and 'hours'.\n * - number representing milliseconds\n * - Duration instance\n * @return {Duration}\n */\n static fromDurationLike(durationLike) {\n if (isNumber(durationLike)) {\n return Duration.fromMillis(durationLike);\n } else if (Duration.isDuration(durationLike)) {\n return durationLike;\n } else if (typeof durationLike === \"object\") {\n return Duration.fromObject(durationLike);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n );\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the preset conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 time string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @return {Duration}\n */\n static fromISOTime(text, opts) {\n const [parsed] = parseISOTimeOnly(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\",\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `w` for weeks\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * Tokens can be escaped by wrapping with single quotes.\n * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = {\n ...opts,\n floor: opts.round !== false && opts.floor !== false,\n };\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a string representation of a Duration with all units included.\n * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n * @example\n * ```js\n * var dur = Duration.fromObject({ days: 1, hours: 5, minutes: 6 })\n * dur.toHuman() //=> '1 day, 5 hours, 6 minutes'\n * dur.toHuman({ listStyle: \"long\" }) //=> '1 day, 5 hours, and 6 minutes'\n * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 day, 5 hr, 6 min'\n * ```\n */\n toHuman(opts = {}) {\n if (!this.isValid) return INVALID;\n\n const l = orderedUnits\n .map((unit) => {\n const val = this.values[unit];\n if (isUndefined(val)) {\n return null;\n }\n return this.loc\n .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n .format(val);\n })\n .filter((n) => n);\n\n return this.loc\n .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n .format(l);\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject() {\n if (!this.isValid) return {};\n return { ...this.values };\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n * @return {string}\n */\n toISOTime(opts = {}) {\n if (!this.isValid) return null;\n\n const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n\n opts = {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\",\n ...opts,\n includeOffset: false,\n };\n\n const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n return dateTime.toISOTime(opts);\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns a string representation of this Duration appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Duration { values: ${JSON.stringify(this.values)} }`;\n } else {\n return `Duration { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n if (!this.isValid) return NaN;\n\n return durationToMillis(this.matrix, this.values);\n }\n\n /**\n * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem });\n const opts = { loc, matrix, conversionAccuracy };\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * Assuming the overall value of the Duration is positive, this means:\n * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n * the overall value would be negative, see third example)\n * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n *\n * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Rescale units to its largest representation\n * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n * @return {Duration}\n */\n rescale() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map((u) => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n // only keep the integer part for now in the hopes of putting any decimal part\n // into a smaller unit later\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n normalizeValues(this.matrix, built);\n return clone(this, { values: built }, true);\n }\n\n /**\n * Shift this Duration to all available units.\n * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n * @return {Duration}\n */\n shiftToAll() {\n if (!this.isValid) return this;\n return this.shiftTo(\n \"years\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n );\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n function eq(v1, v2) {\n // Consider 0 and undefined as equal\n if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n return v1 === v2;\n }\n\n for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd,\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `/`, `/`, and `/` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n let start, startIsValid;\n try {\n start = DateTime.fromISO(s, opts);\n startIsValid = start.isValid;\n } catch (e) {\n startIsValid = false;\n }\n\n let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (startIsValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (endIsValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n * @return {number}\n */\n count(unit = \"milliseconds\", opts) {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit, opts);\n let end;\n if (opts?.useLocaleWeeks) {\n end = this.end.reconfigure({ locale: start.locale });\n } else {\n end = this.end;\n }\n end = end.startOf(unit, opts);\n return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...DateTime} dateTimes - the unit of time to count.\n * @return {Array}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter((d) => this.contains(d))\n .sort((a, b) => a.toMillis() - b.toMillis()),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {Array}\n */\n splitBy(duration) {\n const dur = Duration.fromDurationLike(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n idx = 1,\n next;\n\n const results = [];\n while (s < this.e) {\n const added = this.start.plus(dur.mapUnits((x) => x * idx));\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n idx += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {Array}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s >= e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into a equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static merge(intervals) {\n const [found, final] = intervals\n .sort((a, b) => a.s - b.s)\n .reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map((i) => [\n { time: i.s, type: \"s\" },\n { time: i.e, type: \"e\" },\n ]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {Array}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map((i) => this.intersection(i))\n .filter((i) => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns a string representation of this Interval appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n } else {\n return `Interval { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns a localized string representing this Interval. Accepts the same options as the\n * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n * is browser-specific, but in general it will return an appropriate representation of the\n * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n * specified.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n * Intl.DateTimeFormat constructor options.\n * @param {Object} opts - Options to override the configuration of the start DateTime.\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n : INVALID;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format\n * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n * formatting tool.\n * @param {string} dateFormat - The format string. This string formats the start and end time.\n * See {@link DateTime#toFormat} for details.\n * @param {Object} opts - Options.\n * @param {string} [opts.separator = ' – '] - A separator to place between the start and end\n * representations.\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasLocaleWeekInfo, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone#isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Get the weekday on which the week starts according to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n */\n static getStartOfWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getStartOfWeek();\n }\n\n /**\n * Get the minimum number of days necessary in a week before it is considered part of the next year according\n * to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number}\n */\n static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n }\n\n /**\n * Get the weekdays, which are considered the weekend according to the given locale\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n */\n static getWeekendWeekdays({ locale = null, locObj = null } = {}) {\n // copy the array, because we cache it internally\n return (locObj || Locale.create(locale)).getWeekendDays().slice();\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {Array}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link Info#months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {Array}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {Array}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link Info#weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @return {Array}\n */\n static weekdaysFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {Array}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {Array}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `relative`: whether this environment supports relative time formatting\n * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n * @example Info.features() //=> { relative: false, localeWeek: true }\n * @return {Object}\n */\n static features() {\n return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() };\n }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n },\n ],\n [\"days\", dayDiff],\n ];\n\n const results = {};\n const earlier = cursor;\n let lowestOrder, highWater;\n\n /* This loop tries to diff using larger units first.\n If we overshoot, we backtrack and try the next smaller unit.\n \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n as we use smaller and smaller units.\n highWater keeps track of where we would be if we added one more of the smallest unit,\n this is used later to potentially convert any difference smaller than the smallest higher order unit\n into a fraction of that smallest higher order unit\n */\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n results[unit] = differ(cursor, later);\n highWater = earlier.plus(results);\n\n if (highWater > later) {\n // we overshot the end point, backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n\n // if we are still overshooting now, we need to backtrack again\n // this happens in certain situations when diffing times in different zones,\n // because this calculation ignores time zones\n if (cursor > later) {\n // keep the \"overshot by 1\" around as highWater\n highWater = cursor;\n // backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n }\n } else {\n cursor = highWater;\n }\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(results, opts);\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n // make space and non breakable space characters interchangeable\n return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n return s\n .replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = (t) => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\"), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\"), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n case \"uu\":\n return simple(oneOrTwo);\n case \"uuu\":\n return intUnit(one);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n // in this case we accept any non-newline white-space\n case \" \":\n return simple(/[^\\S\\n\\r]/);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP,\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\",\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\",\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\",\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\",\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour12: {\n numeric: \"h\",\n \"2-digit\": \"hh\",\n },\n hour24: {\n numeric: \"H\",\n \"2-digit\": \"HH\",\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\",\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\",\n },\n timeZoneName: {\n long: \"ZZZZZ\",\n short: \"ZZZ\",\n },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n const isSpace = /^\\s+$/.test(value);\n return {\n literal: !isSpace,\n val: isSpace ? \" \" : value,\n };\n }\n\n const style = formatOpts[type];\n\n // The user might have explicitly specified hour12 or hourCycle\n // if so, respect their decision\n // if not, refer back to the resolvedOpts, which are based on the locale\n let actualType = type;\n if (type === \"hour\") {\n if (formatOpts.hour12 != null) {\n actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n } else if (formatOpts.hourCycle != null) {\n if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n actualType = \"hour12\";\n } else {\n actualType = \"hour24\";\n }\n } else {\n // tokens only differentiate between 24 hours or not,\n // so we do not need to check hourCycle here, which is less supported anyways\n actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n }\n }\n let val = partTypeStyleToTokenVal[actualType];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val,\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = (token) => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone = null;\n let specificOffset;\n if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n }\n\n if (!isUndefined(matches.Z)) {\n if (!zone) {\n zone = new FixedOffsetZone(matches.Z);\n }\n specificOffset = matches.Z;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n const tokens = formatOptsToTokens(formatOpts, locale);\n\n if (tokens == null || tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport class TokenParser {\n constructor(locale, format) {\n this.locale = locale;\n this.format = format;\n this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale);\n this.units = this.tokens.map((t) => unitForToken(t, locale));\n this.disqualifyingUnit = this.units.find((t) => t.invalidReason);\n\n if (!this.disqualifyingUnit) {\n const [regexString, handlers] = buildRegex(this.units);\n this.regex = RegExp(regexString, \"i\");\n this.handlers = handlers;\n }\n }\n\n explainFromTokens(input) {\n if (!this.isValid) {\n return { input, tokens: this.tokens, invalidReason: this.invalidReason };\n } else {\n const [rawMatches, matches] = match(input, this.regex, this.handlers),\n [result, zone, specificOffset] = matches\n ? dateTimeFromMatches(matches)\n : [null, null, undefined];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return {\n input,\n tokens: this.tokens,\n regex: this.regex,\n rawMatches,\n matches,\n result,\n zone,\n specificOffset,\n };\n }\n }\n\n get isValid() {\n return !this.disqualifyingUnit;\n }\n\n get invalidReason() {\n return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;\n }\n}\n\nexport function explainFromTokens(locale, input, format) {\n const parser = new TokenParser(locale, format);\n return parser.explainFromTokens(input);\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n if (!formatOpts) {\n return null;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const df = formatter.dtFormatter(getDummyDateTime());\n const parts = df.formatToParts();\n const resolvedOpts = df.resolvedOptions();\n return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS,\n padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n parseFromTokens,\n explainFromTokens,\n formatOptsToTokens,\n expandMacroTokens,\n TokenParser,\n} from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData,\n usesLocalWeekValues,\n isoWeekdayToLocal,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n if (dt.localWeekData === null) {\n dt.localWeekData = gregorianToWeek(\n dt.c,\n dt.loc.getMinDaysInFirstWeek(),\n dt.loc.getStartOfWeek()\n );\n }\n return dt.localWeekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid,\n };\n return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds(),\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const oPre = inst.o,\n year = inst.c.year + Math.trunc(dur.years),\n month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n c = {\n ...inst.c,\n year,\n month,\n day:\n Math.min(inst.c.day, daysInMonth(year, month)) +\n Math.trunc(dur.days) +\n Math.trunc(dur.weeks) * 7,\n },\n millisToAdd = Duration.fromObject({\n years: dur.years - Math.trunc(dur.years),\n quarters: dur.quarters - Math.trunc(dur.quarters),\n months: dur.months - Math.trunc(dur.months),\n weeks: dur.weeks - Math.trunc(dur.weeks),\n days: dur.days - Math.trunc(dur.days),\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds,\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n const { setZone, zone } = opts;\n if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(parsed, {\n ...opts,\n zone: interpretationZone,\n specificOffset,\n });\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true,\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\nfunction toISODate(o, extended) {\n const longFormat = o.c.year > 9999 || o.c.year < 0;\n let c = \"\";\n if (longFormat && o.c.year >= 0) c += \"+\";\n c += padStart(o.c.year, longFormat ? 6 : 4);\n\n if (extended) {\n c += \"-\";\n c += padStart(o.c.month);\n c += \"-\";\n c += padStart(o.c.day);\n } else {\n c += padStart(o.c.month);\n c += padStart(o.c.day);\n }\n return c;\n}\n\nfunction toISOTime(\n o,\n extended,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone\n) {\n let c = padStart(o.c.hour);\n if (extended) {\n c += \":\";\n c += padStart(o.c.minute);\n if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {\n c += \":\";\n }\n } else {\n c += padStart(o.c.minute);\n }\n\n if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {\n c += padStart(o.c.second);\n\n if (o.c.millisecond !== 0 || !suppressMilliseconds) {\n c += \".\";\n c += padStart(o.c.millisecond, 3);\n }\n }\n\n if (includeOffset) {\n if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n c += \"Z\";\n } else if (o.o < 0) {\n c += \"-\";\n c += padStart(Math.trunc(-o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(-o.o % 60));\n } else {\n c += \"+\";\n c += padStart(Math.trunc(o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(o.o % 60));\n }\n }\n\n if (extendedZone) {\n c += \"[\" + o.zone.ianaName + \"]\";\n }\n return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\",\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\",\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\nfunction normalizeUnitWithLocalWeeks(unit) {\n switch (unit.toLowerCase()) {\n case \"localweekday\":\n case \"localweekdays\":\n return \"localWeekday\";\n case \"localweeknumber\":\n case \"localweeknumbers\":\n return \"localWeekNumber\";\n case \"localweekyear\":\n case \"localweekyears\":\n return \"localWeekYear\";\n default:\n return normalizeUnit(unit);\n }\n}\n\n// cache offsets for zones based on the current timestamp when this function is\n// first called. When we are handling a datetime from components like (year,\n// month, day, hour) in a time zone, we need a guess about what the timezone\n// offset is so that we can convert into a UTC timestamp. One way is to find the\n// offset of now in the zone. The actual date may have a different offset (for\n// example, if we handle a date in June while we're in December in a zone that\n// observes DST), but we can check and adjust that.\n//\n// When handling many dates, calculating the offset for now every time is\n// expensive. It's just a guess, so we can cache the offset to use even if we\n// are right on a time change boundary (we'll just correct in the other\n// direction). Using a timestamp from first read is a slight optimization for\n// handling dates close to the current date, since those dates will usually be\n// in the same offset (we could set the timestamp statically, instead). We use a\n// single timestamp for all zones to make things a bit more predictable.\n//\n// This is safe for quickDT (used by local() and utc()) because we don't fill in\n// higher-order units from tsNow (as we do in fromObject, this requires that\n// offset is calculated from tsNow).\nfunction guessOffsetForZone(zone) {\n if (!zoneOffsetGuessCache[zone]) {\n if (zoneOffsetTs === undefined) {\n zoneOffsetTs = Settings.now();\n }\n\n zoneOffsetGuessCache[zone] = zone.offset(zoneOffsetTs);\n }\n return zoneOffsetGuessCache[zone];\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n const zone = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n }\n\n const loc = Locale.fromObject(opts);\n\n let ts, o;\n\n // assume we have the higher-order units\n if (!isUndefined(obj.year)) {\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const offsetProvis = guessOffsetForZone(zone);\n [ts, o] = objToTS(obj, offsetProvis, zone);\n } else {\n ts = Settings.now();\n }\n\n return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = (unit) => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n let opts = {},\n args;\n if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n opts = argList[argList.length - 1];\n args = Array.from(argList).slice(0, argList.length - 1);\n } else {\n args = Array.from(argList);\n }\n return [opts, args];\n}\n\n/**\n * Timestamp to use for cached zone offset guesses (exposed for test)\n */\nlet zoneOffsetTs;\n/**\n * Cache for zone offset guesses (exposed for test).\n *\n * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of\n * zone.offset().\n */\nlet zoneOffsetGuessCache = {};\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n // If an offset has been passed and we have not been called from\n // clone(), we can trust it and avoid the offset calculation.\n const ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.localWeekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a DateTime for the current instant, in the system's time zone.\n *\n * Use Settings to override these default values if needed.\n * @example DateTime.now().toISO() //~> now in the ISO format\n * @return {DateTime}\n */\n static now() {\n return new DateTime({});\n }\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month, 1-indexed\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local({ zone: \"America/New_York\" }) //~> now, in US east coast time\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12, { locale: \"fr\" }) //~> 2017-03-12T00:00:00, with a French locale\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" }) //~> 2017-03-12T05:00:00, in UTC\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @param {Object} options - configuration options for the DateTime\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" }) //~> 2017-03-12T05:45:00Z with a French locale\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n * @return {DateTime}\n */\n static utc() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n\n opts.zone = FixedOffsetZone.utcInstance;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime from a JavaScript Date object. Uses the default zone.\n * @param {Date} date - a JavaScript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options),\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.localWeekYear - a week year, according to the locale\n * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {Object} opts - options for creating this DateTime\n * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [opts.locale='system\\'s locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n * @return {DateTime}\n */\n static fromObject(obj, opts = {}) {\n obj = obj || {};\n const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const loc = Locale.fromObject(opts);\n const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc);\n\n const tsNow = Settings.now(),\n offsetProvis = !isUndefined(opts.specificOffset)\n ? opts.specificOffset\n : zoneToUse.offset(tsNow),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc,\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n if (!inst.isValid) {\n return DateTime.invalid(inst.invalid);\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n }),\n [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is an instance of DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n /**\n * Produce the format string for a set of options\n * @param formatOpts\n * @param localeOpts\n * @returns {string}\n */\n static parseFormatForOpts(formatOpts, localeOpts = {}) {\n const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n }\n\n /**\n * Produce the the fully expanded format token for the locale\n * Does NOT quote characters, so quoted tokens will not round trip correctly\n * @param fmt\n * @param localeOpts\n * @returns {string}\n */\n static expandFormat(fmt, localeOpts = {}) {\n const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n return expanded.map((t) => t.val).join(\"\");\n }\n\n static resetCache() {\n zoneOffsetTs = undefined;\n zoneOffsetGuessCache = {};\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Returns true if this date is on a weekend according to the locale, false otherwise\n * @returns {boolean}\n */\n get isWeekend() {\n return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n }\n\n /**\n * Get the day of the week according to the locale.\n * 1 is the first day of the week and 7 is the last day of the week.\n * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n * @returns {number}\n */\n get localWeekday() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n * because the week can start on different days of the week (see localWeekday) and because a different number of days\n * is required for a week to count as the first week of a year.\n * @returns {number}\n */\n get localWeekNumber() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n * differently, see localWeekNumber.\n * @returns {number}\n */\n get localWeekYear() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.now().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.isUniversal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1, day: 1 }).offset ||\n this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n * @returns {DateTime[]}\n */\n getPossibleOffsets() {\n if (!this.isValid || this.isOffsetFixed) {\n return [this];\n }\n const dayMs = 86400000;\n const minuteMs = 60000;\n const localTS = objToLocalTS(this.c);\n const oEarlier = this.zone.offset(localTS - dayMs);\n const oLater = this.zone.offset(localTS + dayMs);\n\n const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n const o2 = this.zone.offset(localTS - oLater * minuteMs);\n if (o1 === o2) {\n return [this];\n }\n const ts1 = localTS - o1 * minuteMs;\n const ts2 = localTS - o2 * minuteMs;\n const c1 = tsToObj(ts1, o1);\n const c2 = tsToObj(ts2, o2);\n if (\n c1.hour === c2.hour &&\n c1.minute === c2.minute &&\n c1.second === c2.second &&\n c1.millisecond === c2.millisecond\n ) {\n return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n }\n return [this];\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's local week year\n * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n * @type {number}\n */\n get weeksInLocalWeekYear() {\n return this.isValid\n ? weeksInWeekYear(\n this.localWeekYear,\n this.loc.getMinDaysInFirstWeek(),\n this.loc.getStartOfWeek()\n )\n : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOptions(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link DateTime#setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n *\n * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n * They cannot be mixed with ISO-week units like `weekday`.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc);\n\n const settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian(\n { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized },\n minDaysInFirstWeek,\n startOfWeek\n );\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n } else {\n mixed = { ...this.toObject(), ...normalized };\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.now().plus(123) //~> in 123 milliseconds\n * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link DateTime#plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit, { useLocaleWeeks = false } = {}) {\n if (!this.isValid) return this;\n\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n if (useLocaleWeeks) {\n const startOfWeek = this.loc.getStartOfWeek();\n const { weekday } = this;\n if (weekday < startOfWeek) {\n o.weekNumber = this.weekNumber - 1;\n }\n o.weekday = startOfWeek;\n } else {\n o.weekday = 1;\n }\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit, opts) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit, opts)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.now().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @return {string}\n */\n toISO({\n format = \"extended\",\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset = true,\n extendedZone = false,\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n const ext = format === \"extended\";\n\n let c = toISODate(this, ext);\n c += \"T\";\n c += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone);\n return c;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @return {string}\n */\n toISODate({ format = \"extended\" } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return toISODate(this, format === \"extended\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n includePrefix = false,\n extendedZone = false,\n format = \"extended\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n let c = includePrefix ? \"T\" : \"\";\n return (\n c +\n toISOTime(\n this,\n format === \"extended\",\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone\n )\n );\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string}\n */\n toSQLDate() {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n let fmt = \"HH:mm:ss.SSS\";\n\n if (includeZone || includeOffset) {\n if (includeOffsetSpace) {\n fmt += \" \";\n }\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += \"ZZ\";\n }\n }\n\n return toTechFormat(this, fmt, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n } else {\n return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns the epoch seconds (as a whole number) of this DateTime.\n * @return {number}\n */\n toUnixInteger() {\n return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = { ...this.c };\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a JavaScript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\"created by diffing an invalid DateTime\");\n }\n\n const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link DateTime#diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.now(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime.\n * Higher-order units must also be identical for this function to return `true`.\n * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\n * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit, opts) {\n if (!this.isValid) return false;\n\n const inputMs = otherDateTime.valueOf();\n const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n return (\n adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts)\n );\n }\n\n /**\n * Equality check\n * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n let unit = options.unit;\n if (Array.isArray(options.unit)) {\n units = options.unit;\n unit = undefined;\n }\n return diffRelative(base, this.plus(padding), {\n ...options,\n numeric: \"always\",\n units,\n unit,\n });\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n ...options,\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true,\n });\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n /**\n * Build a parser for `fmt` using the given locale. This parser can be passed\n * to {@link DateTime.fromFormatParser} to a parse a date in this format. This\n * can be used to optimize cases where many dates need to be parsed in a\n * specific format.\n *\n * @param {String} fmt - the format the string is expected to be in (see\n * description)\n * @param {Object} options - options used to set locale and numberingSystem\n * for parser\n * @returns {TokenParser} - opaque object to be used\n */\n static buildFormatParser(fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return new TokenParser(localeToUse, fmt);\n }\n\n /**\n * Create a DateTime from an input string and format parser.\n *\n * The format parser must have been created with the same locale as this call.\n *\n * @param {String} text - the string to parse\n * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser}\n * @param {Object} opts - options taken by fromFormat()\n * @returns {DateTime}\n */\n static fromFormatParser(text, formatParser, opts = {}) {\n if (isUndefined(text) || isUndefined(formatParser)) {\n throw new InvalidArgumentError(\n \"fromFormatParser requires an input string and a format parser\"\n );\n }\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n\n if (!localeToUse.equals(formatParser.locale)) {\n throw new InvalidArgumentError(\n `fromFormatParser called with a locale of ${localeToUse}, ` +\n `but the format parser was created for ${formatParser.locale}`\n );\n }\n\n const { result, zone, specificOffset, invalidReason } = formatParser.explainFromTokens(text);\n\n if (invalidReason) {\n return DateTime.invalid(invalidReason);\n } else {\n return parseDataToDateTime(\n result,\n zone,\n opts,\n `format ${formatParser.format}`,\n text,\n specificOffset\n );\n }\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link DateTime#toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED_WITH_WEEKDAY() {\n return Formats.DATE_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n","import { DateTime } from 'luxon'\nimport { ref, type Ref } from 'vue'\n\nexport const EXTRAS_HOLOGRAM_MODE = ref(true)\nexport const EXTRAS_SPECIAL_DAYS = ref(true)\nexport const EXTRAS_CAT_MODE: Ref = ref(false)\n\nexport type SpecialDayInfo = { emoji: string[]; translationKey: string; overlayMode?: number }\n\nexport function uwuifyPath(path: string): string {\n if (!EXTRAS_CAT_MODE.value) return path\n return path + '?uwu'\n}\n\n// prettier-ignore\nexport function checkSpecialDay(): SpecialDayInfo | undefined {\n const now = DateTime.now()\n if (now.month === 1 && now.day === 1) return { emoji: ['noto:confetti-ball'], translationKey: 'extras.day_newyear' }\n if (now.month === 2 && now.day === 14) return { emoji: ['noto:heart-with-arrow'], translationKey: 'extras.day_valentines' }\n if (now.month === 2 && now.day === 27) return { emoji: ['noto:strawberry'], translationKey: 'extras.day_strawberry' }\n if (now.month === 3 && now.day === 14) return { emoji: ['noto:pie'], translationKey: 'extras.day_pi' }\n if (now.month === 3 && now.day === 31) return { emoji: ['noto:transgender-flag'], translationKey: 'extras.day_transvisibility' }\n if (now.month === 4 && now.day === 1) return { emoji: ['noto:eye'], translationKey: 'extras.overlay1', overlayMode: 1 }\n if (now.month === 4 && now.day === 6) return { emoji: ['noto:purple-heart', 'noto:white-heart'], translationKey: 'extras.day_acevisibility' }\n if (now.month === 4 && now.day === 26) return { emoji: ['noto:orange-heart', 'noto:red-heart'], translationKey: 'extras.day_lesbianvisibility' }\n if (now.month === 5 && now.day === 19) return { emoji: ['noto:grey-heart', 'noto:green-heart'], translationKey: 'extras.day_agenderawareness' }\n if (now.month === 5 && now.day === 24) return { emoji: ['noto:revolving-hearts'], translationKey: 'extras.day_panawareness' }\n if (now.month === 6 && now.day === 5) return { emoji: ['noto:green-heart', 'noto:white-heart'], translationKey: 'extras.day_arovisibility' }\n if (now.month === 6) return { emoji: ['noto:rainbow-flag'], translationKey: 'extras.month_pride' }\n if (now.month === 7 && now.day === 14) return { emoji: ['noto:yellow-heart', 'noto:purple-heart'], translationKey: 'extras.day_nonbinary' }\n if (now.month === 7 && now.day === 16) return { emoji: ['noto:ringed-planet', 'noto:birthday-cake'], translationKey: 'extras.day_firstrelease' }\n if (now.month === 9 && now.day >= 16 && now.day <= 22) return { emoji: ['noto:crystal-ball'], translationKey: 'extras.week_biawareness' }\n if (now.month === 9 && now.day === 23) return { emoji: ['noto:crystal-ball'], translationKey: 'extras.day_biawareness' }\n if (now.month === 10 && now.day === 8) return { emoji: ['noto:orange-heart', 'noto:red-heart'], translationKey: 'extras.day_lesbian' }\n if (now.month === 10 && now.day === 11) return { emoji: ['noto:party-popper'], translationKey: 'extras.day_comingout' }\n if (now.month === 10 && now.day >= 17 && now.day <= 24) return { emoji: ['noto:blue-heart', 'noto:pink-heart'], translationKey: 'extras.week_genderfluidvisibility' }\n if (now.month === 10 && now.day === 26) return { emoji: ['noto:yellow-circle'], translationKey: 'extras.day_intersexawareness' }\n if (now.month === 10 && now.day === 31) return { emoji: ['noto:jack-o-lantern'], translationKey: 'extras.day_halloween' }\n if (now.month === 11 && now.day === 8) return { emoji: ['noto:yellow-circle', 'noto:wilted-flower'], translationKey: 'extras.day_intersexremembrance' }\n if (now.month === 11 && now.day >= 13 && now.day <= 19) return { emoji: ['noto:transgender-flag'], translationKey: 'extras.week_transawareness' }\n if (now.month === 11 && now.day === 20) return { emoji: ['noto:transgender-flag', 'noto:wilted-flower'], translationKey: 'extras.day_transremembrance' }\n if (now.month === 11 && now.day === 23) return { emoji: ['noto:infinity'], translationKey: 'extras.day_polyamory' }\n return undefined\n}\n\nexport function getSpecialOverlay(mode?: number): { [key: string]: boolean } | undefined {\n if (!mode) return\n switch (mode) {\n case 1:\n return { 'overlay-1': true }\n }\n return undefined\n}\n","\n \n \n \n {{ $t('dialog.settings.$title') }}\n \n \n \n \n {{ $t('dialog.settings.general') }}\n \n \n \n \n \n {{ $t('dialog.settings.general_language') }}\n \n Uwuish [en-UwU]\n \n \n \n {{ $t('dialog.settings.general_language') }}\n \n English [en-US]\n Français [fr-FR]\n Deutsch [de-DE]\n {{ $t('main.more_coming_soon') }}\n \n \n \n {{ $t('dialog.settings.general_font') }}:\n \n {{ $t('dialog.settings.general_font_default') }}\n {{ $t('dialog.settings.general_font_monospace') }}\n {{ $t('dialog.settings.general_font_lowvision') }}\n {{ $t('dialog.settings.general_font_dyslexia') }}\n \n \n \n {{ $t('dialog.settings.general_theme') }}: \n \n \n {{ $t('dialog.settings.general_theme_default') }}\n \n \n {{ $t('dialog.settings.general_theme_supernova') }}\n \n \n {{ $t('dialog.settings.general_theme_voyager') }}\n \n \n \n \n \n {{ $t('dialog.settings.general_init_dialog') }}:\n \n \n \n \n\n \n \n {{ $t('dialog.settings.editor') }}\n \n \n \n \n \n {{ $t('dialog.settings.editor_lensflare') }}\n \n \n {{ $t('dialog.settings.editor_biomes') }}\n \n \n {{ $t('dialog.settings.editor_clouds') }}\n \n \n {{ $t('dialog.settings.editor_atmosphere') }}\n \n \n {{ $t('dialog.settings.editor_screenshot') }}\n \n \n \n {{ $t('dialog.settings.editor_baking_resolution') }}: \n \n 256\n 512\n 1024\n 2048\n 4096\n \n \n \n {{ $t('dialog.settings.editor_baking_pixelize') }}:\n \n \n \n \n \n\n \n \n {{ $t('dialog.settings.a11y') }}\n \n \n \n \n \n {{ $t('dialog.settings.a11y_effects') }}:\n \n \n {{ $t('dialog.settings.a11y_animations') }}:\n \n \n \n \n \n\n \n \n {{ $t('dialog.settings.extras') }}\n \n \n \n \n \n {{ $t('dialog.settings.extras_hologram_mode') }}:\n \n \n {{ $t('dialog.settings.extras_special_days') }}:\n \n \n \n \n \n\n \n \n {{ $t('dialog.settings.advanced') }}\n \n \n \n \n {{ $t('dialog.settings.advanced_persist') }}:\n \n {{\n $t(\n 'dialog.settings.advanced_persist_' +\n (persistStorage ? 'success' : failedToPersist ? 'failure' : 'prompt'),\n )\n }}\n \n \n {{ $t('dialog.settings.advanced_persist_info') }}\n \n \n {{ $t('dialog.settings.advanced_danger_zone') }}\n \n \n \n \n {{ $t('dialog.settings.advanced_clear_data') }}\n \n \n \n \n \n \n \n \n \n\n\n\n\n\n","\n \n 1, ...getSpecialOverlay(specialDay!.overlayMode) }\"\n >\n \n \n \n\n\n\n\n\n","\n \n \n \n\n\n\n\n\n","\n \n \n \n \n \n \n \n \n \n \n {{ $t('dialog.init.$title') }}!\n \n \n {{ $t('dialog.init.introduction') }}\n \n \n\n \n {{ $t('dialog.init.update_title') }}\n \n {{ $t('dialog.init.update_brief') }}\n \n \n \n {{ $t('dialog.init.$tmp_wip') }}\n \n \n \n\n \n {{ $t('dialog.init.shortcuts') }}\n \n \n {{ $t('dialog.init.shortcuts_note') }}\n \n ()\n \n \n \n \n {{ keybinds[0]?.key }}\n {{ $t('dialog.init.shortcuts_lensflare') }}\n \n \n {{ keybinds[1]?.key }}\n {{ $t('dialog.init.shortcuts_biomes') }}\n \n \n {{ keybinds[2]?.key }}\n {{ $t('dialog.init.shortcuts_clouds') }}\n \n \n {{ keybinds[3]?.key }}\n {{ $t('dialog.init.shortcuts_atmosphere') }}\n \n \n {{ keybinds[4]?.key }}\n {{ $t('dialog.init.shortcuts_screenshot') }}\n \n \n \n \n\n \n {{ $t('dialog.init.topbar') }}\n \n \n \n \n {{ $t('dialog.init.topbar_rename') }}\n \n \n \n {{ $t('dialog.init.topbar_reset') }}\n \n \n \n {{ $t('dialog.init.topbar_save') }}\n \n \n \n {{ $t('dialog.init.topbar_copy') }}\n \n \n \n {{ $t('dialog.init.topbar_gltf') }}\n \n \n \n {{ $t('dialog.init.topbar_import') }}\n \n \n \n {{ $t('dialog.init.topbar_export_all') }}\n \n \n \n \n\n \n {{ $t('dialog.init.footer') }}\n \n \n \n \n {{ $t('dialog.init.footer_about') }}\n \n \n \n {{ $t('dialog.init.footer_settings') }}\n \n \n \n {{ $t('dialog.init.footer_github') }}\n \n \n \n \n\n \n \n {{ $t('dialog.init.enable_persistence') }}\n \n \n \n {{ $t('dialog.init.show_next_time') }}\n \n \n \n \n \n \n \n \n {{ $t('dialog.init.$action_confirm') }}\n \n \n \n\n\n\n\n\n","\n \n \n \n \n \n \n \n \n TOAST_MESSAGE\n \n \n \n \n \n\n\n\n\n\n","\n \n \n {{ $t(toastMessageRaw) }}\n \n \n\n\n\n\n\n","\n \n \n \n \n \n \n\n\n\n\n\n","\n \n \n \n \n \n \n \n \n \n {{ planet.data.planetName }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n","\n \n \n \n \n \n\n \n \n \n \n \n\n\n\n\n\n","\n \n \n \n \n \n\n\n\n\n\n","\n \n \n \n {{ $t('dialog.planetinfo.$title') }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ $t('dialog.planetinfo.name') }}:\n {{ planet?.data.planetName }}\n \n \n {{ $t('dialog.planetinfo.radius') }}:\n \n {{ planet?.data.planetRadius }}\n {{ planet?.data.planetRadius !== 1 ? $t('main.units') : $t('main.unit') }}\n \n \n \n {{ $t('dialog.planetinfo.axialtilt') }}:\n {{ planet?.data.planetAxialTilt }}°\n \n \n {{ $t('dialog.planetinfo.atmospheric') }}:\n \n \n \n \n \n \n {{ $t('dialog.planetinfo.clouded') }}:\n \n \n \n \n \n \n {{ $t('dialog.planetinfo.ringed') }}:\n \n \n \n \n \n \n \n \n \n \n \n \n 0\">\n {{ $t('dialog.planetinfo.biomes') }}\n \n \n \n {{ $t('dialog.planetinfo.biomes_temp') }}:\n {{ $t(getMode(planet?.data.biomesTemperatureMode)).toLocaleLowerCase() }}\n \n \n {{ $t('dialog.planetinfo.biomes_humi') }}:\n {{ $t(getMode(planet?.data.biomesHumidityMode)).toLocaleLowerCase() }}\n \n \n \n \n \n \n \n \n {{ $t('dialog.planetinfo.biomes_temp') }} -\n {{ $t(getMode(planet?.data.biomesTemperatureMode)).toLocaleLowerCase() }} \n \n \n {{ $t('dialog.planetinfo.biomes_humi') }} -\n {{ $t(getMode(planet?.data.biomesHumidityMode)).toLocaleLowerCase() }} \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ $t('dialog.planetinfo.biomes_none') }}\n \n \n \n \n\n\n\n\n","\n \n \n \n {{ $t('dialog.delete.$title', { planet }) }}\n \n \n \n {{ $t('dialog.delete.message') }}\n \n {{ $t('dialog.delete.warning') }}\n \n \n \n \n \n \n {{ $t('dialog.delete.$action_cancel') }}\n \n \n \n {{ $t('dialog.delete.$action_confirm') }}\n \n \n \n\n\n\n\n","export abstract class ChangeTracker {\n protected _changedProps: ChangedProp[] = []\n protected _changePrefix: string = ''\n\n public get changedProps() {\n return this._changedProps\n }\n public markForChange(prop: string, oldValue?: ChangedPropPair, newValue?: ChangedPropPair) {\n this._changedProps.push({ prop, oldValue, newValue })\n }\n public clearChangedProps() {\n this._changedProps.splice(0)\n }\n\n constructor(changedPropsRef?: ChangedProp[], changePrefix?: string) {\n if (changedPropsRef && changePrefix) {\n this._changedProps = changedPropsRef\n this._changePrefix = changePrefix\n }\n }\n}\n\nexport type ChangedPropPair = {\n key: string\n value: string | number | boolean | object\n}\nexport type ChangedProp = {\n prop: string\n oldValue?: ChangedPropPair\n newValue?: ChangedPropPair\n}\n","export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","import { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << Math.log2(alphabet.length - 1)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step | 0\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n","// A port of an algorithm by Johannes Baagøe , 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baagøe \n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n var me = this, mash = Mash();\n\n me.next = function() {\n var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n me.s0 = me.s1;\n me.s1 = me.s2;\n return me.s2 = t - (me.c = t | 0);\n };\n\n // Apply the seeding algorithm from Baagoe.\n me.c = 1;\n me.s0 = mash(' ');\n me.s1 = mash(' ');\n me.s2 = mash(' ');\n me.s0 -= mash(seed);\n if (me.s0 < 0) { me.s0 += 1; }\n me.s1 -= mash(seed);\n if (me.s1 < 0) { me.s1 += 1; }\n me.s2 -= mash(seed);\n if (me.s2 < 0) { me.s2 += 1; }\n mash = null;\n}\n\nfunction copy(f, t) {\n t.c = f.c;\n t.s0 = f.s0;\n t.s1 = f.s1;\n t.s2 = f.s2;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new Alea(seed),\n state = opts && opts.state,\n prng = xg.next;\n prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n prng.double = function() {\n return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n };\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nfunction Mash() {\n var n = 0xefc8249d;\n\n var mash = function(data) {\n data = String(data);\n for (var i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n var h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n\n return mash;\n}\n\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.alea = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n\n // Set up generator function.\n me.next = function() {\n var t = me.x ^ (me.x << 11);\n me.x = me.y;\n me.y = me.z;\n me.z = me.w;\n return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n };\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor128 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var t = (me.x ^ (me.x >>> 2));\n me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n return (me.d = (me.d + 362437 | 0)) +\n (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n };\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n me.v = 0;\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n if (k == strseed.length) {\n me.d = me.x << 10 ^ me.x >>> 4;\n }\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n t.v = f.v;\n t.d = f.d;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorwow = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xorshift7\" algorithm by\n// François Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n // Update xor generator.\n var X = me.x, i = me.i, t, v, w;\n t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n X[i] = v;\n me.i = (i + 1) & 7;\n return v;\n };\n\n function init(me, seed) {\n var j, w, X = [];\n\n if (seed === (seed | 0)) {\n // Seed state array using a 32-bit integer.\n w = X[0] = seed;\n } else {\n // Seed state using a string.\n seed = '' + seed;\n for (j = 0; j < seed.length; ++j) {\n X[j & 7] = (X[j & 7] << 15) ^\n (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n }\n }\n // Enforce an array length of 8, not all zeroes.\n while (X.length < 8) X.push(0);\n for (j = 0; j < 8 && X[j] === 0; ++j);\n if (j == 8) w = X[7] = -1; else w = X[j];\n\n me.x = X;\n me.i = 0;\n\n // Discard an initial 256 values.\n for (j = 256; j > 0; --j) {\n me.next();\n }\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.x = f.x.slice();\n t.i = f.i;\n return t;\n}\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.x) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorshift7 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n","// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated. For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1); // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897); // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C. This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n var w = me.w,\n X = me.X, i = me.i, t, v;\n // Update Weyl generator.\n me.w = w = (w + 0x61c88647) | 0;\n // Update xor generator.\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n // Update Xor generator array state.\n v = X[i] = v ^ t;\n me.i = i;\n // Result is the combination.\n return (v + (w ^ (w >>> 16))) | 0;\n };\n\n function init(me, seed) {\n var t, v, i, j, w, X = [], limit = 128;\n if (seed === (seed | 0)) {\n // Numeric seeds initialize v, which is used to generates X.\n v = seed;\n seed = null;\n } else {\n // String seeds are mixed into v and X one character at a time.\n seed = seed + '\\0';\n v = 0;\n limit = Math.max(limit, seed.length);\n }\n // Initialize circular array and weyl value.\n for (i = 0, j = -32; j < limit; ++j) {\n // Put the unicode characters into the array, and shuffle them.\n if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n // After 32 shuffles, take v as the starting w value.\n if (j === 0) w = v;\n v ^= v << 10;\n v ^= v >>> 15;\n v ^= v << 4;\n v ^= v >>> 13;\n if (j >= 0) {\n w = (w + 0x61c88647) | 0; // Weyl.\n t = (X[j & 127] ^= (v + w)); // Combine xor and weyl to init array.\n i = (0 == t) ? i + 1 : 0; // Count zeroes.\n }\n }\n // We have detected all zeroes; make the key nonzero.\n if (i >= 128) {\n X[(seed && seed.length || 0) & 127] = -1;\n }\n // Run the generator 512 times to further mix the state before using it.\n // Factoring this as a function slows the main generator, so it is just\n // unrolled here. The weyl generator is not advanced while warming up.\n i = 127;\n for (j = 4 * 128; j > 0; --j) {\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n X[i] = v ^ t;\n }\n // Storing state as object members is faster than using closure variables.\n me.w = w;\n me.X = X;\n me.i = i;\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.i = f.i;\n t.w = f.w;\n t.X = f.X.slice();\n return t;\n};\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.X) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor4096 = impl;\n}\n\n})(\n this, // window object or global\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n","// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var b = me.b, c = me.c, d = me.d, a = me.a;\n b = (b << 25) ^ (b >>> 7) ^ c;\n c = (c - d) | 0;\n d = (d << 24) ^ (d >>> 8) ^ a;\n a = (a - b) | 0;\n me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n me.c = c = (c - d) | 0;\n me.d = (d << 16) ^ (c >>> 16) ^ a;\n return me.a = (a - b) | 0;\n };\n\n /* The following is non-inverted tyche, which has better internal\n * bit diffusion, but which is about 25% slower than tyche-i in JS.\n me.next = function() {\n var a = me.a, b = me.b, c = me.c, d = me.d;\n a = (me.a + me.b | 0) >>> 0;\n d = me.d ^ a; d = d << 16 ^ d >>> 16;\n c = me.c + d | 0;\n b = me.b ^ c; b = b << 12 ^ d >>> 20;\n me.a = a = a + b | 0;\n d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n me.c = c = c + d | 0;\n b = b ^ c;\n return me.b = (b << 7 ^ b >>> 25);\n }\n */\n\n me.a = 0;\n me.b = 0;\n me.c = 2654435769 | 0;\n me.d = 1367130551;\n\n if (seed === Math.floor(seed)) {\n // Integer seed.\n me.a = (seed / 0x100000000) | 0;\n me.b = seed | 0;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 20; k++) {\n me.b ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.a = f.a;\n t.b = f.b;\n t.c = f.c;\n t.d = f.d;\n return t;\n};\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.tychei = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","export default {}","/*\nCopyright 2019 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (global, pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\n\nvar width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n var key = [];\n options = (options == true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed == null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; }\n prng.quick = function() { return arc4.g(4) / 0x100000000; }\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); }\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n}\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n (me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n try {\n var out;\n if (nodecrypto && (out = nodecrypto.randomBytes)) {\n // The use of 'out' to remember randomBytes makes tight minified code.\n out = out(width);\n } else {\n out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n }\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date, global, plugins, global.screen, tostring(pool)];\n }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n module.exports = seedrandom;\n // When in node.js, try using crypto package for autoseeding.\n try {\n nodecrypto = require('crypto');\n } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n define(function() { return seedrandom; });\n} else {\n // When included as a plain script, set up Math.seedrandom global.\n math['seed' + rngname] = seedrandom;\n}\n\n\n// End anonymous scope, and pass initial values.\n})(\n // global: `self` in browsers (including strict mode and web workers),\n // otherwise `this` in Node and other environments\n (typeof self !== 'undefined') ? self : this,\n [], // pool: entropy pool starts empty\n Math // math: package containing random, pow, and seedrandom\n);\n","// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random(); // 0 <= x < 1. Every bit is random.\n// var x = random.quick(); // 0 <= x < 1. 32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baagøe.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by François Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three. It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures. Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n","import type { RawRGBA, Rect } from '@/core/types'\nimport seedrandom from 'seedrandom'\nimport { ref, type Ref } from 'vue'\n\nlet currentPRNGSeed = Math.random().toString().substring(2)\n\n// @ts-expect-error Type definitions missing in 'seedrandom' package\nexport const PRNG: Ref = ref(new seedrandom.alea(currentPRNGSeed))\nexport const PRNG_SEED: Ref = ref(currentPRNGSeed)\n\nexport function regenerateSeed() {\n PRNG_SEED.value = Math.random().toString().substring(2)\n}\nexport function regeneratePRNGIfNecessary(force?: boolean): void {\n if (!force && PRNG_SEED.value === currentPRNGSeed) {\n return\n }\n const s: string = PRNG_SEED.value\n PRNG.value = seedrandom.alea(s)\n PRNG_SEED.value = s\n currentPRNGSeed = s\n}\nexport function clampedPRNG(min: number, max: number, precision: number = 3): number {\n const v = PRNG.value()\n return Number(((max - min) * v + min).toPrecision(precision))\n}\n\n/**\n * Simple numeric checking function.\n * @param n the object to check\n * @returns `true` if `n` is a number or can be interpreted as a number (excluding empty values), `false` otherwise\n */\nexport function isNumeric(n: string | number | boolean): boolean {\n if (['number'].includes(typeof n)) {\n return true\n } else if (!n) {\n return false\n }\n return !isNaN(Number(n))\n}\n\n/**\n * Simple average function\n * @param values the values to average\n * @returns the average of the given values\n */\nexport function avg(...values: number[]) {\n if (values.length === 0) {\n return 0\n }\n return values.reduce((prev, cur) => prev + cur, 0) / values.length\n}\n\n/**\n * Simple float truncating function\n * @param a the number to truncate\n * @param multPrecision the precision as an integer (e.g. 10000 => .toFixed(4))\n */\nexport function truncateTo(a: number, multPrecision: number): number {\n return Math.trunc(a * multPrecision) / multPrecision\n}\n\n/**\n * Mixes two RGBA colours with their alpha components\n * @see https://stackoverflow.com/questions/726549/algorithm-for-additive-color-mixing-for-rgb-values\n * @param c1 first color in RGBA form (0-1)\n * @param c2 second color in RGBA form (0-1)\n * @returns the alpha-blended color in RGBA form (0-1)\n */\nexport function alphaBlendColors(c1: RawRGBA, c2: RawRGBA): RawRGBA {\n return {\n r: mixRawRGBAChannel(c1.r, c2.r, c1.a, c2.a),\n g: mixRawRGBAChannel(c1.g, c2.g, c1.a, c2.a),\n b: mixRawRGBAChannel(c1.b, c2.b, c1.a, c2.a),\n a: mixRawRGBAAlpha(c1.a, c2.a),\n }\n}\nfunction mixRawRGBAChannel(c1: number, c2: number, a1: number, a2: number) {\n return (c1 * a1 + c2 * a2 * (1 - a1)) / mixRawRGBAAlpha(a1, a2)\n}\nfunction mixRawRGBAAlpha(a1: number, a2: number) {\n return a1 + a2 * (1 - a1)\n}\n\n/**\n * Flips a UInt8Array's pixels vertically to have a normalized +X/+Y image\n * @param buffer the data buffer\n * @param w width of the resulting image\n * @param h height of the resulting image\n * @returns\n */\nexport function normalizeUInt8ArrayPixels(buffer: Uint8Array, w: number, h: number): Uint8Array {\n const length = w * h * 4\n const row = w * 4\n const end = (h - 1) * row\n const result = new Uint8Array(length)\n\n for (let i = 0; i < length; i += row) {\n result.set(buffer.subarray(i, i + row), end - i)\n }\n return result\n}\n\n/**\n * Checks if a given point is withing a rect\n * @param rect the rect to check on\n * @param x point x\n * @param y point y\n * @returns true if the given point is within the rect, false otherwise\n */\nexport function isWithinRect(rect: Rect, x: number, y: number): boolean {\n return x >= rect.x && y >= rect.y && x < rect.x + rect.w && y < rect.y + rect.h\n}\n\n/**\n * Finds overlaps on a given w*h plane's borders with a given Rect\n * @param w total plane width\n * @param h total plane height\n * @param rect rect to check overlaps on\n * @returns an array containing overlaps for the top, right, bottom & left sides, in that order\n */\nexport function findRectOverlaps(w: number, h: number, rect: Rect): number[] {\n const borderOverlaps = [0, 0, 0, 0]\n borderOverlaps[0] = rect.y === 0 ? 1 : 0\n borderOverlaps[1] = rect.x + rect.w >= w ? 1 : 0\n borderOverlaps[2] = rect.y + rect.h >= h ? 1 : 0\n borderOverlaps[3] = rect.x === 0 ? 1 : 0\n return borderOverlaps\n}\n\n/**\n * Finds the nearest point on a rect from the given (x,y) coordinates within that rect\n * @param rect the rect to find the point on\n * @param x point x\n * @param y point y\n * @returns the coordinates of the nearest rect point from (x,y)\n */\nexport function findMinDistanceToRect(rect: Rect, x: number, y: number, overlaps: number[]): number {\n return Math.min(\n overlaps[3] > 0 ? 1e3 : x - rect.x,\n overlaps[0] > 0 ? 1e3 : y - rect.y,\n overlaps[1] > 0 ? 1e3 : rect.x + rect.w - x,\n overlaps[2] > 0 ? 1e3 : rect.y + rect.h - y,\n )\n}\n","export const bufferToHex = buffer => {\n\tconst view = new DataView(buffer);\n\n\tlet hexCodes = '';\n\tfor (let index = 0; index < view.byteLength; index += 4) {\n\t\thexCodes += view.getUint32(index).toString(16).padStart(8, '0');\n\t}\n\n\treturn hexCodes;\n};\n","import {bufferToHex} from './utilities.js';\n\nconst create = algorithm => async (buffer, {outputFormat = 'hex'} = {}) => {\n\tif (typeof buffer === 'string') {\n\t\tbuffer = new globalThis.TextEncoder().encode(buffer);\n\t}\n\n\tconst hash = await globalThis.crypto.subtle.digest(algorithm, buffer);\n\n\treturn outputFormat === 'hex' ? bufferToHex(hash) : hash;\n};\n\nexport const sha1 = create('SHA-1');\nexport const sha256 = create('SHA-256');\nexport const sha384 = create('SHA-384');\nexport const sha512 = create('SHA-512');\n","import * as THREE from 'three'\nimport { ChangeTracker, type ChangedProp } from './change-tracker.model'\nimport { nanoid } from 'nanoid'\nimport { clampedPRNG } from '@/utils/math-utils'\nimport { sha1 } from 'crypto-hash'\n\nexport type StepLuminance = { factor: number; lumi: number }\nexport class ColorRampStep {\n static EMPTY = new ColorRampStep(0x0, 1)\n\n private _id: string // internal ID for tracking changes\n private _color: THREE.Color\n private _alpha: number\n private _factor: number\n private _isBound: boolean\n\n constructor(color: THREE.ColorRepresentation, factor: number, isBound: boolean = false) {\n this._id = nanoid()\n this._color = new THREE.Color(color)\n this._alpha = 1.0\n this._factor = factor\n this._isBound = isBound\n }\n\n static newWithAlpha(\n color: THREE.ColorRepresentation,\n alpha: number,\n factor: number,\n isBound: boolean = false,\n ): ColorRampStep {\n const step = new ColorRampStep(color, factor, isBound)\n step.alpha = alpha ?? 1.0\n return step\n }\n\n clone(): ColorRampStep {\n return ColorRampStep.newWithAlpha(this._color, this._alpha, this._factor, this._isBound)\n }\n\n public get id() {\n return this._id\n }\n\n public get color() {\n return this._color\n }\n public set color(color: THREE.Color) {\n this._color = color\n }\n\n public get alpha(): number {\n return this._alpha\n }\n public set alpha(value: number) {\n this._alpha = value\n }\n public get factor() {\n return this._factor\n }\n public set factor(factor: number) {\n this._factor = factor\n }\n public get isBound(): boolean {\n return this._isBound\n }\n}\n\nexport class ColorRamp extends ChangeTracker {\n static EMPTY = new ColorRamp([], '', [])\n\n private _hash: string = '' // internal hash for tracking changes\n private _steps: ColorRampStep[] = []\n private _maxSize: number = 16\n private _lockedSize: boolean = true\n\n constructor(\n changedPropsRef: ChangedProp[],\n changePrefix: string,\n steps: ColorRampStep[],\n maxSize: number = 16,\n lockedSize = false,\n ) {\n super(changedPropsRef, changePrefix)\n this._maxSize = maxSize\n this._steps = steps\n this._lockedSize = lockedSize\n this.markForChange(this._changePrefix)\n }\n\n clone(): ColorRamp {\n const clonedSteps: ColorRampStep[] = []\n this.steps.forEach((s) => clonedSteps.push(s.clone()))\n return new ColorRamp([], this._changePrefix, clonedSteps, this._maxSize, this._lockedSize)\n }\n\n public get hash(): string {\n return this._hash\n }\n\n public get steps(): ColorRampStep[] {\n return this._steps\n }\n\n public get maxSize() {\n return this._maxSize\n }\n public get lockedSize(): boolean {\n return this._lockedSize\n }\n public set lockedSize(value: boolean) {\n this._lockedSize = value\n }\n\n // Utility functions\n\n private async generateHash() {\n this._hash = await sha1(JSON.stringify(this))\n }\n\n public sortSteps() {\n this._steps.sort((a, b) => a.factor - b.factor)\n this.markForChange(this._changePrefix)\n this.generateHash()\n }\n\n public addStep() {\n if (this._steps.length >= this._maxSize - 1) {\n throw new Error('(ColorRamp) Maximum size reached')\n }\n this._steps.push(new ColorRampStep('black', this._steps[this._steps.length - 2].factor))\n this.sortSteps()\n this.markForChange(this._changePrefix)\n this.generateHash()\n }\n\n public getStep(stepId: string) {\n const index = this._steps.findIndex((s) => s.id === stepId)\n if (index === -1) {\n throw new Error('Cannot find step with ID ' + stepId)\n }\n return this._steps[index]\n }\n\n public updateStep(id: string, options: { color?: string; factor?: number; alpha?: number }) {\n const index = this._steps.findIndex((s) => s.id === id)\n if (index === -1) {\n throw new Error('Cannot find step with ID ' + id)\n }\n\n this._steps[index].color.set(options.color ? options.color : this._steps[index].color)\n this._steps[index].alpha = options.alpha ?? this._steps[index].alpha\n this._steps[index].factor = options.factor ?? this._steps[index].factor\n this.markForChange(this._changePrefix)\n this.generateHash()\n }\n\n public removeStep(stepId: string) {\n if (this.isBoundStep(stepId)) {\n console.warn('(ColorRamp) Cannot delete ramp bounds! (factor=0|1)')\n return\n }\n const index = this._steps.findIndex((s) => s.id === stepId)\n if (index === -1) {\n throw new Error('Cannot find step with ID ' + stepId)\n }\n this._steps.splice(index, 1)\n this.markForChange(this._changePrefix)\n this.generateHash()\n }\n\n public isBoundStep(stepId: string) {\n return this._steps.find((s) => s.id === stepId)?.isBound\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public loadFromSteps(data: any[]) {\n if (!data) {\n return\n }\n this._steps.splice(0)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this._steps.push(...data.map((s: any) => ColorRampStep.newWithAlpha(s._color, s._alpha, s._factor, s._isBound)))\n this.generateHash()\n }\n\n public randomize(maxSteps: number = 10) {\n this._steps.splice(0)\n const max = Math.round(clampedPRNG(2, maxSteps))\n for (let i = 0; i < max; i++) {\n const factor = i === 0 ? 0 : i === max - 1 ? 1 : clampedPRNG(0, 1)\n this._steps.push(\n ColorRampStep.newWithAlpha(clampedPRNG(0, 1) * 0xffffff, clampedPRNG(0, 1), factor, i === 0 || i === max - 1),\n )\n }\n this.sortSteps()\n this.markForChange(this._changePrefix)\n this.generateHash()\n }\n}\n","import type {\n AmbientLight,\n Clock,\n DataTexture,\n DirectionalLight,\n Group,\n Mesh,\n PerspectiveCamera,\n Scene,\n Texture,\n WebGLRenderer,\n} from 'three'\nimport type { LensFlareEffect } from './three/lens-flare.effect'\n\nexport type InfoLevel = 'success' | 'info' | 'warn' | 'wip'\n\n// ---------------------------------- Shader loader ---------------------------------\nexport enum ShaderFileType {\n CORE,\n BAKING,\n FUNCTION,\n}\n\n// ----------------------------------- Editor types ---------------------------------\nexport type SceneRenderObjects = {\n scene: Scene\n renderer: WebGLRenderer\n camera: PerspectiveCamera\n}\n\nexport enum PlanetType {\n PLANET,\n STAR,\n}\nexport enum ColorMode {\n REALISTIC,\n DIRECT,\n MIXED,\n}\nexport enum GradientMode {\n REALISTIC = 0,\n POLE_TO_POLE = 1,\n FULLNOISE = 2,\n}\n\nexport type Rect = {\n x: number\n y: number\n w: number\n h: number\n r?: number\n b?: number\n}\nexport type RawRGBA = {\n r: number\n g: number\n b: number\n a: number\n}\n\nexport type DataTextureWrapper = {\n texture: DataTexture\n data: Uint8Array\n}\n\nexport type PlanetPreviewData = {\n sun: DirectionalLight\n ambientLight: AmbientLight\n planet: Mesh\n clouds: Mesh\n atmosphere: Mesh\n ring: Mesh\n}\nexport type PlanetSceneData = {\n // Scene, renderer, camera\n scene?: Scene\n renderer?: WebGLRenderer\n camera?: PerspectiveCamera\n\n // Groups\n planetGroup?: Group\n ringAnchor?: Group\n\n // Main objects\n planet?: Mesh\n clouds?: Mesh\n atmosphere?: Mesh\n ring?: Mesh\n sunLight?: DirectionalLight\n ambLight?: AmbientLight\n lensFlare?: LensFlareEffect\n\n // DataTextures\n surfaceDataTex?: DataTexture\n cloudsDataTex?: DataTexture\n biomeDataTex?: DataTexture\n ringDataTex?: DataTexture\n\n // Misc\n clock?: Clock\n}\n\n// ----------------------------------- Baking types ---------------------------------\nexport type BakingTarget = {\n mesh: Mesh\n textures: Texture[]\n}\n","const _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toLowerCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toLowerCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidean modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range to range \nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s;\n\n\t// Mulberry32 generator\n\n\tlet t = _seed += 0x6D2B79F5;\n\n\tt = Math.imul( t ^ t >>> 15, t | 1 );\n\n\tt ^= t + Math.imul( t ^ t >>> 7, t | 61 );\n\n\treturn ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nfunction denormalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn value / 4294967295.0;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn value / 65535.0;\n\n\t\tcase Uint8Array:\n\n\t\t\treturn value / 255.0;\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.max( value / 2147483647.0, - 1.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.max( value / 32767.0, - 1.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.max( value / 127.0, - 1.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nfunction normalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn Math.round( value * 4294967295.0 );\n\n\t\tcase Uint16Array:\n\n\t\t\treturn Math.round( value * 65535.0 );\n\n\t\tcase Uint8Array:\n\n\t\t\treturn Math.round( value * 255.0 );\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.round( value * 2147483647.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.round( value * 32767.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.round( value * 127.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nconst MathUtils = {\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler,\n\tnormalize: normalize,\n\tdenormalize: denormalize\n};\n\nexport {\n\tDEG2RAD,\n\tRAD2DEG,\n\tgenerateUUID,\n\tclamp,\n\teuclideanModulo,\n\tmapLinear,\n\tinverseLerp,\n\tlerp,\n\tdamp,\n\tpingpong,\n\tsmoothstep,\n\tsmootherstep,\n\trandInt,\n\trandFloat,\n\trandFloatSpread,\n\tseededRandom,\n\tdegToRad,\n\tradToDeg,\n\tisPowerOfTwo,\n\tceilPowerOfTwo,\n\tfloorPowerOfTwo,\n\tsetQuaternionFromProperEuler,\n\tnormalize,\n\tdenormalize,\n\tMathUtils\n};\n","import { clamp } from 'three/src/math/MathUtils.js'\nimport { ChangeTracker, type ChangedProp } from './change-tracker.model'\nimport { Vector3 } from 'three'\nimport { clampedPRNG } from '@/utils/math-utils'\n\nexport class NoiseParameters extends ChangeTracker {\n private _frequency: number = 3\n private _amplitude: number = 0.5\n private _lacunarity: number = 2\n private _octaves: number = 2\n\n private _layers: number = 1\n private _warpFactor: Vector3 = new Vector3(1.0)\n\n constructor(\n changedPropsRef: ChangedProp[],\n changePrefix: string,\n freq?: number,\n amp?: number,\n lac?: number,\n oct?: number,\n ) {\n super(changedPropsRef, changePrefix)\n this._frequency = clamp(freq ?? this._frequency, 0, 10)\n this._amplitude = clamp(amp ?? this._amplitude, 0, 10)\n this._lacunarity = clamp(lac ?? this._lacunarity, 0, 10)\n this._octaves = clamp(oct ?? this._octaves, 0, 8)\n this._layers = 1.0\n this._warpFactor.setScalar(1.0)\n }\n\n public get frequency(): number {\n return this._frequency\n }\n public set frequency(value: number) {\n this._frequency = value\n this.markForChange(`${this._changePrefix}._frequency`)\n }\n\n public get amplitude(): number {\n return this._amplitude\n }\n public set amplitude(value: number) {\n this._amplitude = value\n this.markForChange(`${this._changePrefix}._amplitude`)\n }\n\n public get lacunarity(): number {\n return this._lacunarity\n }\n public set lacunarity(value: number) {\n this._lacunarity = value\n this.markForChange(`${this._changePrefix}._lacunarity`)\n }\n\n public get octaves(): number {\n return this._octaves\n }\n public set octaves(value: number) {\n this._octaves = value\n this.markForChange(`${this._changePrefix}._octaves`)\n }\n\n public get layers(): number {\n return this._layers\n }\n public set layers(value: number) {\n this._layers = Math.round(clamp(value, 1, 3))\n this.markForChange(`${this._changePrefix}._layers`)\n }\n\n public get warpFactor(): Vector3 {\n return this._warpFactor\n }\n\n public get xWarpFactor(): number {\n return this._warpFactor.x\n }\n public set xWarpFactor(value: number) {\n this._warpFactor.x = value\n this.markForChange(`${this._changePrefix}._warpFactor`)\n }\n public get yWarpFactor(): number {\n return this._warpFactor.y\n }\n public set yWarpFactor(value: number) {\n this._warpFactor.y = value\n this.markForChange(`${this._changePrefix}._warpFactor`)\n }\n public get zWarpFactor(): number {\n return this._warpFactor.z\n }\n public set zWarpFactor(value: number) {\n this._warpFactor.z = value\n this.markForChange(`${this._changePrefix}._warpFactor`)\n }\n\n public loadData(data?: NoiseParameters) {\n this.frequency = clamp(data?._frequency ?? this._frequency, 0, 10)\n this.amplitude = clamp(data?._amplitude ?? this._amplitude, 0, 10)\n this.lacunarity = clamp(data?._lacunarity ?? this._lacunarity, 0, 10)\n this.octaves = clamp(data?._octaves ?? this._octaves, 0, 8)\n this.layers = clamp(data?._layers ?? 1, 1, 3)\n this.xWarpFactor = data?._warpFactor ? data._warpFactor.x : 1.0\n this.yWarpFactor = data?._warpFactor ? data._warpFactor.y : 1.0\n this.zWarpFactor = data?._warpFactor ? data._warpFactor.z : 1.0\n }\n\n public reset(freq: number, amp: number, lac: number, oct: number, layers?: number, warpScalar?: number): void {\n this.frequency = clamp(freq, 0, 10)\n this.amplitude = clamp(amp, 0, 10)\n this.lacunarity = clamp(lac, 0, 10)\n this.octaves = clamp(oct, 0, 8)\n this.layers = clamp(layers ?? 1, 1, 3)\n this.xWarpFactor = warpScalar ?? 1.0\n this.yWarpFactor = warpScalar ?? 1.0\n this.zWarpFactor = warpScalar ?? 1.0\n }\n\n // Note: adjusted ranges to get more coherent data\n public randomize() {\n this.layers = Math.round(clampedPRNG(1, 3))\n this.frequency = clampedPRNG(1, 7)\n this.amplitude = clampedPRNG(0.25, 1.25)\n this.lacunarity = clampedPRNG(1.5, 3)\n this.octaves = Math.round(clampedPRNG(2, 8))\n this.xWarpFactor = clampedPRNG(0, 8)\n this.yWarpFactor = clampedPRNG(0, 8)\n this.zWarpFactor = clampedPRNG(0, 8)\n }\n}\n","import { Color } from 'three'\nimport { ChangeTracker, type ChangedProp, type ChangedPropPair } from './change-tracker.model'\nimport { nanoid } from 'nanoid'\nimport { clamp } from 'three/src/math/MathUtils.js'\nimport { clampedPRNG } from '@/utils/math-utils'\n\nexport class BiomeDimensions {\n temperatureMin: number = 0.0\n temperatureMax: number = 1.0\n humidityMin: number = 0.0\n humidityMax: number = 1.0\n}\nexport class BiomeParameters extends ChangeTracker {\n private _id: string\n private _tempMin: number = 0.0\n private _tempMax: number = 1.0\n private _humiMin: number = 0.0\n private _humiMax: number = 1.0\n private _smoothness: number = 0.2\n private _color: Color\n\n constructor(\n changedPropsRef: ChangedProp[],\n changePrefix: string,\n dims: BiomeDimensions,\n color: Color,\n smoothness: number,\n ) {\n super(changedPropsRef, changePrefix)\n this._id = nanoid()\n this._tempMin = dims.temperatureMin\n this._tempMax = dims.temperatureMax\n this._humiMin = dims.humidityMin\n this._humiMax = dims.humidityMax\n this._color = new Color(color)\n this._smoothness = smoothness\n }\n\n clone(): BiomeParameters {\n return new BiomeParameters(\n this._changedProps,\n this._changePrefix,\n {\n temperatureMin: this._tempMin,\n temperatureMax: this._tempMax,\n humidityMin: this._humiMin,\n humidityMax: this._humiMax,\n },\n this._color.clone(),\n this._smoothness,\n )\n }\n\n public get id(): string {\n return this._id\n }\n public set id(id: string) {\n this._id = id\n }\n\n public get tempMin(): number {\n return this._tempMin\n }\n public set tempMin(value: number) {\n const oldValue: ChangedPropPair = { key: 'tempMin', value: this._tempMin.valueOf() }\n const newValue: ChangedPropPair = { key: 'tempMin', value: value.valueOf() }\n this._tempMin = clamp(value, 0.0, 1.0)\n this._tempMax = clamp(this._tempMax, this._tempMin, 1)\n this.markForChange(`${this._changePrefix}|${this._id}`, oldValue, newValue)\n }\n public get tempMax(): number {\n return this._tempMax\n }\n public set tempMax(value: number) {\n const oldValue: ChangedPropPair = { key: 'tempMax', value: this._tempMax.valueOf() }\n const newValue: ChangedPropPair = { key: 'tempMax', value: value.valueOf() }\n this._tempMax = clamp(value, 0.0, 1.0)\n this._tempMin = clamp(this._tempMin, 0, this._tempMax)\n this.markForChange(`${this._changePrefix}|${this._id}`, oldValue, newValue)\n }\n\n public get humiMin(): number {\n return this._humiMin\n }\n public set humiMin(value: number) {\n const oldValue: ChangedPropPair = { key: 'humiMin', value: this._humiMin.valueOf() }\n const newValue: ChangedPropPair = { key: 'humiMin', value: value.valueOf() }\n this._humiMin = clamp(value, 0.0, 1.0)\n this._humiMax = clamp(this._humiMax, this._humiMin, 1)\n this.markForChange(`${this._changePrefix}|${this._id}`, oldValue, newValue)\n }\n public get humiMax(): number {\n return this._humiMax\n }\n public set humiMax(value: number) {\n const oldValue: ChangedPropPair = { key: 'humiMax', value: this._humiMax.valueOf() }\n const newValue: ChangedPropPair = { key: 'humiMax', value: value.valueOf() }\n this._humiMax = clamp(value, 0.0, 1.0)\n this._humiMin = clamp(this._humiMin, 0, this._humiMax)\n this.markForChange(`${this._changePrefix}|${this._id}`, oldValue, newValue)\n }\n\n public get color(): Color {\n return this._color\n }\n public set color(value: Color) {\n const oldValue: ChangedPropPair = { key: 'color', value: this._color.clone() }\n const newValue: ChangedPropPair = { key: 'color', value: value.clone() }\n this._color.set(value)\n this.markForChange(`${this._changePrefix}|${this._id}`, oldValue, newValue)\n }\n\n public get smoothness(): number {\n return this._smoothness\n }\n public set smoothness(value: number) {\n const oldValue: ChangedPropPair = { key: 'smoothness', value: this._smoothness.valueOf() }\n const newValue: ChangedPropPair = { key: 'smoothness', value: value.valueOf() }\n this._smoothness = clamp(value, 0.0, 1.0)\n this.markForChange(`${this._changePrefix}|${this._id}`, oldValue, newValue)\n }\n\n public static createRandom(changedProps: ChangedProp[]) {\n const minTemp = clampedPRNG(0, 1),\n minHumi = clampedPRNG(0, 1)\n return new BiomeParameters(\n changedProps,\n '_biomesParameters',\n {\n temperatureMin: minTemp,\n temperatureMax: clampedPRNG(minTemp, 1),\n humidityMin: minHumi,\n humidityMax: clampedPRNG(minHumi, 1),\n },\n new Color(clampedPRNG(0, 1) * 0xffffff),\n clampedPRNG(0, 1),\n )\n }\n}\n","import { clamp } from 'three/src/math/MathUtils.js'\nimport { ChangeTracker, type ChangedProp } from './change-tracker.model'\nimport { clampedPRNG } from '@/utils/math-utils'\n\nexport class DisplacementParameters extends ChangeTracker {\n private _epsilon: number = 0.001\n private _multiplier: number = 2.0\n private _factor: number = 0.05\n private _frequency: number = 2.0\n private _amplitude: number = 0.2\n private _lacunarity: number = 2.0\n private _octaves: number = 8\n\n constructor(\n changedPropsRef: ChangedProp[],\n changePrefix: string,\n freq?: number,\n amp?: number,\n lac?: number,\n oct?: number,\n epsilon?: number,\n multiplier?: number,\n factor?: number,\n ) {\n super(changedPropsRef, changePrefix)\n this._frequency = clamp(freq ?? this._frequency, 0, 255)\n this._amplitude = clamp(amp ?? this._amplitude, 0, 255)\n this._lacunarity = clamp(lac ?? this._lacunarity, 0, 255)\n this._octaves = clamp(oct ?? this._octaves, 0, 8)\n this._epsilon = clamp(epsilon ?? 0.001, 0.0, 1.0)\n this._multiplier = clamp(multiplier ?? 2.0, 0.0, 3.0)\n this._factor = clamp(factor ?? 0.05, 0.0, 1.0)\n }\n\n public get epsilon(): number {\n return this._epsilon\n }\n public set epsilon(value: number) {\n this._epsilon = value\n this.markForChange(`${this._changePrefix}._epsilon`)\n }\n public get multiplier(): number {\n return this._multiplier\n }\n public set multiplier(value: number) {\n this._multiplier = value\n this.markForChange(`${this._changePrefix}._multiplier`)\n }\n public get factor(): number {\n return this._factor\n }\n public set factor(value: number) {\n this._factor = value\n this.markForChange(`${this._changePrefix}._factor`)\n }\n\n public get frequency(): number {\n return this._frequency\n }\n public set frequency(value: number) {\n this._frequency = value\n this.markForChange(`${this._changePrefix}._frequency`)\n }\n\n public get amplitude(): number {\n return this._amplitude\n }\n public set amplitude(value: number) {\n this._amplitude = value\n this.markForChange(`${this._changePrefix}._amplitude`)\n }\n\n public get lacunarity(): number {\n return this._lacunarity\n }\n public set lacunarity(value: number) {\n this._lacunarity = value\n this.markForChange(`${this._changePrefix}._lacunarity`)\n }\n\n public get octaves(): number {\n return this._octaves\n }\n public set octaves(value: number) {\n this._octaves = value\n this.markForChange(`${this._changePrefix}._octaves`)\n }\n\n public loadData(data?: DisplacementParameters) {\n this.frequency = clamp(data?._frequency ?? this._frequency, 0, 10)\n this.amplitude = clamp(data?._amplitude ?? this._amplitude, 0, 10)\n this.lacunarity = clamp(data?._lacunarity ?? this._lacunarity, 0, 10)\n this.octaves = clamp(data?._octaves ?? this._octaves, 0, 8)\n this.factor = clamp(data?._factor ?? this._factor, 0.0, 1.0)\n this.epsilon = clamp(data?._epsilon ?? this._epsilon, 0.0, 0.25)\n this.multiplier = clamp(data?._multiplier ?? this._multiplier, 0.0, 3.0)\n }\n\n public reset(freq: number, amp: number, lac: number, oct: number, eps?: number, mul?: number, fac?: number): void {\n this.frequency = clamp(freq, 0, 10)\n this.amplitude = clamp(amp, 0, 10)\n this.lacunarity = clamp(lac, 0, 10)\n this.octaves = clamp(oct, 0, 8)\n this.epsilon = clamp(eps ?? 0.001, 0.0, 2.0)\n this.multiplier = clamp(mul ?? 2.0, 0.0, 5.0)\n this.factor = clamp(fac ?? 0.05, 0.0, 1.0)\n }\n\n // Note: adjusted ranges to get more coherent data\n public randomize() {\n this.factor = clampedPRNG(0, 0.25)\n this.epsilon = clampedPRNG(0.0005, 0.25)\n this.multiplier = clampedPRNG(0, 3)\n this.frequency = clampedPRNG(0.25, 3)\n this.amplitude = clampedPRNG(0.25, 1.25)\n this.lacunarity = clampedPRNG(1.5, 3)\n this.octaves = Math.round(clampedPRNG(2, 8))\n }\n}\n","import { ColorRamp, ColorRampStep } from './color-ramp.model'\nimport { ColorMode, GradientMode, PlanetType } from '@core/types'\nimport { clampedPRNG, isNumeric } from '@/utils/math-utils'\nimport { Color } from 'three'\nimport { NoiseParameters } from './noise-parameters.model'\nimport { ChangeTracker } from './change-tracker.model'\nimport { BiomeParameters } from './biome-parameters.model'\nimport { clamp } from 'three/src/math/MathUtils.js'\nimport { DisplacementParameters } from './displacement-parameters.model'\n\nexport default class PlanetData extends ChangeTracker {\n // --------------------------------------------------\n // | Init |\n // --------------------------------------------------\n\n private _defaultPlanetName: string\n private _planetName: string\n\n private _initCamDistance: number = 4\n private _initCamAngle: number = -60\n\n // --------------------------------------------------\n\n public get planetName(): string {\n return this._planetName\n }\n public set planetName(value: string) {\n this._planetName = value\n this.markForChange('_planetName')\n }\n\n public get initCamDistance() {\n return this._initCamDistance\n }\n public get initCamAngle() {\n return this._initCamAngle\n }\n\n // --------------------------------------------------\n // | Lighting settings |\n // --------------------------------------------------\n\n private _lensFlareEnabled: boolean\n private _lensFlarePointsIntensity: number\n private _lensFlareGlareIntensity: number\n private _sunLightAngle: number\n private _sunLightColor: Color\n private _sunLightIntensity: number\n private _ambLightColor: Color\n private _ambLightIntensity: number\n\n // --------------------------------------------------\n\n public get lensFlareEnabled(): boolean {\n return this._lensFlareEnabled\n }\n public set lensFlareEnabled(value: boolean) {\n this._lensFlareEnabled = value\n this.markForChange('_lensFlareEnabled')\n }\n public get lensFlarePointsIntensity(): number {\n return this._lensFlarePointsIntensity\n }\n public set lensFlarePointsIntensity(value: number) {\n this._lensFlarePointsIntensity = clamp(value, 0, 1)\n this.markForChange('_lensFlarePointsIntensity')\n }\n public get lensFlareGlareIntensity(): number {\n return this._lensFlareGlareIntensity\n }\n public set lensFlareGlareIntensity(value: number) {\n this._lensFlareGlareIntensity = clamp(value, 0, 1)\n this.markForChange('_lensFlareGlareIntensity')\n }\n\n public get sunLightAngle(): number {\n return this._sunLightAngle\n }\n public set sunLightAngle(value: number) {\n this._sunLightAngle = clamp(value, -180, 180)\n this.markForChange('_sunLightAngle')\n }\n public get sunLightColor(): Color {\n return this._sunLightColor\n }\n public set sunLightColor(value: Color) {\n this._sunLightColor.set(value)\n this.markForChange('_sunLightColor')\n }\n public get sunLightIntensity(): number {\n return this._sunLightIntensity\n }\n public set sunLightIntensity(value: number) {\n this._sunLightIntensity = value\n this.markForChange('_sunLightIntensity')\n }\n\n public get ambLightColor(): Color {\n return this._ambLightColor\n }\n public set ambLightColor(value: Color) {\n this._ambLightColor.set(value)\n this.markForChange('_ambLightColor')\n }\n public get ambLightIntensity(): number {\n return this._ambLightIntensity\n }\n public set ambLightIntensity(value: number) {\n this._ambLightIntensity = value\n this.markForChange('_ambLightIntensity')\n }\n\n // --------------------------------------------------\n // | Planet settings |\n // --------------------------------------------------\n\n private _planetType: PlanetType = PlanetType.PLANET\n private _planetMeshQuality: number\n\n private _planetRadius: number\n private _planetAxialTilt: number\n private _planetRotation: number\n private _planetWaterRoughness: number\n private _planetWaterMetalness: number\n private _planetGroundRoughness: number\n private _planetGroundMetalness: number\n private _planetWaterLevel: number\n\n // --------------------------------------------------\n\n public get planetType() {\n return this._planetType\n }\n public set planetType(ptype: PlanetType) {\n this._planetType = ptype\n this.markForChange('_planetType')\n }\n public get planetMeshQuality() {\n return this._planetMeshQuality\n }\n public set planetMeshQuality(quality: number) {\n this._planetMeshQuality = isNumeric(quality) ? clamp(quality, 0, 48) : 48\n this.markForChange('_planetMeshQuality')\n }\n\n public get planetRadius() {\n return this._planetRadius\n }\n public set planetRadius(radius: number) {\n this._planetRadius = radius\n this.markForChange('_planetRadius')\n }\n public get planetAxialTilt() {\n return this._planetAxialTilt\n }\n public set planetAxialTilt(tilt: number) {\n this._planetAxialTilt = isNumeric(tilt) ? clamp(tilt, -180, 180) : 0\n this.markForChange('_planetAxialTilt')\n }\n\n public get planetRotation() {\n return this._planetRotation\n }\n public set planetRotation(rot: number) {\n this._planetRotation = isNumeric(rot) ? clamp(rot, 0, 360) : 0\n this.markForChange('_planetRotation')\n }\n\n public get planetWaterMetalness(): number {\n return this._planetWaterMetalness\n }\n public set planetWaterMetalness(value: number) {\n this._planetWaterMetalness = clamp(value, 0, 1)\n this.markForChange('_planetWaterMetalness')\n }\n public get planetWaterRoughness(): number {\n return this._planetWaterRoughness\n }\n public set planetWaterRoughness(value: number) {\n this._planetWaterRoughness = clamp(value, 0, 1)\n this.markForChange('_planetWaterRoughness')\n }\n\n public get planetGroundMetalness(): number {\n return this._planetGroundMetalness\n }\n public set planetGroundMetalness(value: number) {\n this._planetGroundMetalness = clamp(value, 0, 1)\n this.markForChange('_planetGroundMetalness')\n }\n public get planetGroundRoughness(): number {\n return this._planetGroundRoughness\n }\n public set planetGroundRoughness(value: number) {\n this._planetGroundRoughness = clamp(value, 0, 1)\n this.markForChange('_planetGroundRoughness')\n }\n\n public get planetWaterLevel(): number {\n return this._planetWaterLevel\n }\n public set planetWaterLevel(value: number) {\n this._planetWaterLevel = clamp(value, 0, 1)\n this.markForChange('_planetWaterLevel')\n }\n\n // --------------------------------------------------\n // | Surface settings |\n // --------------------------------------------------\n\n private _planetSurfaceShowBumps: boolean\n private _planetSurfaceBumpStrength: number\n private _planetSurfaceShowWarping: boolean\n private _planetSurfaceShowDisplacement: boolean\n private _planetSurfaceDisplacement: DisplacementParameters\n private _planetSurfaceNoise: NoiseParameters\n private _planetSurfaceColorRamp: ColorRamp\n\n // --------------------------------------------------\n\n public get planetSurfaceShowBumps(): boolean {\n return this._planetSurfaceShowBumps\n }\n public set planetSurfaceShowBumps(value: boolean) {\n this._planetSurfaceShowBumps = value\n this.markForChange('_planetSurfaceShowBumps')\n }\n public get planetSurfaceBumpStrength(): number {\n return this._planetSurfaceBumpStrength\n }\n public set planetSurfaceBumpStrength(value: number) {\n this._planetSurfaceBumpStrength = value\n this.markForChange('_planetSurfaceBumpStrength')\n }\n\n public get planetSurfaceShowWarping(): boolean {\n return this._planetSurfaceShowWarping\n }\n public set planetSurfaceShowWarping(value: boolean) {\n this._planetSurfaceShowWarping = value\n this.markForChange('_planetSurfaceShowWarping')\n }\n public get planetSurfaceShowDisplacement(): boolean {\n return this._planetSurfaceShowDisplacement\n }\n public set planetSurfaceShowDisplacement(value: boolean) {\n this._planetSurfaceShowDisplacement = value\n this.markForChange('_planetSurfaceShowDisplacement')\n }\n\n public get planetSurfaceDisplacement(): DisplacementParameters {\n return this._planetSurfaceDisplacement\n }\n\n public get planetSurfaceNoise(): NoiseParameters {\n return this._planetSurfaceNoise\n }\n\n public get planetSurfaceColorRamp(): ColorRamp {\n return this._planetSurfaceColorRamp\n }\n public get planetSurfaceColorRampSize() {\n return this._planetSurfaceColorRamp.steps.length\n }\n\n // --------------------------------------------------\n // | Biome settings |\n // --------------------------------------------------\n\n private _biomesEnabled: boolean\n private _biomesTemperatureMode: GradientMode\n private _biomesTemperatureNoise: NoiseParameters\n private _biomesHumidityMode: GradientMode\n private _biomesHumidityNoise: NoiseParameters\n private _biomesParams: BiomeParameters[]\n\n // --------------------------------------------------\n\n public get biomesEnabled(): boolean {\n return this._biomesEnabled\n }\n public set biomesEnabled(value: boolean) {\n this._biomesEnabled = value\n this.markForChange('_biomesEnabled')\n }\n\n public get biomesTemperatureMode(): GradientMode {\n return this._biomesTemperatureMode\n }\n public set biomesTemperatureMode(value: GradientMode) {\n this._biomesTemperatureMode = value\n this.markForChange('_biomesTemperatureMode')\n }\n public get biomesTemperatureNoise(): NoiseParameters {\n return this._biomesTemperatureNoise\n }\n\n public get biomesHumidityMode(): GradientMode {\n return this._biomesHumidityMode\n }\n public set biomesHumidityMode(value: GradientMode) {\n this._biomesHumidityMode = value\n this.markForChange('_biomesHumidityMode')\n }\n public get biomesHumidityNoise(): NoiseParameters {\n return this._biomesHumidityNoise\n }\n\n public get biomesParams(): BiomeParameters[] {\n return this._biomesParams\n }\n public set biomesParams(value: BiomeParameters[]) {\n this._biomesParams.splice(0)\n this._biomesParams.push(...value)\n this.markForChange('_biomesParams')\n }\n\n // --------------------------------------------------\n // | Clouds settings |\n // --------------------------------------------------\n\n private _cloudsEnabled: boolean\n private _cloudsRotation: number\n private _cloudsHeight: number\n private _cloudsShowWarping: boolean\n private _cloudsShowDisplacement: boolean\n private _cloudsDisplacement: DisplacementParameters\n private _cloudsNoise: NoiseParameters\n private _cloudsColor: Color\n private _cloudsColorRamp: ColorRamp\n\n // --------------------------------------------------\n\n public get cloudsEnabled(): boolean {\n return this._cloudsEnabled\n }\n public set cloudsEnabled(value: boolean) {\n this._cloudsEnabled = value\n this.markForChange('_cloudsEnabled')\n }\n\n public get cloudsRotation() {\n return this._cloudsRotation\n }\n public set cloudsRotation(rot: number) {\n this._cloudsRotation = isNumeric(rot) ? clamp(rot, 0, 360) : 0\n this.markForChange('_cloudsRotation')\n }\n\n public get cloudsHeight() {\n return this._cloudsHeight\n }\n public set cloudsHeight(height: number) {\n this._cloudsHeight = clamp(height, 0, 10)\n this.markForChange('_cloudsHeight')\n }\n\n public get cloudsShowWarping(): boolean {\n return this._cloudsShowWarping\n }\n public set cloudsShowWarping(value: boolean) {\n this._cloudsShowWarping = value\n this.markForChange('_cloudsShowWarping')\n }\n\n public get cloudsShowDisplacement(): boolean {\n return this._cloudsShowDisplacement\n }\n public set cloudsShowDisplacement(value: boolean) {\n this._cloudsShowDisplacement = value\n this.markForChange('_cloudsShowDisplacement')\n }\n public get cloudsDisplacement(): DisplacementParameters {\n return this._cloudsDisplacement\n }\n public set cloudsDisplacement(value: DisplacementParameters) {\n this._cloudsDisplacement = value\n this.markForChange('_cloudsDisplacement')\n }\n\n public get cloudsNoise(): NoiseParameters {\n return this._cloudsNoise\n }\n\n public get cloudsColor(): Color {\n return this._cloudsColor\n }\n public set cloudsColor(value: Color) {\n this._cloudsColor.set(value)\n this.markForChange('_cloudsColor')\n }\n\n public set cloudsColorRamp(ramp: ColorRamp) {\n Object.assign(this._cloudsColorRamp, ramp)\n this.markForChange('_cloudsColorRamp')\n }\n public get cloudsColorRamp(): ColorRamp {\n return this._cloudsColorRamp\n }\n public get cloudsColorRampSize(): number {\n return this._cloudsColorRamp.steps.length\n }\n\n // --------------------------------------------------\n // | Atmosphere settings |\n // --------------------------------------------------\n\n private _atmosphereEnabled: boolean\n private _atmosphereHeight: number\n private _atmosphereDensityScale: number\n private _atmosphereIntensity: number\n private _atmosphereColorMode: number\n private _atmosphereHue: number\n private _atmosphereTint: Color\n\n // --------------------------------------------------\n\n public get atmosphereEnabled(): boolean {\n return this._atmosphereEnabled\n }\n public set atmosphereEnabled(value: boolean) {\n this._atmosphereEnabled = value\n this.markForChange('_atmosphereEnabled')\n }\n\n public get atmosphereHeight(): number {\n return this._atmosphereHeight\n }\n public set atmosphereHeight(value: number) {\n this._atmosphereHeight = clamp(value, 0.25, 8.0)\n this.markForChange('_atmosphereHeight')\n }\n public get atmosphereDensityScale(): number {\n return this._atmosphereDensityScale\n }\n public set atmosphereDensityScale(value: number) {\n this._atmosphereDensityScale = clamp(value, 0.25, 10.0)\n this.markForChange('_atmosphereDensityScale')\n }\n\n public get atmosphereIntensity(): number {\n return this._atmosphereIntensity\n }\n public set atmosphereIntensity(value: number) {\n this._atmosphereIntensity = value\n this.markForChange('_atmosphereIntensity')\n }\n public get atmosphereColorMode(): number {\n return this._atmosphereColorMode\n }\n public set atmosphereColorMode(value: number) {\n this._atmosphereColorMode = value\n this.markForChange('_atmosphereColorMode')\n }\n public get atmosphereHue(): number {\n return this._atmosphereHue\n }\n public set atmosphereHue(value: number) {\n this._atmosphereHue = clamp(value, 0.0, 2.0)\n this.markForChange('_atmosphereHue')\n }\n public get atmosphereTint(): Color {\n return this._atmosphereTint\n }\n public set atmosphereTint(value: Color) {\n this._atmosphereTint.set(value)\n this.markForChange('_atmosphereTint')\n }\n\n // --------------------------------------------------\n // | Ring settings |\n // --------------------------------------------------\n\n private _ringEnabled: boolean\n private _ringAxialTilt: number\n private _ringRotation: number\n private _ringInnerRadius: number\n private _ringOuterRadius: number\n private _ringColorRamp: ColorRamp\n\n // --------------------------------------------------\n\n public get ringEnabled(): boolean {\n return this._ringEnabled\n }\n public set ringEnabled(value: boolean) {\n this._ringEnabled = value\n this.markForChange('_ringEnabled')\n }\n\n public get ringAxialTilt() {\n return this._ringAxialTilt\n }\n public set ringAxialTilt(tilt: number) {\n this._ringAxialTilt = isNumeric(tilt) ? clamp(tilt, -180, 180) : 0\n this.markForChange('_ringAxialTilt')\n }\n\n public get ringRotation() {\n return this._ringRotation\n }\n public set ringRotation(rot: number) {\n this._ringRotation = isNumeric(rot) ? clamp(rot, 0, 360) : 0\n this.markForChange('_ringRotation')\n }\n\n public get ringInnerRadius(): number {\n return this._ringInnerRadius\n }\n public set ringInnerRadius(value: number) {\n this._ringInnerRadius = clamp(value, 1.0, 5.0)\n this._ringOuterRadius = clamp(this._ringOuterRadius, this._ringInnerRadius, 10)\n this.markForChange('_ringInnerRadius')\n this.markForChange('_ringOuterRadius')\n }\n\n public get ringOuterRadius(): number {\n return this._ringOuterRadius\n }\n public set ringOuterRadius(value: number) {\n this._ringOuterRadius = clamp(value, 1.0, 5.0)\n this._ringInnerRadius = clamp(this._ringInnerRadius, 1.0, this._ringOuterRadius)\n this.markForChange('_ringOuterRadius')\n this.markForChange('_ringInnerRadius')\n }\n\n public get ringColorRamp(): ColorRamp {\n return this._ringColorRamp\n }\n public get ringColorRampSize() {\n return this._ringColorRamp.steps.length\n }\n\n // --------------------------------------------------\n // | Utils & misc |\n // --------------------------------------------------\n\n public get changedProps() {\n return this._changedProps\n }\n public markAllForChange() {\n this._changedProps.push(...Object.keys(this).map((o) => ({ prop: o })))\n }\n public clearChangedProps() {\n this._changedProps.splice(0)\n }\n\n // --------------------------------------------------\n // | Constructor |\n // --------------------------------------------------\n\n constructor(defaultName?: string) {\n super()\n this._defaultPlanetName = defaultName ?? 'New planet'\n this._planetName = this._defaultPlanetName\n\n // Lighting\n this._lensFlareEnabled = true\n this._lensFlarePointsIntensity = 0.25\n this._lensFlareGlareIntensity = 0.4\n this._sunLightAngle = -15.0\n this._sunLightColor = new Color(0xfff6e8)\n this._sunLightIntensity = 10.0\n this._ambLightColor = new Color(0xffffff)\n this._ambLightIntensity = 0.02\n\n // Planet & Rendering\n this._planetType = PlanetType.PLANET\n this._planetMeshQuality = 64.0\n this._planetRadius = 1.0\n this._planetAxialTilt = -15.0\n this._planetRotation = 0.0\n this._planetWaterRoughness = 0.55\n this._planetWaterMetalness = 0.1\n this._planetGroundRoughness = 0.8\n this._planetGroundMetalness = 0.1\n this._planetWaterLevel = 0.5\n\n // Surface\n this._planetSurfaceShowBumps = true\n this._planetSurfaceBumpStrength = 0.12\n this._planetSurfaceShowWarping = false\n this._planetSurfaceShowDisplacement = false\n this._planetSurfaceDisplacement = new DisplacementParameters(\n this._changedProps,\n '_planetSurfaceDisplacement',\n 2.0,\n 0.2,\n 2.0,\n 6,\n )\n this._planetSurfaceNoise = new NoiseParameters(this._changedProps, '_planetSurfaceNoise', 3.75, 0.48, 2.45, 6)\n this._planetSurfaceColorRamp = new ColorRamp(this._changedProps, '_planetSurfaceColorRamp', [\n new ColorRampStep(0x000000, 0, true),\n new ColorRampStep(0x0b1931, 0.4),\n new ColorRampStep(0x2d4265, 0.495),\n new ColorRampStep(0x766f17, 0.5),\n new ColorRampStep(0x446611, 0.505),\n new ColorRampStep(0x223b05, 0.65),\n new ColorRampStep(0x223b05, 1, true),\n ])\n\n // Biomes\n this._biomesEnabled = true\n this._biomesTemperatureMode = GradientMode.REALISTIC\n this._biomesTemperatureNoise = new NoiseParameters(this._changedProps, '_biomesTemperatureNoise', 2.5, 1.25, 2.4, 6)\n this._biomesHumidityMode = GradientMode.FULLNOISE\n this._biomesHumidityNoise = new NoiseParameters(this._changedProps, '_biomesHumidityNoise', 3.0, 0.63, 2.53, 6)\n this._biomesParams = [\n new BiomeParameters(\n this._changedProps,\n '_biomesParameters',\n {\n temperatureMin: 0.0,\n temperatureMax: 0.1,\n humidityMin: 0.35,\n humidityMax: 1.0,\n },\n new Color(0xffffff),\n 0.25,\n ),\n new BiomeParameters(\n this._changedProps,\n '_biomesParameters',\n {\n temperatureMin: 0.8,\n temperatureMax: 1.0,\n humidityMin: 0.0,\n humidityMax: 1.0,\n },\n new Color(0xbaa345),\n 0.25,\n ),\n new BiomeParameters(\n this._changedProps,\n '_biomesParameters',\n {\n temperatureMin: 0.0,\n temperatureMax: 1.0,\n humidityMin: 0.0,\n humidityMax: 0.685,\n },\n new Color(0x132e06),\n 0.25,\n ),\n ]\n\n // Clouds\n this._cloudsEnabled = true\n this._cloudsRotation = 0.0\n this._cloudsHeight = 1.0\n this._cloudsShowWarping = false\n this._cloudsShowDisplacement = false\n this._cloudsDisplacement = new DisplacementParameters(this._changedProps, '_cloudsDisplacement', 2.0, 0.2, 2.0, 6)\n this._cloudsNoise = new NoiseParameters(this._changedProps, '_cloudsNoise', 4.0, 0.6, 1.75, 4)\n this._cloudsColor = new Color(0xffffff)\n this._cloudsColorRamp = new ColorRamp(this._changedProps, '_cloudsColorRamp', [\n new ColorRampStep(0x000000, 0.0, true),\n new ColorRampStep(0x000000, 0.6),\n new ColorRampStep(0xbbbbbb, 1.0, true),\n ])\n\n // Atmosphere\n this._atmosphereEnabled = true\n this._atmosphereHeight = 8.0\n this._atmosphereDensityScale = 3.0\n this._atmosphereIntensity = 1.35\n this._atmosphereColorMode = ColorMode.REALISTIC\n this._atmosphereHue = 0.0\n this._atmosphereTint = new Color(0xffffff)\n\n // Ring\n this._ringEnabled = false\n this._ringAxialTilt = 90.0\n this._ringRotation = 0.0\n this._ringInnerRadius = 1.25\n this._ringOuterRadius = 1.5\n this._ringColorRamp = new ColorRamp(this._changedProps, '_ringColorRamp', [\n new ColorRampStep(0x856f4e, 0.0, true),\n new ColorRampStep(0x000000, 0.5),\n new ColorRampStep(0xbf9a5e, 1.0, true),\n ])\n }\n\n // --------------------------------------------------\n // | Load/reset |\n // --------------------------------------------------\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public loadData(data: any) {\n this.planetName = data._planetName?.replaceAll('_', ' ') ?? this._defaultPlanetName\n\n // Lighting\n this.lensFlareEnabled = data._lensFlareEnabled ?? true\n this.lensFlarePointsIntensity = data._lensFlarePointsIntensity ?? 0.25\n this.lensFlareGlareIntensity = data._lensFlareGlareIntensity ?? 0.4\n this.sunLightAngle = data._sunLightAngle ?? -15.0\n this.sunLightColor.set(data._sunLightColor ?? 0xfff6e8)\n this.sunLightIntensity = data._sunLightIntensity ?? 10.0\n this.ambLightColor.set(data._ambLightColor ?? 0xffffff)\n this.ambLightIntensity = data._ambLightIntensity ?? 0.02\n\n // Planet & Rendering\n this.planetType = data._planetType ?? PlanetType.PLANET\n this.planetRadius = data._planetRadius ?? 1.0\n this.planetAxialTilt = data._planetAxialTilt ?? 15.0\n this.planetRotation = data._planetRotation ?? 0.0\n this.planetWaterRoughness = data._planetWaterRoughness ?? 0.55\n this.planetWaterMetalness = data._planetWaterMetalness ?? 0.5\n this.planetGroundRoughness = data._planetGroundRoughness ?? 0.8\n this.planetGroundMetalness = data._planetGroundMetalness ?? 0.1\n this.planetWaterLevel = data._planetWaterLevel ?? 0.5\n\n // Surface\n this.planetSurfaceShowBumps = data._planetSurfaceShowBumps ?? true\n this.planetSurfaceBumpStrength = data._planetSurfaceBumpStrength ?? 0.0875\n this.planetSurfaceShowWarping = data._planetSurfaceShowWarping ?? false\n this.planetSurfaceShowDisplacement = data._planetSurfaceShowDisplacement ?? false\n this.planetSurfaceDisplacement.loadData(data._planetSurfaceDisplacement)\n this.planetSurfaceNoise.loadData(data._planetSurfaceNoise)\n this.planetSurfaceColorRamp.loadFromSteps(\n data._planetSurfaceColorRamp\n ? data._planetSurfaceColorRamp._steps\n : [\n new ColorRampStep(0x000000, 0, true),\n new ColorRampStep(0x0b1931, 0.4),\n new ColorRampStep(0x2d4265, 0.495),\n new ColorRampStep(0x2f2e10, 0.5),\n new ColorRampStep(0x446611, 0.525),\n new ColorRampStep(0x223b05, 0.65),\n new ColorRampStep(0x223b05, 1, true),\n ],\n )\n\n // Biomes\n this.biomesEnabled = data._biomesEnabled ?? true\n this.biomesTemperatureMode = data._biomesTemperatureMode ?? GradientMode.REALISTIC\n this.biomesTemperatureNoise.loadData(data._biomesTemperatureNoise)\n this.biomesHumidityMode = data._biomesHumidityMode ?? GradientMode.REALISTIC\n this.biomesHumidityNoise.loadData(data._biomesHumidityNoise)\n this.biomesParams.splice(0)\n this.biomesParams.push(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(data._biomesParams ?? []).map((rbp: any) => {\n const nbp = new BiomeParameters(\n this.changedProps,\n '_biomesParameters',\n {\n temperatureMin: rbp._tempMin ?? 0.0,\n temperatureMax: rbp._tempMax ?? 0.5,\n humidityMin: rbp._humiMin ?? 0.0,\n humidityMax: rbp._humiMax ?? 1.0,\n },\n new Color(rbp._color),\n rbp._smoothness ?? 0.25,\n )\n nbp.id = rbp._id ? rbp._id : nbp.id\n return nbp\n }),\n )\n\n // Clouds\n this.cloudsEnabled = data._cloudsEnabled ?? true\n this.cloudsRotation = data._cloudsRotation ?? 0.0\n this.cloudsShowWarping = data._cloudsShowWarping ?? false\n this.cloudsShowDisplacement = data._cloudsShowDisplacement ?? false\n this.cloudsDisplacement.loadData(data._cloudsDisplacement)\n this.cloudsNoise.loadData(data._cloudsNoise)\n this.cloudsColor.set(data._cloudsColor ?? 0xffffff)\n this.cloudsColorRamp.loadFromSteps(\n data._cloudsColorRamp\n ? data._cloudsColorRamp._steps\n : [\n new ColorRampStep(0x000000, 0.0, true),\n new ColorRampStep(0x000000, 0.6),\n new ColorRampStep(0xbbbbbb, 1.0, true),\n ],\n )\n\n // Atmosphere\n this.atmosphereEnabled = data._atmosphereEnabled ?? true\n this.atmosphereHeight = data._atmosphereHeight ?? 8.0\n this.atmosphereDensityScale = data._atmosphereDensityScale ?? 3.0\n this.atmosphereIntensity = data._atmosphereIntensity ?? 1.35\n this.atmosphereColorMode = data._atmosphereColorMode ?? ColorMode.REALISTIC\n this.atmosphereHue = data._atmosphereHue ?? 0.0\n this.atmosphereTint.set(data._atmosphereTint ?? 0xffffff)\n\n // Ring\n this.ringEnabled = data._ringEnabled ?? false\n this.ringAxialTilt = data._ringAxialTilt ?? 90.0\n this.ringRotation = data._ringRotation ?? 0.0\n this.ringInnerRadius = data._ringInnerRadius ?? 1.25\n this.ringOuterRadius = data._ringOuterRadius ?? 1.5\n this.ringColorRamp.loadFromSteps(\n data._ringColorRamp\n ? data._ringColorRamp._steps\n : [\n new ColorRampStep(0x856f4e, 0.0, true),\n new ColorRampStep(0x000000, 0.5),\n new ColorRampStep(0xbf9a5e, 1.0, true),\n ],\n )\n }\n\n // Note: adjusted ranges to get more coherent data\n public randomize() {\n // Lighting\n this.lensFlareEnabled = Boolean(Math.round(clampedPRNG(0, 1)))\n this.lensFlarePointsIntensity = clampedPRNG(0, 1)\n this.lensFlareGlareIntensity = clampedPRNG(0, 1)\n this.sunLightAngle = clampedPRNG(-90, 90)\n this.sunLightColor.set(clampedPRNG(0.5, 1) * 0xffffff)\n this.sunLightIntensity = clampedPRNG(10, 35)\n this.ambLightColor.set(clampedPRNG(0.5, 1) * 0xffffff)\n this.ambLightIntensity = clampedPRNG(0, 1)\n\n // Planet & Rendering\n this.planetType = Math.round(clampedPRNG(0, 1)) as PlanetType\n this.planetRadius = clampedPRNG(0.5, 1)\n this.planetAxialTilt = clampedPRNG(-180, 180)\n this.planetRotation = clampedPRNG(0, 360)\n this.planetWaterRoughness = clampedPRNG(0, 1)\n this.planetWaterMetalness = clampedPRNG(0, 1)\n this.planetGroundRoughness = clampedPRNG(0, 1)\n this.planetGroundMetalness = clampedPRNG(0, 1)\n this.planetWaterLevel = clampedPRNG(0, 1)\n\n // Surface\n this.planetSurfaceShowBumps = Boolean(Math.round(clampedPRNG(0, 1)))\n this.planetSurfaceBumpStrength = clampedPRNG(0, 0.2)\n this.planetSurfaceShowWarping = Boolean(Math.round(clampedPRNG(0, 1)))\n this.planetSurfaceShowDisplacement = Boolean(Math.round(clampedPRNG(0, 1)))\n this.planetSurfaceDisplacement.randomize()\n this.planetSurfaceNoise.randomize()\n this.planetSurfaceColorRamp.randomize(8)\n\n // Biomes\n this.biomesEnabled = Boolean(Math.round(clampedPRNG(0, 1)))\n this.biomesTemperatureMode = Math.round(clampedPRNG(0, 2)) as GradientMode\n this.biomesTemperatureNoise.randomize()\n this.biomesHumidityMode = Math.round(clampedPRNG(0, 2)) as GradientMode\n this.biomesHumidityNoise.randomize()\n this.biomesParams.splice(0)\n for (let i = 0; i < Math.round(clampedPRNG(0, 8)); i++) {\n this.biomesParams.push(BiomeParameters.createRandom(this.changedProps))\n }\n\n // Clouds\n this.cloudsEnabled = Boolean(Math.round(clampedPRNG(0, 1)))\n this.cloudsRotation = clampedPRNG(0, 360)\n this.cloudsShowWarping = Boolean(Math.round(clampedPRNG(0, 1)))\n this.cloudsShowDisplacement = Boolean(Math.round(clampedPRNG(0, 1)))\n this.cloudsDisplacement.randomize()\n this.cloudsNoise.randomize()\n this.cloudsColor.set(clampedPRNG(0, 1) * 0xffffff)\n this.cloudsColorRamp.loadFromSteps([\n new ColorRampStep(0x000000, 0.0, true),\n new ColorRampStep(clampedPRNG(0, 1) * 0xffffff, clampedPRNG(0, 1)),\n new ColorRampStep(clampedPRNG(0, 1) * 0xffffff, 1.0, true),\n ])\n\n // Atmosphere\n this.atmosphereEnabled = Boolean(Math.round(clampedPRNG(0, 1)))\n this.atmosphereHeight = clampedPRNG(0.25, 8)\n this.atmosphereDensityScale = clampedPRNG(0.25, 10)\n this.atmosphereIntensity = clampedPRNG(0, 2)\n this.atmosphereColorMode = Math.round(clampedPRNG(0, 2)) as ColorMode\n this.atmosphereHue = clampedPRNG(0, 2)\n this.atmosphereTint.set(clampedPRNG(0, 1) * 0xffffff)\n\n // Ring\n this.ringEnabled = Boolean(Math.round(clampedPRNG(0, 1)))\n this.ringAxialTilt = 90.0\n this.ringRotation = 0.0\n this.ringInnerRadius = clampedPRNG(1.5, 5)\n this.ringOuterRadius = clampedPRNG(this.ringInnerRadius, 5)\n this.ringColorRamp.randomize(5)\n }\n\n public reset() {\n Object.assign(this, new PlanetData())\n this._planetSurfaceDisplacement.reset(2.0, 0.05, 2.0, 6, 0.001, 2.0, 0.05)\n this._planetSurfaceNoise.reset(3.75, 0.48, 2.45, 6, 1, 1.0)\n this._biomesTemperatureNoise.reset(2.5, 1.25, 2.4, 6)\n this._biomesHumidityNoise.reset(35, 0.63, 2.53, 6)\n this._cloudsDisplacement.reset(2.0, 0.05, 2.0, 6, 0.001, 2.0, 0.05)\n this._cloudsNoise.reset(4.0, 0.6, 1.75, 4, 1, 1.0)\n this.markAllForChange()\n }\n\n // --------------------------------------------------\n // | Static functions |\n // --------------------------------------------------\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public static createFrom(data: any) {\n const planetData = new PlanetData()\n planetData.loadData(data)\n return planetData\n }\n}\n","import type { IDBPlanet } from '@/dexie.config'\nimport PlanetData from '../models/planet-data.model'\nimport pako from 'pako'\nimport { nanoid } from 'nanoid'\n\nexport function readFileData(buf: ArrayBuffer): IDBPlanet | undefined {\n const rawData = JSON.parse(pako.inflate(buf, { to: 'string' }))\n if (rawData.version || rawData.data) {\n return readFileV2(rawData)\n } else {\n return readFileV1(rawData) // Only v1 files have no version attached\n }\n}\n\nfunction readFileV2(rawData: IDBPlanet): IDBPlanet | undefined {\n try {\n const newIdb: IDBPlanet = {\n id: rawData.id,\n data: PlanetData.createFrom(rawData.data),\n preview: rawData.preview,\n }\n console.debug('[import] Read file data as version 2')\n return newIdb\n } catch (err) {\n console.error(err)\n return undefined\n }\n}\n\nfunction readFileV1(rawData: PlanetData): IDBPlanet | undefined {\n try {\n const newIdb: IDBPlanet = {\n id: nanoid(),\n data: PlanetData.createFrom(rawData),\n }\n console.debug('[import] Read file data as version 1')\n return newIdb\n } catch (err) {\n console.error(err)\n return undefined\n }\n}\n","\n \n \n \n \n \n \n {{ $t('codex.$action_add') }}\n \n \n \n \n \n \n \n \n \n \n \n 0\" id=\"codex-grid\">\n \n \n \n \n \n \n {{ $t('codex.no_planets') }}\n \n \n \n \n\n\n\n\n\n","import {\n\tControls,\n\tMOUSE,\n\tQuaternion,\n\tSpherical,\n\tTOUCH,\n\tVector2,\n\tVector3,\n\tPlane,\n\tRay,\n\tMathUtils\n} from 'three';\n\n// OrbitControls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one-finger move\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\nconst _ray = new Ray();\nconst _plane = new Plane();\nconst _TILT_LIMIT = Math.cos( 70 * MathUtils.DEG2RAD );\n\nconst _v = new Vector3();\nconst _twoPI = 2 * Math.PI;\n\nconst _STATE = {\n\tNONE: - 1,\n\tROTATE: 0,\n\tDOLLY: 1,\n\tPAN: 2,\n\tTOUCH_ROTATE: 3,\n\tTOUCH_PAN: 4,\n\tTOUCH_DOLLY_PAN: 5,\n\tTOUCH_DOLLY_ROTATE: 6\n};\nconst _EPS = 0.000001;\n\nclass OrbitControls extends Controls {\n\n\tconstructor( object, domElement = null ) {\n\n\t\tsuper( object, domElement );\n\n\t\tthis.state = _STATE.NONE;\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new Vector3();\n\n\t\t// Sets the 3D cursor (similar to Blender), from which the maxTargetRadius takes effect\n\t\tthis.cursor = new Vector3();\n\n\t\t// How far you can dolly in and out ( PerspectiveCamera only )\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out ( OrthographicCamera only )\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// Limit camera target within a spherical area around the cursor\n\t\tthis.minTargetRadius = 0;\n\t\tthis.maxTargetRadius = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n\t\tthis.minAzimuthAngle = - Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.05;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\t\tthis.keyRotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.panSpeed = 1.0;\n\t\tthis.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n\t\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\t\tthis.zoomToCursor = false;\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 'ArrowLeft', UP: 'ArrowUp', RIGHT: 'ArrowRight', BOTTOM: 'ArrowDown' };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t// Touch fingers\n\t\tthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t// the target DOM element for key events\n\t\tthis._domElementKeyEvents = null;\n\n\t\t// internals\n\n\t\tthis._lastPosition = new Vector3();\n\t\tthis._lastQuaternion = new Quaternion();\n\t\tthis._lastTargetPosition = new Vector3();\n\n\t\t// so camera.up is the orbit axis\n\t\tthis._quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n\t\tthis._quatInverse = this._quat.clone().invert();\n\n\t\t// current position in spherical coordinates\n\t\tthis._spherical = new Spherical();\n\t\tthis._sphericalDelta = new Spherical();\n\n\t\tthis._scale = 1;\n\t\tthis._panOffset = new Vector3();\n\n\t\tthis._rotateStart = new Vector2();\n\t\tthis._rotateEnd = new Vector2();\n\t\tthis._rotateDelta = new Vector2();\n\n\t\tthis._panStart = new Vector2();\n\t\tthis._panEnd = new Vector2();\n\t\tthis._panDelta = new Vector2();\n\n\t\tthis._dollyStart = new Vector2();\n\t\tthis._dollyEnd = new Vector2();\n\t\tthis._dollyDelta = new Vector2();\n\n\t\tthis._dollyDirection = new Vector3();\n\t\tthis._mouse = new Vector2();\n\t\tthis._performCursorZoom = false;\n\n\t\tthis._pointers = [];\n\t\tthis._pointerPositions = {};\n\n\t\tthis._controlActive = false;\n\n\t\t// event listeners\n\n\t\tthis._onPointerMove = onPointerMove.bind( this );\n\t\tthis._onPointerDown = onPointerDown.bind( this );\n\t\tthis._onPointerUp = onPointerUp.bind( this );\n\t\tthis._onContextMenu = onContextMenu.bind( this );\n\t\tthis._onMouseWheel = onMouseWheel.bind( this );\n\t\tthis._onKeyDown = onKeyDown.bind( this );\n\n\t\tthis._onTouchStart = onTouchStart.bind( this );\n\t\tthis._onTouchMove = onTouchMove.bind( this );\n\n\t\tthis._onMouseDown = onMouseDown.bind( this );\n\t\tthis._onMouseMove = onMouseMove.bind( this );\n\n\t\tthis._interceptControlDown = interceptControlDown.bind( this );\n\t\tthis._interceptControlUp = interceptControlUp.bind( this );\n\n\t\t//\n\n\t\tif ( this.domElement !== null ) {\n\n\t\t\tthis.connect();\n\n\t\t}\n\n\t\tthis.update();\n\n\t}\n\n\tconnect() {\n\n\t\tthis.domElement.addEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointercancel', this._onPointerUp );\n\n\t\tthis.domElement.addEventListener( 'contextmenu', this._onContextMenu );\n\t\tthis.domElement.addEventListener( 'wheel', this._onMouseWheel, { passive: false } );\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\t\tdocument.addEventListener( 'keydown', this._interceptControlDown, { passive: true, capture: true } );\n\n\t\tthis.domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t}\n\n\tdisconnect() {\n\n\t\tthis.domElement.removeEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\n\t\tthis.domElement.removeEventListener( 'pointercancel', this._onPointerUp );\n\n\t\tthis.domElement.removeEventListener( 'wheel', this._onMouseWheel );\n\t\tthis.domElement.removeEventListener( 'contextmenu', this._onContextMenu );\n\n\t\tthis.stopListenToKeyEvents();\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\t\tdocument.removeEventListener( 'keydown', this._interceptControlDown, { capture: true } );\n\n\t\tthis.domElement.style.touchAction = 'auto';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.disconnect();\n\n\t}\n\n\tgetPolarAngle() {\n\n\t\treturn this._spherical.phi;\n\n\t}\n\n\tgetAzimuthalAngle() {\n\n\t\treturn this._spherical.theta;\n\n\t}\n\n\tgetDistance() {\n\n\t\treturn this.object.position.distanceTo( this.target );\n\n\t}\n\n\tlistenToKeyEvents( domElement ) {\n\n\t\tdomElement.addEventListener( 'keydown', this._onKeyDown );\n\t\tthis._domElementKeyEvents = domElement;\n\n\t}\n\n\tstopListenToKeyEvents() {\n\n\t\tif ( this._domElementKeyEvents !== null ) {\n\n\t\t\tthis._domElementKeyEvents.removeEventListener( 'keydown', this._onKeyDown );\n\t\t\tthis._domElementKeyEvents = null;\n\n\t\t}\n\n\t}\n\n\tsaveState() {\n\n\t\tthis.target0.copy( this.target );\n\t\tthis.position0.copy( this.object.position );\n\t\tthis.zoom0 = this.object.zoom;\n\n\t}\n\n\treset() {\n\n\t\tthis.target.copy( this.target0 );\n\t\tthis.object.position.copy( this.position0 );\n\t\tthis.object.zoom = this.zoom0;\n\n\t\tthis.object.updateProjectionMatrix();\n\t\tthis.dispatchEvent( _changeEvent );\n\n\t\tthis.update();\n\n\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tupdate( deltaTime = null ) {\n\n\t\tconst position = this.object.position;\n\n\t\t_v.copy( position ).sub( this.target );\n\n\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t_v.applyQuaternion( this._quat );\n\n\t\t// angle from z-axis around y-axis\n\t\tthis._spherical.setFromVector3( _v );\n\n\t\tif ( this.autoRotate && this.state === _STATE.NONE ) {\n\n\t\t\tthis._rotateLeft( this._getAutoRotationAngle( deltaTime ) );\n\n\t\t}\n\n\t\tif ( this.enableDamping ) {\n\n\t\t\tthis._spherical.theta += this._sphericalDelta.theta * this.dampingFactor;\n\t\t\tthis._spherical.phi += this._sphericalDelta.phi * this.dampingFactor;\n\n\t\t} else {\n\n\t\t\tthis._spherical.theta += this._sphericalDelta.theta;\n\t\t\tthis._spherical.phi += this._sphericalDelta.phi;\n\n\t\t}\n\n\t\t// restrict theta to be between desired limits\n\n\t\tlet min = this.minAzimuthAngle;\n\t\tlet max = this.maxAzimuthAngle;\n\n\t\tif ( isFinite( min ) && isFinite( max ) ) {\n\n\t\t\tif ( min < - Math.PI ) min += _twoPI; else if ( min > Math.PI ) min -= _twoPI;\n\n\t\t\tif ( max < - Math.PI ) max += _twoPI; else if ( max > Math.PI ) max -= _twoPI;\n\n\t\t\tif ( min <= max ) {\n\n\t\t\t\tthis._spherical.theta = Math.max( min, Math.min( max, this._spherical.theta ) );\n\n\t\t\t} else {\n\n\t\t\t\tthis._spherical.theta = ( this._spherical.theta > ( min + max ) / 2 ) ?\n\t\t\t\t\tMath.max( min, this._spherical.theta ) :\n\t\t\t\t\tMath.min( max, this._spherical.theta );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restrict phi to be between desired limits\n\t\tthis._spherical.phi = Math.max( this.minPolarAngle, Math.min( this.maxPolarAngle, this._spherical.phi ) );\n\n\t\tthis._spherical.makeSafe();\n\n\n\t\t// move target to panned location\n\n\t\tif ( this.enableDamping === true ) {\n\n\t\t\tthis.target.addScaledVector( this._panOffset, this.dampingFactor );\n\n\t\t} else {\n\n\t\t\tthis.target.add( this._panOffset );\n\n\t\t}\n\n\t\t// Limit the target distance from the cursor to create a sphere around the center of interest\n\t\tthis.target.sub( this.cursor );\n\t\tthis.target.clampLength( this.minTargetRadius, this.maxTargetRadius );\n\t\tthis.target.add( this.cursor );\n\n\t\tlet zoomChanged = false;\n\t\t// adjust the camera position based on zoom only if we're not zooming to the cursor or if it's an ortho camera\n\t\t// we adjust zoom later in these cases\n\t\tif ( this.zoomToCursor && this._performCursorZoom || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._spherical.radius = this._clampDistance( this._spherical.radius );\n\n\t\t} else {\n\n\t\t\tconst prevRadius = this._spherical.radius;\n\t\t\tthis._spherical.radius = this._clampDistance( this._spherical.radius * this._scale );\n\t\t\tzoomChanged = prevRadius != this._spherical.radius;\n\n\t\t}\n\n\t\t_v.setFromSpherical( this._spherical );\n\n\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t_v.applyQuaternion( this._quatInverse );\n\n\t\tposition.copy( this.target ).add( _v );\n\n\t\tthis.object.lookAt( this.target );\n\n\t\tif ( this.enableDamping === true ) {\n\n\t\t\tthis._sphericalDelta.theta *= ( 1 - this.dampingFactor );\n\t\t\tthis._sphericalDelta.phi *= ( 1 - this.dampingFactor );\n\n\t\t\tthis._panOffset.multiplyScalar( 1 - this.dampingFactor );\n\n\t\t} else {\n\n\t\t\tthis._sphericalDelta.set( 0, 0, 0 );\n\n\t\t\tthis._panOffset.set( 0, 0, 0 );\n\n\t\t}\n\n\t\t// adjust camera position\n\t\tif ( this.zoomToCursor && this._performCursorZoom ) {\n\n\t\t\tlet newRadius = null;\n\t\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t\t// move the camera down the pointer ray\n\t\t\t\t// this method avoids floating point error\n\t\t\t\tconst prevRadius = _v.length();\n\t\t\t\tnewRadius = this._clampDistance( prevRadius * this._scale );\n\n\t\t\t\tconst radiusDelta = prevRadius - newRadius;\n\t\t\t\tthis.object.position.addScaledVector( this._dollyDirection, radiusDelta );\n\t\t\t\tthis.object.updateMatrixWorld();\n\n\t\t\t\tzoomChanged = !! radiusDelta;\n\n\t\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t\t// adjust the ortho camera position based on zoom changes\n\t\t\t\tconst mouseBefore = new Vector3( this._mouse.x, this._mouse.y, 0 );\n\t\t\t\tmouseBefore.unproject( this.object );\n\n\t\t\t\tconst prevZoom = this.object.zoom;\n\t\t\t\tthis.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom / this._scale ) );\n\t\t\t\tthis.object.updateProjectionMatrix();\n\n\t\t\t\tzoomChanged = prevZoom !== this.object.zoom;\n\n\t\t\t\tconst mouseAfter = new Vector3( this._mouse.x, this._mouse.y, 0 );\n\t\t\t\tmouseAfter.unproject( this.object );\n\n\t\t\t\tthis.object.position.sub( mouseAfter ).add( mouseBefore );\n\t\t\t\tthis.object.updateMatrixWorld();\n\n\t\t\t\tnewRadius = _v.length();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.' );\n\t\t\t\tthis.zoomToCursor = false;\n\n\t\t\t}\n\n\t\t\t// handle the placement of the target\n\t\t\tif ( newRadius !== null ) {\n\n\t\t\t\tif ( this.screenSpacePanning ) {\n\n\t\t\t\t\t// position the orbit target in front of the new camera position\n\t\t\t\t\tthis.target.set( 0, 0, - 1 )\n\t\t\t\t\t\t.transformDirection( this.object.matrix )\n\t\t\t\t\t\t.multiplyScalar( newRadius )\n\t\t\t\t\t\t.add( this.object.position );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// get the ray and translation plane to compute target\n\t\t\t\t\t_ray.origin.copy( this.object.position );\n\t\t\t\t\t_ray.direction.set( 0, 0, - 1 ).transformDirection( this.object.matrix );\n\n\t\t\t\t\t// if the camera is 20 degrees above the horizon then don't adjust the focus target to avoid\n\t\t\t\t\t// extremely large values\n\t\t\t\t\tif ( Math.abs( this.object.up.dot( _ray.direction ) ) < _TILT_LIMIT ) {\n\n\t\t\t\t\t\tthis.object.lookAt( this.target );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_plane.setFromNormalAndCoplanarPoint( this.object.up, this.target );\n\t\t\t\t\t\t_ray.intersectPlane( _plane, this.target );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\tconst prevZoom = this.object.zoom;\n\t\t\tthis.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom / this._scale ) );\n\n\t\t\tif ( prevZoom !== this.object.zoom ) {\n\n\t\t\t\tthis.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._scale = 1;\n\t\tthis._performCursorZoom = false;\n\n\t\t// update condition is:\n\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\tif ( zoomChanged ||\n\t\t\tthis._lastPosition.distanceToSquared( this.object.position ) > _EPS ||\n\t\t\t8 * ( 1 - this._lastQuaternion.dot( this.object.quaternion ) ) > _EPS ||\n\t\t\tthis._lastTargetPosition.distanceToSquared( this.target ) > _EPS ) {\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\tthis._lastPosition.copy( this.object.position );\n\t\t\tthis._lastQuaternion.copy( this.object.quaternion );\n\t\t\tthis._lastTargetPosition.copy( this.target );\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t_getAutoRotationAngle( deltaTime ) {\n\n\t\tif ( deltaTime !== null ) {\n\n\t\t\treturn ( _twoPI / 60 * this.autoRotateSpeed ) * deltaTime;\n\n\t\t} else {\n\n\t\t\treturn _twoPI / 60 / 60 * this.autoRotateSpeed;\n\n\t\t}\n\n\t}\n\n\t_getZoomScale( delta ) {\n\n\t\tconst normalizedDelta = Math.abs( delta * 0.01 );\n\t\treturn Math.pow( 0.95, this.zoomSpeed * normalizedDelta );\n\n\t}\n\n\t_rotateLeft( angle ) {\n\n\t\tthis._sphericalDelta.theta -= angle;\n\n\t}\n\n\t_rotateUp( angle ) {\n\n\t\tthis._sphericalDelta.phi -= angle;\n\n\t}\n\n\t_panLeft( distance, objectMatrix ) {\n\n\t\t_v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t_v.multiplyScalar( - distance );\n\n\t\tthis._panOffset.add( _v );\n\n\t}\n\n\t_panUp( distance, objectMatrix ) {\n\n\t\tif ( this.screenSpacePanning === true ) {\n\n\t\t\t_v.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t} else {\n\n\t\t\t_v.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t_v.crossVectors( this.object.up, _v );\n\n\t\t}\n\n\t\t_v.multiplyScalar( distance );\n\n\t\tthis._panOffset.add( _v );\n\n\t}\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\t_pan( deltaX, deltaY ) {\n\n\t\tconst element = this.domElement;\n\n\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t// perspective\n\t\t\tconst position = this.object.position;\n\t\t\t_v.copy( position ).sub( this.target );\n\t\t\tlet targetDistance = _v.length();\n\n\t\t\t// half of the fov is center to top of screen\n\t\t\ttargetDistance *= Math.tan( ( this.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\tthis._panLeft( 2 * deltaX * targetDistance / element.clientHeight, this.object.matrix );\n\t\t\tthis._panUp( 2 * deltaY * targetDistance / element.clientHeight, this.object.matrix );\n\n\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t// orthographic\n\t\t\tthis._panLeft( deltaX * ( this.object.right - this.object.left ) / this.object.zoom / element.clientWidth, this.object.matrix );\n\t\t\tthis._panUp( deltaY * ( this.object.top - this.object.bottom ) / this.object.zoom / element.clientHeight, this.object.matrix );\n\n\t\t} else {\n\n\t\t\t// camera neither orthographic nor perspective\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\tthis.enablePan = false;\n\n\t\t}\n\n\t}\n\n\t_dollyOut( dollyScale ) {\n\n\t\tif ( this.object.isPerspectiveCamera || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._scale /= dollyScale;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tthis.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t_dollyIn( dollyScale ) {\n\n\t\tif ( this.object.isPerspectiveCamera || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._scale *= dollyScale;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tthis.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t_updateZoomParameters( x, y ) {\n\n\t\tif ( ! this.zoomToCursor ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._performCursorZoom = true;\n\n\t\tconst rect = this.domElement.getBoundingClientRect();\n\t\tconst dx = x - rect.left;\n\t\tconst dy = y - rect.top;\n\t\tconst w = rect.width;\n\t\tconst h = rect.height;\n\n\t\tthis._mouse.x = ( dx / w ) * 2 - 1;\n\t\tthis._mouse.y = - ( dy / h ) * 2 + 1;\n\n\t\tthis._dollyDirection.set( this._mouse.x, this._mouse.y, 1 ).unproject( this.object ).sub( this.object.position ).normalize();\n\n\t}\n\n\t_clampDistance( dist ) {\n\n\t\treturn Math.max( this.minDistance, Math.min( this.maxDistance, dist ) );\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\t_handleMouseDownRotate( event ) {\n\n\t\tthis._rotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseDownDolly( event ) {\n\n\t\tthis._updateZoomParameters( event.clientX, event.clientX );\n\t\tthis._dollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseDownPan( event ) {\n\n\t\tthis._panStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseMoveRotate( event ) {\n\n\t\tthis._rotateEnd.set( event.clientX, event.clientY );\n\n\t\tthis._rotateDelta.subVectors( this._rotateEnd, this._rotateStart ).multiplyScalar( this.rotateSpeed );\n\n\t\tconst element = this.domElement;\n\n\t\tthis._rotateLeft( _twoPI * this._rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\tthis._rotateUp( _twoPI * this._rotateDelta.y / element.clientHeight );\n\n\t\tthis._rotateStart.copy( this._rotateEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseMoveDolly( event ) {\n\n\t\tthis._dollyEnd.set( event.clientX, event.clientY );\n\n\t\tthis._dollyDelta.subVectors( this._dollyEnd, this._dollyStart );\n\n\t\tif ( this._dollyDelta.y > 0 ) {\n\n\t\t\tthis._dollyOut( this._getZoomScale( this._dollyDelta.y ) );\n\n\t\t} else if ( this._dollyDelta.y < 0 ) {\n\n\t\t\tthis._dollyIn( this._getZoomScale( this._dollyDelta.y ) );\n\n\t\t}\n\n\t\tthis._dollyStart.copy( this._dollyEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseMovePan( event ) {\n\n\t\tthis._panEnd.set( event.clientX, event.clientY );\n\n\t\tthis._panDelta.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.panSpeed );\n\n\t\tthis._pan( this._panDelta.x, this._panDelta.y );\n\n\t\tthis._panStart.copy( this._panEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseWheel( event ) {\n\n\t\tthis._updateZoomParameters( event.clientX, event.clientY );\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tthis._dollyIn( this._getZoomScale( event.deltaY ) );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tthis._dollyOut( this._getZoomScale( event.deltaY ) );\n\n\t\t}\n\n\t\tthis.update();\n\n\t}\n\n\t_handleKeyDown( event ) {\n\n\t\tlet needsUpdate = false;\n\n\t\tswitch ( event.code ) {\n\n\t\t\tcase this.keys.UP:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tthis._rotateUp( _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tthis._pan( 0, this.keyPanSpeed );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.BOTTOM:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tthis._rotateUp( - _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tthis._pan( 0, - this.keyPanSpeed );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.LEFT:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tthis._rotateLeft( _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tthis._pan( this.keyPanSpeed, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.RIGHT:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tthis._rotateLeft( - _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tthis._pan( - this.keyPanSpeed, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\t// prevent the browser from scrolling on cursor keys\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.update();\n\n\t\t}\n\n\n\t}\n\n\t_handleTouchStartRotate( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._rotateStart.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._rotateStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\t_handleTouchStartPan( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._panStart.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._panStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\t_handleTouchStartDolly( event ) {\n\n\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\tconst dx = event.pageX - position.x;\n\t\tconst dy = event.pageY - position.y;\n\n\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tthis._dollyStart.set( 0, distance );\n\n\t}\n\n\t_handleTouchStartDollyPan( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchStartDolly( event );\n\n\t\tif ( this.enablePan ) this._handleTouchStartPan( event );\n\n\t}\n\n\t_handleTouchStartDollyRotate( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchStartDolly( event );\n\n\t\tif ( this.enableRotate ) this._handleTouchStartRotate( event );\n\n\t}\n\n\t_handleTouchMoveRotate( event ) {\n\n\t\tif ( this._pointers.length == 1 ) {\n\n\t\t\tthis._rotateEnd.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._rotateEnd.set( x, y );\n\n\t\t}\n\n\t\tthis._rotateDelta.subVectors( this._rotateEnd, this._rotateStart ).multiplyScalar( this.rotateSpeed );\n\n\t\tconst element = this.domElement;\n\n\t\tthis._rotateLeft( _twoPI * this._rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\tthis._rotateUp( _twoPI * this._rotateDelta.y / element.clientHeight );\n\n\t\tthis._rotateStart.copy( this._rotateEnd );\n\n\t}\n\n\t_handleTouchMovePan( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._panEnd.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._panEnd.set( x, y );\n\n\t\t}\n\n\t\tthis._panDelta.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.panSpeed );\n\n\t\tthis._pan( this._panDelta.x, this._panDelta.y );\n\n\t\tthis._panStart.copy( this._panEnd );\n\n\t}\n\n\t_handleTouchMoveDolly( event ) {\n\n\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\tconst dx = event.pageX - position.x;\n\t\tconst dy = event.pageY - position.y;\n\n\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tthis._dollyEnd.set( 0, distance );\n\n\t\tthis._dollyDelta.set( 0, Math.pow( this._dollyEnd.y / this._dollyStart.y, this.zoomSpeed ) );\n\n\t\tthis._dollyOut( this._dollyDelta.y );\n\n\t\tthis._dollyStart.copy( this._dollyEnd );\n\n\t\tconst centerX = ( event.pageX + position.x ) * 0.5;\n\t\tconst centerY = ( event.pageY + position.y ) * 0.5;\n\n\t\tthis._updateZoomParameters( centerX, centerY );\n\n\t}\n\n\t_handleTouchMoveDollyPan( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchMoveDolly( event );\n\n\t\tif ( this.enablePan ) this._handleTouchMovePan( event );\n\n\t}\n\n\t_handleTouchMoveDollyRotate( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchMoveDolly( event );\n\n\t\tif ( this.enableRotate ) this._handleTouchMoveRotate( event );\n\n\t}\n\n\t// pointers\n\n\t_addPointer( event ) {\n\n\t\tthis._pointers.push( event.pointerId );\n\n\t}\n\n\t_removePointer( event ) {\n\n\t\tdelete this._pointerPositions[ event.pointerId ];\n\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\tif ( this._pointers[ i ] == event.pointerId ) {\n\n\t\t\t\tthis._pointers.splice( i, 1 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_isTrackingPointer( event ) {\n\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\tif ( this._pointers[ i ] == event.pointerId ) return true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t_trackPointer( event ) {\n\n\t\tlet position = this._pointerPositions[ event.pointerId ];\n\n\t\tif ( position === undefined ) {\n\n\t\t\tposition = new Vector2();\n\t\t\tthis._pointerPositions[ event.pointerId ] = position;\n\n\t\t}\n\n\t\tposition.set( event.pageX, event.pageY );\n\n\t}\n\n\t_getSecondPointerPosition( event ) {\n\n\t\tconst pointerId = ( event.pointerId === this._pointers[ 0 ] ) ? this._pointers[ 1 ] : this._pointers[ 0 ];\n\n\t\treturn this._pointerPositions[ pointerId ];\n\n\t}\n\n\t//\n\n\t_customWheelEvent( event ) {\n\n\t\tconst mode = event.deltaMode;\n\n\t\t// minimal wheel event altered to meet delta-zoom demand\n\t\tconst newEvent = {\n\t\t\tclientX: event.clientX,\n\t\t\tclientY: event.clientY,\n\t\t\tdeltaY: event.deltaY,\n\t\t};\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 1: // LINE_MODE\n\t\t\t\tnewEvent.deltaY *= 16;\n\t\t\t\tbreak;\n\n\t\t\tcase 2: // PAGE_MODE\n\t\t\t\tnewEvent.deltaY *= 100;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t// detect if event was triggered by pinching\n\t\tif ( event.ctrlKey && ! this._controlActive ) {\n\n\t\t\tnewEvent.deltaY *= 10;\n\n\t\t}\n\n\t\treturn newEvent;\n\n\t}\n\n}\n\nfunction onPointerDown( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( this._pointers.length === 0 ) {\n\n\t\tthis.domElement.setPointerCapture( event.pointerId );\n\n\t\tthis.domElement.addEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.addEventListener( 'pointerup', this._onPointerUp );\n\n\t}\n\n\t//\n\n\tif ( this._isTrackingPointer( event ) ) return;\n\n\t//\n\n\tthis._addPointer( event );\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchStart( event );\n\n\t} else {\n\n\t\tthis._onMouseDown( event );\n\n\t}\n\n}\n\nfunction onPointerMove( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchMove( event );\n\n\t} else {\n\n\t\tthis._onMouseMove( event );\n\n\t}\n\n}\n\nfunction onPointerUp( event ) {\n\n\tthis._removePointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 0:\n\n\t\t\tthis.domElement.releasePointerCapture( event.pointerId );\n\n\t\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\t\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\t\tthis.dispatchEvent( _endEvent );\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t\t\tbreak;\n\n\t\tcase 1:\n\n\t\t\tconst pointerId = this._pointers[ 0 ];\n\t\t\tconst position = this._pointerPositions[ pointerId ];\n\n\t\t\t// minimal placeholder event - allows state correction on pointer-up\n\t\t\tthis._onTouchStart( { pointerId: pointerId, pageX: position.x, pageY: position.y } );\n\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onMouseDown( event ) {\n\n\tlet mouseAction;\n\n\tswitch ( event.button ) {\n\n\t\tcase 0:\n\n\t\t\tmouseAction = this.mouseButtons.LEFT;\n\t\t\tbreak;\n\n\t\tcase 1:\n\n\t\t\tmouseAction = this.mouseButtons.MIDDLE;\n\t\t\tbreak;\n\n\t\tcase 2:\n\n\t\t\tmouseAction = this.mouseButtons.RIGHT;\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tmouseAction = - 1;\n\n\t}\n\n\tswitch ( mouseAction ) {\n\n\t\tcase MOUSE.DOLLY:\n\n\t\t\tif ( this.enableZoom === false ) return;\n\n\t\t\tthis._handleMouseDownDolly( event );\n\n\t\t\tthis.state = _STATE.DOLLY;\n\n\t\t\tbreak;\n\n\t\tcase MOUSE.ROTATE:\n\n\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\tthis._handleMouseDownPan( event );\n\n\t\t\t\tthis.state = _STATE.PAN;\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\tthis._handleMouseDownRotate( event );\n\n\t\t\t\tthis.state = _STATE.ROTATE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase MOUSE.PAN:\n\n\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\tthis._handleMouseDownRotate( event );\n\n\t\t\t\tthis.state = _STATE.ROTATE;\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\tthis._handleMouseDownPan( event );\n\n\t\t\t\tthis.state = _STATE.PAN;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tif ( this.state !== _STATE.NONE ) {\n\n\t\tthis.dispatchEvent( _startEvent );\n\n\t}\n\n}\n\nfunction onMouseMove( event ) {\n\n\tswitch ( this.state ) {\n\n\t\tcase _STATE.ROTATE:\n\n\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\tthis._handleMouseMoveRotate( event );\n\n\t\t\tbreak;\n\n\t\tcase _STATE.DOLLY:\n\n\t\t\tif ( this.enableZoom === false ) return;\n\n\t\t\tthis._handleMouseMoveDolly( event );\n\n\t\t\tbreak;\n\n\t\tcase _STATE.PAN:\n\n\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\tthis._handleMouseMovePan( event );\n\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onMouseWheel( event ) {\n\n\tif ( this.enabled === false || this.enableZoom === false || this.state !== _STATE.NONE ) return;\n\n\tevent.preventDefault();\n\n\tthis.dispatchEvent( _startEvent );\n\n\tthis._handleMouseWheel( this._customWheelEvent( event ) );\n\n\tthis.dispatchEvent( _endEvent );\n\n}\n\nfunction onKeyDown( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tthis._handleKeyDown( event );\n\n}\n\nfunction onTouchStart( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 1:\n\n\t\t\tswitch ( this.touches.ONE ) {\n\n\t\t\t\tcase TOUCH.ROTATE:\n\n\t\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartRotate( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_ROTATE;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TOUCH.PAN:\n\n\t\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartPan( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_PAN;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tthis.state = _STATE.NONE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 2:\n\n\t\t\tswitch ( this.touches.TWO ) {\n\n\t\t\t\tcase TOUCH.DOLLY_PAN:\n\n\t\t\t\t\tif ( this.enableZoom === false && this.enablePan === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartDollyPan( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\tif ( this.enableZoom === false && this.enableRotate === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartDollyRotate( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tthis.state = _STATE.NONE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tif ( this.state !== _STATE.NONE ) {\n\n\t\tthis.dispatchEvent( _startEvent );\n\n\t}\n\n}\n\nfunction onTouchMove( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this.state ) {\n\n\t\tcase _STATE.TOUCH_ROTATE:\n\n\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\tthis._handleTouchMoveRotate( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_PAN:\n\n\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\tthis._handleTouchMovePan( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_DOLLY_PAN:\n\n\t\t\tif ( this.enableZoom === false && this.enablePan === false ) return;\n\n\t\t\tthis._handleTouchMoveDollyPan( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\tif ( this.enableZoom === false && this.enableRotate === false ) return;\n\n\t\t\tthis._handleTouchMoveDollyRotate( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n}\n\nfunction onContextMenu( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tevent.preventDefault();\n\n}\n\nfunction interceptControlDown( event ) {\n\n\tif ( event.key === 'Control' ) {\n\n\t\tthis._controlActive = true;\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\tdocument.addEventListener( 'keyup', this._interceptControlUp, { passive: true, capture: true } );\n\n\t}\n\n}\n\nfunction interceptControlUp( event ) {\n\n\tif ( event.key === 'Control' ) {\n\n\t\tthis._controlActive = false;\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\tdocument.removeEventListener( 'keyup', this._interceptControlUp, { passive: true, capture: true } );\n\n\t}\n\n}\n\nexport { OrbitControls };\n","import type { BiomeParameters } from '@/core/models/biome-parameters.model'\nimport type { Rect, DataTextureWrapper, RawRGBA } from '@/core/types'\nimport { alphaBlendColors, avg, findMinDistanceToRect, findRectOverlaps, truncateTo } from '@/utils/math-utils'\nimport { Color, DataTexture, Vector2 } from 'three'\nimport type { ColorRampStep } from '../models/color-ramp.model'\nimport { clamp, lerp } from 'three/src/math/MathUtils.js'\nimport { MUL_INT8_TO_UNIT } from '../globals'\nimport { toRawRGBA } from '@/utils/utils'\n\nexport function createRampTexture(buffer: Uint8Array, w: number, steps: ColorRampStep[]): DataTextureWrapper {\n if (steps.length > 0) {\n fillRamp(buffer, w, steps)\n }\n const dt = new DataTexture(buffer, w, 1)\n dt.needsUpdate = true\n return { texture: dt, data: buffer }\n}\n\nexport function recalculateRampTexture(buffer: Uint8Array, w: number, steps: ColorRampStep[]): void {\n if (steps.length === 0) {\n return\n }\n buffer.fill(0)\n fillRamp(buffer, w, steps)\n}\n\nfunction fillRamp(buffer: Uint8Array, w: number, steps: ColorRampStep[]) {\n let stride = 0\n let currentStep, nextStep\n for (let i = 0; i < steps.length - 1; i++) {\n currentStep = steps[i].clone()\n nextStep = steps[i + 1].clone()\n\n const currentStepX = truncateTo(currentStep.factor * w, 1e4)\n const nextStepX = truncateTo(nextStep.factor * w, 1e4)\n const totalPixels = Math.ceil(nextStepX - currentStepX)\n\n const lerpColor = new Color(0x0)\n let lerpAlpha = currentStep.alpha\n for (let px = 0; px < totalPixels; px++) {\n lerpColor.lerpColors(currentStep.color, nextStep.color, truncateTo(px / totalPixels, 1e4))\n lerpAlpha = lerp(currentStep.alpha, nextStep.alpha, truncateTo(px / totalPixels, 1e4))\n _writeToBuffer(buffer, stride, toRawRGBA(lerpColor, lerpAlpha), 255.0)\n stride += 4\n }\n }\n}\n\n// ------------------------------------------------------------------------------------------------\n\nexport function createBiomeTexture(buffer: Uint8Array, w: number, biomes: BiomeParameters[]): DataTextureWrapper {\n if (biomes.length > 0) {\n fillBiomes(buffer, w, biomes)\n }\n const dt = new DataTexture(buffer, w, w)\n dt.needsUpdate = true\n return { texture: dt, data: buffer }\n}\n\nexport function recalculateBiomeTexture(buffer: Uint8Array, w: number, biomes: BiomeParameters[]): void {\n if (biomes.length === 0) {\n return\n }\n buffer.fill(0)\n fillBiomes(buffer, w, biomes)\n}\n\nfunction fillBiomes(buffer: Uint8Array, w: number, biomes: BiomeParameters[]) {\n let lineStride = 0\n let cellStride = (Math.ceil(biomes[0].humiMin * w) + biomes[0].tempMin * w) * 4\n for (let i = 0; i < biomes.length; i++) {\n const biome = biomes[i]\n const biomeRect: Rect = {\n x: Math.floor(biome.humiMin * w),\n y: Math.floor(biome.tempMin * w),\n w: Math.ceil((biome.humiMax - biome.humiMin) * w),\n h: Math.ceil((biome.tempMax - biome.tempMin) * w),\n }\n const totalPixels = biomeRect.w * biomeRect.h\n const maxBiomeX = (biomeRect.x + biomeRect.w) * 4\n\n // Pre-calculate smoothing data\n const biomeAvgSmoothness = avg(...[biomeRect.w * biome.smoothness, biomeRect.h * biome.smoothness])\n const biomeOverlaps = findRectOverlaps(w, w, biomeRect)\n\n // Adjust strides depending on starting temp & humi\n cellStride = biomeRect.x * 4\n lineStride = biomeRect.y * w * 4\n\n // Prepare coords and pixel/biome colors\n const pixelCoords: Vector2 = new Vector2(biomeRect.x, biomeRect.y)\n const pixelRGBA = { r: 0, g: 0, b: 0, a: 0 }\n const biomeRGBA = { r: biome.color.r, g: biome.color.g, b: biome.color.b, a: 1 }\n\n // Iterate through every single pixel inside the biome rect\n let rectDistance: number, bufferIdx: number, blendedColor: RawRGBA\n for (let biomePx = 0; biomePx < totalPixels; biomePx++) {\n bufferIdx = lineStride + cellStride\n _writeToRawRGBA(pixelRGBA, buffer, bufferIdx, MUL_INT8_TO_UNIT)\n\n rectDistance = findMinDistanceToRect(biomeRect, pixelCoords.x, pixelCoords.y, biomeOverlaps)\n biomeRGBA.a = truncateTo(clamp(rectDistance / biomeAvgSmoothness, 0, 1), 1e4)\n\n if (pixelRGBA.a > 0) {\n blendedColor = alphaBlendColors(pixelRGBA, biomeRGBA)\n _writeToBuffer(buffer, bufferIdx, blendedColor, 255.0)\n } else {\n _writeToBuffer(buffer, bufferIdx, biomeRGBA, 255.0)\n }\n\n cellStride += 4\n pixelCoords.x++\n\n if (cellStride >= maxBiomeX) {\n lineStride += w * 4\n cellStride = biomeRect.x * 4\n pixelCoords.x = biomeRect.x\n pixelCoords.y++\n }\n }\n }\n}\n\nfunction _writeToRawRGBA(rgba: RawRGBA, buffer: Uint8Array, index: number, multiplier: number = 1) {\n rgba.r = clamp(buffer[index] * multiplier, 0, 1)\n rgba.g = clamp(buffer[index + 1] * multiplier, 0, 1)\n rgba.b = clamp(buffer[index + 2] * multiplier, 0, 1)\n rgba.a = clamp(buffer[index + 3] * multiplier, 0, 1)\n}\n\nfunction _writeToBuffer(buffer: Uint8Array, index: number, rgba: RawRGBA, multiplier: number = 1) {\n buffer[index] = clamp(rgba.r * multiplier, 0, 255)\n buffer[index + 1] = clamp(rgba.g * multiplier, 0, 255)\n buffer[index + 2] = clamp(rgba.b * multiplier, 0, 255)\n buffer[index + 3] = clamp(rgba.a * multiplier, 0, 255)\n}\n","import * as THREE from 'three'\n\nexport const TEXTURE_LOADER = new THREE.TextureLoader()\nexport const CUBE_TEXTURE_LOADER = new THREE.CubeTextureLoader()\n\n/**\n *\n * @param path Loads a THREE.CubeTexture from the given path and faces\n * @param faces the faces of the cubemap\n */\nexport function loadCubeTexture(path: string, faces: string[], filter?: THREE.MinificationTextureFilter) {\n if (faces.length !== 6) {\n throw new Error('Exactly six faces are required for a CubeTexture !')\n }\n const cubemap = CUBE_TEXTURE_LOADER.setPath(path).load(faces)\n cubemap.minFilter = filter ?? THREE.NearestFilter\n return cubemap\n}\n\n/**\n * Loads a texture from a local URL (for pre-stored textures)\n * @param data the image URL\n */\nexport function loadTextureFromUrl(url: string, colorSpace: THREE.ColorSpace) {\n const texture = TEXTURE_LOADER.load(url, undefined, undefined, (err) => console.error(err))\n texture.colorSpace = colorSpace\n return texture\n}\n","export default \"// Sourced from Anderson Mancini:\\n// https://codesandbox.io/s/lens-flare-vanilla-threejs-pt4fwr\\n// ------------------------------------------------------------------------------------------------\\n\\n#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\nout vec2 vUv;\\n\\nvoid main() {\\n vUv = uv;\\n gl_Position = vec4(position, 1.0);\\n}\"","export default \"// Sourced from Anderson Mancini:\\n// https://github.com/ektogamat/lensflare-threejs-vanilla\\n// https://codesandbox.io/s/lens-flare-vanilla-threejs-pt4fwr\\n// Note: rleased under the Creative Commons CC0 1.0 Universal license\\n// ------------------------------------------------------------------------------------------------\\n\\n#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\n// Based on https://www.shadertoy.com/view/4sX3Rs\\n// Note: released under the Unlicense\\nuniform float iTime;\\nuniform vec2 lensPosition;\\nuniform vec2 iResolution;\\nuniform vec3 colorGain;\\nuniform float starPoints;\\nuniform float starPointsIntensity;\\nuniform float glareSize;\\nuniform float glareIntensity;\\nuniform float flareSize;\\nuniform float flareSpeed;\\nuniform float flareShape;\\nuniform float haloScale;\\nuniform float opacity;\\nuniform bool animated;\\nuniform bool anamorphic;\\nuniform bool enabled;\\nuniform bool secondaryGhosts;\\nuniform bool starBurst;\\nuniform float ghostScale;\\nuniform bool additionalStreaks;\\nuniform sampler2D lensDirtTexture;\\n\\nin vec2 vUv;\\n\\nfloat uDispersal = 0.3;\\nfloat uHaloWidth = 0.6;\\nfloat uDistortion = 1.5;\\nfloat uBrightDark = 0.5;\\nvec2 vTexCoord;\\n\\n\\nfloat rand(float n){return fract(sin(n) * 43758.5453123);}\\n\\nfloat noise(float p){\\n float fl = floor(p);\\n float fc = fract(p);\\n return mix(rand(fl),rand(fl + 1.0), fc);\\n}\\n\\nvec3 hsv2rgb(vec3 c)\\n{\\n vec4 k = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\\n vec3 p = abs(fract(c.xxx + k.xyz) * 6.0 - k.www);\\n return c.z * mix(k.xxx, clamp(p - k.xxx, 0.0, 1.0), c.y);\\n}\\n\\nfloat saturate2(float x)\\n{\\n return clamp(x, 0.,1.);\\n}\\n\\n\\nvec2 rotateUV(vec2 uv, float rotation)\\n{\\n return vec2(\\n cos(rotation) * uv.x + sin(rotation) * uv.y,\\n cos(rotation) * uv.y - sin(rotation) * uv.x\\n );\\n}\\n\\n// Based on https://www.shadertoy.com/view/XtKfRV\\nvec3 drawflare(vec2 p, float intensity, float rnd, float speed, int id)\\n{\\n float flarehueoffset = (1. / 32.) * float(id) * 0.1;\\n float lingrad = distance(vec2(0.), p);\\n float expgrad = 1. / exp(lingrad * (fract(rnd) * 0.66 + 0.33));\\n vec3 colgrad = hsv2rgb(vec3( fract( (expgrad * 8.) + speed * flareSpeed + flarehueoffset), pow(1.-abs(expgrad*2.-1.), 0.45), 20.0 * expgrad * intensity)); //rainbow spectrum effect\\n\\n float internalStarPoints;\\n\\n if(anamorphic){\\n internalStarPoints = 1.0;\\n } else{\\n internalStarPoints = starPoints;\\n }\\n \\n float blades = length(p * flareShape * sin(internalStarPoints * atan(p.x, p.y))); //draw 6 blades\\n \\n float comp = pow(1.-saturate2(blades), ( anamorphic ? 100. : 24.));\\n comp += saturate2(expgrad-0.9) * 3.;\\n comp = pow(comp * expgrad, 8. + (1.-intensity) * 5.);\\n \\n if(flareSpeed > 0.0){\\n return vec3(comp) * colgrad;\\n } else{\\n return vec3(comp) * flareSize * 15.;\\n }\\n}\\n\\nfloat dist(vec3 a, vec3 b) { return abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z); }\\n\\nfloat glare(vec2 uv, vec2 pos, float size)\\n{\\n vec2 main;\\n\\n if(animated){\\n main = rotateUV(uv-pos, iTime * 0.1); \\n } else{\\n main = uv-pos; \\n }\\n \\n float ang = atan(main.y, main.x) * (anamorphic ? 1.0 : starPoints);\\n float dist = length(main); \\n dist = pow(dist, .9);\\n \\n float f0 = 1.0/(length(uv-pos)*(1.0/size*16.0)+.2);\\n\\n return f0+f0*(sin((ang))*.2 +.3);\\n}\\n\\n//https://www.shadertoy.com/view/Xd2GR3\\nfloat sdHex(vec2 p){\\n p = abs(p);\\n vec2 q = vec2(p.x*2.0*0.5773503, p.y + p.x*0.5773503);\\n return dot(step(q.xy,q.yx), 1.0-q.yx);\\n}\\n\\n//fakes x^n for specular effects (k is 0-1)\\nfloat fpow(float x, float k){\\n return x > k ? pow((x-k)/(1.0-k),2.0) : 0.0;\\n}\\n\\nvec3 renderhex(vec2 uv, vec2 p, float s, vec3 col){\\n uv -= p;\\n if (abs(uv.x) < 0.2*s && abs(uv.y) < 0.2*s){\\n return mix(vec3(0),mix(vec3(0),col,0.1 + fpow(length(uv/s),0.1)*10.0),smoothstep(0.0,0.1,sdHex(uv*20.0/s)));\\n }\\n return vec3(0);\\n}\\n\\nvec3 LensFlare(vec2 uv, vec2 pos)\\n{\\n vec2 main = uv-pos;\\n vec2 uvd = uv*(length(uv));\\n \\n float ang = atan(main.x,main.y);\\n \\n float f0 = .3/(length(uv-pos)*16.0+1.0);\\n \\n f0 = f0*(sin(noise(sin(ang*3.9-(animated ? iTime : 0.0) * 0.3) * starPoints))*.2 );\\n \\n float f1 = max(0.01-pow(length(uv+1.2*pos),1.9),.0)*7.0;\\n\\n float f2 = max(.9/(10.0+32.0*pow(length(uvd+0.99*pos),2.0)),.0)*0.35;\\n float f22 = max(.9/(11.0+32.0*pow(length(uvd+0.85*pos),2.0)),.0)*0.23;\\n float f23 = max(.9/(12.0+32.0*pow(length(uvd+0.95*pos),2.0)),.0)*0.6;\\n \\n vec2 uvx = mix(uv,uvd, 0.1);\\n \\n float f4 = max(0.01-pow(length(uvx+0.4*pos),2.9),.0)*4.02;\\n float f42 = max(0.0-pow(length(uvx+0.45*pos),2.9),.0)*4.1;\\n float f43 = max(0.01-pow(length(uvx+0.5*pos),2.9),.0)*4.6;\\n \\n uvx = mix(uv,uvd,-.4);\\n \\n float f5 = max(0.01-pow(length(uvx+0.1*pos),5.5),.0)*2.0;\\n float f52 = max(0.01-pow(length(uvx+0.2*pos),5.5),.0)*2.0;\\n float f53 = max(0.01-pow(length(uvx+0.1*pos),5.5),.0)*2.0;\\n \\n uvx = mix(uv,uvd, 2.1);\\n \\n float f6 = max(0.01-pow(length(uvx-0.3*pos),1.61),.0)*3.159;\\n float f62 = max(0.01-pow(length(uvx-0.325*pos),1.614),.0)*3.14;\\n float f63 = max(0.01-pow(length(uvx-0.389*pos),1.623),.0)*3.12;\\n \\n vec3 c = vec3(glare(uv,pos, glareSize));\\n\\n vec2 prot;\\n\\n if(animated){\\n prot = rotateUV(uv - pos, (iTime * 0.1)); \\n } else if(anamorphic){\\n prot = rotateUV(uv - pos, 1.570796); \\n } else {\\n prot = uv - pos;\\n }\\n\\n c += drawflare(prot, (anamorphic ? flareSize * 10. : flareSize), 0.1, iTime, 1);\\n \\n c.r+=(f1+f2+f4+f5+f6) * glareIntensity;\\n c.g+=(f1+f22+f42+f52+f62) * glareIntensity;\\n c.b+=(f1+f23+f43+f53+f63) * glareIntensity;\\n c = c*1.3 * vec3(length(uvd)+.09); // Vignette\\n c += vec3((f0 * starPointsIntensity) / 4.0);\\n \\n return c;\\n}\\n\\nvec3 cc(vec3 color, float factor,float factor2)\\n{\\n float w = color.x+color.y+color.z;\\n return mix(color,vec3(w)*factor,w*factor2);\\n} \\n\\nfloat rnd(vec2 p)\\n{\\n float f = fract(sin(dot(p, vec2(12.1234, 72.8392) )*45123.2));\\n return f; \\n}\\n\\nfloat rnd(float w)\\n{\\n float f = fract(sin(w)*1000.);\\n return f; \\n}\\n\\nfloat regShape(vec2 p, int N)\\n{\\n float f;\\n \\n float a=atan(p.x,p.y)+.2;\\n float b=6.28319/float(N);\\n f=smoothstep(.5,.51, cos(floor(.5+a/b)*b-a)*length(p.xy)* 2.0 -ghostScale);\\n \\n return f;\\n}\\n\\n// Based on https://www.shadertoy.com/view/Xlc3D2\\nvec3 circle(vec2 p, float size, float decay, vec3 color, vec3 color2, float dist, vec2 mouse)\\n{\\n float l = length(p + mouse*(dist*2.))+size/2.;\\n float l2 = length(p + mouse*(dist*4.))+size/3.;\\n \\n float c = max(0.04-pow(length(p + mouse*dist), size*ghostScale), 0.0)*10.;\\n float c1 = max(0.001-pow(l-0.3, 1./40.)+sin(l*20.), 0.0)*3.;\\n float c2 = max(0.09/pow(length(p-mouse*dist/.5)*1., .95), 0.0)/20.;\\n float s = max(0.02-pow(regShape(p*5. + mouse*dist*5. + decay, 6) , 1.), 0.0)*1.5;\\n \\n color = cos(vec3(colorGain))*0.5+.5;\\n vec3 f = c*color;\\n f += c1*color;\\n f += c2*color; \\n f += s*color;\\n return f;\\n}\\n\\nvec4 getLensColor(float x){\\n return vec4(vec3(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(vec3(0., 0., 0.),\\n vec3(0., 0., 0.), smoothstep(0.0, 0.063, x)),\\n vec3(0., 0., 0.), smoothstep(0.063, 0.125, x)),\\n vec3(0.0, 0., 0.), smoothstep(0.125, 0.188, x)),\\n vec3(0.188, 0.131, 0.116), smoothstep(0.188, 0.227, x)),\\n vec3(0.31, 0.204, 0.537), smoothstep(0.227, 0.251, x)),\\n vec3(0.192, 0.106, 0.286), smoothstep(0.251, 0.314, x)),\\n vec3(0.102, 0.008, 0.341), smoothstep(0.314, 0.392, x)),\\n vec3(0.086, 0.0, 0.141), smoothstep(0.392, 0.502, x)),\\n vec3(1.0, 0.31, 0.0), smoothstep(0.502, 0.604, x)),\\n vec3(.1, 0.1, 0.1), smoothstep(0.604, 0.643, x)),\\n vec3(1.0, 0.929, 0.0), smoothstep(0.643, 0.761, x)),\\n vec3(1.0, 0.086, 0.424), smoothstep(0.761, 0.847, x)),\\n vec3(1.0, 0.49, 0.0), smoothstep(0.847, 0.89, x)),\\n vec3(0.945, 0.275, 0.475), smoothstep(0.89, 0.941, x)),\\n vec3(0.251, 0.275, 0.796), smoothstep(0.941, 1.0, x))),\\n 1.0);\\n}\\n\\nfloat dirtNoise(vec2 p){\\n vec2 f = fract(p);\\n f = (f * f) * (3.0 - (2.0 * f)); \\n float n = dot(floor(p), vec2(1.0, 157.0));\\n vec4 a = fract(sin(vec4(n + 0.0, n + 1.0, n + 157.0, n + 158.0)) * 43758.5453123);\\n return mix(mix(a.x, a.y, f.x), mix(a.z, a.w, f.x), f.y);\\n} \\n\\nfloat fbm(vec2 p){\\n const mat2 m = mat2(0.80, -0.60, 0.60, 0.80);\\n float f = 0.0;\\n f += 0.5000*dirtNoise(p); p = m*p*2.02;\\n f += 0.2500*dirtNoise(p); p = m*p*2.03;\\n f += 0.1250*dirtNoise(p); p = m*p*2.01;\\n f += 0.0625*dirtNoise(p);\\n return f/0.9375;\\n} \\nvec4 getLensStar(vec2 p){\\n vec2 pp = (p - vec2(0.5)) * 2.0;\\n float a = atan(pp.y, pp.x);\\n vec4 cp = vec4(sin(a * 1.0), length(pp), sin(a * 13.0), sin(a * 53.0));\\n float d = sin(clamp(pow(length(vec2(0.5) - p) * 0.5 + haloScale /2., 5.0), 0.0, 1.0) * 3.14159);\\n vec3 c = vec3(d) * vec3(fbm(cp.xy * 16.0) * fbm(cp.zw * 9.0) * max(max(max(max(0.5, sin(a * 1.0)), sin(a * 3.0) * 0.8), sin(a * 7.0) * 0.8), sin(a * 9.0) * 10.6));\\n c *= vec3(mix(2.0, (sin(length(pp.xy) * 256.0) * 0.5) + 0.5, sin((clamp((length(pp.xy) - 0.875) / 0.1, 0.0, 1.0) + 0.0) * 2.0 * 3.14159) * 1.5) + 0.5) * 0.3275;\\n return vec4(vec3(c * 1.0), d);\\t\\n}\\n\\nvec4 getLensDirt(vec2 p){\\n p.xy += vec2(fbm(p.yx * 3.0), fbm(p.yx * 2.0)) * 0.0825;\\n vec3 o = vec3(mix(0.125, 0.25, max(max(smoothstep(0.1, 0.0, length(p - vec2(0.25))),\\n smoothstep(0.4, 0.0, length(p - vec2(0.75)))),\\n smoothstep(0.8, 0.0, length(p - vec2(0.875, 0.125))))));\\n o += vec3(max(fbm(p * 1.0) - 0.5, 0.0)) * 0.5;\\n o += vec3(max(fbm(p * 2.0) - 0.5, 0.0)) * 0.5;\\n o += vec3(max(fbm(p * 4.0) - 0.5, 0.0)) * 0.25;\\n o += vec3(max(fbm(p * 8.0) - 0.75, 0.0)) * 1.0;\\n o += vec3(max(fbm(p * 16.0) - 0.75, 0.0)) * 0.75;\\n o += vec3(max(fbm(p * 64.0) - 0.75, 0.0)) * 0.5;\\n return vec4(clamp(o, vec3(0.15), vec3(1.0)), 1.0);\\t\\n}\\n\\nvec4 textureLimited(sampler2D tex, vec2 texCoord){\\n if(((texCoord.x < 0.) || (texCoord.y < 0.)) || ((texCoord.x > 1.) || (texCoord.y > 1.))){\\n return vec4(0.0);\\n }else{\\n return texture(tex, texCoord); \\n }\\n}\\n\\nvec4 textureDistorted(sampler2D tex, vec2 texCoord, vec2 direction, vec3 distortion) {\\n return vec4(textureLimited(tex, (texCoord + (direction * distortion.r))).r,\\n textureLimited(tex, (texCoord + (direction * distortion.g))).g,\\n textureLimited(tex, (texCoord + (direction * distortion.b))).b,\\n 1.0);\\n}\\n\\nvec4 getStartBurst(){\\n vec2 aspectTexCoord = vec2(1.0) - (((vTexCoord - vec2(0.5)) * vec2(1.0)) + vec2(0.5)); \\n vec2 texCoord = vec2(1.0) - vTexCoord; \\n vec2 ghostVec = (vec2(0.5) - texCoord) * uDispersal - lensPosition;\\n vec2 ghostVecAspectNormalized = normalize(ghostVec * vec2(1.0)) * vec2(1.0);\\n vec2 haloVec = normalize(ghostVec) * uHaloWidth;\\n vec2 haloVecAspectNormalized = ghostVecAspectNormalized * uHaloWidth;\\n vec2 texelSize = vec2(1.0) / vec2(iResolution.xy);\\n vec3 distortion = vec3(-(texelSize.x * uDistortion), 0.2, texelSize.x * uDistortion);\\n vec4 c = vec4(0.0);\\n for (int i = 0; i < 8; i++) {\\n vec2 offset = texCoord + (ghostVec * float(i));\\n c += textureDistorted(lensDirtTexture, offset, ghostVecAspectNormalized, distortion) * pow(max(0.0, 1.0 - (length(vec2(0.5) - offset) / length(vec2(0.5)))), 10.0);\\n } \\n vec2 haloOffset = texCoord + haloVecAspectNormalized; \\n return (c * getLensColor((length(vec2(0.5) - aspectTexCoord) / length(vec2(haloScale))))) + \\n (textureDistorted(lensDirtTexture, haloOffset, ghostVecAspectNormalized, distortion) * pow(max(0.0, 1.0 - (length(vec2(0.5) - haloOffset) / length(vec2(0.5)))), 10.0));\\n} \\n\\nvoid main()\\n{\\n vec2 uv = vUv;\\n vec2 myUV = uv -0.5;\\n myUV.y *= iResolution.y/iResolution.x;\\n vec2 mouse = lensPosition * 0.5;\\n mouse.y *= iResolution.y/iResolution.x;\\n \\n //First LensFlarePass\\n vec3 finalColor = LensFlare(myUV, mouse) * 20.0 * colorGain / 2.;\\n\\n //Aditional Streaks\\n if(additionalStreaks){\\n vec3 circColor = vec3(0.9, 0.2, 0.1);\\n vec3 circColor2 = vec3(0.3, 0.1, 0.9);\\n\\n for(float i=0.;i<10.;i++){\\n finalColor += circle(myUV, pow(rnd(i*2000.)*2.8, .1)+1.41, 0.0, circColor+i , circColor2+i, rnd(i*20.)*3.+0.2-.5, lensPosition);\\n }\\n }\\n\\n //Alternative Ghosts\\n if(secondaryGhosts){\\n vec3 altGhosts = vec3(0.1);\\n altGhosts += renderhex(myUV, -lensPosition*0.25, ghostScale * 1.4, vec3(0.03)* colorGain);\\n altGhosts += renderhex(myUV, lensPosition*0.25, ghostScale * 0.5, vec3(0.03)* colorGain);\\n altGhosts += renderhex(myUV, lensPosition*0.1, ghostScale * 1.6,vec3(0.03)* colorGain);\\n altGhosts += renderhex(myUV, lensPosition*1.8, ghostScale * 2.0, vec3(0.03)* colorGain);\\n altGhosts += renderhex(myUV, lensPosition*1.25, ghostScale * 0.8, vec3(0.03)* colorGain);\\n altGhosts += renderhex(myUV, -lensPosition*1.25, ghostScale * 5.0, vec3(0.03)* colorGain);\\n \\n //Circular ghost\\n altGhosts += fpow(1.0 - abs(distance(lensPosition*0.8,myUV) - 0.5),0.985)*vec3(.1);\\n altGhosts += fpow(1.0 - abs(distance(lensPosition*0.4,myUV) - 0.2),0.994)*vec3(.05);\\n finalColor += altGhosts;\\n }\\n \\n\\n //Starburst \\n if(starBurst){\\n vTexCoord = myUV + 0.5;\\n vec4 lensMod = getLensDirt(myUV);\\n float tooBright = 1.0 - (clamp(uBrightDark, 0.0, 0.5) * 2.0); \\n float tooDark = clamp(uBrightDark - 0.5, 0.0, 0.5) * 2.0;\\n lensMod += mix(lensMod, pow(lensMod * 2.0, vec4(2.0)) * 0.5, tooBright);\\n float lensStarRotationAngle = ((myUV.x + myUV.y)) * (1.0 / 6.0);\\n vec2 lensStarTexCoord = (mat2(cos(lensStarRotationAngle), -sin(lensStarRotationAngle), sin(lensStarRotationAngle), cos(lensStarRotationAngle)) * vTexCoord);\\n lensMod += getLensStar(lensStarTexCoord) * 2.;\\n \\n finalColor += clamp((lensMod.rgb * getStartBurst().rgb ), 0.01, 1.0);\\n }\\n\\n //Final composed output\\n gl_FragColor = vec4(finalColor, opacity);\\n #include \\n #include \\n}\"","import * as THREE from 'three'\nimport { LG_NAME_PLANET, LG_NAME_RING } from '../globals'\nimport vertexShader from '@assets/glsl/core/lens_flare.vert.glsl?raw'\nimport fragmentShader from '@assets/glsl/core/lens_flare.frag.glsl?raw'\nimport { damp } from 'three/src/math/MathUtils.js'\nimport { TEXTURE_LOADER } from './external-data.loader'\n\nexport type LensFlareParams = {\n lensPosition: THREE.Vector3\n opacity: number\n colorGain: THREE.Color\n starPoints: number\n starPointsIntensity: number\n glareSize: number\n glareIntensity: number\n flareSize: number\n flareSpeed: number\n flareShape: number\n haloScale: number\n animated: boolean\n anamorphic: boolean\n secondaryGhosts: boolean\n starBurst: boolean\n ghostScale: number\n additionalStreaks: boolean\n lensDirtTexture: THREE.Texture\n}\n\n/**\n * Custom class that contains all the processing required to create lens flares.\n *\n * Based on Anderson Mancini's code: https://github.com/ektogamat/lensflare-threejs-vanilla\n */\nexport class LensFlareEffect {\n private _params: LensFlareParams\n private _material: THREE.ShaderMaterial\n private _mesh: THREE.Mesh\n\n private _internalOpacity: number\n private _viewport: THREE.Vector4\n private _flarePosition: THREE.Vector3\n private _raycaster: THREE.Raycaster\n\n constructor(params: Partial) {\n this._params = {\n lensPosition: params.lensPosition ?? new THREE.Vector3(0),\n opacity: params.opacity ?? 1,\n colorGain: params.colorGain ?? new THREE.Color(95, 12, 10),\n starPointsIntensity: params.starPointsIntensity ?? 0.25,\n starPoints: params.starPoints ?? 2,\n glareSize: params.glareSize ?? 0.025,\n glareIntensity: params.glareIntensity ?? 0.5,\n flareSize: params.flareSize ?? 0.001,\n flareSpeed: params.flareSpeed ?? 0,\n flareShape: params.flareShape ?? 0.375,\n haloScale: params.haloScale ?? 0,\n animated: params.animated ?? false,\n anamorphic: params.anamorphic ?? false,\n secondaryGhosts: params.secondaryGhosts ?? false,\n starBurst: params.starBurst ?? false,\n ghostScale: params.ghostScale ?? 0.15,\n additionalStreaks: params.additionalStreaks ?? false,\n lensDirtTexture: params.lensDirtTexture ?? TEXTURE_LOADER.load('/glsl/lens-Dirt-Texture.jpg'),\n }\n this._internalOpacity = Number(this._params.opacity)\n this._viewport = new THREE.Vector4()\n this._flarePosition = new THREE.Vector3()\n this._raycaster = new THREE.Raycaster()\n\n this._material = this.initMaterial()\n this._mesh = new THREE.Mesh(new THREE.PlaneGeometry(2, 2, 1, 1), this._material)\n this._mesh.frustumCulled = false\n }\n\n private initMaterial(): THREE.ShaderMaterial {\n const lensFlareMaterial = new THREE.ShaderMaterial({\n uniforms: {\n iTime: { value: 0 },\n iResolution: {\n value: new THREE.Vector2(window.innerWidth, window.innerHeight),\n },\n lensPosition: { value: this._params.lensPosition.clone() },\n opacity: { value: this._internalOpacity },\n colorGain: { value: this._params.colorGain },\n starPoints: { value: this._params.starPoints },\n starPointsIntensity: { value: this._params.starPointsIntensity },\n glareSize: { value: this._params.glareSize },\n glareIntensity: { value: this._params.glareIntensity },\n flareSize: { value: this._params.flareSize },\n flareSpeed: { value: this._params.flareSpeed },\n flareShape: { value: this._params.flareShape },\n haloScale: { value: this._params.haloScale },\n animated: { value: this._params.animated },\n anamorphic: { value: this._params.anamorphic },\n secondaryGhosts: { value: this._params.secondaryGhosts },\n starBurst: { value: this._params.starBurst },\n ghostScale: { value: this._params.ghostScale },\n additionalStreaks: { value: this._params.additionalStreaks },\n lensDirtTexture: { value: this._params.lensDirtTexture },\n },\n fragmentShader,\n vertexShader,\n transparent: true,\n depthWrite: false,\n depthTest: false,\n blending: THREE.AdditiveBlending,\n name: 'LensFlareShader',\n })\n return lensFlareMaterial\n }\n\n private checkTransparency(intersects: THREE.Intersection[]) {\n if (intersects?.length === 0) {\n this._internalOpacity = this._params.opacity\n return\n }\n\n const iObject = intersects[0].object as THREE.Mesh\n const iMaterial = iObject.material as THREE.Material\n if (!iObject.visible) {\n this._internalOpacity = this._params.opacity\n } else if (iMaterial instanceof THREE.MeshPhysicalMaterial) {\n this._internalOpacity = this._params.opacity * (iMaterial.transmission * 0.5)\n } else {\n if (iMaterial.transparent && iMaterial.opacity < 0.98) {\n this._internalOpacity = this._params.opacity / (iMaterial.opacity * 10)\n } else {\n this._internalOpacity = iObject.userData.lens === 'no-occlusion' ? this._params.opacity : 0\n }\n }\n }\n\n public update(renderer: THREE.WebGLRenderer, scene: THREE.Scene, camera: THREE.Camera, clock: THREE.Clock) {\n const dt = clock.getDelta()\n\n renderer.getCurrentViewport(this._viewport)\n this._mesh.lookAt(camera.position)\n this._material.uniforms.iResolution.value.set(this._viewport.z, this._viewport.w)\n\n const projectedPosition = this._params.lensPosition.clone()\n projectedPosition.project(camera)\n\n this._flarePosition.set(projectedPosition.x, projectedPosition.y, projectedPosition.z)\n if (this._flarePosition.z < 1) {\n this._material.uniforms.lensPosition.value.set(this._flarePosition.x, this._flarePosition.y)\n }\n\n this._raycaster.setFromCamera(new THREE.Vector2(projectedPosition.x, projectedPosition.y), camera)\n\n const planet = scene.getObjectByName(LG_NAME_PLANET)\n const ring = scene.getObjectByName(LG_NAME_RING)\n if (planet && ring) {\n const intersects = this._raycaster.intersectObjects([planet, ring], false)\n this.checkTransparency(intersects)\n }\n this._material.uniforms.iTime.value += dt\n this._material.uniforms.opacity.value = damp(this._material.uniforms.opacity.value, this._internalOpacity, 10, dt)\n }\n\n public updatePosition(lensPosition: THREE.Vector3) {\n this.material.uniforms['lensPosition'].value.set(lensPosition.x, lensPosition.y, lensPosition.z)\n }\n\n public get mesh(): THREE.Mesh {\n return this._mesh\n }\n public get material(): THREE.ShaderMaterial {\n return this._material\n }\n}\n","export default \"// Sourced from Brian Jackson (@jaxzin), using code from GLtracy:\\n// https://glitch.com/~polite-playful-wool\\n// https://www.shadertoy.com/view/lslXDr\\n// ------------------------------------------------------------------------------------------------\\n\\n#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\nuniform vec3 u_light_position;\\nuniform float u_light_intensity;\\nuniform float u_surface_radius;\\nuniform float u_radius;\\nuniform float u_density;\\n\\nuniform float u_intensity;\\nuniform int u_color_mode; // determines color output between hue-mode, direct-mode or mixed-mode\\nuniform float u_hue;\\nuniform vec3 u_tint;\\n\\nin float fov;\\nin vec4 vWorldPosition;\\nin vec3 viewRay; // View space ray direction\\n\\n@import functions/atmosphere_utils;\\n@import functions/color_utils;\\n\\nvoid main() {\\n // World Space Ray\\n vec4 worldRay = inverse(viewMatrix) * vec4(viewRay, 0.0);\\n\\n // Normalize the ray direction\\n vec3 rayDir = normalize(worldRay.xyz);\\n\\n // default ray origin\\n vec3 eye = vWorldPosition.xyz;\\n vec3 sunglightDir = normalize(u_light_position - vWorldPosition.xyz);\\n\\n // find if the pixel is part of the atmosphere\\n vec2 e = ray_vs_sphere(eye, rayDir, u_radius);\\n\\n // something went horribly wrong so set the pixel transparent\\n if ( e.x > e.y ) {\\n gl_FragColor = vec4(0.0);\\n return;\\n }\\n\\n // find if the pixel is part of the surface\\n vec2 f = ray_vs_sphere(eye, rayDir, u_surface_radius);\\n e.y = min( e.y, f.x );\\n\\n vec4 I = in_scatter(eye, rayDir, e, sunglightDir, u_light_intensity);\\n vec4 I_gamma = pow(I, vec4(1.0 / 2.2));\\n vec4 I_shifted = vec4(hue_shift(I_gamma.xyz, u_hue * PI), I_gamma.a);\\n vec4 tint = vec4(u_tint, 1.0);\\n \\n if (u_color_mode == 0) {\\n gl_FragColor = I_shifted * u_intensity;\\n } else if (u_color_mode == 1) {\\n gl_FragColor = whitescale(I_gamma) * tint_to_matrix(tint) * u_intensity;\\n } else {\\n gl_FragColor = I_shifted * tint * u_intensity;\\n }\\n}\"","export default \"// Sourced from Brian Jackson (@jaxzin), using code from GLtracy:\\n// https://glitch.com/~polite-playful-wool\\n// https://www.shadertoy.com/view/lslXDr\\n// ------------------------------------------------------------------------------------------------\\n\\n#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\nconst float PI = 3.14159265359;\\n\\nout vec4 vWorldPosition;\\nout float fov;\\nout vec3 viewRay; // View space ray direction\\n\\nvoid main() {\\n vWorldPosition = modelMatrix * vec4(position, 1.0);\\n\\n // Compute clip-space position\\n vec4 clipSpacePos = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n\\n // Compute normalized device coordinates (NDC)\\n vec3 ndc = clipSpacePos.xyz / clipSpacePos.w;\\n\\n // Compute the view-space ray direction\\n vec4 clipRay = vec4(ndc.x, ndc.y, -1.0, 1.0);\\n vec4 tempViewRay = inverse(projectionMatrix) * clipRay;\\n viewRay = vec3(tempViewRay.x, tempViewRay.y, -1.0);\\n\\n gl_Position = clipSpacePos;\\n fov = 2.0 * atan(1.0 / projectionMatrix[1][1]) * (180.0 / PI);\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\nstruct DisplacementParameters {\\n float fac;\\n float eps;\\n float mul;\\n\\n float freq;\\n float amp;\\n float lac;\\n int oct;\\n};\\nstruct NoiseParameters {\\n int type;\\n float freq;\\n float amp;\\n float lac;\\n int oct;\\n\\n int layers;\\n float xwarp;\\n float ywarp;\\n float zwarp;\\n};\\n\\n// Main uniforms\\nuniform bool u_warp;\\nuniform NoiseParameters u_noise;\\n\\nuniform bool u_displace;\\nuniform DisplacementParameters u_displacement;\\n\\nuniform vec3 u_color;\\nuniform sampler2D u_opacity_tex;\\n\\nin vec3 vPos;\\n\\n@import functions/fbm;\\n@import functions/lwd;\\n@import functions/color_utils;\\n\\n// Constants\\nconst vec3 DVEC_A = vec3(0.1, 0.1, 0.0);\\nconst vec3 DVEC_B = vec3(0.2, 0.2, 0.0);\\n\\nvoid main() {\\n vec3 warpVec = vec3(u_noise.xwarp, u_noise.ywarp, u_noise.zwarp);\\n\\n // XYZ Warping + Displacement\\n vec3 wPos = compute_warping(vPos, warpVec, u_warp);\\n wPos = compute_displacement(wPos, u_displacement, u_displace);\\n\\n // Clouds\\n vec3 opacity = vec3(0.0);\\n vec3 wOpacity = vec3(\\n fbm3(wPos, u_noise.freq, u_noise.amp, u_noise.lac, u_noise.oct),\\n fbm3(wPos + DVEC_A, u_noise.freq, u_noise.amp, u_noise.lac, u_noise.oct),\\n fbm3(wPos + DVEC_B, u_noise.freq, u_noise.amp, u_noise.lac, u_noise.oct)\\n );\\n opacity += fbm3(wPos + wOpacity, u_noise.freq, u_noise.amp, u_noise.lac, u_noise.oct);\\n opacity = texture2D(u_opacity_tex, vec2(opacity.x, 0.5)).xyz;\\n\\n csm_Metalness = 0.5;\\n csm_Roughness = 1.0;\\n csm_DiffuseColor = vec4(u_color, opacity.x);\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\nvarying vec3 vPos;\\n\\nvoid main() {\\n vPos = position;\\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n}\"","export default \"uniform float u_time;\\nuniform float u_bFactor;\\nuniform float u_pcurveHandle;\\nvarying vec3 v_pos;\\n\\n@import functions/voronoise;\\n\\nvoid main() {\\n vec2 res = voronoi(v_pos*3.0, u_time*0.3);\\n // darken by pow\\n vec3 mycolor = vec3(pow(res.x, 1.5));\\n // emphasis on blue\\n float blue = mycolor.b * u_bFactor;\\n // cut off the blueness at the top end of the spectrum\\n mycolor.b = blue * (1. - smoothstep(0.9,1.0,res.x));\\n // adjust red+greeness using pcurve such that greyness/whiteness\\n // is only seen at a limited range within the spectrum\\n mycolor.r = pcurve(mycolor.r, 4.0, u_pcurveHandle);\\n mycolor.g = pcurve(mycolor.g, 4.0, u_pcurveHandle);\\n csm_DiffuseColor = vec4( mycolor, 1.0 );\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\nstruct DisplacementParameters {\\n float fac;\\n float eps;\\n float mul;\\n\\n float freq;\\n float amp;\\n float lac;\\n int oct;\\n};\\nstruct NoiseParameters {\\n int mode;\\n float freq;\\n float amp;\\n float lac;\\n int oct;\\n\\n int layers;\\n float xwarp;\\n float ywarp;\\n float zwarp;\\n};\\nstruct PBRParameters {\\n float wlevel;\\n float wrough;\\n float wmetal;\\n float grough;\\n float gmetal;\\n};\\n\\n// Planet size\\nuniform float u_radius;\\n\\n// Water level & roughness/metalness\\nuniform PBRParameters u_pbr_params;\\n\\n// Noise uniforms\\nuniform bool u_warp;\\nuniform bool u_displace;\\nuniform DisplacementParameters u_surface_displacement;\\nuniform NoiseParameters u_surface_noise;\\nuniform sampler2D u_surface_tex;\\n\\n// Bump uniforms\\nuniform bool u_bump;\\nuniform float u_bump_offset;\\nuniform float u_bump_strength;\\n\\n// Biome uniforms\\nuniform bool u_biomes;\\nuniform NoiseParameters u_temp_noise;\\nuniform NoiseParameters u_humi_noise;\\nuniform sampler2D u_biomes_tex;\\n\\n// Packed varyings (uv, position, tangent, bitangent)\\nin mat4 vTransform;\\n\\n@import functions/fbm;\\n@import functions/bump;\\n@import functions/lwd;\\n@import functions/biomes;\\n\\n// Biome function\\nvec3 apply_biomes(float t, float h, vec3 color) {\\n vec3 biomeColor = color;\\n vec2 texCoord = vec2(h, t);\\n vec4 texel = texture2D(u_biomes_tex, texCoord);\\n biomeColor = mix(color, texel.xyz, texel.w);\\n return biomeColor;\\n}\\n\\nvoid main() {\\n vec3 color = vec3(0.0);\\n vec3 vPos = vTransform[1].xyz;\\n vec3 vTangent = vTransform[2].xyz;\\n vec3 vBitangent = vTransform[3].xyz;\\n vec3 surfaceWarpVec = vec3(u_surface_noise.xwarp, u_surface_noise.ywarp, u_surface_noise.zwarp);\\n\\n // XYZ Warping + displacement\\n vPos = compute_warping(vPos, surfaceWarpVec, u_warp);\\n vPos = compute_displacement(vPos, u_surface_displacement, u_displace);\\n\\n // Heightmap & global flags\\n float height = compute_layering(vPos, u_surface_noise);\\n float FLAG_LAND = step(u_pbr_params.wlevel, height);\\n float FLAG_BIOMES = FLAG_LAND * float(u_biomes);\\n\\n // Render noise as color\\n color += height;\\n color = texture2D(u_surface_tex, vec2(color.x, 0.5)).xyz;\\n\\n // Render biomes\\n float tHeight = mix(0.0, compute_temperature(vPos, u_temp_noise), FLAG_BIOMES);\\n float hHeight = mix(0.0, compute_humidity(vPos, u_humi_noise), FLAG_BIOMES);\\n color = mix(color, apply_biomes(tHeight, hHeight, color), FLAG_BIOMES);\\n\\n // Render bump-map (under MIT license)\\n // note: see license in bump.func.glsl\\n vec3 dx = vTangent * surfaceWarpVec * u_bump_offset;\\n vec3 dy = vBitangent * surfaceWarpVec * u_bump_offset;\\n float dxHeight = compute_layering(vPos + dx, u_surface_noise);\\n float dyHeight = compute_layering(vPos + dy, u_surface_noise);\\n vec3 bump = compute_bumpmap(vPos, dx, dy, height, dxHeight, dyHeight, u_radius, u_bump_strength);\\n\\n // Set outputs\\n csm_Bump = mix(vNormal, bump, FLAG_LAND * float(u_bump));\\n csm_Roughness = mix(u_pbr_params.wrough, u_pbr_params.grough, FLAG_LAND);\\n csm_Metalness = mix(u_pbr_params.wmetal, u_pbr_params.gmetal, FLAG_LAND);\\n csm_DiffuseColor = vec4(color, 1.0);\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\n// Populated by ThreeJS via BufferGeometry#computeTangents()\\nattribute vec3 tangent;\\n\\n// Packed varyings (uv, position, tangent, bitangent)\\nout mat4 vTransform;\\n\\nvoid main() {\\n vTransform = mat4(\\n vec4(vec3(uv, 0.0), 0.0),\\n vec4(position, 0.0),\\n vec4(tangent, 0.0),\\n vec4(cross(normal, tangent), 0.0)\\n );\\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\n// Packed varyings (uv, position, tangent, bitangent)\\nin mat4 vTransform;\\n\\nuniform float u_inner_radius;\\nuniform float u_outer_radius;\\nuniform sampler2D u_ring_tex;\\n\\nfloat clamp_to_range(float v, float min, float max) {\\n return (v - min) / (max - min);\\n}\\n\\nvoid main() {\\n float distanceToCenter = length(vTransform[1].xy);\\n float fac = clamp_to_range(distanceToCenter, u_inner_radius, u_outer_radius);\\n csm_DiffuseColor = texture2D(u_ring_tex, vec2(fac, 0.5));\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\n// Populated by ThreeJS via BufferGeometry#computeTangents()\\nattribute vec3 tangent;\\n\\n// Packed varyings (uv, position)\\nout mat4 vTransform;\\n\\nvoid main() {\\n vTransform = mat4(\\n vec4(vec3(uv, 0.0), 0.0),\\n vec4(position, 0.0),\\n vec4(0.0),\\n vec4(0.0)\\n );\\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\n// Populated by ThreeJS via BufferGeometry#computeTangents()\\nattribute vec3 tangent;\\n\\n// Packed varyings (uv, position, tangent, bitangent)\\nout mat4 vTransform;\\n\\n// Populated during shader compilation\\nuniform mat4 uuModelMatrix;\\n\\nvoid main() {\\n vTransform = mat4(\\n vec4(vec3(uv, 0.0), 0.0),\\n vec4(position, 0.0),\\n vec4(tangent, 0.0),\\n vec4(cross(normal, tangent), 0.0)\\n );\\n gl_Position = vec4(uv, 0.0, 1.0) * 2.0 - 1.0;\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\nstruct DisplacementParameters {\\n float fac;\\n float eps;\\n float mul;\\n\\n float freq;\\n float amp;\\n float lac;\\n int oct;\\n};\\nstruct NoiseParameters {\\n int mode;\\n float freq;\\n float amp;\\n float lac;\\n int oct;\\n\\n int layers;\\n float xwarp;\\n float ywarp;\\n float zwarp;\\n};\\n\\n// Noise uniforms\\nuniform bool u_warp;\\nuniform bool u_displace;\\nuniform DisplacementParameters u_surface_displacement;\\nuniform NoiseParameters u_surface_noise;\\n\\n// Bump uniforms\\nuniform bool u_bump;\\nuniform float u_bump_offset;\\nuniform float u_bump_strength;\\nuniform float u_water_level;\\n\\n// Packed varyings (uv, position)\\nin mat4 vTransform;\\n\\n@import functions/fbm;\\n@import functions/lwd;\\n@import functions/normal;\\n\\nvoid main() {\\n vec3 color = vec3(0.0);\\n vec3 vPos = vTransform[1].xyz;\\n\\n // XYZ Warping + displacement\\n vPos = compute_warping(vPos, vec3(u_surface_noise.xwarp, u_surface_noise.ywarp, u_surface_noise.zwarp), u_warp);\\n vPos = compute_displacement(vPos, u_surface_displacement, u_displace);\\n\\n // Heightmap\\n float height = compute_layering(vPos, u_surface_noise);\\n float FLAG_LAND = step(u_water_level, height);\\n\\n // Set outputs\\n csm_DiffuseColor = vec4(mix(vec3(u_water_level), vec3(height), FLAG_LAND), 1.0);\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\nstruct DisplacementParameters {\\n float fac;\\n float eps;\\n float mul;\\n\\n float freq;\\n float amp;\\n float lac;\\n int oct;\\n};\\nstruct NoiseParameters {\\n int type;\\n float freq;\\n float amp;\\n float lac;\\n int oct;\\n\\n int layers;\\n float xwarp;\\n float ywarp;\\n float zwarp;\\n};\\n\\n// Main uniforms\\nuniform bool u_warp;\\nuniform NoiseParameters u_noise;\\n\\nuniform bool u_displace;\\nuniform DisplacementParameters u_displacement;\\n\\nuniform vec3 u_color;\\nuniform sampler2D u_opacity_tex;\\n\\n// Packed varyings (uv, position)\\nin mat4 vTransform;\\n\\n@import functions/fbm;\\n@import functions/lwd;\\n@import functions/color_utils;\\n\\n// Constants\\nconst vec3 DVEC_A = vec3(0.1, 0.1, 0.0);\\nconst vec3 DVEC_B = vec3(0.2, 0.2, 0.0);\\n\\nvoid main() {\\n vec3 vPos = vTransform[1].xyz;\\n vec3 warpVec = vec3(u_noise.xwarp, u_noise.ywarp, u_noise.zwarp);\\n\\n // XYZ Warping + Displacement\\n vec3 wPos = compute_warping(vPos, warpVec, u_warp);\\n wPos = compute_displacement(wPos, u_displacement, u_displace);\\n\\n // Clouds\\n vec3 opacity = vec3(0.0);\\n vec3 wOpacity = vec3(\\n fbm3(wPos, u_noise.freq, u_noise.amp, u_noise.lac, u_noise.oct),\\n fbm3(wPos + DVEC_A, u_noise.freq, u_noise.amp, u_noise.lac, u_noise.oct),\\n fbm3(wPos + DVEC_B, u_noise.freq, u_noise.amp, u_noise.lac, u_noise.oct)\\n );\\n opacity += fbm3(vPos + wOpacity, u_noise.freq, u_noise.amp, u_noise.lac, u_noise.oct);\\n opacity = texture2D(u_opacity_tex, vec2(opacity.x, 0.5)).xyz;\\n csm_DiffuseColor = vec4(u_color, opacity.x);\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\n// Bump-map texture\\nuniform float u_scale;\\nuniform float u_resolution;\\nuniform sampler2D u_bump_tex;\\n\\n// Packed varyings (uv, position)\\nin vec2 vUv;\\n\\nvoid main() {\\n // Sample neighbouring heights\\n vec3 offset = vec3(-1.0/u_resolution, 0.0, 1.0/u_resolution);\\n float s00 = texture(u_bump_tex, vUv + offset.xx).x;\\n float s10 = texture(u_bump_tex, vUv + offset.yx).x;\\n float s20 = texture(u_bump_tex, vUv + offset.zx).x;\\n float s01 = texture(u_bump_tex, vUv + offset.xy).x;\\n float s21 = texture(u_bump_tex, vUv + offset.zy).x;\\n float s02 = texture(u_bump_tex, vUv + offset.xz).x;\\n float s12 = texture(u_bump_tex, vUv + offset.yz).x;\\n float s22 = texture(u_bump_tex, vUv + offset.zz).x;\\n\\n // Calculate normal using Sobel filter\\n vec3 N = normalize(vec3(\\n u_scale * +(s00 - s20 + 2.0*s01 - 2.0*s21 + s02 - s22),\\n u_scale * -(s00 + 2.0*s10 + s20 - s02 - 2.0*s12 - s22),\\n 1.0\\n )) * 0.5 + 0.5;\\n\\n // Set outputs\\n gl_FragColor = vec4(N, 1.0);\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\n// Packed varyings (uv, position, tangent, bitangent)\\nout vec2 vUv;\\n\\nvoid main() {\\n vUv = uv;\\n gl_Position = vec4(uv, 0.0, 1.0);\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\nstruct DisplacementParameters {\\n float fac;\\n float eps;\\n float mul;\\n\\n float freq;\\n float amp;\\n float lac;\\n int oct;\\n};\\nstruct NoiseParameters {\\n int mode;\\n float freq;\\n float amp;\\n float lac;\\n int oct;\\n\\n int layers;\\n float xwarp;\\n float ywarp;\\n float zwarp;\\n};\\nstruct PBRParameters {\\n float wlevel;\\n float wrough;\\n float wmetal;\\n float grough;\\n float gmetal;\\n};\\n\\n// Water level & roughness/metalness\\nuniform PBRParameters u_pbr_params;\\n\\n// Noise uniforms\\nuniform bool u_warp;\\nuniform bool u_displace;\\nuniform DisplacementParameters u_surface_displacement;\\nuniform NoiseParameters u_surface_noise;\\n\\n// Packed varyings (uv, position)\\nin mat4 vTransform;\\n\\n@import functions/fbm;\\n@import functions/lwd;\\n\\nvoid main() {\\n vec3 color = vec3(0.0);\\n vec3 vPos = vTransform[1].xyz;\\n\\n // XYZ Warping + displacement\\n vPos = compute_warping(vPos, vec3(u_surface_noise.xwarp, u_surface_noise.ywarp, u_surface_noise.zwarp), u_warp);\\n vPos = compute_displacement(vPos, u_surface_displacement, u_displace);\\n\\n // Heightmap & global flags\\n float height = compute_layering(vPos, u_surface_noise);\\n float FLAG_LAND = step(u_pbr_params.wlevel, height);\\n\\n // Render noise as color\\n color += height;\\n float outRoughness = mix(u_pbr_params.wrough, u_pbr_params.grough, FLAG_LAND);\\n float outMetalness = mix(u_pbr_params.wmetal, u_pbr_params.gmetal, FLAG_LAND);\\n\\n // Set outputs\\n csm_DiffuseColor = vec4(0.0, outRoughness, outMetalness, 1.0);\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\nstruct DisplacementParameters {\\n float fac;\\n float eps;\\n float mul;\\n\\n float freq;\\n float amp;\\n float lac;\\n int oct;\\n};\\nstruct NoiseParameters {\\n int mode;\\n float freq;\\n float amp;\\n float lac;\\n int oct;\\n\\n int layers;\\n float xwarp;\\n float ywarp;\\n float zwarp;\\n};\\nstruct PBRParameters {\\n float wlevel;\\n float wrough;\\n float wmetal;\\n float grough;\\n float gmetal;\\n};\\n\\n// Planet size\\nuniform float u_radius;\\n\\n// Water level & roughness/metalness\\nuniform PBRParameters u_pbr_params;\\n\\n// Noise uniforms\\nuniform bool u_warp;\\nuniform bool u_displace;\\nuniform DisplacementParameters u_surface_displacement;\\nuniform NoiseParameters u_surface_noise;\\nuniform sampler2D u_surface_tex;\\n\\n// Biome uniforms\\nuniform bool u_biomes;\\nuniform NoiseParameters u_temp_noise;\\nuniform NoiseParameters u_humi_noise;\\nuniform sampler2D u_biomes_tex;\\n\\n// Packed varyings (uv, position)\\nin mat4 vTransform;\\n\\n@import functions/fbm;\\n@import functions/lwd;\\n@import functions/biomes;\\n\\n// Biome function\\nvec3 apply_biomes(float t, float h, vec3 color) {\\n vec3 biomeColor = color;\\n vec2 texCoord = vec2(h, t);\\n vec4 texel = texture2D(u_biomes_tex, texCoord);\\n biomeColor = mix(color, texel.xyz, texel.w);\\n return biomeColor;\\n}\\n\\nvoid main() {\\n vec3 color = vec3(0.0);\\n vec3 vPos = vTransform[1].xyz;\\n\\n // XYZ Warping + displacement\\n vPos = compute_warping(vPos, vec3(u_surface_noise.xwarp, u_surface_noise.ywarp, u_surface_noise.zwarp), u_warp);\\n vPos = compute_displacement(vPos, u_surface_displacement, u_displace);\\n\\n // Heightmap & global flags\\n float height = compute_layering(vPos, u_surface_noise);\\n float FLAG_LAND = step(u_pbr_params.wlevel, height);\\n float FLAG_BIOMES = FLAG_LAND * float(u_biomes);\\n\\n // Render noise as color\\n color += height;\\n color = texture2D(u_surface_tex, vec2(color.x, 0.5)).xyz;\\n\\n // Render biomes\\n float tHeight = mix(0.0, compute_temperature(vPos, u_temp_noise), FLAG_BIOMES);\\n float hHeight = mix(0.0, compute_humidity(vPos, u_humi_noise), FLAG_BIOMES);\\n color = mix(color, apply_biomes(tHeight, hHeight, color), FLAG_BIOMES);\\n\\n // Set outputs\\n csm_DiffuseColor = vec4(color, 1.0);\\n}\"","export default \"#ifdef GL_ES\\nprecision highp float;\\n#endif\\n\\n// Packed varyings (uv, position, tangent, bitangent)\\nin mat4 vTransform;\\n\\nuniform float u_inner_radius;\\nuniform float u_outer_radius;\\nuniform sampler2D u_ring_tex;\\n\\nfloat rangeClamp(float v, float min, float max) {\\n return (v - min) / (max - min);\\n}\\n\\nvoid main() {\\n float distanceToCenter = length(vTransform[1].xy);\\n float fac = rangeClamp(distanceToCenter, u_inner_radius, u_outer_radius);\\n csm_DiffuseColor = texture2D(u_ring_tex, vec2(fac, 0.5));\\n}\"","export default \"// Sourced from Brian Jackson (@jaxzin), using code from GLtracy:\\n// https://glitch.com/~polite-playful-wool\\n// ------------------------------------------------------------------------------------------------\\n\\n// Written by GLtracy\\n// Credit: https://www.shadertoy.com/view/lslXDr\\n// Note: original code licensed under CC BY-NC-SA 3.0 Unported license (see: atmosphere_utils.func.glsl_LICENSE)\\n\\n// math const\\nconst float PI = 3.14159265359;\\nconst float MAX = 10000.0;\\n\\nconst int NUM_OUT_SCATTER = 2;\\nconst int NUM_IN_SCATTER = 10;\\n\\n// ray intersects sphere\\n// e = -b +/- sqrt( b^2 - c )\\nvec2 ray_vs_sphere(vec3 p, vec3 dir, float r) {\\n float b = dot(p, dir);\\n float c = dot(p, p) - r * r;\\n float d = b * b - c;\\n if (d < 0.0) {\\n return vec2(MAX, -MAX);\\n }\\n d = sqrt( d );\\n return vec2(-b - d, -b + d);\\n}\\n\\n// Mie\\n// g : ( -0.75, -0.999 )\\n// 3 * ( 1 - g^2 ) 1 + c^2\\n// F = ----------------- * -------------------------------\\n// 8pi * ( 2 + g^2 ) ( 1 + g^2 - 2 * g * c )^(3/2)\\nfloat phase_mie(float g, float c, float cc) {\\n float gg = g * g;\\n float a = (1.0 - gg) * (1.0 + cc);\\n float b = 1.0 + gg - 2.0 * g * c;\\n b *= sqrt(b);\\n b *= 2.0 + gg;\\n return (3.0 / 8.0 / PI) * a / b;\\n}\\n\\n// Rayleigh\\n// g : 0\\n// F = 3/16PI * ( 1 + c^2 )\\nfloat phase_ray(float cc) {\\n return (3.0 / 16.0 / PI) * (1.0 + cc);\\n}\\n\\nfloat density(vec3 p, float ph) {\\n float actualScaleHeight = 8500.0; // The scale height on Earth in meters\\n float scale = u_density / actualScaleHeight; // Scaling factor based on the gap\\n float altitude = length(p) - u_surface_radius;\\n \\n // Initial density at the surface (sea level). Set this to your desired value.\\n // Earth's air density at sea level is approximately 1.225 kg/m^3\\n float rho_0 = 20.0; \\n \\n //TBD, why does it looks better with these tunings?\\n //scale *= 0.125;\\n rho_0 *= 0.08125; \\n\\n // Use exponential decay formula to calculate density\\n float rho = rho_0 * exp(-max(altitude, 0.0) / (actualScaleHeight * scale));\\n return rho * ph;\\n\\n // return exp(-max(altitude, 0.0) / (ph*atmoThickness));\\n}\\n\\n\\nfloat optic(vec3 p, vec3 q, float ph) {\\n vec3 s = (q - p) / float(NUM_OUT_SCATTER);\\n vec3 v = p + s * 0.5;\\n float sum = 0.0;\\n for (int i = 0; i < NUM_OUT_SCATTER; i++) {\\n sum += density(v, ph);\\n v += s;\\n }\\n sum *= length(s);\\n return sum;\\n}\\n\\nvec4 in_scatter( vec3 o, vec3 dir, vec2 e, vec3 l, float l_intensity) {\\n const float ph_ray = 0.15;\\n const float ph_mie = 0.05;\\n const float ph_alpha = 0.25;\\n\\n const vec3 k_ray = vec3( 3.8, 13.5, 33.1 );\\n const vec3 k_mie = vec3( 21.0 );\\n const float k_mie_ex = 1.1;\\n \\n const float k_alpha = 2.0;\\n\\n vec3 sum_ray = vec3( 0.0 );\\n vec3 sum_mie = vec3( 0.0 );\\n float sum_alpha = 0.0;\\n\\n float n_ray0 = 0.0;\\n float n_mie0 = 0.0;\\n\\n float len = (e.y - e.x) / float(NUM_IN_SCATTER);\\n vec3 s = dir * len;\\n vec3 v = o + dir * (e.x + len * 0.5);\\n\\n for (int i = 0; i < NUM_IN_SCATTER; i++, v += s) {\\n float d_ray = density( v, ph_ray ) * len;\\n float d_mie = density( v, ph_mie ) * len;\\n float d_alpha = density( v, ph_alpha ) * len;\\n\\n n_ray0 += d_ray;\\n n_mie0 += d_mie;\\n\\n vec2 f = ray_vs_sphere( v, l, u_radius );\\n vec3 u = v + l * f.y;\\n\\n float n_ray1 = optic( v, u, ph_ray );\\n float n_mie1 = optic( v, u, ph_mie );\\n\\n vec3 att = exp(-(n_ray0 + n_ray1) * k_ray - (n_mie0 + n_mie1) * k_mie * k_mie_ex);\\n\\n sum_ray += d_ray * att;\\n sum_mie += d_mie * att;\\n \\n // The optical density is only a factor of the density of the traveled media\\n sum_alpha += d_alpha;\\n\\n }\\n\\n float c = dot( dir, -l );\\n float cc = c * c;\\n vec3 scatter =\\n sum_ray * k_ray * phase_ray( cc ) +\\n sum_mie * k_mie * phase_mie( -0.78, c, cc );\\n\\n float alpha = sum_alpha * k_alpha;\\n return vec4(scatter * l_intensity, alpha);\\n}\\n\\n// ray direction\\nvec3 ray_dir( float fov, vec2 size, vec2 pos ) {\\n vec2 xy = pos - size * 0.5;\\n\\n float cot_half_fov = tan( radians( 90.0 - fov * 0.5 ) );\\n float z = size.y * 0.5 * cot_half_fov;\\n\\n return normalize( vec3( xy, -z ) );\\n}\"","export default \"// Temperature function\\nfloat compute_temperature(vec3 vPos, NoiseParameters noise) {\\n float FLAG_POLAR = step(0.5, float(noise.mode));\\n float FLAG_NOISE = step(1.5, float(noise.mode));\\n float ty = mix(abs(vPos.y), vPos.y, FLAG_POLAR);\\n float adjustedTy = smoothstep(1.0, -FLAG_POLAR, ty);\\n float tHeight = mix(adjustedTy, 1.0, FLAG_NOISE);\\n return tHeight * fbm3(vPos, noise.freq, noise.amp, noise.lac, noise.oct);\\n}\\n\\n// Humidity function\\nfloat compute_humidity(vec3 vPos, NoiseParameters noise) {\\n float FLAG_POLAR = step(0.5, float(noise.mode));\\n float FLAG_NOISE = step(1.5, float(noise.mode));\\n float hy = mix(abs(vPos.y), vPos.y, FLAG_POLAR);\\n float adjustedHy = smoothstep(-FLAG_POLAR, 1.0, hy);\\n float hHeight = mix(adjustedHy, 1.0, FLAG_NOISE);\\n return hHeight * fbm3(vPos, noise.freq, noise.amp, noise.lac, noise.oct);\\n}\"","export default \"// Slightly ajusted from Daniel Greenheck:\\n// https://github.com/dgreenheck/threejs-procedural-planets\\n// ---\\n// MIT License\\n\\n// Copyright (c) 2023 Daniel Greenheck\\n\\n// Permission is hereby granted, free of charge, to any person obtaining a copy\\n// of this software and associated documentation files (the \\\"Software\\\"), to deal\\n// in the Software without restriction, including without limitation the rights\\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\n// copies of the Software, and to permit persons to whom the Software is\\n// furnished to do so, subject to the following conditions:\\n\\n// The above copyright notice and this permission notice shall be included in all\\n// copies or substantial portions of the Software.\\n\\n// THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\\n// SOFTWARE.\\n\\n// Perturbs a surface normal from computed heights\\nvec3 compute_bumpmap(vec3 pos, vec3 dx, vec3 dy,\\n float height, float dxHeight, float dyHeight,\\n float radius, float bumpStrength) {\\n vec3 hPos = pos * (radius + height);\\n vec3 dxPos = (pos + dx) * (radius + dxHeight);\\n vec3 dyPos = (pos + dy) * (radius + dyHeight);\\n vec3 bumpN = normalize(cross(dyPos - hPos, dxPos - hPos));\\n return normalize(mix(vNormal, bumpN, bumpStrength));\\n}\\n\"","export default \"vec4 darken(vec4 color, float t) {\\nreturn color * mat4(\\n vec4(1.0-t, 0.0, 0.0, 0.0),\\n vec4(0.0, 1.0-t, 0.0, 0.0),\\n vec4(0.0, 0.0, 1.0-t, 0.0),\\n vec4(0.0, 0.0, 0.0, 1.0)\\n );\\n}\\n\\nmat4 tint_to_matrix(vec4 tint) {\\n return mat4(\\n vec4(tint.x, 0.0, 0.0, 0.0),\\n vec4(0.0, tint.y, 0.0, 0.0),\\n vec4(0.0, 0.0, tint.z, 0.0),\\n vec4(0.0, 0.0, 0.0, tint.w)\\n );\\n}\\n\\nvec4 greyscale(vec4 color) {\\n return color * mat4(\\n vec4(0.2126, 0.7152, 0.0722, 0.0),\\n vec4(0.2126, 0.7152, 0.0722, 0.0),\\n vec4(0.2126, 0.7152, 0.0722, 0.0),\\n vec4(0.0, 0.0, 0.0, 1.0)\\n );\\n}\\n\\n// basically greyscale but cranked to white\\nvec4 whitescale(vec4 color) {\\n return greyscale(color) * 2.0;\\n}\\n\\n// From: https://gist.github.com/mairod/a75e7b44f68110e1576d77419d608786?permalink_comment_id=3195243#gistcomment-3195243\\nvec3 hue_shift(vec3 color, float dhue) {\\n float s = sin(dhue);\\n\\tfloat c = cos(dhue);\\n\\treturn (color * c) + (color * s) * mat3(\\n\\t\\tvec3(0.167444, 0.329213, -0.496657),\\n\\t\\tvec3(-0.327948, 0.035669, 0.292279),\\n\\t\\tvec3(1.250268, -1.047561, -0.202707)\\n\\t) + dot(vec3(0.299, 0.587, 0.114), color) * (1.0 - c);\\n}\"","export default \"// Sourced from Yi-wen LIN, using code from Iñigo Quilez:\\n// https://github.com/yiwenl/glsl-fbm/blob/master\\n// https://iquilezles.org/articles/fbm/\\n// ------------------------------------------------------------------------------------------------\\n\\n// 3D version\\n\\nfloat mod289(float x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\\nvec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\\nvec4 perm(vec4 x) { return mod289(((x * 34.0) + 1.0) * x); }\\n\\nfloat noise3(vec3 p){\\n vec3 a = floor(p);\\n vec3 d = p - a;\\n d = d * d * (3.0 - 2.0 * d);\\n\\n vec4 b = a.xxyy + vec4(0.0, 1.0, 0.0, 1.0);\\n vec4 k1 = perm(b.xyxy);\\n vec4 k2 = perm(k1.xyxy + b.zzww);\\n\\n vec4 c = k2 + a.zzzz;\\n vec4 k3 = perm(c);\\n vec4 k4 = perm(c + 1.0);\\n\\n vec4 o1 = fract(k3 * (1.0 / 41.0));\\n vec4 o2 = fract(k4 * (1.0 / 41.0));\\n\\n vec4 o3 = o2 * d.z + o1 * (1.0 - d.z);\\n vec2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x);\\n\\n return o4.y * d.y + o4.x * (1.0 - d.y);\\n}\\n\\nfloat fbm3(vec3 x, float freq, float amp, float lac, int octaves) {\\n\\tfloat val = 0.0;\\n\\tfor (int i = 0; i < octaves; ++i) {\\n\\t\\tval += amp * noise3(x*freq);\\n\\t\\tfreq *= lac;\\n\\t\\tamp *= 0.5;\\n\\t}\\n\\treturn val;\\n}\\n\\n// 1D version\\n\\nfloat rand(float n){return fract(sin(n) * 43758.5453123);}\\n\\nfloat noise1(float p){\\n\\tfloat fl = floor(p);\\n float fc = fract(p);\\n\\treturn mix(rand(fl), rand(fl + 1.0), fc);\\n}\\n\\nfloat fbm1(float x, float freq, float amp, float lac, int octaves) {\\n\\tfloat val = 0.0;\\n\\tfor (int i = 0; i < octaves; ++i) {\\n\\t\\tval += amp * noise1(x*freq);\\n\\t\\tfreq *= lac;\\n\\t\\tamp *= 0.5;\\n\\t}\\n\\treturn val;\\n}\"","export default \"// LWD function chunk (Layer-Warp-Displace)\\n\\nvec3 _displace(vec3 vPos, DisplacementParameters displacement) {\\n float eps = displacement.eps;\\n float mul = displacement.mul;\\n\\n float n1 = fbm3(vec3(vPos.x + eps, vPos.y, vPos.z), displacement.freq, displacement.amp, displacement.lac, displacement.oct);\\n float n2 = fbm3(vec3(vPos.x - eps, vPos.y, vPos.z), displacement.freq, displacement.amp, displacement.lac, displacement.oct);\\n float dx = (n1 - n2) / (mul * eps);\\n\\n n1 = fbm3(vec3(vPos.x, vPos.y + eps, vPos.z), displacement.freq, displacement.amp, displacement.lac, displacement.oct);\\n n2 = fbm3(vec3(vPos.x, vPos.y - eps, vPos.z), displacement.freq, displacement.amp, displacement.lac, displacement.oct);\\n float dy = (n1 - n2) / (mul * eps);\\n\\n n1 = fbm3(vec3(vPos.x, vPos.y, vPos.z + eps), displacement.freq, displacement.amp, displacement.lac, displacement.oct);\\n n2 = fbm3(vec3(vPos.x, vPos.y, vPos.z - eps), displacement.freq, displacement.amp, displacement.lac, displacement.oct);\\n float dz = (n1 - n2) / (mul * eps);\\n\\n //Curl\\n return mix(vPos, vec3(dx, dy, dz), displacement.fac);\\n}\\n\\nfloat compute_layering(vec3 vPos, NoiseParameters noise) {\\n // Note: 1 layer = standard heightmap, 2+ layers applies domain-warping\\n float height = fbm3(vPos, noise.freq, noise.amp, noise.lac, noise.oct);\\n height = mix(height, fbm1(height, noise.freq, noise.amp, noise.lac, noise.oct), clamp(float(noise.layers) - 1.0, 0.0, 1.0));\\n height = mix(height, fbm1(height, noise.freq, noise.amp, noise.lac, noise.oct), clamp(float(noise.layers) - 2.0, 0.0, 1.0));\\n return height;\\n}\\n\\nvec3 compute_warping(vec3 vPos, vec3 warp, bool enableWarping) {\\n vPos.x *= mix(1.0, warp.x, float(enableWarping));\\n vPos.y *= mix(1.0, warp.y, float(enableWarping));\\n vPos.z *= mix(1.0, warp.z, float(enableWarping));\\n return vPos;\\n}\\n\\nvec3 compute_displacement(vec3 vPos, DisplacementParameters displacement, bool enableDisplacement) {\\n vPos = mix(vPos, _displace(vPos, displacement), float(enableDisplacement));\\n return vPos;\\n}\"","export default \"// Adjusted from dmmn\\n// https://www.shadertoy.com/view/MsScRt\\n// Note: licensed under CC BY-NC-SA 3.0 Unported license (see: normal.func.glsl_LICENSE)\\n\\n// computes a normalmap using UV coordinates\\nvec3 compute_normalmap(float height, float dxHeight, float dyHeight, float stp, float scale) {\\n vec2 dxy = height - vec2(dxHeight, dyHeight);\\n return normalize(vec3(dxy * scale / stp, 1.0));\\n}\"","export default \"// Sourced from franky-adl, using code from Iñigo Quilez:\\n// https://github.com/franky-adl/voronoi-sphere/blob/main/src/shaders/voronoi3d_basic.glsl\\n// ------------------------------------------------------------------------------------------------\\n\\n// hash function from https://github.com/MaxBittker/glsl-voronoi-noise\\nvec3 hash3d(vec3 p) {\\n return fract(\\n sin(vec3(dot(p, vec3(1.0, 57.0, 113.0)), dot(p, vec3(57.0, 113.0, 1.0)),\\n dot(p, vec3(113.0, 1.0, 57.0)))) *\\n 43758.5453);\\n}\\n\\n// Function from Iñigo Quilez\\n// www.iquilezles.org/www/articles/functions/functions.htm\\n// for visual demo, go to https://thebookofshaders.com/edit.php#05/parabola.frag\\nfloat parabola( float x, float k ){\\n return pow(4.*x*(1.-x), k);\\n}\\n\\n// Function from Iñigo Quilez\\n// www.iquilezles.org/www/articles/functions/functions.htm\\n// for visual demo, go to https://thebookofshaders.com/edit.php#05/pcurve.frag\\nfloat pcurve( float x, float a, float b ){\\n float k = pow(a+b,a+b) / (pow(a,a)*pow(b,b));\\n return k * pow( x, a ) * pow( 1.0-x, b );\\n}\\n\\n// Voronoi implementation largely referenced from https://www.shadertoy.com/view/MslGD8\\n// ---\\n// The MIT License\\n// Copyright © 2013 Inigo Quilez\\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and\\n// associated documentation files (the \\\"Software\\\"), to deal in the Software without restriction,\\n// including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,\\n// and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,\\n// subject to the following conditions:\\n//\\n// The above copyright notice and this permission notice shall be included in all copies or substantial\\n// portions of the Software.\\n//\\n// THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT\\n// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\\n// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\\n// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\\n// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n// https://www.youtube.com/c/InigoQuilez\\n// https://iquilezles.org/\\nvec2 voronoi3( in vec3 x )\\n{\\n vec3 n = floor(x);\\n vec3 f = fract(x);\\n vec4 m = vec4(8.0);\\n\\n for( int k=-1; k<=1; k++ ) {\\n for( int j=-1; j<=1; j++ ) {\\n for( int i=-1; i<=1; i++ )\\n {\\n vec3 g = vec3(float(i),float(j),float(k));\\n vec3 o = hash3d( n + g );\\n vec3 r = g + (0.5+0.5*sin(1.0+6.2831*o)) - f;\\n float d = dot(r,r);\\n if( d = import.meta.glob('@assets/glsl/core/*.glsl', {\n eager: true,\n query: '?raw',\n})\nconst GLSL_BAKING_FILES: Record = import.meta.glob('@assets/glsl/baking/*.glsl', {\n eager: true,\n query: '?raw',\n})\nconst GLSL_FUNCTION_FILES: Record = import.meta.glob('@assets/glsl/functions/*.func.glsl', {\n eager: true,\n query: '?raw',\n})\n\nexport function resolveImports(shader: string): string {\n ;[...shader.matchAll(IMPORT_REGEXP)].forEach((match) => {\n shader = shader.replace(match[0], fetch(match[1] + '.func.glsl', ShaderFileType.FUNCTION))\n })\n return shader\n}\n\nexport function fetch(filename: string, type: ShaderFileType): string {\n let glslUris: string[]\n let glslRecords: Record\n\n switch (type) {\n case ShaderFileType.CORE: {\n glslRecords = GLSL_CORE_FILES\n glslUris = Object.keys(GLSL_CORE_FILES)\n break\n }\n case ShaderFileType.BAKING: {\n glslRecords = GLSL_BAKING_FILES\n glslUris = Object.keys(GLSL_BAKING_FILES)\n break\n }\n case ShaderFileType.FUNCTION: {\n glslRecords = GLSL_FUNCTION_FILES\n glslUris = Object.keys(GLSL_FUNCTION_FILES)\n break\n }\n }\n const correspondingFile = glslUris.find((u) => u.endsWith(filename))\n if (!correspondingFile) {\n throw new Error(`[shader-loader] Could not fetch '${filename}': file not found!`)\n }\n return glslRecords[correspondingFile].default\n}\n","import * as THREE from 'three'\nimport { OrbitControls } from 'three/addons/controls/OrbitControls.js'\nimport CustomShaderMaterial, { type MaterialConstructor } from 'three-custom-shader-material/vanilla'\nimport { degToRad } from 'three/src/math/MathUtils.js'\nimport { createRampTexture, createBiomeTexture } from '../helpers/texture.helper'\nimport type PlanetData from '../models/planet-data.model'\nimport { type DataTextureWrapper, ShaderFileType, ColorMode, type SceneRenderObjects } from '../types'\nimport { loadCubeTexture } from './external-data.loader'\nimport { LensFlareEffect } from './lens-flare.effect'\nimport * as Globals from '@core/globals'\nimport * as ShaderLoader from '../three/shader.loader'\n\n// ----------------------------------------------------------------------------------------------------------------------\n// LAGRANGE COMPONENTS\n\nexport function createScene(data: PlanetData, width: number, height: number, pixelRatio: number): SceneRenderObjects {\n // setup cubemap\n const scene = new THREE.Scene()\n scene.background = loadCubeTexture('/skybox/', [\n 'space_ft.png',\n 'space_bk.png',\n 'space_up.png',\n 'space_dn.png',\n 'space_rt.png',\n 'space_lf.png',\n ])\n\n // setup scene (renderer, cam, lighting)\n const renderer = createRendererComponent(width, height, pixelRatio)\n const camera = createPerspectiveCameraComponent(\n 50,\n width / height,\n 0.1,\n 1e6,\n new THREE.Spherical(data.initCamDistance, Math.PI / 2.0, degToRad(data.initCamAngle)),\n )\n const ambientLight = createAmbientLightComponent(data.ambLightColor, data.ambLightIntensity)\n ambientLight.name = Globals.LG_NAME_AMBLIGHT\n scene.add(ambientLight)\n\n return { scene, renderer, camera }\n}\n\nexport function createSun(data: PlanetData) {\n const sun = new THREE.DirectionalLight(data.sunLightColor, data.sunLightIntensity)\n sun.frustumCulled = false\n sun.userData.lens = 'no-occlusion'\n sun.name = Globals.LG_NAME_SUN\n sun.castShadow = true\n sun.shadow.camera.far = 1e4\n sun.shadow.mapSize.width = 4096\n sun.shadow.mapSize.height = 4096\n sun.shadow.bias = -0.00003\n return sun\n}\n\nexport function createLensFlare(data: PlanetData, pos: THREE.Vector3, color: THREE.Color) {\n return new LensFlareEffect({\n opacity: 1,\n lensPosition: pos,\n colorGain: color,\n starPointsIntensity: data.lensFlarePointsIntensity,\n glareIntensity: data.lensFlareGlareIntensity,\n })\n}\n\nexport function createPlanet(\n data: PlanetData,\n surfaceTexBuf: Uint8Array,\n biomeTexBuf: Uint8Array,\n): { mesh: THREE.Mesh; texs: DataTextureWrapper[] } {\n const geometry = createSphereGeometryComponent(data.planetMeshQuality)\n geometry.computeTangents()\n\n const surfaceTex = createRampTexture(surfaceTexBuf, Globals.TEXTURE_SIZES.SURFACE, data.planetSurfaceColorRamp.steps)\n const biomeTex = createBiomeTexture(biomeTexBuf, Globals.TEXTURE_SIZES.BIOME, data.biomesParams)\n\n const material = createCustomShaderMaterialComponent(\n ShaderLoader.fetch('planet.vert.glsl', ShaderFileType.CORE),\n ShaderLoader.fetch('planet.frag.glsl', ShaderFileType.CORE),\n {\n // Planet & Rendering\n u_radius: { value: 1.0 },\n u_pbr_params: {\n value: {\n wlevel: data.planetWaterLevel,\n wrough: data.planetWaterRoughness,\n wmetal: data.planetWaterMetalness,\n grough: data.planetGroundRoughness,\n gmetal: data.planetGroundMetalness,\n },\n },\n // Surface\n u_bump: { value: data.planetSurfaceShowBumps },\n u_bump_strength: { value: data.planetSurfaceBumpStrength },\n u_bump_offset: { value: 0.005 },\n u_warp: { value: data.planetSurfaceShowWarping },\n u_displace: { value: data.planetSurfaceShowDisplacement },\n u_surface_displacement: {\n value: {\n freq: data.planetSurfaceDisplacement.frequency,\n amp: data.planetSurfaceDisplacement.amplitude,\n lac: data.planetSurfaceDisplacement.lacunarity,\n oct: data.planetSurfaceDisplacement.octaves,\n eps: data.planetSurfaceDisplacement.epsilon,\n mul: data.planetSurfaceDisplacement.multiplier,\n fac: data.planetSurfaceDisplacement.factor,\n },\n },\n u_surface_noise: {\n value: {\n freq: data.planetSurfaceNoise.frequency,\n amp: data.planetSurfaceNoise.amplitude,\n lac: data.planetSurfaceNoise.lacunarity,\n oct: data.planetSurfaceNoise.octaves,\n layers: data.planetSurfaceNoise.layers,\n xwarp: data.planetSurfaceNoise.xWarpFactor,\n ywarp: data.planetSurfaceNoise.yWarpFactor,\n zwarp: data.planetSurfaceNoise.zWarpFactor,\n },\n },\n u_surface_tex: { value: surfaceTex.texture },\n // Biomes\n u_biomes: { value: data.biomesEnabled },\n u_biomes_tex: { value: biomeTex.texture },\n u_temp_noise: {\n value: {\n mode: data.biomesTemperatureMode,\n freq: data.biomesTemperatureNoise.frequency,\n amp: data.biomesTemperatureNoise.amplitude,\n lac: data.biomesTemperatureNoise.lacunarity,\n oct: data.biomesTemperatureNoise.octaves,\n },\n },\n u_humi_noise: {\n value: {\n mode: data.biomesHumidityMode,\n freq: data.biomesHumidityNoise.frequency,\n amp: data.biomesHumidityNoise.amplitude,\n lac: data.biomesHumidityNoise.lacunarity,\n oct: data.biomesHumidityNoise.octaves,\n },\n },\n },\n THREE.MeshStandardMaterial,\n )\n\n const mesh = new THREE.Mesh(geometry, material)\n mesh.castShadow = true\n mesh.receiveShadow = true\n mesh.name = Globals.LG_NAME_PLANET\n return { mesh, texs: [surfaceTex, biomeTex] }\n}\n\nexport function createClouds(\n data: PlanetData,\n textureBuffer: Uint8Array,\n): { mesh: THREE.Mesh; texs: DataTextureWrapper[] } {\n const cloudHeight = data.cloudsHeight / Globals.ATMOSPHERE_HEIGHT_DIVIDER\n const geometry = createSphereGeometryComponent(data.planetMeshQuality, cloudHeight)\n const opacityTex = createRampTexture(textureBuffer, Globals.TEXTURE_SIZES.CLOUDS, data.cloudsColorRamp.steps)\n\n const material = createCustomShaderMaterialComponent(\n ShaderLoader.fetch('clouds.vert.glsl', ShaderFileType.CORE),\n ShaderLoader.fetch('clouds.frag.glsl', ShaderFileType.CORE),\n {\n u_warp: { value: data.cloudsShowWarping },\n u_displace: { value: data.cloudsShowDisplacement },\n u_displacement: {\n value: {\n freq: data.cloudsDisplacement.frequency,\n amp: data.cloudsDisplacement.amplitude,\n lac: data.cloudsDisplacement.lacunarity,\n oct: data.cloudsDisplacement.octaves,\n eps: data.cloudsDisplacement.epsilon,\n mul: data.cloudsDisplacement.multiplier,\n fac: data.cloudsDisplacement.factor,\n },\n },\n u_noise: {\n value: {\n freq: data.cloudsNoise.frequency,\n amp: data.cloudsNoise.amplitude,\n lac: data.cloudsNoise.lacunarity,\n oct: data.cloudsNoise.octaves,\n layers: data.cloudsNoise.layers,\n xwarp: data.cloudsNoise.xWarpFactor,\n ywarp: data.cloudsNoise.yWarpFactor,\n zwarp: data.cloudsNoise.zWarpFactor,\n },\n },\n u_color: { value: data.cloudsColor },\n u_opacity_tex: { value: opacityTex.texture },\n },\n THREE.MeshStandardMaterial,\n )\n material.transparent = true\n\n const mesh = new THREE.Mesh(geometry, material)\n mesh.name = Globals.LG_NAME_CLOUDS\n mesh.receiveShadow = true\n mesh.castShadow = true\n return { mesh, texs: [opacityTex] }\n}\n\nexport function createAtmosphere(data: PlanetData, sunPos: THREE.Vector3): THREE.Mesh {\n const atmosHeight = data.atmosphereHeight / Globals.ATMOSPHERE_HEIGHT_DIVIDER\n const atmosDensity = data.atmosphereDensityScale / Globals.ATMOSPHERE_HEIGHT_DIVIDER\n const geometry = createSphereGeometryComponent(data.planetMeshQuality, atmosHeight)\n const material = createShaderMaterialComponent(\n ShaderLoader.fetch('atmosphere.vert.glsl', ShaderFileType.CORE),\n ShaderLoader.fetch('atmosphere.frag.glsl', ShaderFileType.CORE),\n {\n u_light_position: { value: sunPos },\n u_light_intensity: { value: data.sunLightIntensity },\n u_surface_radius: { value: 1.0 },\n u_radius: { value: 1.0 + atmosHeight },\n u_density: { value: atmosDensity },\n u_intensity: { value: data.atmosphereIntensity },\n u_color_mode: { value: ColorMode.REALISTIC },\n u_hue: { value: data.atmosphereHue },\n u_tint: { value: data.atmosphereTint },\n },\n )\n material.transparent = true\n material.depthWrite = false\n\n const mesh = new THREE.Mesh(geometry, material)\n mesh.userData.lens = 'no-occlusion'\n mesh.name = Globals.LG_NAME_ATMOSPHERE\n mesh.castShadow = true\n return mesh\n}\n\nexport function createRing(\n data: PlanetData,\n textureBuffer: Uint8Array,\n): { mesh: THREE.Mesh; texs: DataTextureWrapper[] } {\n const rgbaTex = createRampTexture(textureBuffer, Globals.TEXTURE_SIZES.RING, data.ringColorRamp.steps)\n const geometry = createRingGeometryComponent(data.planetMeshQuality, data.ringInnerRadius, data.ringOuterRadius)\n const material = createCustomShaderMaterialComponent(\n ShaderLoader.fetch('ring.vert.glsl', ShaderFileType.CORE),\n ShaderLoader.fetch('ring.frag.glsl', ShaderFileType.CORE),\n {\n u_inner_radius: { value: data.ringInnerRadius },\n u_outer_radius: { value: data.ringOuterRadius },\n u_ring_tex: { value: rgbaTex.texture },\n },\n THREE.MeshStandardMaterial,\n )\n material.side = THREE.DoubleSide\n material.transparent = true\n\n const mesh = new THREE.Mesh(geometry, material)\n mesh.name = Globals.LG_NAME_RING\n mesh.receiveShadow = true\n mesh.castShadow = true\n return { mesh, texs: [rgbaTex] }\n}\n\n// ----------------------------------------------------------------------------------------------------------------------\n// NATIVE COMPONENTS\n\n/**\n * Creates a WebGL-based renderer\n * @param width canvas width\n * @param height canvas height\n * @returns the renderer\n */\nexport function createRendererComponent(width: number, height: number, pixelRatio?: number) {\n const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true, preserveDrawingBuffer: true })\n if (pixelRatio) {\n renderer.setPixelRatio(pixelRatio)\n }\n renderer.setSize(width, height)\n renderer.setClearColor(0x000000, 0)\n renderer.setTransparentSort((a, b) => a.z - b.z) // Invert transparent sorting to have a \"filter\" effect for transparent objects (atmos/ring)\n renderer.shadowMap.enabled = true\n renderer.shadowMap.autoUpdate = true\n renderer.shadowMap.type = THREE.PCFSoftShadowMap\n renderer.outputColorSpace = THREE.SRGBColorSpace\n return renderer\n}\n\n/**\n * Creates a perspective camera with the given params and optional orbit settings\n * @param fov Field of View, in degrees\n * @param ratio aspect ratio, i.e. width/height\n * @param near closest rendering distance\n * @param far furthest rendering distance\n * @param initialOrbit (optional) orbit settings (angle, etc)\n * @returns the configured camera\n */\nexport function createPerspectiveCameraComponent(\n fov: number,\n ratio: number,\n near: number,\n far: number,\n initialOrbit?: THREE.Spherical,\n): THREE.PerspectiveCamera {\n const camera = new THREE.PerspectiveCamera(fov, ratio, near, far)\n if (initialOrbit) {\n initialOrbit.makeSafe()\n camera.position.setFromSpherical(initialOrbit)\n }\n return camera\n}\n\n/**\n * Creates a perspective camera with the given params and optional orbit settings\n * @param fov Field of View, in degrees\n * @param ratio aspect ratio, i.e. width/height\n * @param near closest rendering distance\n * @param far furthest rendering distance\n * @param initialOrbit (optional) orbit settings (angle, etc)\n * @returns the configured camera\n */\nexport function createOrthgraphicCameraComponent(\n width: number,\n height: number,\n near: number,\n far: number,\n): THREE.OrthographicCamera {\n return new THREE.OrthographicCamera(-width / 2, width / 2, height / 2, -height / 2, near, far)\n}\n\n/**\n * Creates a simple ambient light\n * @param color light color\n * @param intensity light intensity\n * @returns the AmbientLight instance\n */\nexport function createAmbientLightComponent(color: THREE.ColorRepresentation, intensity: number) {\n const light = new THREE.AmbientLight(color)\n light.intensity = intensity\n return light\n}\n\nexport function createSphereGeometryComponent(quality: number, addtlRadius: number = 0): THREE.SphereGeometry {\n return new THREE.SphereGeometry(1.0 + addtlRadius, quality, quality / 2.0)\n}\n\nexport function createRingGeometryComponent(\n quality: number,\n innerRadius: number = 1.25,\n outerRadius: number = 1.75,\n): THREE.RingGeometry {\n return new THREE.RingGeometry(innerRadius, outerRadius, quality)\n}\n\n/**\n * Creates a CustomShaderMaterial instance from the given parameters\n * @param vertexShader GLSL vertex shader\n * @param fragmentShader GLSL fragment shader\n * @param shaderFunctions additional shader functions\n * @param uniforms shader uniforms\n * @param baseMaterial (optional) base material to use\n * @returns the RawShaderMaterial instance\n */\nexport function createCustomShaderMaterialComponent(\n vertexShader: string,\n fragmentShader?: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n uniforms?: { [uniform: string]: THREE.IUniform },\n baseMaterial?: T,\n): CustomShaderMaterial {\n const mat = new CustomShaderMaterial({\n baseMaterial: baseMaterial ?? THREE.MeshStandardMaterial,\n vertexShader,\n fragmentShader: fragmentShader ? ShaderLoader.resolveImports(fragmentShader) : undefined,\n uniforms,\n silent: true,\n })\n return mat\n}\n\nexport function createShaderMaterialComponent(\n vertexShader: string,\n fragmentShader?: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n uniforms?: { [uniform: string]: THREE.IUniform },\n): THREE.ShaderMaterial {\n return new THREE.ShaderMaterial({\n vertexShader,\n fragmentShader: fragmentShader ? ShaderLoader.resolveImports(fragmentShader) : undefined,\n uniforms,\n })\n}\n\n/**\n * Creates standard OrbitControls\n * @param camera the camera to control\n * @param canvas the render canvas\n * @returns an instance of OrbitControls\n */\nexport function createControlsComponent(camera: THREE.Camera, canvas: HTMLCanvasElement): OrbitControls {\n const controls = new OrbitControls(camera, canvas)\n controls.enablePan = false\n controls.enableDamping = false\n controls.dampingFactor = 0.05\n controls.screenSpacePanning = false\n controls.minDistance = 1.5\n controls.maxDistance = 10\n controls.maxPolarAngle = Math.PI\n controls.rotateSpeed = 0.5\n controls.zoomSpeed = 1.5\n controls.mouseButtons = {\n LEFT: THREE.MOUSE.ROTATE,\n MIDDLE: THREE.MOUSE.DOLLY,\n RIGHT: THREE.MOUSE.DOLLY,\n }\n return controls\n}\n","import type { LensFlareEffect } from '@/core/three/lens-flare.effect'\nimport { CanvasTexture, Mesh, type ShaderMaterial } from 'three'\nimport type CustomShaderMaterial from 'three-custom-shader-material/vanilla'\n\ntype MeshOrLensFlare = Mesh | LensFlareEffect\ntype MeshMaterial = CustomShaderMaterial | ShaderMaterial\n\n// ------------------------------------------------------------------------------------------------\n\nexport function getMeshShaderMaterial(mesh: MeshOrLensFlare) {\n return mesh.material as ShaderMaterial\n}\n\nexport function getMeshUniform(mesh: MeshOrLensFlare, uname: string) {\n return (mesh.material as MeshMaterial).uniforms[uname].value\n}\n\nexport function patchMeshUniform(mesh: MeshOrLensFlare, uname: string, uvalue: object): void {\n const mat = mesh.material as MeshMaterial\n mat.uniforms[uname] = { value: { ...getMeshUniform(mesh, uname), ...uvalue } }\n mat.needsUpdate = true\n}\n\nexport function setMeshUniform(mesh: MeshOrLensFlare, uname: string, uvalue: unknown): void {\n const mat = mesh.material as MeshMaterial\n mat.uniforms[uname] = { value: uvalue }\n mat.needsUpdate = true\n}\n\nexport function setMeshUniforms(mesh: MeshOrLensFlare, unames: string[], uvalues: unknown[]): void {\n const mat = mesh.material as MeshMaterial\n for (let i = 0; i < unames.length; i++) {\n mat.uniforms[unames[i]] = { value: uvalues[i] }\n }\n mat.needsUpdate = true\n}\n\n// ------------------------------------------------------------------------------------------------\n\nexport function bufferToTexture(buf: Uint8Array, w: number, h: number): CanvasTexture {\n const canvas = document.createElement('canvas')\n canvas.width = w\n canvas.height = h\n const ctx = canvas.getContext('2d')!\n const imgData = new ImageData(new Uint8ClampedArray(buf), w, h)\n ctx.putImageData(imgData, 0, 0)\n //saveAs(canvas.toDataURL(), 'normalmap.png')\n\n const tex = new CanvasTexture(canvas)\n tex.flipY = false\n canvas.remove()\n return tex\n}\n","import * as THREE from 'three'\nimport * as Globals from '@core/globals'\nimport * as ShaderLoader from '@core/three/shader.loader'\nimport * as ComponentBuilder from '@core/three/component.builder'\n\nimport { createRampTexture, createBiomeTexture } from '@core/helpers/texture.helper'\nimport type PlanetData from '@core/models/planet-data.model'\nimport { ShaderFileType } from '@core/types'\nimport type CustomShaderMaterial from 'three-custom-shader-material/vanilla'\nimport { bufferToTexture } from '@/utils/three-utils'\n\nconst BAKE_PATCH_RGX = /gl_Position ?=.*;/gm\nconst BAKE_CAMERA = ComponentBuilder.createOrthgraphicCameraComponent(1, 1, 0, 1)\nconst BAKE_RENDER_TARGET = new THREE.WebGLRenderTarget(1, 1, { colorSpace: THREE.SRGBColorSpace })\n\nexport function createBakingPlanet(data: PlanetData, surfaceTexBuf: Uint8Array, biomeTexBuf: Uint8Array): THREE.Mesh {\n const geometry = ComponentBuilder.createSphereGeometryComponent(data.planetMeshQuality)\n geometry.computeTangents()\n\n const surfaceTex = createRampTexture(surfaceTexBuf, Globals.TEXTURE_SIZES.SURFACE, data.planetSurfaceColorRamp.steps)\n const biomeTex = createBiomeTexture(biomeTexBuf, Globals.TEXTURE_SIZES.BIOME, data.biomesParams)\n\n const material = ComponentBuilder.createCustomShaderMaterialComponent(\n ShaderLoader.fetch('base.vert.glsl', ShaderFileType.BAKING),\n ShaderLoader.fetch('planet.frag.glsl', ShaderFileType.BAKING),\n {\n // Planet & Rendering\n u_radius: { value: 1.0 },\n u_pbr_params: {\n value: {\n wlevel: data.planetWaterLevel,\n },\n },\n // Surface\n u_warp: { value: data.planetSurfaceShowWarping },\n u_displace: { value: data.planetSurfaceShowDisplacement },\n u_surface_displacement: {\n value: {\n freq: data.planetSurfaceDisplacement.frequency,\n amp: data.planetSurfaceDisplacement.amplitude,\n lac: data.planetSurfaceDisplacement.lacunarity,\n oct: data.planetSurfaceDisplacement.octaves,\n eps: data.planetSurfaceDisplacement.epsilon,\n mul: data.planetSurfaceDisplacement.multiplier,\n fac: data.planetSurfaceDisplacement.factor,\n },\n },\n u_surface_noise: {\n value: {\n freq: data.planetSurfaceNoise.frequency,\n amp: data.planetSurfaceNoise.amplitude,\n lac: data.planetSurfaceNoise.lacunarity,\n oct: data.planetSurfaceNoise.octaves,\n layers: data.planetSurfaceNoise.layers,\n xwarp: data.planetSurfaceNoise.xWarpFactor,\n ywarp: data.planetSurfaceNoise.yWarpFactor,\n zwarp: data.planetSurfaceNoise.zWarpFactor,\n },\n },\n u_surface_tex: { value: surfaceTex.texture },\n // Biomes\n u_biomes: { value: data.biomesEnabled },\n u_biomes_tex: { value: biomeTex.texture },\n u_temp_noise: {\n value: {\n mode: data.biomesTemperatureMode,\n freq: data.biomesTemperatureNoise.frequency,\n amp: data.biomesTemperatureNoise.amplitude,\n lac: data.biomesTemperatureNoise.lacunarity,\n oct: data.biomesTemperatureNoise.octaves,\n },\n },\n u_humi_noise: {\n value: {\n mode: data.biomesHumidityMode,\n freq: data.biomesHumidityNoise.frequency,\n amp: data.biomesHumidityNoise.amplitude,\n lac: data.biomesHumidityNoise.lacunarity,\n oct: data.biomesHumidityNoise.octaves,\n },\n },\n },\n THREE.MeshBasicMaterial,\n )\n\n const mesh = new THREE.Mesh(geometry, material)\n mesh.name = Globals.LG_NAME_PLANET\n return mesh\n}\n\nexport function createBakingPBRMap(data: PlanetData): THREE.Mesh {\n const geometry = ComponentBuilder.createSphereGeometryComponent(data.planetMeshQuality)\n geometry.computeTangents()\n\n const material = ComponentBuilder.createCustomShaderMaterialComponent(\n ShaderLoader.fetch('base.vert.glsl', ShaderFileType.BAKING),\n ShaderLoader.fetch('pbr.frag.glsl', ShaderFileType.BAKING),\n {\n // Planet & Rendering\n u_pbr_params: {\n value: {\n wlevel: data.planetWaterLevel,\n wrough: data.planetWaterRoughness,\n wmetal: data.planetWaterMetalness,\n grough: data.planetGroundRoughness,\n gmetal: data.planetGroundMetalness,\n },\n },\n // Surface\n u_warp: { value: data.planetSurfaceShowWarping },\n u_displace: { value: data.planetSurfaceShowDisplacement },\n u_surface_displacement: {\n value: {\n freq: data.planetSurfaceDisplacement.frequency,\n amp: data.planetSurfaceDisplacement.amplitude,\n lac: data.planetSurfaceDisplacement.lacunarity,\n oct: data.planetSurfaceDisplacement.octaves,\n eps: data.planetSurfaceDisplacement.epsilon,\n mul: data.planetSurfaceDisplacement.multiplier,\n fac: data.planetSurfaceDisplacement.factor,\n },\n },\n u_surface_noise: {\n value: {\n freq: data.planetSurfaceNoise.frequency,\n amp: data.planetSurfaceNoise.amplitude,\n lac: data.planetSurfaceNoise.lacunarity,\n oct: data.planetSurfaceNoise.octaves,\n layers: data.planetSurfaceNoise.layers,\n xwarp: data.planetSurfaceNoise.xWarpFactor,\n ywarp: data.planetSurfaceNoise.yWarpFactor,\n zwarp: data.planetSurfaceNoise.zWarpFactor,\n },\n },\n },\n THREE.MeshBasicMaterial,\n )\n\n const mesh = new THREE.Mesh(geometry, material)\n mesh.name = '_PBRMap'\n return mesh\n}\n\nexport function createBakingHeightMap(data: PlanetData): THREE.Mesh {\n const geometry = ComponentBuilder.createSphereGeometryComponent(data.planetMeshQuality)\n geometry.computeTangents()\n\n const material = ComponentBuilder.createCustomShaderMaterialComponent(\n ShaderLoader.fetch('base.vert.glsl', ShaderFileType.BAKING),\n ShaderLoader.fetch('bump.frag.glsl', ShaderFileType.BAKING),\n {\n // Planet & Rendering\n u_radius: { value: 1.0 },\n // Surface\n u_bump: { value: data.planetSurfaceShowBumps },\n u_bump_strength: { value: data.planetSurfaceBumpStrength },\n u_bump_offset: { value: 0.005 },\n u_warp: { value: data.planetSurfaceShowWarping },\n u_displace: { value: data.planetSurfaceShowDisplacement },\n u_water_level: { value: data.planetWaterLevel },\n u_surface_displacement: {\n value: {\n freq: data.planetSurfaceDisplacement.frequency,\n amp: data.planetSurfaceDisplacement.amplitude,\n lac: data.planetSurfaceDisplacement.lacunarity,\n oct: data.planetSurfaceDisplacement.octaves,\n eps: data.planetSurfaceDisplacement.epsilon,\n mul: data.planetSurfaceDisplacement.multiplier,\n fac: data.planetSurfaceDisplacement.factor,\n },\n },\n u_surface_noise: {\n value: {\n freq: data.planetSurfaceNoise.frequency,\n amp: data.planetSurfaceNoise.amplitude,\n lac: data.planetSurfaceNoise.lacunarity,\n oct: data.planetSurfaceNoise.octaves,\n layers: data.planetSurfaceNoise.layers,\n xwarp: data.planetSurfaceNoise.xWarpFactor,\n ywarp: data.planetSurfaceNoise.yWarpFactor,\n zwarp: data.planetSurfaceNoise.zWarpFactor,\n },\n },\n },\n THREE.MeshBasicMaterial,\n )\n\n const mesh = new THREE.Mesh(geometry, material)\n mesh.name = '_BumpMap'\n return mesh\n}\n\nexport function createBakingNormalMap(data: PlanetData, bumpTex: THREE.Texture, resolution: number): THREE.Mesh {\n return new THREE.Mesh(\n new THREE.PlaneGeometry(),\n new THREE.ShaderMaterial({\n vertexShader: ShaderLoader.fetch('normal.vert.glsl', ShaderFileType.BAKING),\n fragmentShader: ShaderLoader.fetch('normal.frag.glsl', ShaderFileType.BAKING),\n uniforms: {\n u_scale: { value: 128 * data.planetSurfaceBumpStrength },\n u_resolution: { value: resolution },\n u_bump_tex: { value: bumpTex },\n },\n }),\n )\n}\n\nexport function createBakingClouds(data: PlanetData, textureBuffer: Uint8Array): THREE.Mesh {\n const cloudHeight = data.cloudsHeight / Globals.ATMOSPHERE_HEIGHT_DIVIDER\n const geometry = ComponentBuilder.createSphereGeometryComponent(data.planetMeshQuality, cloudHeight)\n const opacityTex = createRampTexture(textureBuffer, Globals.TEXTURE_SIZES.CLOUDS, data.cloudsColorRamp.steps)\n\n const material = ComponentBuilder.createCustomShaderMaterialComponent(\n ShaderLoader.fetch('base.vert.glsl', ShaderFileType.BAKING),\n ShaderLoader.fetch('clouds.frag.glsl', ShaderFileType.BAKING),\n {\n u_warp: { value: data.cloudsShowWarping },\n u_displace: { value: data.cloudsShowDisplacement },\n u_displacement: {\n value: {\n freq: data.cloudsDisplacement.frequency,\n amp: data.cloudsDisplacement.amplitude,\n lac: data.cloudsDisplacement.lacunarity,\n oct: data.cloudsDisplacement.octaves,\n eps: data.cloudsDisplacement.epsilon,\n mul: data.cloudsDisplacement.multiplier,\n fac: data.cloudsDisplacement.factor,\n },\n },\n u_noise: {\n value: {\n freq: data.cloudsNoise.frequency,\n amp: data.cloudsNoise.amplitude,\n lac: data.cloudsNoise.lacunarity,\n oct: data.cloudsNoise.octaves,\n layers: data.cloudsNoise.layers,\n xwarp: data.cloudsNoise.xWarpFactor,\n ywarp: data.cloudsNoise.yWarpFactor,\n zwarp: data.cloudsNoise.zWarpFactor,\n },\n },\n u_color: { value: data.cloudsColor },\n u_opacity_tex: { value: opacityTex.texture },\n },\n THREE.MeshBasicMaterial,\n )\n material.transparent = true\n\n const mesh = new THREE.Mesh(geometry, material)\n mesh.name = Globals.LG_NAME_CLOUDS\n mesh.receiveShadow = true\n mesh.castShadow = true\n return mesh\n}\n\nexport function createBakingRing(data: PlanetData, textureBuffer: Uint8Array): THREE.Mesh {\n const rgbaTex = createRampTexture(textureBuffer, Globals.TEXTURE_SIZES.RING, data.ringColorRamp.steps)\n const geometry = ComponentBuilder.createRingGeometryComponent(\n data.planetMeshQuality,\n data.ringInnerRadius,\n data.ringOuterRadius,\n )\n const material = ComponentBuilder.createCustomShaderMaterialComponent(\n ShaderLoader.fetch('ring.vert.glsl', ShaderFileType.CORE),\n ShaderLoader.fetch('ring.frag.glsl', ShaderFileType.CORE),\n {\n u_inner_radius: { value: data.ringInnerRadius },\n u_outer_radius: { value: data.ringOuterRadius },\n u_ring_tex: { value: rgbaTex.texture },\n },\n THREE.MeshBasicMaterial,\n )\n material.side = THREE.DoubleSide\n material.transparent = true\n\n const mesh = new THREE.Mesh(geometry, material)\n mesh.name = Globals.LG_NAME_RING\n mesh.receiveShadow = true\n mesh.castShadow = true\n return mesh\n}\n\n// ------------------------------------------------------------------------------------------------\n\n/**\n * Asynchronously bakes a model's Material/CustomShaderMaterial into a texture\n * @remarks Uses TextureLoader\n * @param renderer renderer\n * @param mesh mesh to bake\n * @param size texture size in pixels\n * @param applyGaussDilation if true, uses a Gaussian blur pass to dilate the texture cleanly\n * @returns a promise containing the mesh's baked texture\n */\nexport function bakeMesh(\n renderer: THREE.WebGLRenderer,\n mesh: THREE.Mesh,\n width: number,\n height: number,\n): THREE.Texture {\n BAKE_RENDER_TARGET.setSize(width, height)\n\n BAKE_CAMERA.left = -width / 2\n BAKE_CAMERA.right = width / 2\n BAKE_CAMERA.top = height / 2\n BAKE_CAMERA.bottom = -height / 2\n BAKE_CAMERA.updateProjectionMatrix()\n\n patchMaterialForUnwrapping(mesh.material as CustomShaderMaterial)\n renderer.setRenderTarget(BAKE_RENDER_TARGET)\n renderer.render(mesh, BAKE_CAMERA)\n\n const renderBuffer = new Uint8Array(width * height * 4)\n renderer.readRenderTargetPixels(BAKE_RENDER_TARGET, 0, 0, width, height, renderBuffer)\n renderer.setRenderTarget(null)\n\n return bufferToTexture(renderBuffer, width, height)\n}\n\nexport function prepareMeshForExport(mesh: THREE.Mesh, material: THREE.Material) {\n mesh.material = material\n}\n\n// NOTE: modified from three-shader-baker's code (see link)\n// https://github.com/FarazzShaikh/three-shader-baker/blob/main/package/src/index.ts\n// TODO: Not sure why material patching is necessary, need to investigate further (manual edits in GLSL code don't work)\nexport function patchMaterialForUnwrapping(material: THREE.Material | CustomShaderMaterial) {\n const origBeforeCompile = material.onBeforeCompile\n material.onBeforeCompile = (shader, renderer) => {\n origBeforeCompile(shader, renderer)\n if (shader.vertexShader.includes('#include ')) {\n shader.vertexShader = shader.vertexShader.replace(\n '#include ',\n `\n #include \n gl_Position = vec4(uv, 0.0, 1.0) * 2.0 - 1.0;\n `,\n )\n } else {\n shader.vertexShader = shader.vertexShader.replace(\n shader.vertexShader.match(BAKE_PATCH_RGX)![0],\n 'gl_Position = vec4(uv, 0.0, 1.0) * 2.0 - 1.0;',\n )\n }\n }\n}\n","import {\n\tBufferAttribute,\n\tClampToEdgeWrapping,\n\tColor,\n\tDoubleSide,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tNoColorSpace,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tMathUtils,\n\tMatrix4,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tPropertyBinding,\n\tRGBAFormat,\n\tRepeatWrapping,\n\tScene,\n\tSource,\n\tSRGBColorSpace,\n\tCompressedTexture,\n\tVector3,\n\tQuaternion,\n\tREVISION\n} from 'three';\n\n/**\n * The KHR_mesh_quantization extension allows these extra attribute component types\n *\n * @see https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md#extending-mesh-attributes\n */\nconst KHR_mesh_quantization_ExtraAttrTypes = {\n\tPOSITION: [\n\t\t'byte',\n\t\t'byte normalized',\n\t\t'unsigned byte',\n\t\t'unsigned byte normalized',\n\t\t'short',\n\t\t'short normalized',\n\t\t'unsigned short',\n\t\t'unsigned short normalized',\n\t],\n\tNORMAL: [\n\t\t'byte normalized',\n\t\t'short normalized',\n\t],\n\tTANGENT: [\n\t\t'byte normalized',\n\t\t'short normalized',\n\t],\n\tTEXCOORD: [\n\t\t'byte',\n\t\t'byte normalized',\n\t\t'unsigned byte',\n\t\t'short',\n\t\t'short normalized',\n\t\t'unsigned short',\n\t],\n};\n\n\nclass GLTFExporter {\n\n\tconstructor() {\n\n\t\tthis.textureUtils = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFLightExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsUnlitExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsDispersionExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsAnisotropyExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsBumpExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( writer );\n\n\t\t} );\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetTextureUtils( utils ) {\n\n\t\tthis.textureUtils = utils;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t *\n\t * @param {Scene|Array} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Function} onError Callback on errors\n\t * @param {Object} options options\n\t */\n\tparse( input, onDone, onError, options ) {\n\n\t\tconst writer = new GLTFWriter();\n\t\tconst plugins = [];\n\n\t\tfor ( let i = 0, il = this.pluginCallbacks.length; i < il; i ++ ) {\n\n\t\t\tplugins.push( this.pluginCallbacks[ i ]( writer ) );\n\n\t\t}\n\n\t\twriter.setPlugins( plugins );\n\t\twriter.setTextureUtils( this.textureUtils );\n\t\twriter.writeAsync( input, onDone, options ).catch( onError );\n\n\t}\n\n\tparseAsync( input, options ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( input, resolve, reject, options );\n\n\t\t} );\n\n\t}\n\n}\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst WEBGL_CONSTANTS = {\n\tPOINTS: 0x0000,\n\tLINES: 0x0001,\n\tLINE_LOOP: 0x0002,\n\tLINE_STRIP: 0x0003,\n\tTRIANGLES: 0x0004,\n\tTRIANGLE_STRIP: 0x0005,\n\tTRIANGLE_FAN: 0x0006,\n\n\tBYTE: 0x1400,\n\tUNSIGNED_BYTE: 0x1401,\n\tSHORT: 0x1402,\n\tUNSIGNED_SHORT: 0x1403,\n\tINT: 0x1404,\n\tUNSIGNED_INT: 0x1405,\n\tFLOAT: 0x1406,\n\n\tARRAY_BUFFER: 0x8892,\n\tELEMENT_ARRAY_BUFFER: 0x8893,\n\n\tNEAREST: 0x2600,\n\tLINEAR: 0x2601,\n\tNEAREST_MIPMAP_NEAREST: 0x2700,\n\tLINEAR_MIPMAP_NEAREST: 0x2701,\n\tNEAREST_MIPMAP_LINEAR: 0x2702,\n\tLINEAR_MIPMAP_LINEAR: 0x2703,\n\n\tCLAMP_TO_EDGE: 33071,\n\tMIRRORED_REPEAT: 33648,\n\tREPEAT: 10497\n};\n\nconst KHR_MESH_QUANTIZATION = 'KHR_mesh_quantization';\n\nconst THREE_TO_WEBGL = {};\n\nTHREE_TO_WEBGL[ NearestFilter ] = WEBGL_CONSTANTS.NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapNearestFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapLinearFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;\nTHREE_TO_WEBGL[ LinearFilter ] = WEBGL_CONSTANTS.LINEAR;\nTHREE_TO_WEBGL[ LinearMipmapNearestFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ LinearMipmapLinearFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;\n\nTHREE_TO_WEBGL[ ClampToEdgeWrapping ] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;\nTHREE_TO_WEBGL[ RepeatWrapping ] = WEBGL_CONSTANTS.REPEAT;\nTHREE_TO_WEBGL[ MirroredRepeatWrapping ] = WEBGL_CONSTANTS.MIRRORED_REPEAT;\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\tposition: 'translation',\n\tquaternion: 'rotation',\n\tmorphTargetInfluences: 'weights'\n};\n\nconst DEFAULT_SPECULAR_COLOR = new Color();\n\n// GLB constants\n// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\nconst GLB_HEADER_BYTES = 12;\nconst GLB_HEADER_MAGIC = 0x46546C67;\nconst GLB_VERSION = 2;\n\nconst GLB_CHUNK_PREFIX_BYTES = 8;\nconst GLB_CHUNK_TYPE_JSON = 0x4E4F534A;\nconst GLB_CHUNK_TYPE_BIN = 0x004E4942;\n\n//------------------------------------------------------------------------------\n// Utility functions\n//------------------------------------------------------------------------------\n\n/**\n * Compare two arrays\n * @param {Array} array1 Array 1 to compare\n * @param {Array} array2 Array 2 to compare\n * @return {Boolean} Returns true if both arrays are equal\n */\nfunction equalArray( array1, array2 ) {\n\n\treturn ( array1.length === array2.length ) && array1.every( function ( element, index ) {\n\n\t\treturn element === array2[ index ];\n\n\t} );\n\n}\n\n/**\n * Converts a string to an ArrayBuffer.\n * @param {string} text\n * @return {ArrayBuffer}\n */\nfunction stringToArrayBuffer( text ) {\n\n\treturn new TextEncoder().encode( text ).buffer;\n\n}\n\n/**\n * Is identity matrix\n *\n * @param {Matrix4} matrix\n * @returns {Boolean} Returns true, if parameter is identity matrix\n */\nfunction isIdentityMatrix( matrix ) {\n\n\treturn equalArray( matrix.elements, [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] );\n\n}\n\n/**\n * Get the min and max vectors from the given attribute\n *\n * @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count\n * @param {Number} start Start index\n * @param {Number} count Range to cover\n * @return {Object} Object containing the `min` and `max` values (As an array of attribute.itemSize components)\n */\nfunction getMinMax( attribute, start, count ) {\n\n\tconst output = {\n\n\t\tmin: new Array( attribute.itemSize ).fill( Number.POSITIVE_INFINITY ),\n\t\tmax: new Array( attribute.itemSize ).fill( Number.NEGATIVE_INFINITY )\n\n\t};\n\n\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\tlet value;\n\n\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t} else {\n\n\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\tif ( attribute.normalized === true ) {\n\n\t\t\t\t\tvalue = MathUtils.normalize( value, attribute.array );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toutput.min[ a ] = Math.min( output.min[ a ], value );\n\t\t\toutput.max[ a ] = Math.max( output.max[ a ], value );\n\n\t\t}\n\n\t}\n\n\treturn output;\n\n}\n\n/**\n * Get the required size + padding for a buffer, rounded to the next 4-byte boundary.\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment\n *\n * @param {Number} bufferSize The size the original buffer. Should be an integer.\n * @returns {Number} new buffer size with required padding as an integer.\n *\n */\nfunction getPaddedBufferSize( bufferSize ) {\n\n\treturn Math.ceil( bufferSize / 4 ) * 4;\n\n}\n\n/**\n * Returns a buffer aligned to 4-byte boundary.\n *\n * @param {ArrayBuffer} arrayBuffer Buffer to pad\n * @param {Number} [paddingByte=0] Should be an integer\n * @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer\n */\nfunction getPaddedArrayBuffer( arrayBuffer, paddingByte = 0 ) {\n\n\tconst paddedLength = getPaddedBufferSize( arrayBuffer.byteLength );\n\n\tif ( paddedLength !== arrayBuffer.byteLength ) {\n\n\t\tconst array = new Uint8Array( paddedLength );\n\t\tarray.set( new Uint8Array( arrayBuffer ) );\n\n\t\tif ( paddingByte !== 0 ) {\n\n\t\t\tfor ( let i = arrayBuffer.byteLength; i < paddedLength; i ++ ) {\n\n\t\t\t\tarray[ i ] = paddingByte;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn array.buffer;\n\n\t}\n\n\treturn arrayBuffer;\n\n}\n\nfunction getCanvas() {\n\n\tif ( typeof document === 'undefined' && typeof OffscreenCanvas !== 'undefined' ) {\n\n\t\treturn new OffscreenCanvas( 1, 1 );\n\n\t}\n\n\treturn document.createElement( 'canvas' );\n\n}\n\nfunction getToBlobPromise( canvas, mimeType ) {\n\n\tif ( canvas.toBlob !== undefined ) {\n\n\t\treturn new Promise( ( resolve ) => canvas.toBlob( resolve, mimeType ) );\n\n\t}\n\n\tlet quality;\n\n\t// Blink's implementation of convertToBlob seems to default to a quality level of 100%\n\t// Use the Blink default quality levels of toBlob instead so that file sizes are comparable.\n\tif ( mimeType === 'image/jpeg' ) {\n\n\t\tquality = 0.92;\n\n\t} else if ( mimeType === 'image/webp' ) {\n\n\t\tquality = 0.8;\n\n\t}\n\n\treturn canvas.convertToBlob( {\n\n\t\ttype: mimeType,\n\t\tquality: quality\n\n\t} );\n\n}\n\n/**\n * Writer\n */\nclass GLTFWriter {\n\n\tconstructor() {\n\n\t\tthis.plugins = [];\n\n\t\tthis.options = {};\n\t\tthis.pending = [];\n\t\tthis.buffers = [];\n\n\t\tthis.byteOffset = 0;\n\t\tthis.buffers = [];\n\t\tthis.nodeMap = new Map();\n\t\tthis.skins = [];\n\n\t\tthis.extensionsUsed = {};\n\t\tthis.extensionsRequired = {};\n\n\t\tthis.uids = new Map();\n\t\tthis.uid = 0;\n\n\t\tthis.json = {\n\t\t\tasset: {\n\t\t\t\tversion: '2.0',\n\t\t\t\tgenerator: 'THREE.GLTFExporter r' + REVISION\n\t\t\t}\n\t\t};\n\n\t\tthis.cache = {\n\t\t\tmeshes: new Map(),\n\t\t\tattributes: new Map(),\n\t\t\tattributesNormalized: new Map(),\n\t\t\tmaterials: new Map(),\n\t\t\ttextures: new Map(),\n\t\t\timages: new Map()\n\t\t};\n\n\t\tthis.textureUtils = null;\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\tsetTextureUtils( utils ) {\n\n\t\tthis.textureUtils = utils;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t *\n\t * @param {Scene|Array} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\tasync writeAsync( input, onDone, options = {} ) {\n\n\t\tthis.options = Object.assign( {\n\t\t\t// default options\n\t\t\tbinary: false,\n\t\t\ttrs: false,\n\t\t\tonlyVisible: true,\n\t\t\tmaxTextureSize: Infinity,\n\t\t\tanimations: [],\n\t\t\tincludeCustomExtensions: false\n\t\t}, options );\n\n\t\tif ( this.options.animations.length > 0 ) {\n\n\t\t\t// Only TRS properties, and not matrices, may be targeted by animation.\n\t\t\tthis.options.trs = true;\n\n\t\t}\n\n\t\tawait this.processInputAsync( input );\n\n\t\tawait Promise.all( this.pending );\n\n\t\tconst writer = this;\n\t\tconst buffers = writer.buffers;\n\t\tconst json = writer.json;\n\t\toptions = writer.options;\n\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\t\tconst extensionsRequired = writer.extensionsRequired;\n\n\t\t// Merge buffers.\n\t\tconst blob = new Blob( buffers, { type: 'application/octet-stream' } );\n\n\t\t// Declare extensions.\n\t\tconst extensionsUsedList = Object.keys( extensionsUsed );\n\t\tconst extensionsRequiredList = Object.keys( extensionsRequired );\n\n\t\tif ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;\n\t\tif ( extensionsRequiredList.length > 0 ) json.extensionsRequired = extensionsRequiredList;\n\n\t\t// Update bytelength of the single buffer.\n\t\tif ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;\n\n\t\tif ( options.binary === true ) {\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\n\t\t\tconst reader = new FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\t// Binary chunk.\n\t\t\t\tconst binaryChunk = getPaddedArrayBuffer( reader.result );\n\t\t\t\tconst binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\tbinaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );\n\t\t\t\tbinaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );\n\n\t\t\t\t// JSON chunk.\n\t\t\t\tconst jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );\n\t\t\t\tconst jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\tjsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );\n\t\t\t\tjsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );\n\n\t\t\t\t// GLB header.\n\t\t\t\tconst header = new ArrayBuffer( GLB_HEADER_BYTES );\n\t\t\t\tconst headerView = new DataView( header );\n\t\t\t\theaderView.setUint32( 0, GLB_HEADER_MAGIC, true );\n\t\t\t\theaderView.setUint32( 4, GLB_VERSION, true );\n\t\t\t\tconst totalByteLength = GLB_HEADER_BYTES\n\t\t\t\t\t+ jsonChunkPrefix.byteLength + jsonChunk.byteLength\n\t\t\t\t\t+ binaryChunkPrefix.byteLength + binaryChunk.byteLength;\n\t\t\t\theaderView.setUint32( 8, totalByteLength, true );\n\n\t\t\t\tconst glbBlob = new Blob( [\n\t\t\t\t\theader,\n\t\t\t\t\tjsonChunkPrefix,\n\t\t\t\t\tjsonChunk,\n\t\t\t\t\tbinaryChunkPrefix,\n\t\t\t\t\tbinaryChunk\n\t\t\t\t], { type: 'application/octet-stream' } );\n\n\t\t\t\tconst glbReader = new FileReader();\n\t\t\t\tglbReader.readAsArrayBuffer( glbBlob );\n\t\t\t\tglbReader.onloadend = function () {\n\n\t\t\t\t\tonDone( glbReader.result );\n\n\t\t\t\t};\n\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tif ( json.buffers && json.buffers.length > 0 ) {\n\n\t\t\t\tconst reader = new FileReader();\n\t\t\t\treader.readAsDataURL( blob );\n\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\tconst base64data = reader.result;\n\t\t\t\t\tjson.buffers[ 0 ].uri = base64data;\n\t\t\t\t\tonDone( json );\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tonDone( json );\n\n\t\t\t}\n\n\t\t}\n\n\n\t}\n\n\t/**\n\t * Serializes a userData.\n\t *\n\t * @param {THREE.Object3D|THREE.Material} object\n\t * @param {Object} objectDef\n\t */\n\tserializeUserData( object, objectDef ) {\n\n\t\tif ( Object.keys( object.userData ).length === 0 ) return;\n\n\t\tconst options = this.options;\n\t\tconst extensionsUsed = this.extensionsUsed;\n\n\t\ttry {\n\n\t\t\tconst json = JSON.parse( JSON.stringify( object.userData ) );\n\n\t\t\tif ( options.includeCustomExtensions && json.gltfExtensions ) {\n\n\t\t\t\tif ( objectDef.extensions === undefined ) objectDef.extensions = {};\n\n\t\t\t\tfor ( const extensionName in json.gltfExtensions ) {\n\n\t\t\t\t\tobjectDef.extensions[ extensionName ] = json.gltfExtensions[ extensionName ];\n\t\t\t\t\textensionsUsed[ extensionName ] = true;\n\n\t\t\t\t}\n\n\t\t\t\tdelete json.gltfExtensions;\n\n\t\t\t}\n\n\t\t\tif ( Object.keys( json ).length > 0 ) objectDef.extras = json;\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: userData of \\'' + object.name + '\\' ' +\n\t\t\t\t'won\\'t be serialized because of JSON.stringify error - ' + error.message );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns ids for buffer attributes.\n\t *\n\t * @param {Object} attribute\n\t * @param {boolean} [isRelativeCopy=false]\n\t * @return {Number} An integer\n\t */\n\tgetUID( attribute, isRelativeCopy = false ) {\n\n\t\tif ( this.uids.has( attribute ) === false ) {\n\n\t\t\tconst uids = new Map();\n\n\t\t\tuids.set( true, this.uid ++ );\n\t\t\tuids.set( false, this.uid ++ );\n\n\t\t\tthis.uids.set( attribute, uids );\n\n\t\t}\n\n\t\tconst uids = this.uids.get( attribute );\n\n\t\treturn uids.get( isRelativeCopy );\n\n\t}\n\n\t/**\n\t * Checks if normal attribute values are normalized.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {Boolean}\n\t */\n\tisNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) ) return false;\n\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = normal.count; i < il; i ++ ) {\n\n\t\t\t// 0.0005 is from glTF-validator\n\t\t\tif ( Math.abs( v.fromBufferAttribute( normal, i ).length() - 1.0 ) > 0.0005 ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Creates normalized normal buffer attribute.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {BufferAttribute}\n\t *\n\t */\n\tcreateNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) )\treturn cache.attributesNormalized.get( normal );\n\n\t\tconst attribute = normal.clone();\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tv.fromBufferAttribute( attribute, i );\n\n\t\t\tif ( v.x === 0 && v.y === 0 && v.z === 0 ) {\n\n\t\t\t\t// if values can't be normalized set (1, 0, 0)\n\t\t\t\tv.setX( 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tv.normalize();\n\n\t\t\t}\n\n\t\t\tattribute.setXYZ( i, v.x, v.y, v.z );\n\n\t\t}\n\n\t\tcache.attributesNormalized.set( normal, attribute );\n\n\t\treturn attribute;\n\n\t}\n\n\t/**\n\t * Applies a texture transform, if present, to the map definition. Requires\n\t * the KHR_texture_transform extension.\n\t *\n\t * @param {Object} mapDef\n\t * @param {THREE.Texture} texture\n\t */\n\tapplyTextureTransform( mapDef, texture ) {\n\n\t\tlet didTransform = false;\n\t\tconst transformDef = {};\n\n\t\tif ( texture.offset.x !== 0 || texture.offset.y !== 0 ) {\n\n\t\t\ttransformDef.offset = texture.offset.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.rotation !== 0 ) {\n\n\t\t\ttransformDef.rotation = texture.rotation;\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.repeat.x !== 1 || texture.repeat.y !== 1 ) {\n\n\t\t\ttransformDef.scale = texture.repeat.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( didTransform ) {\n\n\t\t\tmapDef.extensions = mapDef.extensions || {};\n\t\t\tmapDef.extensions[ 'KHR_texture_transform' ] = transformDef;\n\t\t\tthis.extensionsUsed[ 'KHR_texture_transform' ] = true;\n\n\t\t}\n\n\t}\n\n\tasync buildMetalRoughTextureAsync( metalnessMap, roughnessMap ) {\n\n\t\tif ( metalnessMap === roughnessMap ) return metalnessMap;\n\n\t\tfunction getEncodingConversion( map ) {\n\n\t\t\tif ( map.colorSpace === SRGBColorSpace ) {\n\n\t\t\t\treturn function SRGBToLinear( c ) {\n\n\t\t\t\t\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\treturn function LinearToLinear( c ) {\n\n\t\t\t\treturn c;\n\n\t\t\t};\n\n\t\t}\n\n\t\tif ( metalnessMap instanceof CompressedTexture ) {\n\n\t\t\tmetalnessMap = await this.decompressTextureAsync( metalnessMap );\n\n\t\t}\n\n\t\tif ( roughnessMap instanceof CompressedTexture ) {\n\n\t\t\troughnessMap = await this.decompressTextureAsync( roughnessMap );\n\n\t\t}\n\n\t\tconst metalness = metalnessMap ? metalnessMap.image : null;\n\t\tconst roughness = roughnessMap ? roughnessMap.image : null;\n\n\t\tconst width = Math.max( metalness ? metalness.width : 0, roughness ? roughness.width : 0 );\n\t\tconst height = Math.max( metalness ? metalness.height : 0, roughness ? roughness.height : 0 );\n\n\t\tconst canvas = getCanvas();\n\t\tcanvas.width = width;\n\t\tcanvas.height = height;\n\n\t\tconst context = canvas.getContext( '2d', {\n\t\t\twillReadFrequently: true,\n\t\t} );\n\t\tcontext.fillStyle = '#00ffff';\n\t\tcontext.fillRect( 0, 0, width, height );\n\n\t\tconst composite = context.getImageData( 0, 0, width, height );\n\n\t\tif ( metalness ) {\n\n\t\t\tcontext.drawImage( metalness, 0, 0, width, height );\n\n\t\t\tconst convert = getEncodingConversion( metalnessMap );\n\t\t\tconst data = context.getImageData( 0, 0, width, height ).data;\n\n\t\t\tfor ( let i = 2; i < data.length; i += 4 ) {\n\n\t\t\t\tcomposite.data[ i ] = convert( data[ i ] / 256 ) * 256;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( roughness ) {\n\n\t\t\tcontext.drawImage( roughness, 0, 0, width, height );\n\n\t\t\tconst convert = getEncodingConversion( roughnessMap );\n\t\t\tconst data = context.getImageData( 0, 0, width, height ).data;\n\n\t\t\tfor ( let i = 1; i < data.length; i += 4 ) {\n\n\t\t\t\tcomposite.data[ i ] = convert( data[ i ] / 256 ) * 256;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcontext.putImageData( composite, 0, 0 );\n\n\t\t//\n\n\t\tconst reference = metalnessMap || roughnessMap;\n\n\t\tconst texture = reference.clone();\n\n\t\ttexture.source = new Source( canvas );\n\t\ttexture.colorSpace = NoColorSpace;\n\t\ttexture.channel = ( metalnessMap || roughnessMap ).channel;\n\n\t\tif ( metalnessMap && roughnessMap && metalnessMap.channel !== roughnessMap.channel ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match.' );\n\n\t\t}\n\n\t\tconsole.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );\n\n\t\treturn texture;\n\n\t}\n\n\n\tasync decompressTextureAsync( texture, maxTextureSize = Infinity ) {\n\n\t\tif ( this.textureUtils === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: setTextureUtils() must be called to process compressed textures.' );\n\n\t\t}\n\n\t\treturn await this.textureUtils.decompress( texture, maxTextureSize );\n\n\t}\n\n\t/**\n\t * Process a buffer to append to the default one.\n\t * @param {ArrayBuffer} buffer\n\t * @return {0}\n\t */\n\tprocessBuffer( buffer ) {\n\n\t\tconst json = this.json;\n\t\tconst buffers = this.buffers;\n\n\t\tif ( ! json.buffers ) json.buffers = [ { byteLength: 0 } ];\n\n\t\t// All buffers are merged before export.\n\t\tbuffers.push( buffer );\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView\n\t * @param {BufferAttribute} attribute\n\t * @param {number} componentType\n\t * @param {number} start\n\t * @param {number} count\n\t * @param {number?} target Target usage of the BufferView\n\t * @return {Object}\n\t */\n\tprocessBufferView( attribute, componentType, start, count, target ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\t// Create a new dataview and dump the attribute's array into it\n\n\t\tlet componentSize;\n\n\t\tswitch ( componentType ) {\n\n\t\t\tcase WEBGL_CONSTANTS.BYTE:\n\t\t\tcase WEBGL_CONSTANTS.UNSIGNED_BYTE:\n\n\t\t\t\tcomponentSize = 1;\n\n\t\t\t\tbreak;\n\n\t\t\tcase WEBGL_CONSTANTS.SHORT:\n\t\t\tcase WEBGL_CONSTANTS.UNSIGNED_SHORT:\n\n\t\t\t\tcomponentSize = 2;\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tcomponentSize = 4;\n\n\t\t}\n\n\t\tlet byteStride = attribute.itemSize * componentSize;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Each element of a vertex attribute MUST be aligned to 4-byte boundaries\n\t\t\t// inside a bufferView\n\t\t\tbyteStride = Math.ceil( byteStride / 4 ) * 4;\n\n\t\t}\n\n\t\tconst byteLength = getPaddedBufferSize( count * byteStride );\n\t\tconst dataView = new DataView( new ArrayBuffer( byteLength ) );\n\t\tlet offset = 0;\n\n\t\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\tlet value;\n\n\t\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\t\tif ( attribute.normalized === true ) {\n\n\t\t\t\t\t\tvalue = MathUtils.normalize( value, attribute.array );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( componentType === WEBGL_CONSTANTS.FLOAT ) {\n\n\t\t\t\t\tdataView.setFloat32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.INT ) {\n\n\t\t\t\t\tdataView.setInt32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {\n\n\t\t\t\t\tdataView.setUint32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.SHORT ) {\n\n\t\t\t\t\tdataView.setInt16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\t\t\tdataView.setUint16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.BYTE ) {\n\n\t\t\t\t\tdataView.setInt8( offset, value );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\t\t\tdataView.setUint8( offset, value );\n\n\t\t\t\t}\n\n\t\t\t\toffset += componentSize;\n\n\t\t\t}\n\n\t\t\tif ( ( offset % byteStride ) !== 0 ) {\n\n\t\t\t\toffset += byteStride - ( offset % byteStride );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bufferViewDef = {\n\n\t\t\tbuffer: this.processBuffer( dataView.buffer ),\n\t\t\tbyteOffset: this.byteOffset,\n\t\t\tbyteLength: byteLength\n\n\t\t};\n\n\t\tif ( target !== undefined ) bufferViewDef.target = target;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Only define byteStride for vertex attributes.\n\t\t\tbufferViewDef.byteStride = byteStride;\n\n\t\t}\n\n\t\tthis.byteOffset += byteLength;\n\n\t\tjson.bufferViews.push( bufferViewDef );\n\n\t\t// @TODO Merge bufferViews where possible.\n\t\tconst output = {\n\n\t\t\tid: json.bufferViews.length - 1,\n\t\t\tbyteLength: 0\n\n\t\t};\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView from an image Blob.\n\t * @param {Blob} blob\n\t * @return {Promise} An integer\n\t */\n\tprocessBufferViewImage( blob ) {\n\n\t\tconst writer = this;\n\t\tconst json = writer.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\treturn new Promise( function ( resolve ) {\n\n\t\t\tconst reader = new FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\tconst buffer = getPaddedArrayBuffer( reader.result );\n\n\t\t\t\tconst bufferViewDef = {\n\t\t\t\t\tbuffer: writer.processBuffer( buffer ),\n\t\t\t\t\tbyteOffset: writer.byteOffset,\n\t\t\t\t\tbyteLength: buffer.byteLength\n\t\t\t\t};\n\n\t\t\t\twriter.byteOffset += buffer.byteLength;\n\t\t\t\tresolve( json.bufferViews.push( bufferViewDef ) - 1 );\n\n\t\t\t};\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Process attribute to generate an accessor\n\t * @param {BufferAttribute} attribute Attribute to process\n\t * @param {THREE.BufferGeometry?} geometry Geometry used for truncated draw range\n\t * @param {Number} [start=0]\n\t * @param {Number} [count=Infinity]\n\t * @return {Number?} Index of the processed accessor on the \"accessors\" array\n\t */\n\tprocessAccessor( attribute, geometry, start, count ) {\n\n\t\tconst json = this.json;\n\n\t\tconst types = {\n\n\t\t\t1: 'SCALAR',\n\t\t\t2: 'VEC2',\n\t\t\t3: 'VEC3',\n\t\t\t4: 'VEC4',\n\t\t\t9: 'MAT3',\n\t\t\t16: 'MAT4'\n\n\t\t};\n\n\t\tlet componentType;\n\n\t\t// Detect the component type of the attribute array\n\t\tif ( attribute.array.constructor === Float32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.FLOAT;\n\n\t\t} else if ( attribute.array.constructor === Int32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.INT;\n\n\t\t} else if ( attribute.array.constructor === Uint32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_INT;\n\n\t\t} else if ( attribute.array.constructor === Int16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.SHORT;\n\n\t\t} else if ( attribute.array.constructor === Uint16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;\n\n\t\t} else if ( attribute.array.constructor === Int8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.BYTE;\n\n\t\t} else if ( attribute.array.constructor === Uint8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type: ' + attribute.array.constructor.name );\n\n\t\t}\n\n\t\tif ( start === undefined ) start = 0;\n\t\tif ( count === undefined || count === Infinity ) count = attribute.count;\n\n\t\t// Skip creating an accessor if the attribute doesn't have data to export\n\t\tif ( count === 0 ) return null;\n\n\t\tconst minMax = getMinMax( attribute, start, count );\n\t\tlet bufferViewTarget;\n\n\t\t// If geometry isn't provided, don't infer the target usage of the bufferView. For\n\t\t// animation samplers, target must not be set.\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tbufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;\n\n\t\t}\n\n\t\tconst bufferView = this.processBufferView( attribute, componentType, start, count, bufferViewTarget );\n\n\t\tconst accessorDef = {\n\n\t\t\tbufferView: bufferView.id,\n\t\t\tbyteOffset: bufferView.byteOffset,\n\t\t\tcomponentType: componentType,\n\t\t\tcount: count,\n\t\t\tmax: minMax.max,\n\t\t\tmin: minMax.min,\n\t\t\ttype: types[ attribute.itemSize ]\n\n\t\t};\n\n\t\tif ( attribute.normalized === true ) accessorDef.normalized = true;\n\t\tif ( ! json.accessors ) json.accessors = [];\n\n\t\treturn json.accessors.push( accessorDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process image\n\t * @param {Image} image to process\n\t * @param {Number} format Identifier of the format (RGBAFormat)\n\t * @param {Boolean} flipY before writing out the image\n\t * @param {String} mimeType export format\n\t * @return {Number} Index of the processed texture in the \"images\" array\n\t */\n\tprocessImage( image, format, flipY, mimeType = 'image/png' ) {\n\n\t\tif ( image !== null ) {\n\n\t\t\tconst writer = this;\n\t\t\tconst cache = writer.cache;\n\t\t\tconst json = writer.json;\n\t\t\tconst options = writer.options;\n\t\t\tconst pending = writer.pending;\n\n\t\t\tif ( ! cache.images.has( image ) ) cache.images.set( image, {} );\n\n\t\t\tconst cachedImages = cache.images.get( image );\n\n\t\t\tconst key = mimeType + ':flipY/' + flipY.toString();\n\n\t\t\tif ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];\n\n\t\t\tif ( ! json.images ) json.images = [];\n\n\t\t\tconst imageDef = { mimeType: mimeType };\n\n\t\t\tconst canvas = getCanvas();\n\n\t\t\tcanvas.width = Math.min( image.width, options.maxTextureSize );\n\t\t\tcanvas.height = Math.min( image.height, options.maxTextureSize );\n\n\t\t\tconst ctx = canvas.getContext( '2d', {\n\t\t\t\twillReadFrequently: true,\n\t\t\t} );\n\n\t\t\tif ( flipY === true ) {\n\n\t\t\t\tctx.translate( 0, canvas.height );\n\t\t\t\tctx.scale( 1, - 1 );\n\n\t\t\t}\n\n\t\t\tif ( image.data !== undefined ) { // THREE.DataTexture\n\n\t\t\t\tif ( format !== RGBAFormat ) {\n\n\t\t\t\t\tconsole.error( 'GLTFExporter: Only RGBAFormat is supported.', format );\n\n\t\t\t\t}\n\n\t\t\t\tif ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {\n\n\t\t\t\t\tconsole.warn( 'GLTFExporter: Image size is bigger than maxTextureSize', image );\n\n\t\t\t\t}\n\n\t\t\t\tconst data = new Uint8ClampedArray( image.height * image.width * 4 );\n\n\t\t\t\tfor ( let i = 0; i < data.length; i += 4 ) {\n\n\t\t\t\t\tdata[ i + 0 ] = image.data[ i + 0 ];\n\t\t\t\t\tdata[ i + 1 ] = image.data[ i + 1 ];\n\t\t\t\t\tdata[ i + 2 ] = image.data[ i + 2 ];\n\t\t\t\t\tdata[ i + 3 ] = image.data[ i + 3 ];\n\n\t\t\t\t}\n\n\t\t\t\tctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ||\n\t\t\t\t\t( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ) {\n\n\t\t\t\t\tctx.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Invalid image type. Use HTMLImageElement, HTMLCanvasElement, ImageBitmap or OffscreenCanvas.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\tpending.push(\n\n\t\t\t\t\tgetToBlobPromise( canvas, mimeType )\n\t\t\t\t\t\t.then( blob => writer.processBufferViewImage( blob ) )\n\t\t\t\t\t\t.then( bufferViewIndex => {\n\n\t\t\t\t\t\t\timageDef.bufferView = bufferViewIndex;\n\n\t\t\t\t\t\t} )\n\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tif ( canvas.toDataURL !== undefined ) {\n\n\t\t\t\t\timageDef.uri = canvas.toDataURL( mimeType );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpending.push(\n\n\t\t\t\t\t\tgetToBlobPromise( canvas, mimeType )\n\t\t\t\t\t\t\t.then( blob => new FileReader().readAsDataURL( blob ) )\n\t\t\t\t\t\t\t.then( dataURL => {\n\n\t\t\t\t\t\t\t\timageDef.uri = dataURL;\n\n\t\t\t\t\t\t\t} )\n\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst index = json.images.push( imageDef ) - 1;\n\t\t\tcachedImages[ key ] = index;\n\t\t\treturn index;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: No valid image data found. Unable to process texture.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process sampler\n\t * @param {Texture} map Texture to process\n\t * @return {Number} Index of the processed texture in the \"samplers\" array\n\t */\n\tprocessSampler( map ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.samplers ) json.samplers = [];\n\n\t\tconst samplerDef = {\n\t\t\tmagFilter: THREE_TO_WEBGL[ map.magFilter ],\n\t\t\tminFilter: THREE_TO_WEBGL[ map.minFilter ],\n\t\t\twrapS: THREE_TO_WEBGL[ map.wrapS ],\n\t\t\twrapT: THREE_TO_WEBGL[ map.wrapT ]\n\t\t};\n\n\t\treturn json.samplers.push( samplerDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process texture\n\t * @param {Texture} map Map to process\n\t * @return {Promise} Index of the processed texture in the \"textures\" array\n\t */\n\tasync processTextureAsync( map ) {\n\n\t\tconst writer = this;\n\t\tconst options = writer.options;\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.textures.has( map ) ) return cache.textures.get( map );\n\n\t\tif ( ! json.textures ) json.textures = [];\n\n\t\t// make non-readable textures (e.g. CompressedTexture) readable by blitting them into a new texture\n\t\tif ( map instanceof CompressedTexture ) {\n\n\t\t\tmap = await this.decompressTextureAsync( map, options.maxTextureSize );\n\n\t\t}\n\n\t\tlet mimeType = map.userData.mimeType;\n\n\t\tif ( mimeType === 'image/webp' ) mimeType = 'image/png';\n\n\t\tconst textureDef = {\n\t\t\tsampler: this.processSampler( map ),\n\t\t\tsource: this.processImage( map.image, map.format, map.flipY, mimeType )\n\t\t};\n\n\t\tif ( map.name ) textureDef.name = map.name;\n\n\t\tawait this._invokeAllAsync( async function ( ext ) {\n\n\t\t\text.writeTexture && await ext.writeTexture( map, textureDef );\n\n\t\t} );\n\n\t\tconst index = json.textures.push( textureDef ) - 1;\n\t\tcache.textures.set( map, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process material\n\t * @param {THREE.Material} material Material to process\n\t * @return {Promise} Index of the processed material in the \"materials\" array\n\t */\n\tasync processMaterialAsync( material ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.materials.has( material ) ) return cache.materials.get( material );\n\n\t\tif ( material.isShaderMaterial ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: THREE.ShaderMaterial not supported.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( ! json.materials ) json.materials = [];\n\n\t\t// @QUESTION Should we avoid including any attribute that has the default value?\n\t\tconst materialDef = {\tpbrMetallicRoughness: {} };\n\n\t\tif ( material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.' );\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorFactor\n\t\tconst color = material.color.toArray().concat( [ material.opacity ] );\n\n\t\tif ( ! equalArray( color, [ 1, 1, 1, 1 ] ) ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorFactor = color;\n\n\t\t}\n\n\t\tif ( material.isMeshStandardMaterial ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = material.metalness;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;\n\n\t\t} else {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 1;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.metallicRoughnessTexture\n\t\tif ( material.metalnessMap || material.roughnessMap ) {\n\n\t\t\tconst metalRoughTexture = await this.buildMetalRoughTextureAsync( material.metalnessMap, material.roughnessMap );\n\n\t\t\tconst metalRoughMapDef = {\n\t\t\t\tindex: await this.processTextureAsync( metalRoughTexture ),\n\t\t\t\ttexCoord: metalRoughTexture.channel\n\t\t\t};\n\t\t\tthis.applyTextureTransform( metalRoughMapDef, metalRoughTexture );\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorTexture\n\t\tif ( material.map ) {\n\n\t\t\tconst baseColorMapDef = {\n\t\t\t\tindex: await this.processTextureAsync( material.map ),\n\t\t\t\ttexCoord: material.map.channel\n\t\t\t};\n\t\t\tthis.applyTextureTransform( baseColorMapDef, material.map );\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tconst emissive = material.emissive;\n\t\t\tconst maxEmissiveComponent = Math.max( emissive.r, emissive.g, emissive.b );\n\n\t\t\tif ( maxEmissiveComponent > 0 ) {\n\n\t\t\t\tmaterialDef.emissiveFactor = material.emissive.toArray();\n\n\t\t\t}\n\n\t\t\t// emissiveTexture\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tconst emissiveMapDef = {\n\t\t\t\t\tindex: await this.processTextureAsync( material.emissiveMap ),\n\t\t\t\t\ttexCoord: material.emissiveMap.channel\n\t\t\t\t};\n\t\t\t\tthis.applyTextureTransform( emissiveMapDef, material.emissiveMap );\n\t\t\t\tmaterialDef.emissiveTexture = emissiveMapDef;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalTexture\n\t\tif ( material.normalMap ) {\n\n\t\t\tconst normalMapDef = {\n\t\t\t\tindex: await this.processTextureAsync( material.normalMap ),\n\t\t\t\ttexCoord: material.normalMap.channel\n\t\t\t};\n\n\t\t\tif ( material.normalScale && material.normalScale.x !== 1 ) {\n\n\t\t\t\t// glTF normal scale is univariate. Ignore `y`, which may be flipped.\n\t\t\t\t// Context: https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\tnormalMapDef.scale = material.normalScale.x;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( normalMapDef, material.normalMap );\n\t\t\tmaterialDef.normalTexture = normalMapDef;\n\n\t\t}\n\n\t\t// occlusionTexture\n\t\tif ( material.aoMap ) {\n\n\t\t\tconst occlusionMapDef = {\n\t\t\t\tindex: await this.processTextureAsync( material.aoMap ),\n\t\t\t\ttexCoord: material.aoMap.channel\n\t\t\t};\n\n\t\t\tif ( material.aoMapIntensity !== 1.0 ) {\n\n\t\t\t\tocclusionMapDef.strength = material.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( occlusionMapDef, material.aoMap );\n\t\t\tmaterialDef.occlusionTexture = occlusionMapDef;\n\n\t\t}\n\n\t\t// alphaMode\n\t\tif ( material.transparent ) {\n\n\t\t\tmaterialDef.alphaMode = 'BLEND';\n\n\t\t} else {\n\n\t\t\tif ( material.alphaTest > 0.0 ) {\n\n\t\t\t\tmaterialDef.alphaMode = 'MASK';\n\t\t\t\tmaterialDef.alphaCutoff = material.alphaTest;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// doubleSided\n\t\tif ( material.side === DoubleSide ) materialDef.doubleSided = true;\n\t\tif ( material.name !== '' ) materialDef.name = material.name;\n\n\t\tthis.serializeUserData( material, materialDef );\n\n\t\tawait this._invokeAllAsync( async function ( ext ) {\n\n\t\t\text.writeMaterialAsync && await ext.writeMaterialAsync( material, materialDef );\n\n\t\t} );\n\n\t\tconst index = json.materials.push( materialDef ) - 1;\n\t\tcache.materials.set( material, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process mesh\n\t * @param {THREE.Mesh} mesh Mesh to process\n\t * @return {Promise} Index of the processed mesh in the \"meshes\" array\n\t */\n\tasync processMeshAsync( mesh ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tconst meshCacheKeyParts = [ mesh.geometry.uuid ];\n\n\t\tif ( Array.isArray( mesh.material ) ) {\n\n\t\t\tfor ( let i = 0, l = mesh.material.length; i < l; i ++ ) {\n\n\t\t\t\tmeshCacheKeyParts.push( mesh.material[ i ].uuid\t);\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tmeshCacheKeyParts.push( mesh.material.uuid );\n\n\t\t}\n\n\t\tconst meshCacheKey = meshCacheKeyParts.join( ':' );\n\n\t\tif ( cache.meshes.has( meshCacheKey ) ) return cache.meshes.get( meshCacheKey );\n\n\t\tconst geometry = mesh.geometry;\n\n\t\tlet mode;\n\n\t\t// Use the correct mode\n\t\tif ( mesh.isLineSegments ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINES;\n\n\t\t} else if ( mesh.isLineLoop ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_LOOP;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_STRIP;\n\n\t\t} else if ( mesh.isPoints ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.POINTS;\n\n\t\t} else {\n\n\t\t\tmode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;\n\n\t\t}\n\n\t\tconst meshDef = {};\n\t\tconst attributes = {};\n\t\tconst primitives = [];\n\t\tconst targets = [];\n\n\t\t// Conversion between attributes names in threejs and gltf spec\n\t\tconst nameConversion = {\n\t\t\tuv: 'TEXCOORD_0',\n\t\t\tuv1: 'TEXCOORD_1',\n\t\t\tuv2: 'TEXCOORD_2',\n\t\t\tuv3: 'TEXCOORD_3',\n\t\t\tcolor: 'COLOR_0',\n\t\t\tskinWeight: 'WEIGHTS_0',\n\t\t\tskinIndex: 'JOINTS_0'\n\t\t};\n\n\t\tconst originalNormal = geometry.getAttribute( 'normal' );\n\n\t\tif ( originalNormal !== undefined && ! this.isNormalizedNormalAttribute( originalNormal ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.' );\n\n\t\t\tgeometry.setAttribute( 'normal', this.createNormalizedNormalAttribute( originalNormal ) );\n\n\t\t}\n\n\t\t// @QUESTION Detect if .vertexColors = true?\n\t\t// For every attribute create an accessor\n\t\tlet modifiedAttribute = null;\n\n\t\tfor ( let attributeName in geometry.attributes ) {\n\n\t\t\t// Ignore morph target attributes, which are exported later.\n\t\t\tif ( attributeName.slice( 0, 5 ) === 'morph' ) continue;\n\n\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\tattributeName = nameConversion[ attributeName ] || attributeName.toUpperCase();\n\n\t\t\t// Prefix all geometry attributes except the ones specifically\n\t\t\t// listed in the spec; non-spec attributes are considered custom.\n\t\t\tconst validVertexAttributes =\n\t\t\t\t\t/^(POSITION|NORMAL|TANGENT|TEXCOORD_\\d+|COLOR_\\d+|JOINTS_\\d+|WEIGHTS_\\d+)$/;\n\n\t\t\tif ( ! validVertexAttributes.test( attributeName ) ) attributeName = '_' + attributeName;\n\n\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\tattributes[ attributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// Enforce glTF vertex attribute requirements:\n\t\t\t// - JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT\n\t\t\t// - Only custom attributes may be INT or UNSIGNED_INT\n\t\t\tmodifiedAttribute = null;\n\t\t\tconst array = attribute.array;\n\n\t\t\tif ( attributeName === 'JOINTS_0' &&\n\t\t\t\t! ( array instanceof Uint16Array ) &&\n\t\t\t\t! ( array instanceof Uint8Array ) ) {\n\n\t\t\t\tconsole.warn( 'GLTFExporter: Attribute \"skinIndex\" converted to type UNSIGNED_SHORT.' );\n\t\t\t\tmodifiedAttribute = new BufferAttribute( new Uint16Array( array ), attribute.itemSize, attribute.normalized );\n\n\t\t\t} else if ( ( array instanceof Uint32Array || array instanceof Int32Array ) && ! attributeName.startsWith( '_' ) ) {\n\n\t\t\t\tconsole.warn( `GLTFExporter: Attribute \"${ attributeName }\" converted to type FLOAT.` );\n\t\t\t\tmodifiedAttribute = GLTFExporter.Utils.toFloat32BufferAttribute( attribute );\n\n\t\t\t}\n\n\t\t\tconst accessor = this.processAccessor( modifiedAttribute || attribute, geometry );\n\n\t\t\tif ( accessor !== null ) {\n\n\t\t\t\tif ( ! attributeName.startsWith( '_' ) ) {\n\n\t\t\t\t\tthis.detectMeshQuantization( attributeName, attribute );\n\n\t\t\t\t}\n\n\t\t\t\tattributes[ attributeName ] = accessor;\n\t\t\t\tcache.attributes.set( this.getUID( attribute ), accessor );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( originalNormal !== undefined ) geometry.setAttribute( 'normal', originalNormal );\n\n\t\t// Skip if no exportable attributes found\n\t\tif ( Object.keys( attributes ).length === 0 ) return null;\n\n\t\t// Morph targets\n\t\tif ( mesh.morphTargetInfluences !== undefined && mesh.morphTargetInfluences.length > 0 ) {\n\n\t\t\tconst weights = [];\n\t\t\tconst targetNames = [];\n\t\t\tconst reverseDictionary = {};\n\n\t\t\tif ( mesh.morphTargetDictionary !== undefined ) {\n\n\t\t\t\tfor ( const key in mesh.morphTargetDictionary ) {\n\n\t\t\t\t\treverseDictionary[ mesh.morphTargetDictionary[ key ] ] = key;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < mesh.morphTargetInfluences.length; ++ i ) {\n\n\t\t\t\tconst target = {};\n\t\t\t\tlet warned = false;\n\n\t\t\t\tfor ( const attributeName in geometry.morphAttributes ) {\n\n\t\t\t\t\t// glTF 2.0 morph supports only POSITION/NORMAL/TANGENT.\n\t\t\t\t\t// Three.js doesn't support TANGENT yet.\n\n\t\t\t\t\tif ( attributeName !== 'position' && attributeName !== 'normal' ) {\n\n\t\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'GLTFExporter: Only POSITION and NORMAL morph are supported.' );\n\t\t\t\t\t\t\twarned = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst attribute = geometry.morphAttributes[ attributeName ][ i ];\n\t\t\t\t\tconst gltfAttributeName = attributeName.toUpperCase();\n\n\t\t\t\t\t// Three.js morph attribute has absolute values while the one of glTF has relative values.\n\t\t\t\t\t//\n\t\t\t\t\t// glTF 2.0 Specification:\n\t\t\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets\n\n\t\t\t\t\tconst baseAttribute = geometry.attributes[ attributeName ];\n\n\t\t\t\t\tif ( cache.attributes.has( this.getUID( attribute, true ) ) ) {\n\n\t\t\t\t\t\ttarget[ gltfAttributeName ] = cache.attributes.get( this.getUID( attribute, true ) );\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clones attribute not to override\n\t\t\t\t\tconst relativeAttribute = attribute.clone();\n\n\t\t\t\t\tif ( ! geometry.morphTargetsRelative ) {\n\n\t\t\t\t\t\tfor ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\t\t\t\t\tif ( a === 0 ) relativeAttribute.setX( j, attribute.getX( j ) - baseAttribute.getX( j ) );\n\t\t\t\t\t\t\t\tif ( a === 1 ) relativeAttribute.setY( j, attribute.getY( j ) - baseAttribute.getY( j ) );\n\t\t\t\t\t\t\t\tif ( a === 2 ) relativeAttribute.setZ( j, attribute.getZ( j ) - baseAttribute.getZ( j ) );\n\t\t\t\t\t\t\t\tif ( a === 3 ) relativeAttribute.setW( j, attribute.getW( j ) - baseAttribute.getW( j ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[ gltfAttributeName ] = this.processAccessor( relativeAttribute, geometry );\n\t\t\t\t\tcache.attributes.set( this.getUID( baseAttribute, true ), target[ gltfAttributeName ] );\n\n\t\t\t\t}\n\n\t\t\t\ttargets.push( target );\n\n\t\t\t\tweights.push( mesh.morphTargetInfluences[ i ] );\n\n\t\t\t\tif ( mesh.morphTargetDictionary !== undefined ) targetNames.push( reverseDictionary[ i ] );\n\n\t\t\t}\n\n\t\t\tmeshDef.weights = weights;\n\n\t\t\tif ( targetNames.length > 0 ) {\n\n\t\t\t\tmeshDef.extras = {};\n\t\t\t\tmeshDef.extras.targetNames = targetNames;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst isMultiMaterial = Array.isArray( mesh.material );\n\n\t\tif ( isMultiMaterial && geometry.groups.length === 0 ) return null;\n\n\t\tlet didForceIndices = false;\n\n\t\tif ( isMultiMaterial && geometry.index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tfor ( let i = 0, il = geometry.attributes.position.count; i < il; i ++ ) {\n\n\t\t\t\tindices[ i ] = i;\n\n\t\t\t}\n\n\t\t\tgeometry.setIndex( indices );\n\n\t\t\tdidForceIndices = true;\n\n\t\t}\n\n\t\tconst materials = isMultiMaterial ? mesh.material : [ mesh.material ];\n\t\tconst groups = isMultiMaterial ? geometry.groups : [ { materialIndex: 0, start: undefined, count: undefined } ];\n\n\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = {\n\t\t\t\tmode: mode,\n\t\t\t\tattributes: attributes,\n\t\t\t};\n\n\t\t\tthis.serializeUserData( geometry, primitive );\n\n\t\t\tif ( targets.length > 0 ) primitive.targets = targets;\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\tlet cacheKey = this.getUID( geometry.index );\n\n\t\t\t\tif ( groups[ i ].start !== undefined || groups[ i ].count !== undefined ) {\n\n\t\t\t\t\tcacheKey += ':' + groups[ i ].start + ':' + groups[ i ].count;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cache.attributes.has( cacheKey ) ) {\n\n\t\t\t\t\tprimitive.indices = cache.attributes.get( cacheKey );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tprimitive.indices = this.processAccessor( geometry.index, geometry, groups[ i ].start, groups[ i ].count );\n\t\t\t\t\tcache.attributes.set( cacheKey, primitive.indices );\n\n\t\t\t\t}\n\n\t\t\t\tif ( primitive.indices === null ) delete primitive.indices;\n\n\t\t\t}\n\n\t\t\tconst material = await this.processMaterialAsync( materials[ groups[ i ].materialIndex ] );\n\n\t\t\tif ( material !== null ) primitive.material = material;\n\n\t\t\tprimitives.push( primitive );\n\n\t\t}\n\n\t\tif ( didForceIndices === true ) {\n\n\t\t\tgeometry.setIndex( null );\n\n\t\t}\n\n\t\tmeshDef.primitives = primitives;\n\n\t\tif ( ! json.meshes ) json.meshes = [];\n\n\t\tawait this._invokeAllAsync( function ( ext ) {\n\n\t\t\text.writeMesh && ext.writeMesh( mesh, meshDef );\n\n\t\t} );\n\n\t\tconst index = json.meshes.push( meshDef ) - 1;\n\t\tcache.meshes.set( meshCacheKey, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * If a vertex attribute with a\n\t * [non-standard data type](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview)\n\t * is used, it is checked whether it is a valid data type according to the\n\t * [KHR_mesh_quantization](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md)\n\t * extension.\n\t * In this case the extension is automatically added to the list of used extensions.\n\t *\n\t * @param {string} attributeName\n\t * @param {THREE.BufferAttribute} attribute\n\t */\n\tdetectMeshQuantization( attributeName, attribute ) {\n\n\t\tif ( this.extensionsUsed[ KHR_MESH_QUANTIZATION ] ) return;\n\n\t\tlet attrType = undefined;\n\n\t\tswitch ( attribute.array.constructor ) {\n\n\t\t\tcase Int8Array:\n\n\t\t\t\tattrType = 'byte';\n\n\t\t\t\tbreak;\n\n\t\t\tcase Uint8Array:\n\n\t\t\t\tattrType = 'unsigned byte';\n\n\t\t\t\tbreak;\n\n\t\t\tcase Int16Array:\n\n\t\t\t\tattrType = 'short';\n\n\t\t\t\tbreak;\n\n\t\t\tcase Uint16Array:\n\n\t\t\t\tattrType = 'unsigned short';\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.normalized ) attrType += ' normalized';\n\n\t\tconst attrNamePrefix = attributeName.split( '_', 1 )[ 0 ];\n\n\t\tif ( KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ] && KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ].includes( attrType ) ) {\n\n\t\t\tthis.extensionsUsed[ KHR_MESH_QUANTIZATION ] = true;\n\t\t\tthis.extensionsRequired[ KHR_MESH_QUANTIZATION ] = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process camera\n\t * @param {THREE.Camera} camera Camera to process\n\t * @return {Number} Index of the processed mesh in the \"camera\" array\n\t */\n\tprocessCamera( camera ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.cameras ) json.cameras = [];\n\n\t\tconst isOrtho = camera.isOrthographicCamera;\n\n\t\tconst cameraDef = {\n\t\t\ttype: isOrtho ? 'orthographic' : 'perspective'\n\t\t};\n\n\t\tif ( isOrtho ) {\n\n\t\t\tcameraDef.orthographic = {\n\t\t\t\txmag: camera.right * 2,\n\t\t\t\tymag: camera.top * 2,\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tcameraDef.perspective = {\n\t\t\t\taspectRatio: camera.aspect,\n\t\t\t\tyfov: MathUtils.degToRad( camera.fov ),\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t}\n\n\t\t// Question: Is saving \"type\" as name intentional?\n\t\tif ( camera.name !== '' ) cameraDef.name = camera.type;\n\n\t\treturn json.cameras.push( cameraDef ) - 1;\n\n\t}\n\n\t/**\n\t * Creates glTF animation entry from AnimationClip object.\n\t *\n\t * Status:\n\t * - Only properties listed in PATH_PROPERTIES may be animated.\n\t *\n\t * @param {THREE.AnimationClip} clip\n\t * @param {THREE.Object3D} root\n\t * @return {number|null}\n\t */\n\tprocessAnimation( clip, root ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.animations ) json.animations = [];\n\n\t\tclip = GLTFExporter.Utils.mergeMorphTargetTracks( clip.clone(), root );\n\n\t\tconst tracks = clip.tracks;\n\t\tconst channels = [];\n\t\tconst samplers = [];\n\n\t\tfor ( let i = 0; i < tracks.length; ++ i ) {\n\n\t\t\tconst track = tracks[ i ];\n\t\t\tconst trackBinding = PropertyBinding.parseTrackName( track.name );\n\t\t\tlet trackNode = PropertyBinding.findNode( root, trackBinding.nodeName );\n\t\t\tconst trackProperty = PATH_PROPERTIES[ trackBinding.propertyName ];\n\n\t\t\tif ( trackBinding.objectName === 'bones' ) {\n\n\t\t\t\tif ( trackNode.isSkinnedMesh === true ) {\n\n\t\t\t\t\ttrackNode = trackNode.skeleton.getBoneByName( trackBinding.objectIndex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttrackNode = undefined;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! trackNode || ! trackProperty ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Could not export animation track \"%s\".', track.name );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst inputItemSize = 1;\n\t\t\tlet outputItemSize = track.values.length / track.times.length;\n\n\t\t\tif ( trackProperty === PATH_PROPERTIES.morphTargetInfluences ) {\n\n\t\t\t\toutputItemSize /= trackNode.morphTargetInfluences.length;\n\n\t\t\t}\n\n\t\t\tlet interpolation;\n\n\t\t\t// @TODO export CubicInterpolant(InterpolateSmooth) as CUBICSPLINE\n\n\t\t\t// Detecting glTF cubic spline interpolant by checking factory method's special property\n\t\t\t// GLTFCubicSplineInterpolant is a custom interpolant and track doesn't return\n\t\t\t// valid value from .getInterpolation().\n\t\t\tif ( track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true ) {\n\n\t\t\t\tinterpolation = 'CUBICSPLINE';\n\n\t\t\t\t// itemSize of CUBICSPLINE keyframe is 9\n\t\t\t\t// (VEC3 * 3: inTangent, splineVertex, and outTangent)\n\t\t\t\t// but needs to be stored as VEC3 so dividing by 3 here.\n\t\t\t\toutputItemSize /= 3;\n\n\t\t\t} else if ( track.getInterpolation() === InterpolateDiscrete ) {\n\n\t\t\t\tinterpolation = 'STEP';\n\n\t\t\t} else {\n\n\t\t\t\tinterpolation = 'LINEAR';\n\n\t\t\t}\n\n\t\t\tsamplers.push( {\n\t\t\t\tinput: this.processAccessor( new BufferAttribute( track.times, inputItemSize ) ),\n\t\t\t\toutput: this.processAccessor( new BufferAttribute( track.values, outputItemSize ) ),\n\t\t\t\tinterpolation: interpolation\n\t\t\t} );\n\n\t\t\tchannels.push( {\n\t\t\t\tsampler: samplers.length - 1,\n\t\t\t\ttarget: {\n\t\t\t\t\tnode: nodeMap.get( trackNode ),\n\t\t\t\t\tpath: trackProperty\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t\tjson.animations.push( {\n\t\t\tname: clip.name || 'clip_' + json.animations.length,\n\t\t\tsamplers: samplers,\n\t\t\tchannels: channels\n\t\t} );\n\n\t\treturn json.animations.length - 1;\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D} object\n\t * @return {number|null}\n\t */\n\t processSkin( object ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tconst node = json.nodes[ nodeMap.get( object ) ];\n\n\t\tconst skeleton = object.skeleton;\n\n\t\tif ( skeleton === undefined ) return null;\n\n\t\tconst rootJoint = object.skeleton.bones[ 0 ];\n\n\t\tif ( rootJoint === undefined ) return null;\n\n\t\tconst joints = [];\n\t\tconst inverseBindMatrices = new Float32Array( skeleton.bones.length * 16 );\n\t\tconst temporaryBoneInverse = new Matrix4();\n\n\t\tfor ( let i = 0; i < skeleton.bones.length; ++ i ) {\n\n\t\t\tjoints.push( nodeMap.get( skeleton.bones[ i ] ) );\n\t\t\ttemporaryBoneInverse.copy( skeleton.boneInverses[ i ] );\n\t\t\ttemporaryBoneInverse.multiply( object.bindMatrix ).toArray( inverseBindMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( json.skins === undefined ) json.skins = [];\n\n\t\tjson.skins.push( {\n\t\t\tinverseBindMatrices: this.processAccessor( new BufferAttribute( inverseBindMatrices, 16 ) ),\n\t\t\tjoints: joints,\n\t\t\tskeleton: nodeMap.get( rootJoint )\n\t\t} );\n\n\t\tconst skinIndex = node.skin = json.skins.length - 1;\n\n\t\treturn skinIndex;\n\n\t}\n\n\t/**\n\t * Process Object3D node\n\t * @param {THREE.Object3D} object Object3D to processNodeAsync\n\t * @return {Promise} Index of the node in the nodes list\n\t */\n\tasync processNodeAsync( object ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.nodes ) json.nodes = [];\n\n\t\tconst nodeDef = {};\n\n\t\tif ( options.trs ) {\n\n\t\t\tconst rotation = object.quaternion.toArray();\n\t\t\tconst position = object.position.toArray();\n\t\t\tconst scale = object.scale.toArray();\n\n\t\t\tif ( ! equalArray( rotation, [ 0, 0, 0, 1 ] ) ) {\n\n\t\t\t\tnodeDef.rotation = rotation;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( position, [ 0, 0, 0 ] ) ) {\n\n\t\t\t\tnodeDef.translation = position;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( scale, [ 1, 1, 1 ] ) ) {\n\n\t\t\t\tnodeDef.scale = scale;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( object.matrixAutoUpdate ) {\n\n\t\t\t\tobject.updateMatrix();\n\n\t\t\t}\n\n\t\t\tif ( isIdentityMatrix( object.matrix ) === false ) {\n\n\t\t\t\tnodeDef.matrix = object.matrix.elements;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// We don't export empty strings name because it represents no-name in Three.js.\n\t\tif ( object.name !== '' ) nodeDef.name = String( object.name );\n\n\t\tthis.serializeUserData( object, nodeDef );\n\n\t\tif ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\tconst meshIndex = await this.processMeshAsync( object );\n\n\t\t\tif ( meshIndex !== null ) nodeDef.mesh = meshIndex;\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tnodeDef.camera = this.processCamera( object );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) this.skins.push( object );\n\n\t\tif ( object.children.length > 0 ) {\n\n\t\t\tconst children = [];\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = object.children[ i ];\n\n\t\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\t\tconst nodeIndex = await this.processNodeAsync( child );\n\n\t\t\t\t\tif ( nodeIndex !== null ) children.push( nodeIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( children.length > 0 ) nodeDef.children = children;\n\n\t\t}\n\n\t\tawait this._invokeAllAsync( function ( ext ) {\n\n\t\t\text.writeNode && ext.writeNode( object, nodeDef );\n\n\t\t} );\n\n\t\tconst nodeIndex = json.nodes.push( nodeDef ) - 1;\n\t\tnodeMap.set( object, nodeIndex );\n\t\treturn nodeIndex;\n\n\t}\n\n\t/**\n\t * Process Scene\n\t * @param {Scene} scene Scene to process\n\t */\n\tasync processSceneAsync( scene ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( ! json.scenes ) {\n\n\t\t\tjson.scenes = [];\n\t\t\tjson.scene = 0;\n\n\t\t}\n\n\t\tconst sceneDef = {};\n\n\t\tif ( scene.name !== '' ) sceneDef.name = scene.name;\n\n\t\tjson.scenes.push( sceneDef );\n\n\t\tconst nodes = [];\n\n\t\tfor ( let i = 0, l = scene.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = scene.children[ i ];\n\n\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\tconst nodeIndex = await this.processNodeAsync( child );\n\n\t\t\t\tif ( nodeIndex !== null ) nodes.push( nodeIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( nodes.length > 0 ) sceneDef.nodes = nodes;\n\n\t\tthis.serializeUserData( scene, sceneDef );\n\n\t}\n\n\t/**\n\t * Creates a Scene to hold a list of objects and parse it\n\t * @param {Array} objects List of objects to process\n\t */\n\tasync processObjectsAsync( objects ) {\n\n\t\tconst scene = new Scene();\n\t\tscene.name = 'AuxScene';\n\n\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\t// We push directly to children instead of calling `add` to prevent\n\t\t\t// modify the .parent and break its original scene and hierarchy\n\t\t\tscene.children.push( objects[ i ] );\n\n\t\t}\n\n\t\tawait this.processSceneAsync( scene );\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D|Array} input\n\t */\n\tasync processInputAsync( input ) {\n\n\t\tconst options = this.options;\n\n\t\tinput = input instanceof Array ? input : [ input ];\n\n\t\tawait this._invokeAllAsync( function ( ext ) {\n\n\t\t\text.beforeParse && ext.beforeParse( input );\n\n\t\t} );\n\n\t\tconst objectsWithoutScene = [];\n\n\t\tfor ( let i = 0; i < input.length; i ++ ) {\n\n\t\t\tif ( input[ i ] instanceof Scene ) {\n\n\t\t\t\tawait this.processSceneAsync( input[ i ] );\n\n\t\t\t} else {\n\n\t\t\t\tobjectsWithoutScene.push( input[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( objectsWithoutScene.length > 0 ) {\n\n\t\t\tawait this.processObjectsAsync( objectsWithoutScene );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < this.skins.length; ++ i ) {\n\n\t\t\tthis.processSkin( this.skins[ i ] );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < options.animations.length; ++ i ) {\n\n\t\t\tthis.processAnimation( options.animations[ i ], input[ 0 ] );\n\n\t\t}\n\n\t\tawait this._invokeAllAsync( function ( ext ) {\n\n\t\t\text.afterParse && ext.afterParse( input );\n\n\t\t} );\n\n\t}\n\n\tasync _invokeAllAsync( func ) {\n\n\t\tfor ( let i = 0, il = this.plugins.length; i < il; i ++ ) {\n\n\t\t\tawait func( this.plugins[ i ] );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_lights_punctual';\n\n\t}\n\n\twriteNode( light, nodeDef ) {\n\n\t\tif ( ! light.isLight ) return;\n\n\t\tif ( ! light.isDirectionalLight && ! light.isPointLight && ! light.isSpotLight ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Only directional, point, and spot lights are supported.', light );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst writer = this.writer;\n\t\tconst json = writer.json;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst lightDef = {};\n\n\t\tif ( light.name ) lightDef.name = light.name;\n\n\t\tlightDef.color = light.color.toArray();\n\n\t\tlightDef.intensity = light.intensity;\n\n\t\tif ( light.isDirectionalLight ) {\n\n\t\t\tlightDef.type = 'directional';\n\n\t\t} else if ( light.isPointLight ) {\n\n\t\t\tlightDef.type = 'point';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t} else if ( light.isSpotLight ) {\n\n\t\t\tlightDef.type = 'spot';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t\tlightDef.spot = {};\n\t\t\tlightDef.spot.innerConeAngle = ( 1.0 - light.penumbra ) * light.angle;\n\t\t\tlightDef.spot.outerConeAngle = light.angle;\n\n\t\t}\n\n\t\tif ( light.decay !== undefined && light.decay !== 2 ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, '\n\t\t\t\t+ 'and expects light.decay=2.' );\n\n\t\t}\n\n\t\tif ( light.target\n\t\t\t\t&& ( light.target.parent !== light\n\t\t\t\t|| light.target.position.x !== 0\n\t\t\t\t|| light.target.position.y !== 0\n\t\t\t\t|| light.target.position.z !== - 1 ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light direction may be lost. For best results, '\n\t\t\t\t+ 'make light.target a child of the light with position 0,0,-1.' );\n\n\t\t}\n\n\t\tif ( ! extensionsUsed[ this.name ] ) {\n\n\t\t\tjson.extensions = json.extensions || {};\n\t\t\tjson.extensions[ this.name ] = { lights: [] };\n\t\t\textensionsUsed[ this.name ] = true;\n\n\t\t}\n\n\t\tconst lights = json.extensions[ this.name ].lights;\n\t\tlights.push( lightDef );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { light: lights.length - 1 };\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_unlit';\n\n\t}\n\n\tasync writeMaterialAsync( material, materialDef ) {\n\n\t\tif ( ! material.isMeshBasicMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = {};\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.0;\n\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.9;\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_clearcoat';\n\n\t}\n\n\tasync writeMaterialAsync( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.clearcoat === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.clearcoatFactor = material.clearcoat;\n\n\t\tif ( material.clearcoatMap ) {\n\n\t\t\tconst clearcoatMapDef = {\n\t\t\t\tindex: await writer.processTextureAsync( material.clearcoatMap ),\n\t\t\t\ttexCoord: material.clearcoatMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( clearcoatMapDef, material.clearcoatMap );\n\t\t\textensionDef.clearcoatTexture = clearcoatMapDef;\n\n\t\t}\n\n\t\textensionDef.clearcoatRoughnessFactor = material.clearcoatRoughness;\n\n\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\tconst clearcoatRoughnessMapDef = {\n\t\t\t\tindex: await writer.processTextureAsync( material.clearcoatRoughnessMap ),\n\t\t\t\ttexCoord: material.clearcoatRoughnessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( clearcoatRoughnessMapDef, material.clearcoatRoughnessMap );\n\t\t\textensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef;\n\n\t\t}\n\n\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\tconst clearcoatNormalMapDef = {\n\t\t\t\tindex: await writer.processTextureAsync( material.clearcoatNormalMap ),\n\t\t\t\ttexCoord: material.clearcoatNormalMap.channel\n\t\t\t};\n\n\t\t\tif ( material.clearcoatNormalScale.x !== 1 ) clearcoatNormalMapDef.scale = material.clearcoatNormalScale.x;\n\n\t\t\twriter.applyTextureTransform( clearcoatNormalMapDef, material.clearcoatNormalMap );\n\t\t\textensionDef.clearcoatNormalTexture = clearcoatNormalMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\n\t}\n\n}\n\n/**\n * Materials dispersion Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_dispersion\n */\nclass GLTFMaterialsDispersionExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_dispersion';\n\n\t}\n\n\tasync writeMaterialAsync( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.dispersion === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.dispersion = material.dispersion;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_iridescence';\n\n\t}\n\n\tasync writeMaterialAsync( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.iridescence === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.iridescenceFactor = material.iridescence;\n\n\t\tif ( material.iridescenceMap ) {\n\n\t\t\tconst iridescenceMapDef = {\n\t\t\t\tindex: await writer.processTextureAsync( material.iridescenceMap ),\n\t\t\t\ttexCoord: material.iridescenceMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( iridescenceMapDef, material.iridescenceMap );\n\t\t\textensionDef.iridescenceTexture = iridescenceMapDef;\n\n\t\t}\n\n\t\textensionDef.iridescenceIor = material.iridescenceIOR;\n\t\textensionDef.iridescenceThicknessMinimum = material.iridescenceThicknessRange[ 0 ];\n\t\textensionDef.iridescenceThicknessMaximum = material.iridescenceThicknessRange[ 1 ];\n\n\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\tconst iridescenceThicknessMapDef = {\n\t\t\t\tindex: await writer.processTextureAsync( material.iridescenceThicknessMap ),\n\t\t\t\ttexCoord: material.iridescenceThicknessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( iridescenceThicknessMapDef, material.iridescenceThicknessMap );\n\t\t\textensionDef.iridescenceThicknessTexture = iridescenceThicknessMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_transmission';\n\n\t}\n\n\tasync writeMaterialAsync( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.transmissionFactor = material.transmission;\n\n\t\tif ( material.transmissionMap ) {\n\n\t\t\tconst transmissionMapDef = {\n\t\t\t\tindex: await writer.processTextureAsync( material.transmissionMap ),\n\t\t\t\ttexCoord: material.transmissionMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( transmissionMapDef, material.transmissionMap );\n\t\t\textensionDef.transmissionTexture = transmissionMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_volume';\n\n\t}\n\n\tasync writeMaterialAsync( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.thicknessFactor = material.thickness;\n\n\t\tif ( material.thicknessMap ) {\n\n\t\t\tconst thicknessMapDef = {\n\t\t\t\tindex: await writer.processTextureAsync( material.thicknessMap ),\n\t\t\t\ttexCoord: material.thicknessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( thicknessMapDef, material.thicknessMap );\n\t\t\textensionDef.thicknessTexture = thicknessMapDef;\n\n\t\t}\n\n\t\tif ( material.attenuationDistance !== Infinity ) {\n\n\t\t\textensionDef.attenuationDistance = material.attenuationDistance;\n\n\t\t}\n\n\t\textensionDef.attenuationColor = material.attenuationColor.toArray();\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_ior';\n\n\t}\n\n\tasync writeMaterialAsync( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.ior === 1.5 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.ior = material.ior;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_specular';\n\n\t}\n\n\tasync writeMaterialAsync( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || ( material.specularIntensity === 1.0 &&\n\t\t material.specularColor.equals( DEFAULT_SPECULAR_COLOR ) &&\n\t\t ! material.specularIntensityMap && ! material.specularColorMap ) ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tconst specularIntensityMapDef = {\n\t\t\t\tindex: await writer.processTextureAsync( material.specularIntensityMap ),\n\t\t\t\ttexCoord: material.specularIntensityMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( specularIntensityMapDef, material.specularIntensityMap );\n\t\t\textensionDef.specularTexture = specularIntensityMapDef;\n\n\t\t}\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tconst specularColorMapDef = {\n\t\t\t\tindex: await writer.processTextureAsync( material.specularColorMap ),\n\t\t\t\ttexCoord: material.specularColorMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( specularColorMapDef, material.specularColorMap );\n\t\t\textensionDef.specularColorTexture = specularColorMapDef;\n\n\t\t}\n\n\t\textensionDef.specularFactor = material.specularIntensity;\n\t\textensionDef.specularColorFactor = material.specularColor.toArray();\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_sheen';\n\n\t}\n\n\tasync writeMaterialAsync( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.sheen == 0.0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\tconst sheenRoughnessMapDef = {\n\t\t\t\tindex: await writer.processTextureAsync( material.sheenRoughnessMap ),\n\t\t\t\ttexCoord: material.sheenRoughnessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( sheenRoughnessMapDef, material.sheenRoughnessMap );\n\t\t\textensionDef.sheenRoughnessTexture = sheenRoughnessMapDef;\n\n\t\t}\n\n\t\tif ( material.sheenColorMap ) {\n\n\t\t\tconst sheenColorMapDef = {\n\t\t\t\tindex: await writer.processTextureAsync( material.sheenColorMap ),\n\t\t\t\ttexCoord: material.sheenColorMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( sheenColorMapDef, material.sheenColorMap );\n\t\t\textensionDef.sheenColorTexture = sheenColorMapDef;\n\n\t\t}\n\n\t\textensionDef.sheenRoughnessFactor = material.sheenRoughness;\n\t\textensionDef.sheenColorFactor = material.sheenColor.toArray();\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Anisotropy Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_anisotropy\n */\nclass GLTFMaterialsAnisotropyExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_anisotropy';\n\n\t}\n\n\tasync writeMaterialAsync( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.anisotropy == 0.0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.anisotropyMap ) {\n\n\t\t\tconst anisotropyMapDef = { index: await writer.processTextureAsync( material.anisotropyMap ) };\n\t\t\twriter.applyTextureTransform( anisotropyMapDef, material.anisotropyMap );\n\t\t\textensionDef.anisotropyTexture = anisotropyMapDef;\n\n\t\t}\n\n\t\textensionDef.anisotropyStrength = material.anisotropy;\n\t\textensionDef.anisotropyRotation = material.anisotropyRotation;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_emissive_strength';\n\n\t}\n\n\tasync writeMaterialAsync( material, materialDef ) {\n\n\t\tif ( ! material.isMeshStandardMaterial || material.emissiveIntensity === 1.0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.emissiveStrength = material.emissiveIntensity;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n\n/**\n * Materials bump Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump\n */\nclass GLTFMaterialsBumpExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'EXT_materials_bump';\n\n\t}\n\n\tasync writeMaterialAsync( material, materialDef ) {\n\n\t\tif ( ! material.isMeshStandardMaterial || (\n\t\t material.bumpScale === 1 &&\n\t\t ! material.bumpMap ) ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tconst bumpMapDef = {\n\t\t\t\tindex: await writer.processTextureAsync( material.bumpMap ),\n\t\t\t\ttexCoord: material.bumpMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( bumpMapDef, material.bumpMap );\n\t\t\textensionDef.bumpTexture = bumpMapDef;\n\n\t\t}\n\n\t\textensionDef.bumpFactor = material.bumpScale;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'EXT_mesh_gpu_instancing';\n\n\t}\n\n\twriteNode( object, nodeDef ) {\n\n\t\tif ( ! object.isInstancedMesh ) return;\n\n\t\tconst writer = this.writer;\n\n\t\tconst mesh = object;\n\n\t\tconst translationAttr = new Float32Array( mesh.count * 3 );\n\t\tconst rotationAttr = new Float32Array( mesh.count * 4 );\n\t\tconst scaleAttr = new Float32Array( mesh.count * 3 );\n\n\t\tconst matrix = new Matrix4();\n\t\tconst position = new Vector3();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3();\n\n\t\tfor ( let i = 0; i < mesh.count; i ++ ) {\n\n\t\t\tmesh.getMatrixAt( i, matrix );\n\t\t\tmatrix.decompose( position, quaternion, scale );\n\n\t\t\tposition.toArray( translationAttr, i * 3 );\n\t\t\tquaternion.toArray( rotationAttr, i * 4 );\n\t\t\tscale.toArray( scaleAttr, i * 3 );\n\n\t\t}\n\n\t\tconst attributes = {\n\t\t\tTRANSLATION: writer.processAccessor( new BufferAttribute( translationAttr, 3 ) ),\n\t\t\tROTATION: writer.processAccessor( new BufferAttribute( rotationAttr, 4 ) ),\n\t\t\tSCALE: writer.processAccessor( new BufferAttribute( scaleAttr, 3 ) ),\n\t\t};\n\n\t\tif ( mesh.instanceColor )\n\t\t\tattributes._COLOR_0 = writer.processAccessor( mesh.instanceColor );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { attributes };\n\n\t\twriter.extensionsUsed[ this.name ] = true;\n\t\twriter.extensionsRequired[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Static utility functions\n */\nGLTFExporter.Utils = {\n\n\tinsertKeyframe: function ( track, time ) {\n\n\t\tconst tolerance = 0.001; // 1ms\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = new track.TimeBufferType( track.times.length + 1 );\n\t\tconst values = new track.ValueBufferType( track.values.length + valueSize );\n\t\tconst interpolant = track.createInterpolant( new track.ValueBufferType( valueSize ) );\n\n\t\tlet index;\n\n\t\tif ( track.times.length === 0 ) {\n\n\t\t\ttimes[ 0 ] = time;\n\n\t\t\tfor ( let i = 0; i < valueSize; i ++ ) {\n\n\t\t\t\tvalues[ i ] = 0;\n\n\t\t\t}\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time < track.times[ 0 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ 0 ] - time ) < tolerance ) return 0;\n\n\t\t\ttimes[ 0 ] = time;\n\t\t\ttimes.set( track.times, 1 );\n\n\t\t\tvalues.set( interpolant.evaluate( time ), 0 );\n\t\t\tvalues.set( track.values, valueSize );\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time > track.times[ track.times.length - 1 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ track.times.length - 1 ] - time ) < tolerance ) {\n\n\t\t\t\treturn track.times.length - 1;\n\n\t\t\t}\n\n\t\t\ttimes[ times.length - 1 ] = time;\n\t\t\ttimes.set( track.times, 0 );\n\n\t\t\tvalues.set( track.values, 0 );\n\t\t\tvalues.set( interpolant.evaluate( time ), track.values.length );\n\n\t\t\tindex = times.length - 1;\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < track.times.length; i ++ ) {\n\n\t\t\t\tif ( Math.abs( track.times[ i ] - time ) < tolerance ) return i;\n\n\t\t\t\tif ( track.times[ i ] < time && track.times[ i + 1 ] > time ) {\n\n\t\t\t\t\ttimes.set( track.times.slice( 0, i + 1 ), 0 );\n\t\t\t\t\ttimes[ i + 1 ] = time;\n\t\t\t\t\ttimes.set( track.times.slice( i + 1 ), i + 2 );\n\n\t\t\t\t\tvalues.set( track.values.slice( 0, ( i + 1 ) * valueSize ), 0 );\n\t\t\t\t\tvalues.set( interpolant.evaluate( time ), ( i + 1 ) * valueSize );\n\t\t\t\t\tvalues.set( track.values.slice( ( i + 1 ) * valueSize ), ( i + 2 ) * valueSize );\n\n\t\t\t\t\tindex = i + 1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttrack.times = times;\n\t\ttrack.values = values;\n\n\t\treturn index;\n\n\t},\n\n\tmergeMorphTargetTracks: function ( clip, root ) {\n\n\t\tconst tracks = [];\n\t\tconst mergedTracks = {};\n\t\tconst sourceTracks = clip.tracks;\n\n\t\tfor ( let i = 0; i < sourceTracks.length; ++ i ) {\n\n\t\t\tlet sourceTrack = sourceTracks[ i ];\n\t\t\tconst sourceTrackBinding = PropertyBinding.parseTrackName( sourceTrack.name );\n\t\t\tconst sourceTrackNode = PropertyBinding.findNode( root, sourceTrackBinding.nodeName );\n\n\t\t\tif ( sourceTrackBinding.propertyName !== 'morphTargetInfluences' || sourceTrackBinding.propertyIndex === undefined ) {\n\n\t\t\t\t// Tracks that don't affect morph targets, or that affect all morph targets together, can be left as-is.\n\t\t\t\ttracks.push( sourceTrack );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete\n\t\t\t\t&& sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear ) {\n\n\t\t\t\tif ( sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\t\t// This should never happen, because glTF morph target animations\n\t\t\t\t\t// affect all targets already.\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.' );\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.' );\n\n\t\t\t\tsourceTrack = sourceTrack.clone();\n\t\t\t\tsourceTrack.setInterpolation( InterpolateLinear );\n\n\t\t\t}\n\n\t\t\tconst targetCount = sourceTrackNode.morphTargetInfluences.length;\n\t\t\tconst targetIndex = sourceTrackNode.morphTargetDictionary[ sourceTrackBinding.propertyIndex ];\n\n\t\t\tif ( targetIndex === undefined ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Morph target name not found: ' + sourceTrackBinding.propertyIndex );\n\n\t\t\t}\n\n\t\t\tlet mergedTrack;\n\n\t\t\t// If this is the first time we've seen this object, create a new\n\t\t\t// track to store merged keyframe data for each morph target.\n\t\t\tif ( mergedTracks[ sourceTrackNode.uuid ] === undefined ) {\n\n\t\t\t\tmergedTrack = sourceTrack.clone();\n\n\t\t\t\tconst values = new mergedTrack.ValueBufferType( targetCount * mergedTrack.times.length );\n\n\t\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\t\tvalues[ j * targetCount + targetIndex ] = mergedTrack.values[ j ];\n\n\t\t\t\t}\n\n\t\t\t\t// We need to take into consideration the intended target node\n\t\t\t\t// of our original un-merged morphTarget animation.\n\t\t\t\tmergedTrack.name = ( sourceTrackBinding.nodeName || '' ) + '.morphTargetInfluences';\n\t\t\t\tmergedTrack.values = values;\n\n\t\t\t\tmergedTracks[ sourceTrackNode.uuid ] = mergedTrack;\n\t\t\t\ttracks.push( mergedTrack );\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst sourceInterpolant = sourceTrack.createInterpolant( new sourceTrack.ValueBufferType( 1 ) );\n\n\t\t\tmergedTrack = mergedTracks[ sourceTrackNode.uuid ];\n\n\t\t\t// For every existing keyframe of the merged track, write a (possibly\n\t\t\t// interpolated) value from the source track.\n\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\tmergedTrack.values[ j * targetCount + targetIndex ] = sourceInterpolant.evaluate( mergedTrack.times[ j ] );\n\n\t\t\t}\n\n\t\t\t// For every existing keyframe of the source track, write a (possibly\n\t\t\t// new) keyframe to the merged track. Values from the previous loop may\n\t\t\t// be written again, but keyframes are de-duplicated.\n\t\t\tfor ( let j = 0; j < sourceTrack.times.length; j ++ ) {\n\n\t\t\t\tconst keyframeIndex = this.insertKeyframe( mergedTrack, sourceTrack.times[ j ] );\n\t\t\t\tmergedTrack.values[ keyframeIndex * targetCount + targetIndex ] = sourceTrack.values[ j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\treturn clip;\n\n\t},\n\n\ttoFloat32BufferAttribute: function ( srcAttribute ) {\n\n\t\tconst dstAttribute = new BufferAttribute( new Float32Array( srcAttribute.count * srcAttribute.itemSize ), srcAttribute.itemSize, false );\n\n\t\tif ( ! srcAttribute.normalized && ! srcAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\tdstAttribute.array.set( srcAttribute.array );\n\n\t\t\treturn dstAttribute;\n\n\t\t}\n\n\t\tfor ( let i = 0, il = srcAttribute.count; i < il; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < srcAttribute.itemSize; j ++ ) {\n\n\t\t\t\tdstAttribute.setComponent( i, j, srcAttribute.getComponent( i, j ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn dstAttribute;\n\n\t}\n\n};\n\nexport { GLTFExporter };\n","import saveAs from 'file-saver'\nimport type { Mesh, Scene } from 'three'\nimport { GLTFExporter } from 'three/addons/exporters/GLTFExporter.js'\n\nconst GLTF_EXPORTER = new GLTFExporter()\n\nexport function exportSceneToGLTF(scene: Scene, filename: string) {\n GLTF_EXPORTER.parse(\n scene,\n (data) => {\n console.info('Exported scene to GLTF successfully!')\n saveAs(new Blob([JSON.stringify(data)]), `${filename}.gltf`)\n },\n (err) => console.error(err),\n )\n}\n\nexport function exportMeshesToGLTF(meshes: Mesh[], filename: string) {\n GLTF_EXPORTER.parse(\n meshes,\n (data) => {\n console.info('Exported meshes to GLTF successfully!')\n saveAs(new Blob([JSON.stringify(data)]), `${filename}.gltf`)\n },\n (err) => console.error(err),\n )\n}\n","import { ref, type Ref } from 'vue'\nimport * as Globals from '@core/globals'\nimport * as ComponentBuilder from '@core/three/component.builder'\nimport { degToRad } from 'three/src/math/MathUtils.js'\nimport { patchMeshUniform, setMeshUniform, setMeshUniforms } from '@/utils/three-utils'\nimport { recalculateBiomeTexture, recalculateRampTexture } from './texture.helper'\nimport type { ColorRampStep } from '../models/color-ramp.model'\nimport type { PlanetSceneData } from '../types'\nimport type { AmbientLight, DataTexture, DirectionalLight, Group, Mesh } from 'three'\nimport type { LensFlareEffect } from '../three/lens-flare.effect'\nimport type { BiomeParameters } from '../models/biome-parameters.model'\nimport type PlanetData from '../models/planet-data.model'\n\nconst UNIFORM_UPDATE_MAP: Ref void>> = ref(new Map void>())\n\nexport function initUniformUpdateMap(scd: PlanetSceneData, pld: PlanetData, texBufs: Uint8Array[]) {\n registerLightingDataUpdates(pld, scd.sunLight!, scd.ambLight!, scd.lensFlare!)\n registerPlanetRenderingDataUpdates(pld, scd.planetGroup!, scd.planet!, scd.atmosphere!, scd.clouds!)\n registerSurfaceDataUpdates(pld, scd.planet!, scd.surfaceDataTex!, texBufs[0])\n registerBiomeDataUpdates(pld, scd.planet!, scd.biomeDataTex!, texBufs[1])\n registerCloudDataUpdates(pld, scd.clouds!, scd.cloudsDataTex!, texBufs[2])\n registerAtmosphereDataUpdates(pld, scd.atmosphere!)\n registerRingDataUpdates(pld, scd.ring!, scd.ringDataTex!, texBufs[3])\n}\n\nexport function clearUniformUpdateMap() {\n UNIFORM_UPDATE_MAP.value.clear()\n}\n\nexport function execUniformUpdate(key: string) {\n UNIFORM_UPDATE_MAP.value.get(key)?.()\n}\n\n// prettier-ignore\nfunction registerLightingDataUpdates(data: PlanetData, sunLight: DirectionalLight, ambLight: AmbientLight, lensFlare: LensFlareEffect): void {\n UNIFORM_UPDATE_MAP.value.set('_lensFlareEnabled', () => lensFlare.mesh.visible = data.lensFlareEnabled)\n UNIFORM_UPDATE_MAP.value.set('_lensFlarePointsIntensity', () => setMeshUniform(lensFlare, 'starPointsIntensity', data.lensFlarePointsIntensity))\n UNIFORM_UPDATE_MAP.value.set('_lensFlareGlareIntensity', () => setMeshUniform(lensFlare, 'glareIntensity', data.lensFlareGlareIntensity))\n UNIFORM_UPDATE_MAP.value.set('_sunLightAngle', () => {\n const v = degToRad(isNaN(data.sunLightAngle) ? 0 : data.sunLightAngle)\n const newPos = Globals.SUN_INIT_POS.clone().applyAxisAngle(Globals.AXIS_X, v)\n sunLight.position.set(newPos.x, newPos.y, newPos.z)\n })\n UNIFORM_UPDATE_MAP.value.set('_sunLightColor', () => {\n sunLight.color.set(data.sunLightColor)\n setMeshUniform(lensFlare, 'colorGain', data.sunLightColor)\n })\n UNIFORM_UPDATE_MAP.value.set('_sunLightIntensity', () => sunLight.intensity = data.sunLightIntensity)\n UNIFORM_UPDATE_MAP.value.set('_ambLightColor', () => ambLight.color.set(data.ambLightColor))\n UNIFORM_UPDATE_MAP.value.set('_ambLightIntensity', () => ambLight.intensity = data.ambLightIntensity)\n}\n\n// prettier-ignore\nfunction registerPlanetRenderingDataUpdates(data: PlanetData, planetGroup: Group, planet: Mesh, atmosphere: Mesh, clouds: Mesh): void {\n UNIFORM_UPDATE_MAP.value.set('_planetRadius', () => {\n const v = data.planetRadius\n const atmosHeight = data.atmosphereHeight / Globals.ATMOSPHERE_HEIGHT_DIVIDER\n planetGroup.scale.setScalar(v)\n setMeshUniform(planet, 'u_radius', v)\n setMeshUniforms(atmosphere, ['u_surface_radius', 'u_radius'], [v, v + atmosHeight])\n })\n UNIFORM_UPDATE_MAP.value.set('_planetAxialTilt', () => {\n const v = degToRad(isNaN(data.planetAxialTilt) ? 0 : data.planetAxialTilt)\n planetGroup.setRotationFromAxisAngle(Globals.AXIS_X, v)\n })\n UNIFORM_UPDATE_MAP.value.set('_planetRotation', () => {\n const vRad = degToRad(isNaN(data.planetRotation) ? 0 : data.planetRotation)\n const cloudsRotationRad = degToRad(\n isNaN(data.cloudsRotation) ? 0 : data.cloudsRotation,\n )\n planet.setRotationFromAxisAngle(planet.up, vRad)\n clouds.setRotationFromAxisAngle(clouds.up, vRad + cloudsRotationRad)\n })\n UNIFORM_UPDATE_MAP.value.set('_planetWaterRoughness', () => patchMeshUniform(planet, 'u_pbr_params', { wrough: data.planetWaterRoughness }))\n UNIFORM_UPDATE_MAP.value.set('_planetWaterMetalness', () => patchMeshUniform(planet, 'u_pbr_params', { wmetal: data.planetWaterMetalness }))\n UNIFORM_UPDATE_MAP.value.set('_planetGroundRoughness', () => patchMeshUniform(planet, 'u_pbr_params', { grough: data.planetGroundRoughness }))\n UNIFORM_UPDATE_MAP.value.set('_planetGroundMetalness', () => patchMeshUniform(planet, 'u_pbr_params', { gmetal: data.planetGroundMetalness }))\n UNIFORM_UPDATE_MAP.value.set('_planetWaterLevel', () => patchMeshUniform(planet, 'u_pbr_params', { wlevel: data.planetWaterLevel }))\n}\n\n// prettier-ignore\nfunction registerSurfaceDataUpdates(data: PlanetData, planet: Mesh, surfaceDataTex: DataTexture, buffer: Uint8Array): void {\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceShowBumps', () => setMeshUniform(planet, 'u_bump', data.planetSurfaceShowBumps))\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceBumpStrength', () => setMeshUniform(planet, 'u_bump_strength', data.planetSurfaceBumpStrength))\n // Warping\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceShowWarping', () => setMeshUniform(planet, 'u_warp', data.planetSurfaceShowWarping))\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceNoise._warpFactor', () => patchMeshUniform(planet, 'u_surface_noise', {\n xwarp: data.planetSurfaceNoise.xWarpFactor,\n ywarp: data.planetSurfaceNoise.yWarpFactor,\n zwarp: data.planetSurfaceNoise.zWarpFactor\n }))\n // Displacement\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceShowDisplacement', () => setMeshUniform(planet, 'u_displace', data.planetSurfaceShowDisplacement))\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceDisplacement._factor', () => patchMeshUniform(planet, 'u_surface_displacement', { fac: data.planetSurfaceDisplacement.factor }))\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceDisplacement._epsilon', () => patchMeshUniform(planet, 'u_surface_displacement', { eps: data.planetSurfaceDisplacement.epsilon }))\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceDisplacement._multiplier', () => patchMeshUniform(planet, 'u_surface_displacement', { mul: data.planetSurfaceDisplacement.multiplier }))\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceDisplacement._frequency', () => patchMeshUniform(planet, 'u_surface_displacement', { freq: data.planetSurfaceDisplacement.frequency }))\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceDisplacement._amplitude', () => patchMeshUniform(planet, 'u_surface_displacement', { amp: data.planetSurfaceDisplacement.amplitude }))\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceDisplacement._lacunarity', () => patchMeshUniform(planet, 'u_surface_displacement', { lac: data.planetSurfaceDisplacement.lacunarity }))\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceDisplacement._octaves', () => patchMeshUniform(planet, 'u_surface_displacement', { oct: data.planetSurfaceDisplacement.octaves }))\n // Noise\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceNoise._frequency', () => patchMeshUniform(planet, 'u_surface_noise', { freq: data.planetSurfaceNoise.frequency }))\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceNoise._amplitude', () => patchMeshUniform(planet, 'u_surface_noise', { amp: data.planetSurfaceNoise.amplitude }))\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceNoise._lacunarity', () => patchMeshUniform(planet, 'u_surface_noise', { lac: data.planetSurfaceNoise.lacunarity }))\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceNoise._octaves', () => patchMeshUniform(planet, 'u_surface_noise', { oct: data.planetSurfaceNoise.octaves }))\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceNoise._layers', () => patchMeshUniform(planet, 'u_surface_noise', { layers: data.planetSurfaceNoise.layers }))\n // Color\n UNIFORM_UPDATE_MAP.value.set('_planetSurfaceColorRamp', () => {\n const v = data.planetSurfaceColorRamp\n recalculateRampTexture(buffer, Globals.TEXTURE_SIZES.SURFACE, v.steps as ColorRampStep[])\n surfaceDataTex.needsUpdate = true\n })\n}\n\n// prettier-ignore\nfunction registerBiomeDataUpdates(data: PlanetData, planet: Mesh, biomeDataTex: DataTexture, buffer: Uint8Array): void {\n UNIFORM_UPDATE_MAP.value.set('_biomesEnabled', () => setMeshUniform(planet, 'u_biomes', data.biomesEnabled))\n // Temperature\n UNIFORM_UPDATE_MAP.value.set('_biomesTemperatureMode', () => patchMeshUniform(planet, 'u_temp_noise', { mode: data.biomesTemperatureMode }))\n UNIFORM_UPDATE_MAP.value.set('_biomesTemperatureNoise._frequency', () => patchMeshUniform(planet, 'u_temp_noise', { freq: data.biomesTemperatureNoise.frequency }))\n UNIFORM_UPDATE_MAP.value.set('_biomesTemperatureNoise._amplitude', () => patchMeshUniform(planet, 'u_temp_noise', { amp: data.biomesTemperatureNoise.amplitude }))\n UNIFORM_UPDATE_MAP.value.set('_biomesTemperatureNoise._lacunarity', () => patchMeshUniform(planet, 'u_temp_noise', { lac: data.biomesTemperatureNoise.lacunarity }))\n UNIFORM_UPDATE_MAP.value.set('_biomesTemperatureNoise._octaves', () => patchMeshUniform(planet, 'u_temp_noise', { oct: data.biomesTemperatureNoise.octaves }))\n // Humidity\n UNIFORM_UPDATE_MAP.value.set('_biomesHumidityMode', () => patchMeshUniform(planet, 'u_humi_noise', { mode: data.biomesHumidityMode }))\n UNIFORM_UPDATE_MAP.value.set('_biomesHumidityNoise._frequency', () => patchMeshUniform(planet, 'u_humi_noise', { freq: data.biomesHumidityNoise.frequency }))\n UNIFORM_UPDATE_MAP.value.set('_biomesHumidityNoise._amplitude', () => patchMeshUniform(planet, 'u_humi_noise', { amp: data.biomesHumidityNoise.amplitude }))\n UNIFORM_UPDATE_MAP.value.set('_biomesHumidityNoise._lacunarity', () => patchMeshUniform(planet, 'u_humi_noise', { lac: data.biomesHumidityNoise.lacunarity }))\n UNIFORM_UPDATE_MAP.value.set('_biomesHumidityNoise._octaves', () => patchMeshUniform(planet, 'u_humi_noise', { oct: data.biomesHumidityNoise.octaves }))\n UNIFORM_UPDATE_MAP.value.set('_biomesParameters', () => {\n recalculateBiomeTexture(buffer, Globals.TEXTURE_SIZES.BIOME, data.biomesParams as BiomeParameters[])\n biomeDataTex.needsUpdate = true\n })\n}\n\n// prettier-ignore\nfunction registerCloudDataUpdates(data: PlanetData, clouds: Mesh, cloudsDataTex: DataTexture, buffer: Uint8Array): void {\n UNIFORM_UPDATE_MAP.value.set('_cloudsEnabled', () => clouds.visible = data.cloudsEnabled)\n UNIFORM_UPDATE_MAP.value.set('_cloudsRotation', () => {\n const planetRotation = degToRad(isNaN(data.planetRotation) ? 0 : data.planetRotation)\n const v = degToRad(isNaN(data.cloudsRotation) ? 0 : data.cloudsRotation)\n clouds.setRotationFromAxisAngle(clouds.up, planetRotation + v)\n })\n // Warping\n UNIFORM_UPDATE_MAP.value.set('_cloudsShowWarping', () => setMeshUniform(clouds, 'u_warp', data.cloudsShowWarping))\n UNIFORM_UPDATE_MAP.value.set('_cloudsNoise._warpFactor', () => patchMeshUniform(clouds, 'u_noise', {\n xwarp: data.cloudsNoise.xWarpFactor,\n ywarp: data.cloudsNoise.yWarpFactor,\n zwarp: data.cloudsNoise.zWarpFactor,\n }))\n // Displacement\n UNIFORM_UPDATE_MAP.value.set('_cloudsShowDisplacement', () => setMeshUniform(clouds, 'u_displace', data.cloudsShowDisplacement))\n UNIFORM_UPDATE_MAP.value.set('_cloudsDisplacement._factor', () => patchMeshUniform(clouds, 'u_displacement', { fac: data.cloudsDisplacement.factor }))\n UNIFORM_UPDATE_MAP.value.set('_cloudsDisplacement._epsilon', () => patchMeshUniform(clouds, 'u_displacement', { eps: data.cloudsDisplacement.epsilon }))\n UNIFORM_UPDATE_MAP.value.set('_cloudsDisplacement._multiplier', () => patchMeshUniform(clouds, 'u_displacement', { mul: data.cloudsDisplacement.multiplier }))\n UNIFORM_UPDATE_MAP.value.set('_cloudsDisplacement._frequency', () => patchMeshUniform(clouds, 'u_displacement', { freq: data.cloudsDisplacement.frequency }))\n UNIFORM_UPDATE_MAP.value.set('_cloudsDisplacement._amplitude', () => patchMeshUniform(clouds, 'u_displacement', { amp: data.cloudsDisplacement.amplitude }))\n UNIFORM_UPDATE_MAP.value.set('_cloudsDisplacement._lacunarity', () => patchMeshUniform(clouds, 'u_displacement', { lac: data.cloudsDisplacement.lacunarity }))\n UNIFORM_UPDATE_MAP.value.set('_cloudsDisplacement._octaves', () => patchMeshUniform(clouds, 'u_displacement', { oct: data.cloudsDisplacement.octaves }))\n // Noise\n UNIFORM_UPDATE_MAP.value.set('_cloudsNoise._frequency', () => patchMeshUniform(clouds, 'u_noise', { freq: data.cloudsNoise.frequency }))\n UNIFORM_UPDATE_MAP.value.set('_cloudsNoise._amplitude', () => patchMeshUniform(clouds, 'u_noise', { amp: data.cloudsNoise.amplitude }))\n UNIFORM_UPDATE_MAP.value.set('_cloudsNoise._lacunarity', () => patchMeshUniform(clouds, 'u_noise', { lac: data.cloudsNoise.lacunarity }))\n UNIFORM_UPDATE_MAP.value.set('_cloudsNoise._octaves', () => patchMeshUniform(clouds, 'u_noise', { oct: data.cloudsNoise.octaves }))\n // Color\n UNIFORM_UPDATE_MAP.value.set('_cloudsColor', () => setMeshUniform(clouds, 'u_color', data.cloudsColor))\n UNIFORM_UPDATE_MAP.value.set('_cloudsColorRamp', () => {\n const v = data.cloudsColorRamp\n recalculateRampTexture(buffer, Globals.TEXTURE_SIZES.CLOUDS, v.steps as ColorRampStep[])\n cloudsDataTex.needsUpdate = true\n })\n}\n\n// prettier-ignore\nfunction registerAtmosphereDataUpdates(data: PlanetData, atmosphere: Mesh): void {\n UNIFORM_UPDATE_MAP.value.set('_atmosphereEnabled', () => atmosphere.visible = data.atmosphereEnabled)\n UNIFORM_UPDATE_MAP.value.set('_atmosphereHeight', () => {\n const atmosHeight = data.atmosphereHeight / Globals.ATMOSPHERE_HEIGHT_DIVIDER\n setMeshUniform(atmosphere, 'u_radius', data.planetRadius + atmosHeight)\n })\n UNIFORM_UPDATE_MAP.value.set('_atmosphereDensityScale', () => setMeshUniform(atmosphere, 'u_density', data.atmosphereDensityScale / Globals.ATMOSPHERE_HEIGHT_DIVIDER))\n UNIFORM_UPDATE_MAP.value.set('_atmosphereIntensity', () => setMeshUniform(atmosphere, 'u_intensity', data.atmosphereIntensity))\n UNIFORM_UPDATE_MAP.value.set('_atmosphereColorMode', () => setMeshUniform(atmosphere, 'u_color_mode', data.atmosphereColorMode))\n UNIFORM_UPDATE_MAP.value.set('_atmosphereHue', () => setMeshUniform(atmosphere, 'u_hue', data.atmosphereHue))\n UNIFORM_UPDATE_MAP.value.set('_atmosphereTint', () => setMeshUniform(atmosphere, 'u_tint', data.atmosphereTint))\n}\n\n// prettier-ignore\nfunction registerRingDataUpdates(data: PlanetData, ring: Mesh, ringDataTex: DataTexture, buffer: Uint8Array): void {\n UNIFORM_UPDATE_MAP.value.set('_ringEnabled', () => ring.visible = data.ringEnabled)\n UNIFORM_UPDATE_MAP.value.set('_ringInnerRadius', () => {\n ring.geometry.dispose()\n ring.geometry = ComponentBuilder.createRingGeometryComponent(data.planetMeshQuality, data.ringInnerRadius, data.ringOuterRadius)\n setMeshUniform(ring, 'u_inner_radius', data.ringInnerRadius)\n })\n \n UNIFORM_UPDATE_MAP.value.set('_ringOuterRadius', () => setMeshUniform(ring, 'u_outer_radius', data.ringOuterRadius))\n UNIFORM_UPDATE_MAP.value.set('_ringColorRamp', () => {\n const v = data.ringColorRamp\n recalculateRampTexture(buffer, Globals.TEXTURE_SIZES.RING, v.steps as ColorRampStep[])\n ringDataTex.needsUpdate = true\n })\n}\n","var Stats = function () {\n\n\tvar mode = 0;\n\n\tvar container = document.createElement( 'div' );\n\tcontainer.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';\n\tcontainer.addEventListener( 'click', function ( event ) {\n\n\t\tevent.preventDefault();\n\t\tshowPanel( ++ mode % container.children.length );\n\n\t}, false );\n\n\t//\n\n\tfunction addPanel( panel ) {\n\n\t\tcontainer.appendChild( panel.dom );\n\t\treturn panel;\n\n\t}\n\n\tfunction showPanel( id ) {\n\n\t\tfor ( var i = 0; i < container.children.length; i ++ ) {\n\n\t\t\tcontainer.children[ i ].style.display = i === id ? 'block' : 'none';\n\n\t\t}\n\n\t\tmode = id;\n\n\t}\n\n\t//\n\n\tvar beginTime = ( performance || Date ).now(), prevTime = beginTime, frames = 0;\n\n\tvar fpsPanel = addPanel( new Stats.Panel( 'FPS', '#0ff', '#002' ) );\n\tvar msPanel = addPanel( new Stats.Panel( 'MS', '#0f0', '#020' ) );\n\n\tif ( self.performance && self.performance.memory ) {\n\n\t\tvar memPanel = addPanel( new Stats.Panel( 'MB', '#f08', '#201' ) );\n\n\t}\n\n\tshowPanel( 0 );\n\n\treturn {\n\n\t\tREVISION: 16,\n\n\t\tdom: container,\n\n\t\taddPanel: addPanel,\n\t\tshowPanel: showPanel,\n\n\t\tbegin: function () {\n\n\t\t\tbeginTime = ( performance || Date ).now();\n\n\t\t},\n\n\t\tend: function () {\n\n\t\t\tframes ++;\n\n\t\t\tvar time = ( performance || Date ).now();\n\n\t\t\tmsPanel.update( time - beginTime, 200 );\n\n\t\t\tif ( time >= prevTime + 1000 ) {\n\n\t\t\t\tfpsPanel.update( ( frames * 1000 ) / ( time - prevTime ), 100 );\n\n\t\t\t\tprevTime = time;\n\t\t\t\tframes = 0;\n\n\t\t\t\tif ( memPanel ) {\n\n\t\t\t\t\tvar memory = performance.memory;\n\t\t\t\t\tmemPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn time;\n\n\t\t},\n\n\t\tupdate: function () {\n\n\t\t\tbeginTime = this.end();\n\n\t\t},\n\n\t\t// Backwards Compatibility\n\n\t\tdomElement: container,\n\t\tsetMode: showPanel\n\n\t};\n\n};\n\nStats.Panel = function ( name, fg, bg ) {\n\n\tvar min = Infinity, max = 0, round = Math.round;\n\tvar PR = round( window.devicePixelRatio || 1 );\n\n\tvar WIDTH = 80 * PR, HEIGHT = 48 * PR,\n\t\tTEXT_X = 3 * PR, TEXT_Y = 2 * PR,\n\t\tGRAPH_X = 3 * PR, GRAPH_Y = 15 * PR,\n\t\tGRAPH_WIDTH = 74 * PR, GRAPH_HEIGHT = 30 * PR;\n\n\tvar canvas = document.createElement( 'canvas' );\n\tcanvas.width = WIDTH;\n\tcanvas.height = HEIGHT;\n\tcanvas.style.cssText = 'width:80px;height:48px';\n\n\tvar context = canvas.getContext( '2d' );\n\tcontext.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif';\n\tcontext.textBaseline = 'top';\n\n\tcontext.fillStyle = bg;\n\tcontext.fillRect( 0, 0, WIDTH, HEIGHT );\n\n\tcontext.fillStyle = fg;\n\tcontext.fillText( name, TEXT_X, TEXT_Y );\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\tcontext.fillStyle = bg;\n\tcontext.globalAlpha = 0.9;\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\treturn {\n\n\t\tdom: canvas,\n\n\t\tupdate: function ( value, maxValue ) {\n\n\t\t\tmin = Math.min( min, value );\n\t\t\tmax = Math.max( max, value );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 1;\n\t\t\tcontext.fillRect( 0, 0, WIDTH, GRAPH_Y );\n\t\t\tcontext.fillStyle = fg;\n\t\t\tcontext.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y );\n\n\t\t\tcontext.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 0.9;\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) );\n\n\t\t}\n\n\t};\n\n};\n\nexport default Stats;\n","import { ref, type Ref } from 'vue'\nimport * as THREE from 'three'\nimport { degToRad } from 'three/src/math/MathUtils.js'\nimport * as Globals from '@core/globals'\nimport * as ComponentBuilder from '@core/three/component.builder'\nimport { type BakingTarget, type PlanetSceneData } from '@core/types'\nimport PlanetData from '@core/models/planet-data.model'\nimport { normalizeUInt8ArrayPixels, regeneratePRNGIfNecessary } from '@/utils/math-utils'\nimport {\n bakeMesh,\n createBakingHeightMap,\n createBakingClouds,\n createBakingNormalMap,\n createBakingPBRMap,\n createBakingPlanet,\n createBakingRing,\n} from './planet-baker.service'\nimport { exportMeshesToGLTF } from '../helpers/export.helper'\nimport { idb } from '@/dexie.config'\nimport { sleep } from '@/utils/utils'\nimport saveAs from 'file-saver'\nimport { clearUniformUpdateMap, execUniformUpdate, initUniformUpdateMap } from '../helpers/uniform.helper'\nimport Stats from 'three/examples/jsm/libs/stats.module.js'\n\n// Editor constants\nconst LG_SCENE_DATA: PlanetSceneData = {}\nexport const LG_PLANET_DATA: Ref = ref(new PlanetData())\n\n// Buffers\nexport const LG_BUFFER_SURFACE = new Uint8Array(Globals.TEXTURE_SIZES.SURFACE * 4)\nexport const LG_BUFFER_BIOME = new Uint8Array(Globals.TEXTURE_SIZES.BIOME * Globals.TEXTURE_SIZES.BIOME * 4)\nexport const LG_BUFFER_CLOUDS = new Uint8Array(Globals.TEXTURE_SIZES.CLOUDS * Globals.TEXTURE_SIZES.CLOUDS * 4)\nexport const LG_BUFFER_RING = new Uint8Array(Globals.TEXTURE_SIZES.RING * Globals.TEXTURE_SIZES.RING * 4)\n\nconst hasPlanetBeenEdited: Ref = ref(false)\nlet enableEditorRendering = true\nlet watchForPlanetUpdates = false\n\n// ------------------------------------------------------------------------------------------------ //\n// BOOTSTRAPPING //\n// ------------------------------------------------------------------------------------------------ //\n\nexport async function bootstrapEditor(canvas: HTMLCanvasElement, w: number, h: number, pixelRatio: number) {\n await sleep(50)\n enableEditorRendering = true\n const sceneRenderObjs = ComponentBuilder.createScene(LG_PLANET_DATA.value, w, h, pixelRatio)\n LG_SCENE_DATA.scene = sceneRenderObjs.scene\n LG_SCENE_DATA.renderer = sceneRenderObjs.renderer\n LG_SCENE_DATA.camera = sceneRenderObjs.camera\n LG_SCENE_DATA.clock = new THREE.Clock()\n initLighting()\n initPlanet()\n initRendering(canvas, w, h)\n initUniformUpdateMap(LG_SCENE_DATA, LG_PLANET_DATA.value, [\n LG_BUFFER_SURFACE,\n LG_BUFFER_BIOME,\n LG_BUFFER_CLOUDS,\n LG_BUFFER_RING,\n ])\n ComponentBuilder.createControlsComponent(LG_SCENE_DATA.camera, LG_SCENE_DATA.renderer.domElement)\n}\n\nfunction initLighting(): void {\n const sun = ComponentBuilder.createSun(LG_PLANET_DATA.value)\n const lensFlare = ComponentBuilder.createLensFlare(LG_PLANET_DATA.value, sun.position, sun.color)\n sun.add(lensFlare.mesh)\n LG_SCENE_DATA.scene!.add(sun)\n LG_SCENE_DATA.sunLight = sun\n LG_SCENE_DATA.ambLight = LG_SCENE_DATA.scene!.getObjectByName(Globals.LG_NAME_AMBLIGHT) as THREE.AmbientLight\n LG_SCENE_DATA.lensFlare = lensFlare\n\n // Set initial rotations\n const pos = Globals.SUN_INIT_POS.clone()\n pos.applyAxisAngle(Globals.AXIS_X, degToRad(-15))\n LG_SCENE_DATA.sunLight.position.set(pos.x, pos.y, pos.z)\n LG_SCENE_DATA.lensFlare.updatePosition(LG_SCENE_DATA.sunLight.position)\n}\n\nfunction initPlanet(): void {\n const planet = ComponentBuilder.createPlanet(LG_PLANET_DATA.value, LG_BUFFER_SURFACE, LG_BUFFER_BIOME)\n const clouds = ComponentBuilder.createClouds(LG_PLANET_DATA.value, LG_BUFFER_CLOUDS)\n const atmosphere = ComponentBuilder.createAtmosphere(LG_PLANET_DATA.value, LG_SCENE_DATA.sunLight!.position)\n const ring = ComponentBuilder.createRing(LG_PLANET_DATA.value, LG_BUFFER_RING)\n const planetGroup = new THREE.Group()\n planetGroup.add(planet.mesh)\n planetGroup.add(clouds.mesh)\n planetGroup.add(atmosphere)\n\n const ringAnchor = new THREE.Group()\n ringAnchor.add(ring.mesh)\n planetGroup.add(ringAnchor)\n\n LG_SCENE_DATA.scene!.add(planetGroup)\n LG_SCENE_DATA.planet = planet.mesh\n LG_SCENE_DATA.clouds = clouds.mesh\n LG_SCENE_DATA.atmosphere = atmosphere\n LG_SCENE_DATA.ring = ring.mesh\n LG_SCENE_DATA.planetGroup = planetGroup\n LG_SCENE_DATA.ringAnchor = ringAnchor\n\n // Set datatextures + data\n LG_SCENE_DATA.surfaceDataTex = planet.texs[0].texture\n LG_SCENE_DATA.biomeDataTex = planet.texs[1].texture\n LG_SCENE_DATA.cloudsDataTex = clouds.texs[0].texture\n LG_SCENE_DATA.ringDataTex = ring.texs[0].texture\n\n // Set initial rotations\n LG_SCENE_DATA.planetGroup.setRotationFromAxisAngle(Globals.AXIS_X, degToRad(LG_PLANET_DATA.value.planetAxialTilt))\n LG_SCENE_DATA.planet.setRotationFromAxisAngle(LG_SCENE_DATA.planet.up, degToRad(LG_PLANET_DATA.value.planetRotation))\n LG_SCENE_DATA.clouds.setRotationFromAxisAngle(\n LG_SCENE_DATA.clouds.up,\n degToRad(LG_PLANET_DATA.value.planetRotation + LG_PLANET_DATA.value.cloudsRotation),\n )\n LG_SCENE_DATA.ringAnchor.setRotationFromAxisAngle(Globals.AXIS_X, degToRad(LG_PLANET_DATA.value.ringAxialTilt))\n LG_SCENE_DATA.ring.setRotationFromAxisAngle(LG_SCENE_DATA.ring.up, degToRad(LG_PLANET_DATA.value.ringRotation))\n\n // Set lighting target\n LG_SCENE_DATA.sunLight!.target = LG_SCENE_DATA.planetGroup\n}\n\nfunction initRendering(sceneRoot: HTMLCanvasElement, width: number, height: number) {\n const stats = new Stats()\n stats.dom.style.right = '0'\n stats.dom.style.left = 'auto'\n stats.dom.ariaHidden = 'true'\n // document.body.appendChild(stats.dom)\n\n LG_SCENE_DATA.renderer!.setSize(width, height)\n LG_SCENE_DATA.renderer!.setAnimationLoop(() => renderFrame(stats))\n LG_SCENE_DATA.renderer!.domElement.ariaLabel = '3D planet viewer'\n sceneRoot.appendChild(LG_SCENE_DATA.renderer!.domElement)\n}\n\n// ------------------------------------------------------------------------------------------------ //\n// SCENE MANAGEMENT //\n// ------------------------------------------------------------------------------------------------ //\n\nfunction renderFrame(stats: Stats) {\n if (!enableEditorRendering) {\n return\n }\n stats.update()\n updateScene()\n watchForPlanetUpdates = true\n LG_SCENE_DATA.lensFlare!.update(\n LG_SCENE_DATA.renderer!,\n LG_SCENE_DATA.scene!,\n LG_SCENE_DATA.camera!,\n LG_SCENE_DATA.clock!,\n )\n LG_SCENE_DATA.renderer!.render(LG_SCENE_DATA.scene!, LG_SCENE_DATA.camera!)\n}\n\nexport function updateCameraRendering(w: number, h: number) {\n LG_SCENE_DATA.camera!.aspect = w / h\n LG_SCENE_DATA.camera!.updateProjectionMatrix()\n LG_SCENE_DATA.renderer!.setSize(w, h)\n}\n\nfunction updateScene() {\n if (watchForPlanetUpdates && LG_PLANET_DATA.value.changedProps.length > 0 && !hasPlanetBeenEdited.value) {\n console.debug('Planet has been edited, warning user in case of unsaved data')\n hasPlanetBeenEdited.value = true\n }\n for (const changedProp of LG_PLANET_DATA.value.changedProps.filter((ch) => !!ch.prop)) {\n let key = changedProp.prop\n // Check for additional info, separated by |\n key = changedProp.prop.split('|')[0]\n execUniformUpdate(key)\n }\n LG_PLANET_DATA.value.clearChangedProps()\n}\n\n/**\n * Removes every object from the scene, then removes the scene itself\n */\nexport function disposeScene() {\n watchForPlanetUpdates = false\n console.debug('[unmount] Clearing scene...')\n LG_SCENE_DATA.sunLight!.dispose()\n LG_SCENE_DATA.ambLight!.dispose()\n LG_SCENE_DATA.scene!.remove(LG_SCENE_DATA.sunLight!)\n LG_SCENE_DATA.scene!.remove(LG_SCENE_DATA.ambLight!)\n\n LG_SCENE_DATA.lensFlare!.material.dispose()\n LG_SCENE_DATA.lensFlare!.mesh.geometry.dispose()\n ;(LG_SCENE_DATA.planet!.material as THREE.Material).dispose()\n LG_SCENE_DATA.planet!.geometry.dispose()\n ;(LG_SCENE_DATA.clouds!.material as THREE.Material).dispose()\n LG_SCENE_DATA.clouds!.geometry.dispose()\n ;(LG_SCENE_DATA.atmosphere!.material as THREE.Material).dispose()\n LG_SCENE_DATA.atmosphere!.geometry.dispose()\n ;(LG_SCENE_DATA.ring!.material as THREE.Material).dispose()\n LG_SCENE_DATA.ring!.geometry.dispose()\n\n LG_BUFFER_SURFACE.fill(0)\n LG_BUFFER_BIOME.fill(0)\n LG_BUFFER_CLOUDS.fill(0)\n LG_BUFFER_RING.fill(0)\n LG_SCENE_DATA.surfaceDataTex!.dispose()\n LG_SCENE_DATA.biomeDataTex!.dispose()\n LG_SCENE_DATA.cloudsDataTex!.dispose()\n LG_SCENE_DATA.ringAnchor!.clear()\n LG_SCENE_DATA.planetGroup!.clear()\n\n LG_SCENE_DATA.scene!.children.forEach((c) => LG_SCENE_DATA.scene!.remove(c))\n LG_SCENE_DATA.renderer!.dispose()\n\n clearUniformUpdateMap()\n console.debug('[unmount] ...done!')\n}\n\n// ------------------------------------------------------------------------------------------------ //\n// DATA FUNCTIONS //\n// ------------------------------------------------------------------------------------------------ //\n\nexport async function randomizePlanet() {\n await sleep(50)\n regeneratePRNGIfNecessary()\n LG_PLANET_DATA.value.randomize()\n}\n\nexport async function resetPlanet() {\n LG_PLANET_DATA.value.reset()\n}\n\nexport function exportPlanetScreenshot() {\n LG_SCENE_DATA.renderer!.domElement.toBlob((blob) => {\n saveAs(blob!, `${LG_PLANET_DATA.value.planetName.replaceAll(' ', '_')}-${new Date().toISOString()}.png`)\n }, 'image/png')\n}\n\nexport async function exportPlanetPreview(): Promise {\n await sleep(50)\n LG_SCENE_DATA.lensFlare!.mesh.visible = false\n\n // ------------------------------- Setup render scene -------------------------------\n const w = 384,\n h = 384\n const previewRenderTarget = new THREE.WebGLRenderTarget(w, h, {\n colorSpace: THREE.SRGBColorSpace,\n })\n const previewCamera = ComponentBuilder.createPerspectiveCameraComponent(\n 50,\n w / h,\n 0.1,\n 10,\n new THREE.Spherical(\n LG_PLANET_DATA.value.initCamDistance - (LG_PLANET_DATA.value.ringEnabled ? 0.75 : 1.5),\n Math.PI / 2.0,\n degToRad(LG_PLANET_DATA.value.initCamAngle),\n ),\n )\n previewCamera.setRotationFromAxisAngle(Globals.AXIS_Y, degToRad(LG_PLANET_DATA.value.initCamAngle))\n previewCamera.updateProjectionMatrix()\n\n const renderGroup = new THREE.Group()\n renderGroup.add(LG_SCENE_DATA.planetGroup!, LG_SCENE_DATA.sunLight!)\n\n // ---------------------------- Setup renderer & render -----------------------------\n const rawBuffer = new Uint8Array(w * h * 4)\n LG_SCENE_DATA.renderer!.setRenderTarget(previewRenderTarget)\n LG_SCENE_DATA.renderer!.render(renderGroup, previewCamera)\n LG_SCENE_DATA.renderer!.readRenderTargetPixels(previewRenderTarget, 0, 0, w, h, rawBuffer)\n LG_SCENE_DATA.renderer!.setRenderTarget(null)\n\n // ----------------- Create preview canvas & write data from buffer -----------------\n const canvas = document.createElement('canvas')\n canvas.width = w\n canvas.height = h\n const ctx = canvas.getContext('2d')!\n const imageData = ctx.createImageData(w, h)\n const previewBuffer = normalizeUInt8ArrayPixels(rawBuffer, w, h)\n for (let i = 0; i < imageData.data.length; i++) {\n imageData.data[i] = previewBuffer[i]\n }\n ctx.putImageData(imageData, 0, 0)\n\n // ------------------------------- Clean-up resources -------------------------------\n LG_SCENE_DATA.scene!.add(LG_SCENE_DATA.planetGroup!, LG_SCENE_DATA.sunLight!)\n previewRenderTarget.dispose()\n\n // ----------------------------- Save and remove canvas -----------------------------\n const dataURL = canvas.toDataURL('image/webp')\n canvas.remove()\n\n LG_SCENE_DATA.lensFlare!.mesh.visible = true\n return dataURL\n}\n\nexport async function exportPlanetToGLTF(progressDialog: {\n open: () => void\n setProgress: (value: number) => void\n setError: (error: unknown) => void\n}) {\n progressDialog.setProgress(1)\n await sleep(50)\n const bakingTargets: BakingTarget[] = []\n try {\n const appSettings = await idb.settings.limit(1).first()\n const w = appSettings?.bakingResolution ?? 2048,\n h = appSettings?.bakingResolution ?? 2048\n\n // ----------------------------------- Bake planet ----------------------------------\n progressDialog.setProgress(2)\n await sleep(50)\n const bakePlanet = createBakingPlanet(LG_PLANET_DATA.value, LG_BUFFER_SURFACE, LG_BUFFER_BIOME)\n const bakePlanetSurfaceTex = bakeMesh(LG_SCENE_DATA.renderer!, bakePlanet, w, h)\n if (appSettings?.bakingPixelize) bakePlanetSurfaceTex.magFilter = THREE.NearestFilter\n\n progressDialog.setProgress(3)\n await sleep(50)\n const bakePBR = createBakingPBRMap(LG_PLANET_DATA.value)\n const bakePlanetPBRTex = bakeMesh(LG_SCENE_DATA.renderer!, bakePBR, w, h)\n if (appSettings?.bakingPixelize) bakePlanetPBRTex.magFilter = THREE.NearestFilter\n\n progressDialog.setProgress(4)\n await sleep(50)\n const bakeHeight = createBakingHeightMap(LG_PLANET_DATA.value)\n const bakePlanetHeightTex = bakeMesh(LG_SCENE_DATA.renderer!, bakeHeight, w, h)\n\n const bakeNormal = createBakingNormalMap(LG_PLANET_DATA.value, bakePlanetHeightTex, w)\n const bakePlanetNormalTex = bakeMesh(LG_SCENE_DATA.renderer!, bakeNormal, w, h)\n if (appSettings?.bakingPixelize) bakePlanetNormalTex.magFilter = THREE.NearestFilter\n\n bakePlanet.material = new THREE.MeshStandardMaterial({\n map: bakePlanetSurfaceTex,\n roughnessMap: bakePlanetPBRTex,\n metalnessMap: bakePlanetPBRTex,\n normalMap: bakePlanetNormalTex,\n normalScale: new THREE.Vector2(\n 2.0 * LG_PLANET_DATA.value.planetSurfaceBumpStrength,\n 2.0 * LG_PLANET_DATA.value.planetSurfaceBumpStrength,\n ),\n })\n bakingTargets.push({ mesh: bakePlanet, textures: [bakePlanetSurfaceTex, bakePlanetPBRTex, bakePlanetHeightTex] })\n\n // ----------------------------------- Bake clouds ----------------------------------\n if (LG_PLANET_DATA.value.cloudsEnabled) {\n progressDialog.setProgress(5)\n await sleep(50)\n const bakeClouds = createBakingClouds(LG_PLANET_DATA.value, LG_BUFFER_CLOUDS)\n const bakeCloudsTex = bakeMesh(LG_SCENE_DATA.renderer!, bakeClouds, w, h)\n if (appSettings?.bakingPixelize) bakeCloudsTex.magFilter = THREE.NearestFilter\n\n bakeClouds.material = new THREE.MeshStandardMaterial({\n map: bakeCloudsTex,\n opacity: 1.0,\n metalness: 0.5,\n roughness: 1.0,\n transparent: true,\n })\n bakingTargets.push({ mesh: bakeClouds, textures: [bakeCloudsTex] })\n bakePlanet.add(bakeClouds)\n bakeClouds.setRotationFromAxisAngle(bakeClouds.up, degToRad(LG_PLANET_DATA.value.cloudsRotation))\n }\n\n // --------------------------------- Bake ring system -------------------------------\n if (LG_PLANET_DATA.value.ringEnabled) {\n progressDialog.setProgress(6)\n await sleep(50)\n const bakeRing = createBakingRing(LG_PLANET_DATA.value, LG_BUFFER_RING)\n const bakeRingTex = bakeMesh(LG_SCENE_DATA.renderer!, bakeRing, w, h)\n if (appSettings?.bakingPixelize) bakeRingTex.magFilter = THREE.NearestFilter\n\n bakeRing.material = new THREE.MeshStandardMaterial({\n map: bakeRingTex,\n side: THREE.DoubleSide,\n transparent: true,\n })\n bakingTargets.push({ mesh: bakeRing, textures: [bakeRingTex] })\n bakePlanet.add(bakeRing)\n bakeRing.setRotationFromAxisAngle(Globals.AXIS_X, degToRad(LG_PLANET_DATA.value.ringAxialTilt))\n }\n\n // ---------------------------- Export meshes and clean up ---------------------------\n progressDialog.setProgress(7)\n await sleep(50)\n\n bakePlanet.scale.setScalar(LG_PLANET_DATA.value.planetRadius)\n bakePlanet.setRotationFromAxisAngle(Globals.AXIS_X, degToRad(LG_PLANET_DATA.value.planetAxialTilt))\n bakePlanet.rotateOnAxis(bakePlanet.up, degToRad(LG_PLANET_DATA.value.planetRotation))\n\n bakePlanet.name = LG_PLANET_DATA.value.planetName\n exportMeshesToGLTF([bakePlanet], LG_PLANET_DATA.value.planetName.replaceAll(' ', '_') + `_${w}`)\n } catch (error) {\n console.error(error)\n progressDialog.setError(error)\n } finally {\n bakingTargets.forEach((bt) => {\n bt.textures.forEach((tex) => tex.dispose())\n ;(bt.mesh.material as THREE.MeshStandardMaterial)?.dispose()\n bt.mesh.geometry?.dispose()\n })\n progressDialog.setProgress(8)\n await sleep(50)\n }\n}\n\n// ------------------------------------------------------------------------------------------------ //\n// ACCESSORS //\n// ------------------------------------------------------------------------------------------------ //\n\nexport function isPlanetEdited() {\n return hasPlanetBeenEdited.value\n}\nexport function setPlanetEditFlag(value: boolean) {\n hasPlanetBeenEdited.value = value\n}\nexport function setEditorRendering(value: boolean) {\n enableEditorRendering = value\n}\n","import { LG_BUFFER_BIOME, LG_BUFFER_RING, LG_BUFFER_SURFACE } from '@/core/services/planet-editor.service'\nimport { saveAs } from 'file-saver'\n\n/**\n * Static debugging class, only normally used for development purposes\n */\nexport class DebugUtils {\n /**\n * Downloads the current surface data in RAW format (32 BPP format)\n */\n static getRawRingData() {\n saveAs(new Blob([LG_BUFFER_RING]), 'ring-map.raw')\n }\n\n /**\n * Downloads the current surface data in RAW format (32 BPP format)\n */\n static getRawSurfaceData() {\n saveAs(new Blob([LG_BUFFER_SURFACE]), 'surface-map.raw')\n }\n\n /**\n * Downloads the current biome data in RAW format (32 BPP format)\n */\n static getRawBiomeData() {\n saveAs(new Blob([LG_BUFFER_BIOME]), 'biome-map.raw')\n }\n}\n","\n \n \n \n \n \n\n \n \n\n\n\n\n\n","\n \n ParameterName\n \n \n \n\n\n\n\n\n","\n \n ParameterName\n \n \n \n \n \n \n \n \n \n \n Hue\n \n \n\n\n\n\n\n","\n \n \n \n \n \n \n \n {{ getPartialId() }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ $t('editor.controls.biomes.biome_type') }}:\n \n \n {{ getBiomeTemperatureType() }},\n \n \n \n {{ getBiomeHumidityType() }}\n \n \n \n \n {{ $t('editor.controls.biomes.temperature_min') }}\n \n \n {{ $t('editor.controls.biomes.temperature_max') }}\n \n \n \n {{ $t('editor.controls.biomes.humidity_min') }}\n \n \n {{ $t('editor.controls.biomes.humidity_max') }}\n \n \n \n {{ $t('editor.controls.biomes.smoothness') }}\n \n \n {{ $t('editor.general.noise_color') }}\n \n \n \n\n\n\n","\n \n \n {{ $t('editor.controls.biomes.biomes_show') }}\n \n \n \n {{ $t('editor.controls.biomes.temperature') }}\n \n \n {{ $t('editor.controls.biomes.gradient_mode') }}: \n \n \n {{ $t('editor.controls.biomes.gradient_mode_realistic') }}\n \n \n {{ $t('editor.controls.biomes.gradient_mode_poletopole') }}\n \n \n {{ $t('editor.controls.biomes.gradient_mode_fullnoise') }}\n \n \n \n \n {{ $t('editor.general.noise_fbm_frequency') }}\n \n \n {{ $t('editor.general.noise_fbm_amplitude') }}\n \n \n {{ $t('editor.general.noise_fbm_lacunarity') }}\n \n \n {{ $t('editor.general.noise_fbm_octaves') }}\n \n \n \n \n {{ $t('editor.controls.biomes.humidity') }}\n \n \n {{ $t('editor.controls.biomes.gradient_mode') }}: \n \n \n {{ $t('editor.controls.biomes.gradient_mode_realistic') }}\n \n \n {{ $t('editor.controls.biomes.gradient_mode_poletopole') }}\n \n \n {{ $t('editor.controls.biomes.gradient_mode_fullnoise') }}\n \n \n \n \n {{ $t('editor.general.noise_fbm_frequency') }}\n \n \n {{ $t('editor.general.noise_fbm_amplitude') }}\n \n \n {{ $t('editor.general.noise_fbm_lacunarity') }}\n \n \n {{ $t('editor.general.noise_fbm_octaves') }}\n \n \n \n \n {{ $t('editor.controls.biomes.biome_list') }}\n \n \n \n \n \n \n \n {{ $t('editor.$action_add') }}\n \n \n \n \n \n\n\n\n","\n \n \n \n {{ $t('dialog.reset.$title') }}\n \n \n \n {{ $t('dialog.reset.message') }}\n \n {{ $t('dialog.reset.warning') }}\n \n \n \n \n \n \n {{ $t('dialog.reset.$action_cancel') }}\n \n \n \n {{ $t('dialog.reset.$action_confirm') }}\n \n \n \n\n\n\n\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = ['top', 'left'].includes(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n return [':popover-open', ':modal'].some(selector => {\n try {\n return element.matches(selector);\n } catch (e) {\n return false;\n }\n });\n}\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return ['transform', 'translate', 'scale', 'rotate', 'perspective'].some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, detectOverflow as detectOverflow$1, offset as offset$1, autoPlacement as autoPlacement$1, shift as shift$1, flip as flip$1, size as size$1, hide as hide$1, arrow as arrow$1, inline as inline$1, limitShift as limitShift$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll, ignoreScrollbarX) {\n if (ignoreScrollbarX === void 0) {\n ignoreScrollbarX = false;\n }\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 :\n // RTL scrollbar.\n getWindowScrollBarX(documentElement, htmlRect));\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll, true) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n // If the scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the element as the offsetParent if it's non-static,\n // while Chrome and Safari return the element. The element must\n // be used to perform the correct calculations even if the element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle s\n root: root.ownerDocument\n });\n } catch (e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n resizeObserver.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/dom';\nimport { isNode, getNodeName } from '@floating-ui/utils/dom';\nimport { unref, computed, ref, shallowRef, watch, getCurrentScope, onScopeDispose, shallowReadonly } from 'vue-demi';\n\nfunction isComponentPublicInstance(target) {\n return target != null && typeof target === 'object' && '$el' in target;\n}\nfunction unwrapElement(target) {\n if (isComponentPublicInstance(target)) {\n const element = target.$el;\n return isNode(element) && getNodeName(element) === '#comment' ? null : element;\n }\n return target;\n}\n\nfunction toValue(source) {\n return typeof source === 'function' ? source() : unref(source);\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered to the reference element.\n * @param options The arrow options.\n * @see https://floating-ui.com/docs/arrow\n */\nfunction arrow(options) {\n return {\n name: 'arrow',\n options,\n fn(args) {\n const element = unwrapElement(toValue(options.element));\n if (element == null) {\n return {};\n }\n return arrow$1({\n element,\n padding: options.padding\n }).fn(args);\n }\n };\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element next to a reference element when it is given a certain CSS positioning strategy.\n * @param reference The reference template ref.\n * @param floating The floating template ref.\n * @param options The floating options.\n * @see https://floating-ui.com/docs/vue\n */\nfunction useFloating(reference, floating, options) {\n if (options === void 0) {\n options = {};\n }\n const whileElementsMountedOption = options.whileElementsMounted;\n const openOption = computed(() => {\n var _toValue;\n return (_toValue = toValue(options.open)) != null ? _toValue : true;\n });\n const middlewareOption = computed(() => toValue(options.middleware));\n const placementOption = computed(() => {\n var _toValue2;\n return (_toValue2 = toValue(options.placement)) != null ? _toValue2 : 'bottom';\n });\n const strategyOption = computed(() => {\n var _toValue3;\n return (_toValue3 = toValue(options.strategy)) != null ? _toValue3 : 'absolute';\n });\n const transformOption = computed(() => {\n var _toValue4;\n return (_toValue4 = toValue(options.transform)) != null ? _toValue4 : true;\n });\n const referenceElement = computed(() => unwrapElement(reference.value));\n const floatingElement = computed(() => unwrapElement(floating.value));\n const x = ref(0);\n const y = ref(0);\n const strategy = ref(strategyOption.value);\n const placement = ref(placementOption.value);\n const middlewareData = shallowRef({});\n const isPositioned = ref(false);\n const floatingStyles = computed(() => {\n const initialStyles = {\n position: strategy.value,\n left: '0',\n top: '0'\n };\n if (!floatingElement.value) {\n return initialStyles;\n }\n const xVal = roundByDPR(floatingElement.value, x.value);\n const yVal = roundByDPR(floatingElement.value, y.value);\n if (transformOption.value) {\n return {\n ...initialStyles,\n transform: \"translate(\" + xVal + \"px, \" + yVal + \"px)\",\n ...(getDPR(floatingElement.value) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy.value,\n left: xVal + \"px\",\n top: yVal + \"px\"\n };\n });\n let whileElementsMountedCleanup;\n function update() {\n if (referenceElement.value == null || floatingElement.value == null) {\n return;\n }\n const open = openOption.value;\n computePosition(referenceElement.value, floatingElement.value, {\n middleware: middlewareOption.value,\n placement: placementOption.value,\n strategy: strategyOption.value\n }).then(position => {\n x.value = position.x;\n y.value = position.y;\n strategy.value = position.strategy;\n placement.value = position.placement;\n middlewareData.value = position.middlewareData;\n /**\n * The floating element's position may be recomputed while it's closed\n * but still mounted (such as when transitioning out). To ensure\n * `isPositioned` will be `false` initially on the next open, avoid\n * setting it to `true` when `open === false` (must be specified).\n */\n isPositioned.value = open !== false;\n });\n }\n function cleanup() {\n if (typeof whileElementsMountedCleanup === 'function') {\n whileElementsMountedCleanup();\n whileElementsMountedCleanup = undefined;\n }\n }\n function attach() {\n cleanup();\n if (whileElementsMountedOption === undefined) {\n update();\n return;\n }\n if (referenceElement.value != null && floatingElement.value != null) {\n whileElementsMountedCleanup = whileElementsMountedOption(referenceElement.value, floatingElement.value, update);\n return;\n }\n }\n function reset() {\n if (!openOption.value) {\n isPositioned.value = false;\n }\n }\n watch([middlewareOption, placementOption, strategyOption, openOption], update, {\n flush: 'sync'\n });\n watch([referenceElement, floatingElement], attach, {\n flush: 'sync'\n });\n watch(openOption, reset, {\n flush: 'sync'\n });\n if (getCurrentScope()) {\n onScopeDispose(cleanup);\n }\n return {\n x: shallowReadonly(x),\n y: shallowReadonly(y),\n strategy: shallowReadonly(strategy),\n placement: shallowReadonly(placement),\n middlewareData: shallowReadonly(middlewareData),\n isPositioned: shallowReadonly(isPositioned),\n floatingStyles,\n update\n };\n}\n\nexport { arrow, useFloating };\n","\n \n \n \n {{ LG_PLANET_DATA.planetName }}\n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n Seed\n \n \n \n \n \n {{ $t('editor.$action_reseed') }}\n \n \n \n {{ $t('editor.$action_random') }}\n \n \n \n\n \n \n \n \n \n \n \n {{ $t('tooltip.topbar_save') }}\n \n \n \n {{ $t('tooltip.topbar_copy') }}\n \n \n \n {{ $t('tooltip.topbar_gltf') }}\n \n \n \n\n \n \n\n\n\n\n\n","class WebGL {\n\n\tstatic isWebGL2Available() {\n\n\t\ttry {\n\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\treturn !! ( window.WebGL2RenderingContext && canvas.getContext( 'webgl2' ) );\n\n\t\t} catch ( e ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tstatic isColorSpaceAvailable( colorSpace ) {\n\n\t\ttry {\n\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\tconst ctx = window.WebGL2RenderingContext && canvas.getContext( 'webgl2' );\n\t\t\tctx.drawingBufferColorSpace = colorSpace;\n\t\t\treturn ctx.drawingBufferColorSpace === colorSpace; // deepscan-disable-line SAME_OPERAND_VALUE\n\n\t\t} catch ( e ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tstatic getWebGL2ErrorMessage() {\n\n\t\treturn this.getErrorMessage( 2 );\n\n\t}\n\n\tstatic getErrorMessage( version ) {\n\n\t\tconst names = {\n\t\t\t1: 'WebGL',\n\t\t\t2: 'WebGL 2'\n\t\t};\n\n\t\tconst contexts = {\n\t\t\t1: window.WebGLRenderingContext,\n\t\t\t2: window.WebGL2RenderingContext\n\t\t};\n\n\t\tlet message = 'Your $0 does not seem to support $1';\n\n\t\tconst element = document.createElement( 'div' );\n\t\telement.id = 'webglmessage';\n\t\telement.style.fontFamily = 'monospace';\n\t\telement.style.fontSize = '13px';\n\t\telement.style.fontWeight = 'normal';\n\t\telement.style.textAlign = 'center';\n\t\telement.style.background = '#fff';\n\t\telement.style.color = '#000';\n\t\telement.style.padding = '1.5em';\n\t\telement.style.width = '400px';\n\t\telement.style.margin = '5em auto 0';\n\n\t\tif ( contexts[ version ] ) {\n\n\t\t\tmessage = message.replace( '$0', 'graphics card' );\n\n\t\t} else {\n\n\t\t\tmessage = message.replace( '$0', 'browser' );\n\n\t\t}\n\n\t\tmessage = message.replace( '$1', names[ version ] );\n\n\t\telement.innerHTML = message;\n\n\t\treturn element;\n\n\t}\n\n\t// @deprecated, r168\n\n\tstatic isWebGLAvailable() {\n\n\t\tconsole.warn( 'isWebGLAvailable() has been deprecated and will be removed in r178. Use isWebGL2Available() instead.' );\n\n\t\ttry {\n\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\t\t\treturn !! ( window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ) );\n\n\t\t} catch ( e ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tstatic getWebGLErrorMessage() {\n\n\t\tconsole.warn( 'getWebGLErrorMessage() has been deprecated and will be removed in r178. Use getWebGL2ErrorMessage() instead.' );\n\n\t\treturn this.getErrorMessage( 1 );\n\n\t}\n\n}\n\nexport default WebGL;\n","\n \n \n \n {{ $t('dialog.webglerror.$title') }}\n \n \n \n {{ $t('dialog.webglerror.brief') }}\n \n \n \n \n \n\n\n\n","\n \n \n \n {{ $t('dialog.planeterror.$title') }}\n \n \n \n {{ $t('dialog.planeterror.brief') }}\n \n {{ $t('dialog.planeterror.reporting') }}\n \n \n \n {{ _error }}\n \n Stacktrace\n \n {{ line }}\n \n \n \n \n\n\n\n","\n \n \n \n {{ $t('dialog.warnsave.$title') }}\n \n \n \n {{ $t('dialog.warnsave.message') }}\n \n {{ $t('dialog.warnsave.warning') }}\n \n \n \n \n \n \n {{ $t('dialog.warnsave.$action_cancel') }}\n \n \n \n {{ $t('dialog.warnsave.$action_saveconfirm') }}\n \n \n \n {{ $t('dialog.warnsave.$action_confirm') }}\n \n \n \n\n\n\n\n","\n \n \n \n {{ $t('dialog.export_progress.$title') }}\n \n \n \n {{ $t('dialog.export_progress.step_' + _progressStep) }}\n {{ $t('dialog.export_progress.step_failed') }}\n {{ _progressStep }}/{{ bakingSteps }}\n \n \n \n \n \n {{ _progressError }}\n \n \n \n\n\n\n","\n \n \n \n \n \n\n \n \n\n \n \n \n \n\n\n\n\n\n","\n \n \n \n {{ $t('404.text_01') }}\n \n {{ $t('404.text_02') }}\n \n {{ $t('404.text_03') }}\n {{ $t('404.text_04') }}\n {{ $t('404.subtext') }}\n \n \n {{ $t('404.link') }}\n \n \n \n\n\n\n\n\n","import { createRouter, createWebHistory } from 'vue-router'\nimport CodexView from './views/CodexView.vue'\nimport PlanetEditorView from './views/PlanetEditorView.vue'\nimport PageNotFoundView from './views/PageNotFoundView.vue'\n\nconst router = createRouter({\n history: createWebHistory(),\n routes: [\n {\n path: '/',\n redirect: '/codex',\n },\n {\n path: '/codex',\n name: 'codex',\n component: CodexView,\n meta: { title: 'Codex' },\n },\n {\n path: '/planet-editor',\n redirect: '/planet-editor/new',\n },\n {\n path: '/planet-editor/:id',\n name: 'planet-editor',\n component: PlanetEditorView,\n meta: { title: 'Planet Editor' },\n },\n {\n path: '/:pathMatch(.*)*',\n name: 'page-not-found',\n component: PageNotFoundView,\n meta: { title: 'Page Not Found' },\n },\n ],\n})\n\nexport default router\n","\n \n \n \n \n GROUP_TITLE\n \n \n \n \n \n Nothing here yet, sorry :c\n \n \n \n\n\n\n\n\n","\n \n ParameterName\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ step.factor }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Hue\n \n \n \n \n \n \n \n \n \n \n {{ $t('editor.$action_add') }}\n \n \n \n \n {{ $t('editor.$action_sort') }}\n \n \n \n \n \n\n\n\n\n\n","import './assets/sass/index.scss'\nimport 'iconify-icon'\n\nimport { createApp } from 'vue'\nimport App from './App.vue'\nimport router from './router.config'\nimport OverlaySpinner from '@components/elements/OverlaySpinner.vue'\nimport ParameterGrid from './components/parameters/ParameterGrid.vue'\nimport ParameterGroup from '@components/parameters/ParameterGroup.vue'\nimport ParameterCategory from '@components/parameters/ParameterCategory.vue'\nimport ParameterSlider from '@components/parameters/ParameterSlider.vue'\nimport ParameterRadio from '@components/parameters/ParameterRadio.vue'\nimport ParameterRadioOption from '@components/parameters/ParameterRadioOption.vue'\nimport ParameterColorRamp from '@components/parameters/ParameterColorRamp.vue'\nimport ParameterColor from '@components/parameters/ParameterColor.vue'\nimport ParameterCheckbox from './components/parameters/ParameterCheckbox.vue'\nimport ParameterDivider from '@components/parameters/ParameterDivider.vue'\nimport { createHead } from '@unhead/vue'\nimport * as i18nConfig from './i18n.config'\n\ncreateApp(App)\n .use(router)\n .use(i18nConfig.i18n)\n .use(createHead())\n .component('ParameterSlider', ParameterSlider)\n .component('ParameterRadio', ParameterRadio)\n .component('ParameterRadioOption', ParameterRadioOption)\n .component('ParameterColor', ParameterColor)\n .component('ParameterColorRamp', ParameterColorRamp)\n .component('ParameterDivider', ParameterDivider)\n .component('ParameterCategory', ParameterCategory)\n .component('ParameterCheckbox', ParameterCheckbox)\n .component('ParameterGroup', ParameterGroup)\n .component('ParameterGrid', ParameterGrid)\n .component('OverlaySpinner', OverlaySpinner)\n .mount('#app')\n"],"names":["defaultIconDimensions","defaultIconTransformations","defaultIconProps","defaultExtendedIconProps","defaultIconSizeCustomisations","defaultIconCustomisations","rotateFromString","value","defaultValue","units","cleanup","value2","num","split","separator","flipFromString","custom","flip","str","defaultCustomisations","getCustomisations","node","customisations","attr","key","def","haveCustomisationsChanged","value1","matchIconName","stringToIcon","validate","allowSimpleName","provider","colonSeparated","name2","prefix","result","validateIconName","name","dashSeparated","icon","mergeIconTransformations","obj1","obj2","rotate","mergeIconData","parent","child","getIconsTree","data","names","icons","aliases","resolved","resolve","internalGetIconData","tree","currentProps","parse","parseIconSet","callback","item","optionalPropertyDefaults","checkOptionalProps","defaults","prop","quicklyValidateIconSet","obj","dataStorage","newStorage","getStorage","providerStorage","addIconSet","storage","addIconToStorage","listIcons$1","allIcons","provider2","prefix2","simpleNames","allowSimpleNames","allow","getIconData","iconName","addIcon$1","addCollection$1","added","iconLoaded$1","getIcon$1","sortIcons","a","b","lastIcon","localStorage","list","removeCallback","storages","id","items","row","updateCallbacks","hasPending","oldLength","idCounter","storeCallback","pendingSources","abort","setAPIModule","getAPIModule","listToIcons","defaultConfig","sendQuery","config","payload","query","done","resourcesCount","startIndex","resources","nextIndex","startTime","status","queriesSent","lastError","timer","queue","doneCallbacks","resetTimer","subscribe","overwrite","getQueryStatus","failQuery","clearQueue","moduleResponse","response","isError","queued","execNext","index","resource","status2","initRedundancy","cfg","queries","queryCallback","doneCallback","query2","error","find","createAPIConfig","source","configStorage","fallBackAPISources","fallBackAPI","addAPIProvider$1","customConfig","getAPIConfig","listAPIProviders","emptyCallback$1","redundancyCache","getRedundancyCache","redundancy","cachedReundancy","sendAPIQuery","target","send","api","cached","moduleKey","emptyCallback","loadedNewIcons","checkIconNamesForAPI","valid","invalid","parseLoaderResponse","checkMissing","pending","err","parsePossiblyAsyncResponse","loadNewIcons","icons2","customIconLoader","iconSet","loadIcons$1","cleanedIcons","sortedIcons","callCallback","newIcons","sources","lastProvider","lastPrefix","providerNewIcons","pendingQueue","loadIcon$1","fulfill","reject","iconObj","loaded","testIconObject","parseIconValue","onload","loading","isBuggedSafari","getRenderMode","body","mode","unitsSplit","unitsTest","calculateSize$1","size","ratio","precision","oldParts","newParts","code","isNumber","splitSVGDefs","content","tag","defs","start","end","endEnd","mergeDefsAndContent","wrapSVGContent","isUnsetKeyword","iconToSVG","fullIcon","fullCustomisations","box","props","transformations","hFlip","vFlip","rotation","tempValue","customisationsWidth","customisationsHeight","boxWidth","boxHeight","width","height","attributes","setAttr","viewBox","iconToHTML$1","renderAttribsHTML","encodeSVGforURL","svg","svgToData","svgToURL$1","detectFetch","fetchModule","setFetch","fetch2","getFetch","calculateMaxLength","maxHostLength","url","shouldAbort","prepare","results","maxLength","type","length","getPath","host","params","path","iconsList","urlParams","uri","defaultError","fetchAPIModule","setCustomIconsLoader$1","loader","setCustomIconLoader$1","nodeAttr","customStyle","appendCustomStyle","style","updateStyle","inline","styleNode","exportFunctions","_window","preload","providers","monotoneProps","coloredProps","propsToAdd","propsToAddTo","fixSize","renderSPAN","useMask","renderAttribs","html","svgStyle","styles","policy","createPolicy","s","cleanUpInnerHTML","renderSVG","findIconElement","renderIcon","state","iconData","renderData","oldNode","setPendingState","lastState","lastRender","defineIconifyIcon","customElements","ParentClass","ConflictingClass","IconifyIcon","__publicField","root","newInline","newIcon","newValue","attrMode","renderedMode","entries","intersecting","entry","functions","IconifyIconComponent","enableCache","disableCache","iconLoaded","iconExists","getIcon","listIcons","addIcon","addCollection","calculateSize","buildIcon","iconToHTML","svgToURL","loadIcons","loadIcon","setCustomIconLoader","setCustomIconsLoader","addAPIProvider","_api","_hoisted_1","_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","$route","useRoute","_EventBus","translationKey","millis","evt","listener","options","event","ref","EventBus","dialog","ignoresNativeEvents","handleCancel","close","handleClick","$props","__props","onMounted","_a","_b","onBeforeUnmount","open","ignoreNativeEvents","enabled","__expose","_expanded","_props","toggleExpand","version","dialogRef","e","t","module","this","n","_","r","i","o","f","global","x","k","c","m","l","u","h","d","p","y","v","O","P","g","w","K","E","S","j","A","C","T","q","D","I","B","R","F","M","N","L","U","V","z","W","Y","$","Q","G","X","H","J","Z","ee","te","ne","re","ie","oe","ae","ue","se","ce","le","be","he","Se","fe","de","pe","ye","ve","me","ge","we","_e","Oe","je","Pe","Ae","xe","Fe","Ue","Ke","ke","Qe","Ce","Ee","$e","Te","qe","We","Ye","Ve","Ne","De","Ie","Be","Re","Me","Le","Xe","ze","Ge","He","Je","Ze","et","tt","nt","rt","it","ot","at","ut","st","ct","lt","ft","ht","dt","pt","yt","vt","mt","bt","gt","wt","_t","xt","kt","Ot","Pt","Kt","Et","St","jt","Dt","At","qt","Ct","Tt","It","Bt","Rt","Ft","Mt","Nt","Lt","Ut","Vt","zt","Wt","Yt","$t","Qt","Gt","Xt","Ht","Jt","Zt","en","tn","nn","rn","hn","ln","fn","an","un","cn","sn","on","dn","pn","yn","er","vn","mn","bn","gn","wn","On","_n","xn","kn","Pn","Kn","En","Sn","jn","An","Cn","Tn","qn","Dn","In","Bn","Rn","Fn","Mn","Nn","Ln","Un","Vn","zn","Wn","Yn","$n","Qn","Gn","Xn","Hn","Jn","Zn","tr","nr","rr","ir","or","ar","ur","cr","sr","lr","DexieSymbol","Dexie","_Dexie","liveQuery","mergeRanges","rangesOverlap","RangeSet","cmp","Entity","PropModification","replacePrefix","add","remove","KeyBindingAction","idb","_renderSlot","lgParam","_useModel","_Fragment","_createElementVNode","_hoisted_2","htmlRadio","select","$emit","__emit","XS_WIDTH_THRESHOLD","SM_WIDTH_THRESHOLD","MD_WIDTH_THRESHOLD","LOCALE_MAP","A11Y_ANIMATE","LG_NAME_PLANET","LG_NAME_CLOUDS","LG_NAME_ATMOSPHERE","LG_NAME_RING","LG_NAME_SUN","LG_NAME_AMBLIGHT","AXIS_X","Vector3","AXIS_Y","SUN_INIT_POS","ATMOSPHERE_HEIGHT_DIVIDER","TEXTURE_SIZES","MUL_INT8_TO_UNIT","sleep","delay","toRawRGBA","color","mapLocale","locale","getPlanetMetaTitle","planetName","i18n","prefersReducedMotion","tryGetKeyRepresentation","cancelAndClose","confirmAndClose","I18N_SUPPORTED_LANGS","createI18n","enUS","enUwU","frFR","deDE","initDefaultSettings","addDefaultKeyBindings","injectMissingSettings","settings","clearData","initStoragePersistence","tryPersistWithoutPromptingUser","persisted","permission","LuxonError","InvalidDateTimeError","reason","InvalidIntervalError","InvalidDurationError","ConflictingSpecificationError","InvalidUnitError","unit","InvalidArgumentError","ZoneIsAbstractError","DATE_SHORT","DATE_MED","DATE_MED_WITH_WEEKDAY","DATE_FULL","DATE_HUGE","TIME_SIMPLE","TIME_WITH_SECONDS","TIME_WITH_SHORT_OFFSET","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","Zone","ts","opts","format","otherZone","singleton","SystemZone","parseZoneInfo","formatOffset","dtfCache","makeDTF","zone","typeToPos","hackyOffset","dtf","date","formatted","parsed","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","partsOffset","filled","pos","isUndefined","ianaZoneCache","IANAZone","year","month","day","adOrBc","hour","minute","second","asUTC","objToLocalTS","asTS","over","intlLFCache","getCachedLF","locString","intlDTCache","getCachedDTF","intlNumCache","getCachedINF","inf","intlRelCache","getCachedRTF","base","cacheKeyOpts","sysLocaleCache","systemLocale","weekInfoCache","getCachedWeekInfo","parseLocaleString","localeStr","xIndex","uIndex","selectedStr","smaller","numberingSystem","calendar","intlConfigString","outputCalendar","mapMonths","ms","DateTime","mapWeekdays","listStuff","loc","englishFn","intlFn","supportsFastNumbers","PolyNumberFormatter","intl","forceSimple","padTo","floor","otherOpts","intlOpts","fixed","roundTo","padStart","PolyDateFormatter","gmtOffset","offsetZ","parts","part","offsetName","PolyRelFormatter","isEnglish","hasRelative","count","English.formatRelativeTime","fallbackWeekSettings","Locale","weekSettings","defaultToEN","specifiedLocale","Settings","localeR","numberingSystemR","outputCalendarR","weekSettingsR","validateWeekSettings","numbering","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","isActuallyEn","hasNoWeirdness","alts","English.months","formatStr","English.weekdays","English.meridiems","English.eras","field","df","matching","hasLocaleWeekInfo","other","FixedOffsetZone","offset","signedOffset","InvalidZone","zoneName","normalizeZone","input","defaultZone","isString","lowered","numberingSystems","numberingSystemsUTF16","hanidecChars","parseDigits","min","max","digitRegexCache","resetDigitRegexCache","digitRegex","append","ns","now","defaultLocale","defaultNumberingSystem","defaultOutputCalendar","twoDigitCutoffYear","throwOnInvalid","defaultWeekSettings","cutoffYear","Invalid","explanation","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","js","computeOrdinal","isLeapYear","uncomputeOrdinal","ordinal","table","month0","isoWeekdayToLocal","isoWeekday","startOfWeek","gregorianToWeek","gregObj","minDaysInFirstWeek","weekday","weekNumber","weekYear","weeksInWeekYear","timeObject","weekToGregorian","weekData","weekdayOfJan4","yearInDays","daysInYear","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","usesLocalWeekValues","hasInvalidWeekData","validYear","isInteger","validWeek","integerBetween","validWeekday","hasInvalidOrdinalData","validOrdinal","hasInvalidGregorianData","validMonth","validDay","daysInMonth","hasInvalidTimeData","millisecond","validHour","validMinute","validSecond","validMillisecond","isDate","maybeArray","thing","bestBy","arr","by","compare","best","next","pair","pick","keys","hasOwnProperty","bottom","top","floorMod","isNeg","padded","parseInteger","string","parseFloating","parseMillis","fraction","number","digits","towardZero","factor","modMonth","modYear","firstWeekOffset","weekOffset","weekOffsetNext","untruncateYear","offsetFormat","timeZone","modified","offHourStr","offMinuteStr","offHour","offMin","offMinSigned","asNumber","numericValue","normalizeObject","normalizer","normalized","hours","minutes","sign","monthsLong","monthsShort","monthsNarrow","months","weekdaysLong","weekdaysShort","weekdaysNarrow","weekdays","meridiems","erasLong","erasShort","erasNarrow","eras","meridiemForDateTime","weekdayForDateTime","monthForDateTime","eraForDateTime","formatRelativeTime","numeric","narrow","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","stringifyTokens","splits","tokenToString","token","macroTokenToFormatOpts","Formats.DATE_SHORT","Formats.DATE_MED","Formats.DATE_FULL","Formats.DATE_HUGE","Formats.TIME_SIMPLE","Formats.TIME_WITH_SECONDS","Formats.TIME_WITH_SHORT_OFFSET","Formats.TIME_WITH_LONG_OFFSET","Formats.TIME_24_SIMPLE","Formats.TIME_24_WITH_SECONDS","Formats.TIME_24_WITH_SHORT_OFFSET","Formats.TIME_24_WITH_LONG_OFFSET","Formats.DATETIME_SHORT","Formats.DATETIME_MED","Formats.DATETIME_FULL","Formats.DATETIME_HUGE","Formats.DATETIME_SHORT_WITH_SECONDS","Formats.DATETIME_MED_WITH_SECONDS","Formats.DATETIME_FULL_WITH_SECONDS","Formats.DATETIME_HUGE_WITH_SECONDS","Formatter","fmt","current","currentFull","bracketed","formatOpts","interval","knownEnglish","useDateTimeFormatter","extract","meridiem","English.meridiemForDateTime","standalone","English.monthForDateTime","English.weekdayForDateTime","maybeMacro","era","English.eraForDateTime","dur","tokenToField","lildur","mapped","tokens","realTokens","found","literal","val","collapsed","ianaRegex","combineRegexes","regexes","full","combineExtractors","extractors","mergedVals","mergedZone","cursor","ex","patterns","regex","extractor","simpleParse","match","ret","offsetRegex","isoExtendedZone","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","isoYmdRegex","isoWeekRegex","isoOrdinalRegex","extractISOWeekData","extractISOOrdinalData","sqlYmdRegex","sqlTimeRegex","sqlTimeExtensionRegex","int","fallback","extractISOYmd","extractISOTime","extractISOOffset","local","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","force","obsOffsets","fromStrings","weekdayStr","English.monthsShort","English.weekdaysLong","English.weekdaysShort","rfc2822","extractRFC2822","obsOffset","milOffset","preprocessRFC2822","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","parseISODate","parseRFC2822Date","parseHTTPDate","parseISODuration","extractISOTimeOnly","parseISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","parseSQL","INVALID","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","clone","clear","conf","Duration","durationToMillis","matrix","vals","sum","normalizeValues","previous","previousVal","conv","rollUp","removeZeroes","newVals","accurate","durationLike","text","fmtOpts","duration","values","mixed","conversionAccuracy","built","accumulated","lastUnit","own","ak","negated","eq","v1","v2","validateStartEnd","Interval","builtStart","friendlyDateTime","builtEnd","validateError","startIsValid","endIsValid","dateTime","dateTimes","sorted","idx","numberOfParts","intervals","final","sofar","currentCount","ends","flattened","dateFormat","mapFn","Info","proto","locObj","dayDiff","earlier","later","utcDayStart","highOrderDiffs","differs","days","lowestOrder","highWater","differ","diff","remainingMillis","lowerOrderUnits","MISSING_FTP","intUnit","post","NBSP","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","strings","groups","simple","escapeToken","unitForToken","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","partTypeStyleToTokenVal","tokenForPart","resolvedOpts","isSpace","actualType","buildRegex","handlers","matches","all","matchIndex","dateTimeFromMatches","toField","specificOffset","dummyDateTimeCache","getDummyDateTime","maybeExpandMacroToken","formatOptsToTokens","expandMacroTokens","TokenParser","regexString","rawMatches","explainFromTokens","parseFromTokens","invalidReason","MAX_DATE","unsupportedZone","possiblyCachedWeekData","possiblyCachedLocalWeekData","inst","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","objToTS","adjustTime","oPre","millisToAdd","parseDataToDateTime","parsedZone","setZone","interpretationZone","toTechFormat","allowZ","toISODate","extended","longFormat","toISOTime","suppressSeconds","suppressMilliseconds","includeOffset","extendedZone","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","normalizeUnit","normalizeUnitWithLocalWeeks","guessOffsetForZone","zoneOffsetGuessCache","zoneOffsetTs","quickDT","offsetProvis","diffRelative","round","lastOpts","argList","args","zoneToUse","milliseconds","seconds","tsNow","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","higherOrderInvalid","gregorian","tsFinal","offsetFinal","localeToUse","localeOpts","tokenList","dayMs","minuteMs","oEarlier","oLater","o1","ts1","ts2","c1","c2","keepLocalTime","keepCalendarTime","newTS","offsetGuess","asObj","settingWeekStuff","useLocaleWeeks","normalizedUnit","ext","includePrefix","includeZone","includeOffsetSpace","otherDateTime","durOpts","otherIsLater","diffed","inputMs","adjustedToZone","padding","formatParser","Formats.DATE_MED_WITH_WEEKDAY","Formats.DATETIME_MED_WITH_WEEKDAY","dateTimeish","EXTRAS_HOLOGRAM_MODE","EXTRAS_SPECIAL_DAYS","EXTRAS_CAT_MODE","uwuifyPath","checkSpecialDay","getSpecialOverlay","useI18n","confirmDialogRef","catModeOverride","appSettings","persistStorage","selectedAction","keyBinds","failedToPersist","dataLoaded","loadData","watch","isDialogOpen","updateSettings","kbidx","toggleAction","kb","clearAllData","action","setSelectedActionKey","tryPersistStorage","alreadyAssignedActions","getKeyBind","specialDay","infoDialog","settingsDialog","shouldShowOnNextVisits","shouldEnableStoragePersistence","doClose","classObject","computed","toastType","toastMessageRaw","isToastShown","timeoutId","showToast","closeToast","useHead","dialogInit","keybinds","DexieUtils.initStoragePersistence","initDexie","DexieUtils.initDefaultSettings","DexieUtils.injectMissingSettings","DexieUtils.addDefaultKeyBindings","disableInitDialog","enablePersistence","cardRoot","router","useRouter","route","buttonOpen","sidebar","isOpen","handleKey","onUnmounted","planet","getMode","ChangeTracker","changedPropsRef","changePrefix","oldValue","urlAlphabet","nanoid","bytes","scopedUrlAlphabet","define","Alea","seed","mash","Mash","copy","impl","xg","prng","XorGen","strseed","bot","init","limit","__viteBrowserExternal","pool","math","chunks","rngname","startdenom","significance","overflow","mask","nodecrypto","seedrandom","shortseed","mixkey","flatten","tostring","autoseed","arc4","ARC4","is_math_call","keylen","depth","typ","stringseed","smear","out","browser","plugins","require$$0","alea","xor128","require$$1","xorwow","require$$2","xorshift7","require$$3","xor4096","require$$4","tychei","require$$5","require$$6","currentPRNGSeed","PRNG","PRNG_SEED","regenerateSeed","regeneratePRNGIfNecessary","clampedPRNG","isNumeric","avg","prev","cur","truncateTo","multPrecision","alphaBlendColors","mixRawRGBAChannel","mixRawRGBAAlpha","a1","a2","normalizeUInt8ArrayPixels","buffer","findRectOverlaps","rect","borderOverlaps","findMinDistanceToRect","overlaps","bufferToHex","view","hexCodes","create","algorithm","outputFormat","hash","sha1","_ColorRampStep","isBound","THREE.Color","alpha","step","ColorRampStep","_ColorRamp","steps","maxSize","lockedSize","clonedSteps","stepId","maxSteps","ColorRamp","ShaderFileType","ShaderFileType2","PlanetType","PlanetType2","ColorMode","ColorMode2","GradientMode","DEG2RAD","clamp","lerp","damp","lambda","degToRad","degrees","NoiseParameters","freq","amp","lac","oct","layers","warpScalar","BiomeParameters","dims","smoothness","Color","changedProps","minTemp","minHumi","DisplacementParameters","epsilon","multiplier","eps","mul","fac","PlanetData","defaultName","ptype","quality","radius","tilt","rot","ramp","rbp","nbp","planetData","readFileData","buf","rawData","pako","readFileV2","readFileV1","newIdb","fileInput","planets","planetInfoDialogRef","deleteTarget","deleteDialogRef","showCompactNavigation","showInlineFooter","computeResponsiveness","loadPlanets","onWindowClick","onWindowResize","idbPlanets","pl","openFileDialog","importPlanetFile","files","readPromises","reader","newPlanets","rejectedFiles","np","exportPlanets","idbZip","JSZip","json","deflated","planetFilename","generatedZip","saveAs","exportPlanet","jsonParams","gzipParams","openPlanetInfoDialog","openDeleteConfirmDialog","deleteTargetedPlanet","_changeEvent","_startEvent","_endEvent","_ray","Ray","_plane","Plane","_TILT_LIMIT","MathUtils","_v","_twoPI","_STATE","_EPS","OrbitControls","Controls","object","domElement","MOUSE","TOUCH","Quaternion","Spherical","Vector2","onPointerMove","onPointerDown","onPointerUp","onContextMenu","onMouseWheel","onKeyDown","onTouchStart","onTouchMove","onMouseDown","onMouseMove","interceptControlDown","interceptControlUp","deltaTime","position","zoomChanged","prevRadius","newRadius","radiusDelta","mouseBefore","prevZoom","mouseAfter","delta","normalizedDelta","angle","distance","objectMatrix","deltaX","deltaY","element","targetDistance","dollyScale","dx","dy","dist","needsUpdate","centerX","centerY","pointerId","newEvent","mouseAction","createRampTexture","fillRamp","DataTexture","recalculateRampTexture","stride","currentStep","nextStep","currentStepX","nextStepX","totalPixels","lerpColor","lerpAlpha","px","_writeToBuffer","createBiomeTexture","biomes","fillBiomes","recalculateBiomeTexture","lineStride","cellStride","biome","biomeRect","maxBiomeX","biomeAvgSmoothness","biomeOverlaps","pixelCoords","pixelRGBA","biomeRGBA","rectDistance","bufferIdx","blendedColor","biomePx","_writeToRawRGBA","rgba","TEXTURE_LOADER","THREE.TextureLoader","CUBE_TEXTURE_LOADER","THREE.CubeTextureLoader","loadCubeTexture","faces","filter","cubemap","THREE.NearestFilter","vertexShader","fragmentShader","LensFlareEffect","THREE.Vector3","THREE.Vector4","THREE.Raycaster","THREE.Mesh","THREE.PlaneGeometry","THREE.ShaderMaterial","THREE.Vector2","THREE.AdditiveBlending","intersects","iObject","iMaterial","THREE.MeshPhysicalMaterial","renderer","scene","camera","clock","projectedPosition","ring","lensPosition","atmosphere_frag","atmosphere_vert","clouds_frag$1","clouds_vert","cracks_frag","planet_frag$1","planet_vert","ring_frag$1","ring_vert","base_vert","bump_frag","clouds_frag","normal_frag","normal_vert","pbr_frag","planet_frag","ring_frag","atmosphere_utils_func","biomes_func","bump_func","color_utils_func","fbm_func","lwd_func","normal_func","voronoise_func","IMPORT_REGEXP","GLSL_CORE_FILES","__vite_glob_0_0","__vite_glob_0_1","__vite_glob_0_2","__vite_glob_0_3","__vite_glob_0_4","__vite_glob_0_5","__vite_glob_0_6","__vite_glob_0_7","__vite_glob_0_8","__vite_glob_0_9","__vite_glob_0_10","GLSL_BAKING_FILES","__vite_glob_1_0","__vite_glob_1_1","__vite_glob_1_2","__vite_glob_1_3","__vite_glob_1_4","__vite_glob_1_5","__vite_glob_1_6","__vite_glob_1_7","GLSL_FUNCTION_FILES","__vite_glob_2_0","__vite_glob_2_1","__vite_glob_2_2","__vite_glob_2_3","__vite_glob_2_4","__vite_glob_2_5","__vite_glob_2_6","__vite_glob_2_7","resolveImports","shader","fetch","filename","glslUris","glslRecords","correspondingFile","createScene","pixelRatio","THREE.Scene","createRendererComponent","createPerspectiveCameraComponent","THREE.Spherical","ambientLight","createAmbientLightComponent","Globals.LG_NAME_AMBLIGHT","createSun","sun","THREE.DirectionalLight","Globals.LG_NAME_SUN","createLensFlare","createPlanet","surfaceTexBuf","biomeTexBuf","geometry","createSphereGeometryComponent","surfaceTex","Globals.TEXTURE_SIZES","biomeTex","material","createCustomShaderMaterialComponent","ShaderLoader.fetch","THREE.MeshStandardMaterial","mesh","Globals.LG_NAME_PLANET","createClouds","textureBuffer","cloudHeight","Globals.ATMOSPHERE_HEIGHT_DIVIDER","opacityTex","Globals.LG_NAME_CLOUDS","createAtmosphere","sunPos","atmosHeight","atmosDensity","createShaderMaterialComponent","Globals.LG_NAME_ATMOSPHERE","createRing","rgbaTex","createRingGeometryComponent","THREE.DoubleSide","Globals.LG_NAME_RING","THREE.WebGLRenderer","THREE.PCFSoftShadowMap","THREE.SRGBColorSpace","fov","near","far","initialOrbit","THREE.PerspectiveCamera","createOrthgraphicCameraComponent","THREE.OrthographicCamera","intensity","light","THREE.AmbientLight","addtlRadius","THREE.SphereGeometry","innerRadius","outerRadius","THREE.RingGeometry","uniforms","baseMaterial","CustomShaderMaterial","ShaderLoader.resolveImports","createControlsComponent","canvas","controls","THREE.MOUSE","getMeshUniform","uname","patchMeshUniform","uvalue","mat","setMeshUniform","setMeshUniforms","unames","uvalues","bufferToTexture","ctx","imgData","tex","CanvasTexture","BAKE_PATCH_RGX","BAKE_CAMERA","ComponentBuilder.createOrthgraphicCameraComponent","BAKE_RENDER_TARGET","THREE.WebGLRenderTarget","createBakingPlanet","ComponentBuilder.createSphereGeometryComponent","ComponentBuilder.createCustomShaderMaterialComponent","THREE.MeshBasicMaterial","createBakingPBRMap","createBakingHeightMap","createBakingNormalMap","bumpTex","resolution","createBakingClouds","createBakingRing","ComponentBuilder.createRingGeometryComponent","bakeMesh","patchMaterialForUnwrapping","renderBuffer","origBeforeCompile","KHR_mesh_quantization_ExtraAttrTypes","GLTFExporter","writer","GLTFLightExtension","GLTFMaterialsUnlitExtension","GLTFMaterialsTransmissionExtension","GLTFMaterialsVolumeExtension","GLTFMaterialsIorExtension","GLTFMaterialsSpecularExtension","GLTFMaterialsClearcoatExtension","GLTFMaterialsDispersionExtension","GLTFMaterialsIridescenceExtension","GLTFMaterialsSheenExtension","GLTFMaterialsAnisotropyExtension","GLTFMaterialsEmissiveStrengthExtension","GLTFMaterialsBumpExtension","GLTFMeshGpuInstancing","utils","onDone","onError","GLTFWriter","il","scope","WEBGL_CONSTANTS","KHR_MESH_QUANTIZATION","THREE_TO_WEBGL","NearestFilter","NearestMipmapNearestFilter","NearestMipmapLinearFilter","LinearFilter","LinearMipmapNearestFilter","LinearMipmapLinearFilter","ClampToEdgeWrapping","RepeatWrapping","MirroredRepeatWrapping","PATH_PROPERTIES","DEFAULT_SPECULAR_COLOR","GLB_HEADER_BYTES","GLB_HEADER_MAGIC","GLB_VERSION","GLB_CHUNK_PREFIX_BYTES","GLB_CHUNK_TYPE_JSON","GLB_CHUNK_TYPE_BIN","equalArray","array1","array2","stringToArrayBuffer","isIdentityMatrix","getMinMax","attribute","output","getPaddedBufferSize","bufferSize","getPaddedArrayBuffer","arrayBuffer","paddingByte","paddedLength","array","getCanvas","getToBlobPromise","mimeType","REVISION","buffers","extensionsUsed","extensionsRequired","blob","extensionsUsedList","extensionsRequiredList","binaryChunk","binaryChunkPrefix","jsonChunk","jsonChunkPrefix","header","headerView","totalByteLength","glbBlob","glbReader","base64data","objectDef","extensionName","isRelativeCopy","uids","normal","cache","mapDef","texture","didTransform","transformDef","metalnessMap","roughnessMap","getEncodingConversion","map","SRGBColorSpace","CompressedTexture","metalness","roughness","context","composite","convert","Source","NoColorSpace","maxTextureSize","componentType","componentSize","byteStride","byteLength","dataView","bufferViewDef","types","minMax","bufferViewTarget","bufferView","accessorDef","image","flipY","cachedImages","imageDef","RGBAFormat","bufferViewIndex","dataURL","samplerDef","textureDef","materialDef","metalRoughTexture","metalRoughMapDef","baseColorMapDef","emissive","emissiveMapDef","normalMapDef","occlusionMapDef","DoubleSide","meshCacheKeyParts","meshCacheKey","meshDef","primitives","targets","nameConversion","originalNormal","modifiedAttribute","attributeName","BufferAttribute","accessor","weights","targetNames","reverseDictionary","warned","gltfAttributeName","baseAttribute","relativeAttribute","jl","isMultiMaterial","didForceIndices","indices","materials","primitive","cacheKey","attrType","attrNamePrefix","isOrtho","cameraDef","clip","nodeMap","tracks","channels","samplers","track","trackBinding","PropertyBinding","trackNode","trackProperty","inputItemSize","outputItemSize","interpolation","InterpolateDiscrete","skeleton","rootJoint","joints","inverseBindMatrices","temporaryBoneInverse","Matrix4","nodeDef","scale","meshIndex","children","nodeIndex","sceneDef","nodes","objects","Scene","objectsWithoutScene","func","lightDef","lights","extensionDef","clearcoatMapDef","clearcoatRoughnessMapDef","clearcoatNormalMapDef","iridescenceMapDef","iridescenceThicknessMapDef","transmissionMapDef","thicknessMapDef","specularIntensityMapDef","specularColorMapDef","sheenRoughnessMapDef","sheenColorMapDef","anisotropyMapDef","bumpMapDef","translationAttr","rotationAttr","scaleAttr","quaternion","time","valueSize","times","interpolant","mergedTracks","sourceTracks","sourceTrack","sourceTrackBinding","sourceTrackNode","InterpolateLinear","targetCount","targetIndex","mergedTrack","sourceInterpolant","keyframeIndex","srcAttribute","dstAttribute","GLTF_EXPORTER","exportMeshesToGLTF","meshes","UNIFORM_UPDATE_MAP","initUniformUpdateMap","scd","pld","texBufs","registerLightingDataUpdates","registerPlanetRenderingDataUpdates","registerSurfaceDataUpdates","registerBiomeDataUpdates","registerCloudDataUpdates","registerAtmosphereDataUpdates","registerRingDataUpdates","clearUniformUpdateMap","execUniformUpdate","sunLight","ambLight","lensFlare","newPos","Globals.SUN_INIT_POS","Globals.AXIS_X","planetGroup","atmosphere","clouds","vRad","cloudsRotationRad","surfaceDataTex","biomeDataTex","cloudsDataTex","planetRotation","ringDataTex","Stats","container","showPanel","addPanel","panel","beginTime","prevTime","frames","fpsPanel","msPanel","memPanel","memory","fg","bg","PR","WIDTH","HEIGHT","TEXT_X","TEXT_Y","GRAPH_X","GRAPH_Y","GRAPH_WIDTH","GRAPH_HEIGHT","maxValue","LG_SCENE_DATA","LG_PLANET_DATA","LG_BUFFER_SURFACE","LG_BUFFER_BIOME","LG_BUFFER_CLOUDS","LG_BUFFER_RING","hasPlanetBeenEdited","enableEditorRendering","watchForPlanetUpdates","bootstrapEditor","sceneRenderObjs","ComponentBuilder.createScene","THREE.Clock","initLighting","initPlanet","initRendering","ComponentBuilder.createControlsComponent","ComponentBuilder.createSun","ComponentBuilder.createLensFlare","ComponentBuilder.createPlanet","ComponentBuilder.createClouds","ComponentBuilder.createAtmosphere","ComponentBuilder.createRing","THREE.Group","ringAnchor","sceneRoot","stats","renderFrame","updateScene","updateCameraRendering","changedProp","ch","disposeScene","randomizePlanet","resetPlanet","exportPlanetScreenshot","exportPlanetPreview","previewRenderTarget","previewCamera","ComponentBuilder.createPerspectiveCameraComponent","Globals.AXIS_Y","renderGroup","rawBuffer","imageData","previewBuffer","exportPlanetToGLTF","progressDialog","bakingTargets","bakePlanet","bakePlanetSurfaceTex","bakePBR","bakePlanetPBRTex","bakeHeight","bakePlanetHeightTex","bakeNormal","bakePlanetNormalTex","bakeClouds","bakeCloudsTex","bakeRing","bakeRingTex","isPlanetEdited","setPlanetEditFlag","DebugUtils","vModel","set","ev","lgColor","pickerInitColor","pickerOpen","initPickerColor","setColor","hex","togglePanel","temperatureTypeTable","humidityTypeTable","getBiomeTemperatureType","minTypeIdx","maxTypeIdx","getBiomeHumidityType","getPartialId","moveBiome","addBiome","newBiome","deleteBiome","biomeIdx","createCoords","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","getAlignmentAxis","rectToClientRect","computeCoordsFromPlacement","_ref","rtl","reference","floating","sideAxis","alignmentAxis","alignLength","side","isVertical","commonX","commonY","commonAlign","coords","computePosition","strategy","middleware","platform","validMiddleware","rects","statefulPlacement","middlewareData","resetCount","nextX","nextY","reset","convertValueToCoords","elements","alignment","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","_middlewareData$arrow","diffCoords","hasWindow","getNodeName","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isHTMLElement","isShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","isTableElement","isTopLayer","selector","isContainingBlock","elementOrCss","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","offsetParent","clientRect","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","left","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","ignoreScrollbarX","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","offsets","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","getViewportRect","visualViewport","visualViewportBased","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cachedResult","el","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","boundary","rootBoundary","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","onMove","io","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","autoUpdate","update","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","mergedOptions","platformWithCache","computePosition$1","isComponentPublicInstance","toValue","unref","getDPR","roundByDPR","dpr","useFloating","whileElementsMountedOption","openOption","_toValue","middlewareOption","placementOption","_toValue2","strategyOption","_toValue3","transformOption","_toValue4","referenceElement","floatingElement","shallowRef","isPositioned","floatingStyles","initialStyles","xVal","yVal","whileElementsMountedCleanup","attach","getCurrentScope","onScopeDispose","shallowReadonly","editMode","planetNameInput","resetDialog","isRandomMenuOpen","randomMenuTrigger","randomMenu","randomFloating","isSaveMenuOpen","saveMenuTrigger","saveMenu","saveFloating","toggleRandomMenu","toggleSaveMenu","closeSaveMenuAndEmit","generateSeed","toggleEditMode","override","WebGL","colorSpace","contexts","message","errorContainerRef","openWithError","_error","_stack","stack","saveConfirmClose","bakingSteps","_progressStep","_progressError","setProgress","setError","head","webglErrorDialogRef","planetErrorDialogRef","warnSaveDialogRef","exportProgressDialogRef","loadedCorrectly","$planetEntityId","centerInfoControls","showCompactInfo","showCompactControls","showSpinner","initThree","onWindowKeydown","onBeforeRouteLeave","_to","_from","initData","initCanvas","saveAndRedirectToCodex","savePlanet","redirectToCodex","idbPlanetData","toRaw","patchMetaHead","effectiveWidth","effectiveHeight","Globals.XS_WIDTH_THRESHOLD","Globals.SM_WIDTH_THRESHOLD","Globals.MD_WIDTH_THRESHOLD","randPlanet","asCopy","previewDataString","localData","idbData","msgVariant","createRouter","createWebHistory","CodexView","PlanetEditorView","PageNotFoundView","_toggleParam","handleCheckboxClick","lgColorRamp","htmlAlphaRamp","htmlColorRamp","htmlColorSteps","htmlFactorInputs","panelOpen","pickerIdOpen","pickerIdInitColor","updateRamp","gradient","alphaGradient","rgb","togglePicker","alphaToGrayscale","sortSteps","addStep","updateStepFactor","htmlInput","updateStepColor","intAlpha","floatAlpha","removeStep","createApp","App","i18nConfig.i18n","createHead","ParameterSlider","ParameterRadio","ParameterRadioOption","ParameterColor","ParameterColorRamp","ParameterDivider","ParameterCategory","ParameterCheckbox","ParameterGroup","ParameterGrid","OverlaySpinner"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4GCAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","x_google_ignoreList":[0,10,11,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,63,64,65,66,67,68,69,70,72,73,75,76,79,86,121,124,133,134,135,136,137,139]}
{{ $t('dialog.about.description') }}
{{ $t('dialog.about.motivation') }}
{{ $t('dialog.about.tech') }}:
{{ $t('dialog.about.prefix_framework') }} Vue + Vite
{{ $t('dialog.about.prefix_engine') }} three.js
{{ $t('dialog.about.built_with_love') }}
\n © {{ new Date().getFullYear() }} EepyBerry,\n \n {{ $t('dialog.about.license') }}\n \n
\n ParameterName\n
\n \n \n \n
{{ $t('dialog.clear_data.message') }}
\n {{ $t('dialog.clear_data.warning') }}\n
{{ $t('dialog.settings.advanced_persist') }}:
\n {{ $t('dialog.init.introduction') }}\n
\n {{ $t('dialog.init.shortcuts_note') }}\n \n ()\n \n
{{ planet.data.planetName }}
{{ $t('dialog.planetinfo.biomes_none') }}
{{ $t('dialog.delete.message') }}
\n {{ $t('dialog.delete.warning') }}\n
{{ $t('dialog.reset.message') }}
\n {{ $t('dialog.reset.warning') }}\n
{{ LG_PLANET_DATA.planetName }}
{{ $t('tooltip.topbar_save') }}
{{ $t('tooltip.topbar_copy') }}
{{ $t('tooltip.topbar_gltf') }}
{{ $t('dialog.webglerror.brief') }}
{{ $t('dialog.planeterror.brief') }}
\n {{ $t('dialog.planeterror.reporting') }}\n
{{ _error }}
{{ line }}
{{ $t('dialog.warnsave.message') }}
\n {{ $t('dialog.warnsave.warning') }}\n
{{ $t('dialog.export_progress.step_' + _progressStep) }}
{{ $t('dialog.export_progress.step_failed') }}
{{ _progressStep }}/{{ bakingSteps }}
{{ _progressError }}
{{ $t('404.subtext') }}