diff --git a/.gitattributes b/.gitattributes
index a6344aac8c09253b3b630fb776ae94478aa0275b..b5dfa2d8557ade19415614d93c320743852deb83 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text
*tfevents* filter=lfs diff=lfs merge=lfs -text
+app/frontend/node_modules/@esbuild/linux-x64/bin/esbuild filter=lfs diff=lfs merge=lfs -text
+app/frontend/node_modules/esbuild/bin/esbuild filter=lfs diff=lfs merge=lfs -text
diff --git a/Empty Document b/Empty Document
new file mode 100644
index 0000000000000000000000000000000000000000..015c9268ba8ed2934676c5ff8f1b5b171cc6a2f2
--- /dev/null
+++ b/Empty Document
@@ -0,0 +1,45 @@
+import gradio as gr
+import insightface
+import onnxruntime
+from insightface.app import FaceAnalysis
+
+def face_swap(user_image, celebrity_image):
+
+ # Загрузка моделей
+ detector = insightface.model_zoo.get_model('retinaface_r50_v1')
+ arcface = insightface.model_zoo.get_model('arcface_r100_v1')
+
+ # Определение пути к модели замены лица
+ onnx_model_path = 'face_swap_model.onnx'
+
+ # Обнаружение лиц
+ user_bbox, user_landmarks = detector.detect(user_image)
+ celebrity_bbox, celebrity_landmarks = detector.detect(celebrity_image)
+
+ # Выравнивание лиц
+ user_aligned = FaceAnalysis.align(user_image, user_landmarks)
+ celebrity_aligned = FaceAnalysis.align(celebrity_image, celebrity_landmarks)
+
+ # Получение векторных представлений лиц
+ user_embedding = arcface.get_embedding(user_aligned)
+ celebrity_embedding = arcface.get_embedding(celebrity_aligned)
+
+ # Загрузка модели ONNX
+ session = onnxruntime.InferenceSession(onnx_model_path)
+
+ # Подготовка входных данных
+ input_name = session.get_inputs()[0].name
+ user_data = user_aligned.transpose(2, 0, 1)
+ celebrity_data = celebrity_aligned.transpose(2, 0, 1)
+ input_feed = {input_name: np.concatenate([user_data, celebrity_data], axis=0)}
+
+ # Замена лица
+ results = session.run(None, input_feed)
+ swapped_face = results[0].transpose(1, 2, 0)
+
+ return swapped_face
+
+
+iface = gr.Interface(fn=face_swap, inputs=["image", "image"], outputs="image")
+
+iface.launch()
diff --git a/README.md b/README.md
index 4ddd5e52ed01cb9b271b17fb2d0e47a9f0b2bd77..409f2d65be3361d8b2e36605f4c655ffa1a7dafc 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,6 @@
---
-title: Gradio App
-emoji: 🌖
-colorFrom: pink
-colorTo: pink
+title: gradio_app
+app_file: run.py
sdk: gradio
-sdk_version: 4.1.1
-app_file: app.py
-pinned: false
+sdk_version: 4.0.2
---
-
-Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..60188eefb61faf29c12a14228941da079044292f
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1,9 @@
+.eggs/
+dist/
+*.pyc
+__pycache__/
+*.py[cod]
+*$py.class
+__tmp/*
+*.pyi
+node_modules
\ No newline at end of file
diff --git a/app/Empty Document b/app/Empty Document
new file mode 100644
index 0000000000000000000000000000000000000000..98a02782e79950db064fc80722c2c7ba690e0973
--- /dev/null
+++ b/app/Empty Document
@@ -0,0 +1,6 @@
+ def face_swap(user_image, celebrity_image):
+
+ # Здесь должен быть ваш код для замены лица с использованием InsightFace и ONNX
+ return swapped_image
+
+
diff --git a/app/README.md b/app/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..d5a22704063b7f35654a046a5a0be6b88158e2bc
--- /dev/null
+++ b/app/README.md
@@ -0,0 +1,10 @@
+
+# gradio_app
+A Custom Gradio component.
+
+## Example usage
+
+```python
+import gradio as gr
+from gradio_app import app
+```
diff --git a/app/backend/gradio_app/__init__.py b/app/backend/gradio_app/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..c9d7cf822cd12bb1c960622206522e9db8f9f9a0
--- /dev/null
+++ b/app/backend/gradio_app/__init__.py
@@ -0,0 +1,4 @@
+
+from .app import app
+
+__all__ = ['app']
diff --git a/app/backend/gradio_app/app.py b/app/backend/gradio_app/app.py
new file mode 100644
index 0000000000000000000000000000000000000000..f60bc4c3de963c95baededbe4c5024fba85158a7
--- /dev/null
+++ b/app/backend/gradio_app/app.py
@@ -0,0 +1,15 @@
+from gradio.components.base import Component
+
+
+class app(Component):
+ def preprocess(self, payload):
+ return payload
+
+ def postprocess(self, value):
+ return value
+
+ def example_inputs(self):
+ return {"foo": "bar"}
+
+ def api_info(self):
+ return {"type": {}, "description": "any valid json"}
diff --git a/app/backend/gradio_app/app.pyi b/app/backend/gradio_app/app.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..6798ef05dea07769ae3ff067d93c1638bcf4b5d4
--- /dev/null
+++ b/app/backend/gradio_app/app.pyi
@@ -0,0 +1,16 @@
+from gradio.components.base import Component
+
+from gradio.events import Dependency
+
+class app(Component):
+ def preprocess(self, payload):
+ return payload
+
+ def postprocess(self, value):
+ return value
+
+ def example_inputs(self):
+ return {"foo": "bar"}
+
+ def api_info(self):
+ return {"type": {}, "description": "any valid json"}
\ No newline at end of file
diff --git a/app/demo/__init__.py b/app/demo/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/app/demo/app.py b/app/demo/app.py
new file mode 100644
index 0000000000000000000000000000000000000000..76e872fe75e902ee93ee574ad0e11f98a8e048a7
--- /dev/null
+++ b/app/demo/app.py
@@ -0,0 +1,11 @@
+
+import gradio as gr
+from gradio_app import app
+
+
+with gr.Blocks() as demo:
+ gr.Markdown("# Change the value (keep it JSON) and the front-end will update automatically.")
+ app(value={"message": "Hello from Gradio!"}, label="Static")
+
+
+demo.launch()
diff --git a/app/frontend/Example.svelte b/app/frontend/Example.svelte
new file mode 100644
index 0000000000000000000000000000000000000000..6b6a4a08c938f1b38a8a090480c8e3566e8747af
--- /dev/null
+++ b/app/frontend/Example.svelte
@@ -0,0 +1,19 @@
+
+
+
+ {value}
+
+
+
diff --git a/app/frontend/Index.svelte b/app/frontend/Index.svelte
new file mode 100644
index 0000000000000000000000000000000000000000..af756468c8f8ef1a511362ad9a49db9ebc9eaf32
--- /dev/null
+++ b/app/frontend/Index.svelte
@@ -0,0 +1,35 @@
+
+
+
+ {#if loading_status}
+
+ {/if}
+
+
+
diff --git a/app/frontend/node_modules/.bin/acorn b/app/frontend/node_modules/.bin/acorn
new file mode 100644
index 0000000000000000000000000000000000000000..f438cdf33a19b757814abfa28c930d4366713be9
--- /dev/null
+++ b/app/frontend/node_modules/.bin/acorn
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4c3eb6f1d8932790dbff043839f8ee7686bc614a59ef577e96fed618a4a4b1b8
+size 60
diff --git a/app/frontend/node_modules/.bin/esbuild b/app/frontend/node_modules/.bin/esbuild
new file mode 100644
index 0000000000000000000000000000000000000000..5c1a708e8a3bb98ea466f9679c5948272f65b240
--- /dev/null
+++ b/app/frontend/node_modules/.bin/esbuild
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f5e95cf71da076b05263e9109f9aa0bd8e7b55e8ac8f1c4bf32e6eab444fcfab
+size 9424896
diff --git a/app/frontend/node_modules/.bin/svelte-i18n b/app/frontend/node_modules/.bin/svelte-i18n
new file mode 100644
index 0000000000000000000000000000000000000000..ea3ac59a73fd80f8663aa7645ce8a8e7f065761b
--- /dev/null
+++ b/app/frontend/node_modules/.bin/svelte-i18n
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d53e121c392192a4f539fea8a6f0676bba78bae5a80aef425fe7b8d05435803d
+size 9211
diff --git a/app/frontend/node_modules/.package-lock.json b/app/frontend/node_modules/.package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..9f219dc8463c13562a6fe236f2b2f0e2123c33be
--- /dev/null
+++ b/app/frontend/node_modules/.package-lock.json
@@ -0,0 +1,600 @@
+{
+ "name": "gradio_app",
+ "version": "0.2.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "node_modules/@ampproject/remapping": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz",
+ "integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@formatjs/ecma402-abstract": {
+ "version": "1.11.4",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
+ "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+ "dependencies": {
+ "@formatjs/intl-localematcher": "0.2.25",
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/@formatjs/fast-memoize": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz",
+ "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/@formatjs/icu-messageformat-parser": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz",
+ "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.11.4",
+ "@formatjs/icu-skeleton-parser": "1.3.6",
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/@formatjs/icu-skeleton-parser": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz",
+ "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.11.4",
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/@formatjs/intl-localematcher": {
+ "version": "0.2.25",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz",
+ "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/@gradio/atoms": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@gradio/atoms/-/atoms-0.2.0.tgz",
+ "integrity": "sha512-7pTXJTZv+KECtTG9vqeq9j7vz5OKkp+TRvh+O4yMbtkvxFEbhYaaUngkWFX26btGiveD+V4RG4qrP17jqpSdGA==",
+ "dependencies": {
+ "@gradio/icons": "^0.2.0",
+ "@gradio/utils": "^0.2.0"
+ }
+ },
+ "node_modules/@gradio/column": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@gradio/column/-/column-0.1.0.tgz",
+ "integrity": "sha512-P24nqqVnMXBaDA1f/zSN5HZRho4PxP8Dq+7VltPHlmxIEiZYik2AJ4J0LeuIha34FDO0guu/16evdrpvGIUAfw=="
+ },
+ "node_modules/@gradio/icons": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@gradio/icons/-/icons-0.2.0.tgz",
+ "integrity": "sha512-rfCSmOF+ALqBOjTWL1ICasyA8JuO0MPwFrtlVMyAWp7R14AN8YChC/gbz5fZ0kNBiGGEYOOfqpKxyvC95jGGlg=="
+ },
+ "node_modules/@gradio/statustracker": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@gradio/statustracker/-/statustracker-0.3.0.tgz",
+ "integrity": "sha512-8F3ezqPoGpq7B0EFYGVJkiYOrXCJLMEBcjLTOk2NeM2tXUoOCTieSvJEOstLzM0KkHwY7FvVrc3Dn5iqfIq2lQ==",
+ "dependencies": {
+ "@gradio/atoms": "^0.2.0",
+ "@gradio/column": "^0.1.0",
+ "@gradio/icons": "^0.2.0",
+ "@gradio/utils": "^0.2.0"
+ }
+ },
+ "node_modules/@gradio/theme": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@gradio/theme/-/theme-0.2.0.tgz",
+ "integrity": "sha512-33c68Nk7oRXLn08OxPfjcPm7S4tXGOUV1I1bVgzdM2YV5o1QBOS1GEnXPZPu/CEYPePLMB6bsDwffrLEyLGWVQ=="
+ },
+ "node_modules/@gradio/utils": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@gradio/utils/-/utils-0.2.0.tgz",
+ "integrity": "sha512-YkwzXufi6IxQrlMW+1sFo8Yn6F9NLL69ZoBsbo7QEhms0v5L7pmOTw+dfd7M3dwbRP2lgjrb52i1kAIN3n6aqQ==",
+ "dependencies": {
+ "@gradio/theme": "^0.2.0",
+ "svelte-i18n": "^3.6.0"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "peer": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "peer": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "peer": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.4.tgz",
+ "integrity": "sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw==",
+ "peer": true
+ },
+ "node_modules/@zerodevx/svelte-json-view": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@zerodevx/svelte-json-view/-/svelte-json-view-1.0.7.tgz",
+ "integrity": "sha512-yW0MV+9BCKOwzt3h86y3xDqYdI5st+Rxk+L5pa0Utq7nlPD+VvxyhL7R1gJoLxQvWwjyAvY/fyUCFTdwDyI14w==",
+ "peerDependencies": {
+ "svelte": "^3.57.0 || ^4.0.0"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+ "peer": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "peer": true,
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
+ "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
+ "peer": true,
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/cli-color": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz",
+ "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==",
+ "dependencies": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.61",
+ "es6-iterator": "^2.0.3",
+ "memoizee": "^0.4.15",
+ "timers-ext": "^0.1.7"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/code-red": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz",
+ "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15",
+ "@types/estree": "^1.0.1",
+ "acorn": "^8.10.0",
+ "estree-walker": "^3.0.3",
+ "periscopic": "^3.1.0"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "peer": true,
+ "dependencies": {
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/d": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "dependencies": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/es5-ext": {
+ "version": "0.10.62",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
+ "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.3",
+ "next-tick": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/es6-symbol": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
+ "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+ "dependencies": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "node_modules/es6-weak-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
+ "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.46",
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.19.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz",
+ "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==",
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.19.5",
+ "@esbuild/android-arm64": "0.19.5",
+ "@esbuild/android-x64": "0.19.5",
+ "@esbuild/darwin-arm64": "0.19.5",
+ "@esbuild/darwin-x64": "0.19.5",
+ "@esbuild/freebsd-arm64": "0.19.5",
+ "@esbuild/freebsd-x64": "0.19.5",
+ "@esbuild/linux-arm": "0.19.5",
+ "@esbuild/linux-arm64": "0.19.5",
+ "@esbuild/linux-ia32": "0.19.5",
+ "@esbuild/linux-loong64": "0.19.5",
+ "@esbuild/linux-mips64el": "0.19.5",
+ "@esbuild/linux-ppc64": "0.19.5",
+ "@esbuild/linux-riscv64": "0.19.5",
+ "@esbuild/linux-s390x": "0.19.5",
+ "@esbuild/linux-x64": "0.19.5",
+ "@esbuild/netbsd-x64": "0.19.5",
+ "@esbuild/openbsd-x64": "0.19.5",
+ "@esbuild/sunos-x64": "0.19.5",
+ "@esbuild/win32-arm64": "0.19.5",
+ "@esbuild/win32-ia32": "0.19.5",
+ "@esbuild/win32-x64": "0.19.5"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "peer": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "node_modules/ext": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
+ "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
+ "dependencies": {
+ "type": "^2.7.2"
+ }
+ },
+ "node_modules/ext/node_modules/type": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
+ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
+ },
+ "node_modules/globalyzer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q=="
+ },
+ "node_modules/globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="
+ },
+ "node_modules/intl-messageformat": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz",
+ "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.11.4",
+ "@formatjs/fast-memoize": "1.2.1",
+ "@formatjs/icu-messageformat-parser": "2.1.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/is-promise": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
+ },
+ "node_modules/is-reference": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz",
+ "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
+ "peer": true,
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/locate-character": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
+ "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
+ "peer": true
+ },
+ "node_modules/lru-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
+ "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==",
+ "dependencies": {
+ "es5-ext": "~0.10.2"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
+ "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "peer": true
+ },
+ "node_modules/memoizee": {
+ "version": "0.4.15",
+ "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz",
+ "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==",
+ "dependencies": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.53",
+ "es6-weak-map": "^2.0.3",
+ "event-emitter": "^0.3.5",
+ "is-promise": "^2.2.2",
+ "lru-queue": "^0.1.0",
+ "next-tick": "^1.1.0",
+ "timers-ext": "^0.1.7"
+ }
+ },
+ "node_modules/mri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/next-tick": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
+ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
+ },
+ "node_modules/periscopic": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
+ "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
+ "peer": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^3.0.0",
+ "is-reference": "^3.0.0"
+ }
+ },
+ "node_modules/sade": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
+ "dependencies": {
+ "mri": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/svelte": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.2.tgz",
+ "integrity": "sha512-My2tytF2e2NnHSpn2M7/3VdXT4JdTglYVUuSuK/mXL2XtulPYbeBfl8Dm1QiaKRn0zoULRnL+EtfZHHP0k4H3A==",
+ "peer": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.15",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "acorn": "^8.9.0",
+ "aria-query": "^5.3.0",
+ "axobject-query": "^3.2.1",
+ "code-red": "^1.0.3",
+ "css-tree": "^2.3.1",
+ "estree-walker": "^3.0.3",
+ "is-reference": "^3.0.1",
+ "locate-character": "^3.0.0",
+ "magic-string": "^0.30.4",
+ "periscopic": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/svelte-i18n": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/svelte-i18n/-/svelte-i18n-3.7.4.tgz",
+ "integrity": "sha512-yGRCNo+eBT4cPuU7IVsYTYjxB7I2V8qgUZPlHnNctJj5IgbJgV78flsRzpjZ/8iUYZrS49oCt7uxlU3AZv/N5Q==",
+ "dependencies": {
+ "cli-color": "^2.0.3",
+ "deepmerge": "^4.2.2",
+ "esbuild": "^0.19.2",
+ "estree-walker": "^2",
+ "intl-messageformat": "^9.13.0",
+ "sade": "^1.8.1",
+ "tiny-glob": "^0.2.9"
+ },
+ "bin": {
+ "svelte-i18n": "dist/cli.js"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "peerDependencies": {
+ "svelte": "^3 || ^4"
+ }
+ },
+ "node_modules/svelte-i18n/node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ },
+ "node_modules/timers-ext": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
+ "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==",
+ "dependencies": {
+ "es5-ext": "~0.10.46",
+ "next-tick": "1"
+ }
+ },
+ "node_modules/tiny-glob": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
+ "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
+ "dependencies": {
+ "globalyzer": "0.1.0",
+ "globrex": "^0.1.2"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/type": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
+ }
+ }
+}
diff --git a/app/frontend/node_modules/@ampproject/remapping/LICENSE b/app/frontend/node_modules/@ampproject/remapping/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..d645695673349e3947e8e5ae42332d0ac3164cd7
--- /dev/null
+++ b/app/frontend/node_modules/@ampproject/remapping/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/app/frontend/node_modules/@ampproject/remapping/README.md b/app/frontend/node_modules/@ampproject/remapping/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1463c9f6289d6aec71987d5299b8806af4821fb4
--- /dev/null
+++ b/app/frontend/node_modules/@ampproject/remapping/README.md
@@ -0,0 +1,218 @@
+# @ampproject/remapping
+
+> Remap sequential sourcemaps through transformations to point at the original source code
+
+Remapping allows you to take the sourcemaps generated through transforming your code and "remap"
+them to the original source locations. Think "my minified code, transformed with babel and bundled
+with webpack", all pointing to the correct location in your original source code.
+
+With remapping, none of your source code transformations need to be aware of the input's sourcemap,
+they only need to generate an output sourcemap. This greatly simplifies building custom
+transformations (think a find-and-replace).
+
+## Installation
+
+```sh
+npm install @ampproject/remapping
+```
+
+## Usage
+
+```typescript
+function remapping(
+ map: SourceMap | SourceMap[],
+ loader: (file: string, ctx: LoaderContext) => (SourceMap | null | undefined),
+ options?: { excludeContent: boolean, decodedMappings: boolean }
+): SourceMap;
+
+// LoaderContext gives the loader the importing sourcemap, tree depth, the ability to override the
+// "source" location (where child sources are resolved relative to, or the location of original
+// source), and the ability to override the "content" of an original source for inclusion in the
+// output sourcemap.
+type LoaderContext = {
+ readonly importer: string;
+ readonly depth: number;
+ source: string;
+ content: string | null | undefined;
+}
+```
+
+`remapping` takes the final output sourcemap, and a `loader` function. For every source file pointer
+in the sourcemap, the `loader` will be called with the resolved path. If the path itself represents
+a transformed file (it has a sourcmap associated with it), then the `loader` should return that
+sourcemap. If not, the path will be treated as an original, untransformed source code.
+
+```js
+// Babel transformed "helloworld.js" into "transformed.js"
+const transformedMap = JSON.stringify({
+ file: 'transformed.js',
+ // 1st column of 2nd line of output file translates into the 1st source
+ // file, line 3, column 2
+ mappings: ';CAEE',
+ sources: ['helloworld.js'],
+ version: 3,
+});
+
+// Uglify minified "transformed.js" into "transformed.min.js"
+const minifiedTransformedMap = JSON.stringify({
+ file: 'transformed.min.js',
+ // 0th column of 1st line of output file translates into the 1st source
+ // file, line 2, column 1.
+ mappings: 'AACC',
+ names: [],
+ sources: ['transformed.js'],
+ version: 3,
+});
+
+const remapped = remapping(
+ minifiedTransformedMap,
+ (file, ctx) => {
+
+ // The "transformed.js" file is an transformed file.
+ if (file === 'transformed.js') {
+ // The root importer is empty.
+ console.assert(ctx.importer === '');
+ // The depth in the sourcemap tree we're currently loading.
+ // The root `minifiedTransformedMap` is depth 0, and its source children are depth 1, etc.
+ console.assert(ctx.depth === 1);
+
+ return transformedMap;
+ }
+
+ // Loader will be called to load transformedMap's source file pointers as well.
+ console.assert(file === 'helloworld.js');
+ // `transformed.js`'s sourcemap points into `helloworld.js`.
+ console.assert(ctx.importer === 'transformed.js');
+ // This is a source child of `transformed`, which is a source child of `minifiedTransformedMap`.
+ console.assert(ctx.depth === 2);
+ return null;
+ }
+);
+
+console.log(remapped);
+// {
+// file: 'transpiled.min.js',
+// mappings: 'AAEE',
+// sources: ['helloworld.js'],
+// version: 3,
+// };
+```
+
+In this example, `loader` will be called twice:
+
+1. `"transformed.js"`, the first source file pointer in the `minifiedTransformedMap`. We return the
+ associated sourcemap for it (its a transformed file, after all) so that sourcemap locations can
+ be traced through it into the source files it represents.
+2. `"helloworld.js"`, our original, unmodified source code. This file does not have a sourcemap, so
+ we return `null`.
+
+The `remapped` sourcemap now points from `transformed.min.js` into locations in `helloworld.js`. If
+you were to read the `mappings`, it says "0th column of the first line output line points to the 1st
+column of the 2nd line of the file `helloworld.js`".
+
+### Multiple transformations of a file
+
+As a convenience, if you have multiple single-source transformations of a file, you may pass an
+array of sourcemap files in the order of most-recent transformation sourcemap first. Note that this
+changes the `importer` and `depth` of each call to our loader. So our above example could have been
+written as:
+
+```js
+const remapped = remapping(
+ [minifiedTransformedMap, transformedMap],
+ () => null
+);
+
+console.log(remapped);
+// {
+// file: 'transpiled.min.js',
+// mappings: 'AAEE',
+// sources: ['helloworld.js'],
+// version: 3,
+// };
+```
+
+### Advanced control of the loading graph
+
+#### `source`
+
+The `source` property can overridden to any value to change the location of the current load. Eg,
+for an original source file, it allows us to change the location to the original source regardless
+of what the sourcemap source entry says. And for transformed files, it allows us to change the
+relative resolving location for child sources of the loaded sourcemap.
+
+```js
+const remapped = remapping(
+ minifiedTransformedMap,
+ (file, ctx) => {
+
+ if (file === 'transformed.js') {
+ // We pretend the transformed.js file actually exists in the 'src/' directory. When the nested
+ // source files are loaded, they will now be relative to `src/`.
+ ctx.source = 'src/transformed.js';
+ return transformedMap;
+ }
+
+ console.assert(file === 'src/helloworld.js');
+ // We could futher change the source of this original file, eg, to be inside a nested directory
+ // itself. This will be reflected in the remapped sourcemap.
+ ctx.source = 'src/nested/transformed.js';
+ return null;
+ }
+);
+
+console.log(remapped);
+// {
+// …,
+// sources: ['src/nested/helloworld.js'],
+// };
+```
+
+
+#### `content`
+
+The `content` property can be overridden when we encounter an original source file. Eg, this allows
+you to manually provide the source content of the original file regardless of whether the
+`sourcesContent` field is present in the parent sourcemap. It can also be set to `null` to remove
+the source content.
+
+```js
+const remapped = remapping(
+ minifiedTransformedMap,
+ (file, ctx) => {
+
+ if (file === 'transformed.js') {
+ // transformedMap does not include a `sourcesContent` field, so usually the remapped sourcemap
+ // would not include any `sourcesContent` values.
+ return transformedMap;
+ }
+
+ console.assert(file === 'helloworld.js');
+ // We can read the file to provide the source content.
+ ctx.content = fs.readFileSync(file, 'utf8');
+ return null;
+ }
+);
+
+console.log(remapped);
+// {
+// …,
+// sourcesContent: [
+// 'console.log("Hello world!")',
+// ],
+// };
+```
+
+### Options
+
+#### excludeContent
+
+By default, `excludeContent` is `false`. Passing `{ excludeContent: true }` will exclude the
+`sourcesContent` field from the returned sourcemap. This is mainly useful when you want to reduce
+the size out the sourcemap.
+
+#### decodedMappings
+
+By default, `decodedMappings` is `false`. Passing `{ decodedMappings: true }` will leave the
+`mappings` field in a [decoded state](https://github.com/rich-harris/sourcemap-codec) instead of
+encoding into a VLQ string.
diff --git a/app/frontend/node_modules/@ampproject/remapping/dist/remapping.mjs b/app/frontend/node_modules/@ampproject/remapping/dist/remapping.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..b5eddeda5a7802790e6da5fe8c3f890ee94431dc
--- /dev/null
+++ b/app/frontend/node_modules/@ampproject/remapping/dist/remapping.mjs
@@ -0,0 +1,191 @@
+import { decodedMappings, traceSegment, TraceMap } from '@jridgewell/trace-mapping';
+import { GenMapping, maybeAddSegment, setSourceContent, toDecodedMap, toEncodedMap } from '@jridgewell/gen-mapping';
+
+const SOURCELESS_MAPPING = /* #__PURE__ */ SegmentObject('', -1, -1, '', null);
+const EMPTY_SOURCES = [];
+function SegmentObject(source, line, column, name, content) {
+ return { source, line, column, name, content };
+}
+function Source(map, sources, source, content) {
+ return {
+ map,
+ sources,
+ source,
+ content,
+ };
+}
+/**
+ * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes
+ * (which may themselves be SourceMapTrees).
+ */
+function MapSource(map, sources) {
+ return Source(map, sources, '', null);
+}
+/**
+ * A "leaf" node in the sourcemap tree, representing an original, unmodified source file. Recursive
+ * segment tracing ends at the `OriginalSource`.
+ */
+function OriginalSource(source, content) {
+ return Source(null, EMPTY_SOURCES, source, content);
+}
+/**
+ * traceMappings is only called on the root level SourceMapTree, and begins the process of
+ * resolving each mapping in terms of the original source files.
+ */
+function traceMappings(tree) {
+ // TODO: Eventually support sourceRoot, which has to be removed because the sources are already
+ // fully resolved. We'll need to make sources relative to the sourceRoot before adding them.
+ const gen = new GenMapping({ file: tree.map.file });
+ const { sources: rootSources, map } = tree;
+ const rootNames = map.names;
+ const rootMappings = decodedMappings(map);
+ for (let i = 0; i < rootMappings.length; i++) {
+ const segments = rootMappings[i];
+ for (let j = 0; j < segments.length; j++) {
+ const segment = segments[j];
+ const genCol = segment[0];
+ let traced = SOURCELESS_MAPPING;
+ // 1-length segments only move the current generated column, there's no source information
+ // to gather from it.
+ if (segment.length !== 1) {
+ const source = rootSources[segment[1]];
+ traced = originalPositionFor(source, segment[2], segment[3], segment.length === 5 ? rootNames[segment[4]] : '');
+ // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a
+ // respective segment into an original source.
+ if (traced == null)
+ continue;
+ }
+ const { column, line, name, content, source } = traced;
+ maybeAddSegment(gen, i, genCol, source, line, column, name);
+ if (source && content != null)
+ setSourceContent(gen, source, content);
+ }
+ }
+ return gen;
+}
+/**
+ * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own
+ * child SourceMapTrees, until we find the original source map.
+ */
+function originalPositionFor(source, line, column, name) {
+ if (!source.map) {
+ return SegmentObject(source.source, line, column, name, source.content);
+ }
+ const segment = traceSegment(source.map, line, column);
+ // If we couldn't find a segment, then this doesn't exist in the sourcemap.
+ if (segment == null)
+ return null;
+ // 1-length segments only move the current generated column, there's no source information
+ // to gather from it.
+ if (segment.length === 1)
+ return SOURCELESS_MAPPING;
+ return originalPositionFor(source.sources[segment[1]], segment[2], segment[3], segment.length === 5 ? source.map.names[segment[4]] : name);
+}
+
+function asArray(value) {
+ if (Array.isArray(value))
+ return value;
+ return [value];
+}
+/**
+ * Recursively builds a tree structure out of sourcemap files, with each node
+ * being either an `OriginalSource` "leaf" or a `SourceMapTree` composed of
+ * `OriginalSource`s and `SourceMapTree`s.
+ *
+ * Every sourcemap is composed of a collection of source files and mappings
+ * into locations of those source files. When we generate a `SourceMapTree` for
+ * the sourcemap, we attempt to load each source file's own sourcemap. If it
+ * does not have an associated sourcemap, it is considered an original,
+ * unmodified source file.
+ */
+function buildSourceMapTree(input, loader) {
+ const maps = asArray(input).map((m) => new TraceMap(m, ''));
+ const map = maps.pop();
+ for (let i = 0; i < maps.length; i++) {
+ if (maps[i].sources.length > 1) {
+ throw new Error(`Transformation map ${i} must have exactly one source file.\n` +
+ 'Did you specify these with the most recent transformation maps first?');
+ }
+ }
+ let tree = build(map, loader, '', 0);
+ for (let i = maps.length - 1; i >= 0; i--) {
+ tree = MapSource(maps[i], [tree]);
+ }
+ return tree;
+}
+function build(map, loader, importer, importerDepth) {
+ const { resolvedSources, sourcesContent } = map;
+ const depth = importerDepth + 1;
+ const children = resolvedSources.map((sourceFile, i) => {
+ // The loading context gives the loader more information about why this file is being loaded
+ // (eg, from which importer). It also allows the loader to override the location of the loaded
+ // sourcemap/original source, or to override the content in the sourcesContent field if it's
+ // an unmodified source file.
+ const ctx = {
+ importer,
+ depth,
+ source: sourceFile || '',
+ content: undefined,
+ };
+ // Use the provided loader callback to retrieve the file's sourcemap.
+ // TODO: We should eventually support async loading of sourcemap files.
+ const sourceMap = loader(ctx.source, ctx);
+ const { source, content } = ctx;
+ // If there is a sourcemap, then we need to recurse into it to load its source files.
+ if (sourceMap)
+ return build(new TraceMap(sourceMap, source), loader, source, depth);
+ // Else, it's an an unmodified source file.
+ // The contents of this unmodified source file can be overridden via the loader context,
+ // allowing it to be explicitly null or a string. If it remains undefined, we fall back to
+ // the importing sourcemap's `sourcesContent` field.
+ const sourceContent = content !== undefined ? content : sourcesContent ? sourcesContent[i] : null;
+ return OriginalSource(source, sourceContent);
+ });
+ return MapSource(map, children);
+}
+
+/**
+ * A SourceMap v3 compatible sourcemap, which only includes fields that were
+ * provided to it.
+ */
+class SourceMap {
+ constructor(map, options) {
+ const out = options.decodedMappings ? toDecodedMap(map) : toEncodedMap(map);
+ this.version = out.version; // SourceMap spec says this should be first.
+ this.file = out.file;
+ this.mappings = out.mappings;
+ this.names = out.names;
+ this.sourceRoot = out.sourceRoot;
+ this.sources = out.sources;
+ if (!options.excludeContent) {
+ this.sourcesContent = out.sourcesContent;
+ }
+ }
+ toString() {
+ return JSON.stringify(this);
+ }
+}
+
+/**
+ * Traces through all the mappings in the root sourcemap, through the sources
+ * (and their sourcemaps), all the way back to the original source location.
+ *
+ * `loader` will be called every time we encounter a source file. If it returns
+ * a sourcemap, we will recurse into that sourcemap to continue the trace. If
+ * it returns a falsey value, that source file is treated as an original,
+ * unmodified source file.
+ *
+ * Pass `excludeContent` to exclude any self-containing source file content
+ * from the output sourcemap.
+ *
+ * Pass `decodedMappings` to receive a SourceMap with decoded (instead of
+ * VLQ encoded) mappings.
+ */
+function remapping(input, loader, options) {
+ const opts = typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false };
+ const tree = buildSourceMapTree(input, loader);
+ return new SourceMap(traceMappings(tree), opts);
+}
+
+export { remapping as default };
+//# sourceMappingURL=remapping.mjs.map
diff --git a/app/frontend/node_modules/@ampproject/remapping/dist/remapping.mjs.map b/app/frontend/node_modules/@ampproject/remapping/dist/remapping.mjs.map
new file mode 100644
index 0000000000000000000000000000000000000000..078a2b73baa24b413f69fb38c9c1a3c5f61c4adc
--- /dev/null
+++ b/app/frontend/node_modules/@ampproject/remapping/dist/remapping.mjs.map
@@ -0,0 +1 @@
+{"version":3,"file":"remapping.mjs","sources":["../src/source-map-tree.ts","../src/build-source-map-tree.ts","../src/source-map.ts","../src/remapping.ts"],"sourcesContent":["import { GenMapping, maybeAddSegment, setSourceContent } from '@jridgewell/gen-mapping';\nimport { traceSegment, decodedMappings } from '@jridgewell/trace-mapping';\n\nimport type { TraceMap } from '@jridgewell/trace-mapping';\n\nexport type SourceMapSegmentObject = {\n column: number;\n line: number;\n name: string;\n source: string;\n content: string | null;\n};\n\nexport type OriginalSource = {\n map: null;\n sources: Sources[];\n source: string;\n content: string | null;\n};\n\nexport type MapSource = {\n map: TraceMap;\n sources: Sources[];\n source: string;\n content: null;\n};\n\nexport type Sources = OriginalSource | MapSource;\n\nconst SOURCELESS_MAPPING = /* #__PURE__ */ SegmentObject('', -1, -1, '', null);\nconst EMPTY_SOURCES: Sources[] = [];\n\nfunction SegmentObject(\n source: string,\n line: number,\n column: number,\n name: string,\n content: string | null\n): SourceMapSegmentObject {\n return { source, line, column, name, content };\n}\n\nfunction Source(map: TraceMap, sources: Sources[], source: '', content: null): MapSource;\nfunction Source(\n map: null,\n sources: Sources[],\n source: string,\n content: string | null\n): OriginalSource;\nfunction Source(\n map: TraceMap | null,\n sources: Sources[],\n source: string | '',\n content: string | null\n): Sources {\n return {\n map,\n sources,\n source,\n content,\n } as any;\n}\n\n/**\n * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes\n * (which may themselves be SourceMapTrees).\n */\nexport function MapSource(map: TraceMap, sources: Sources[]): MapSource {\n return Source(map, sources, '', null);\n}\n\n/**\n * A \"leaf\" node in the sourcemap tree, representing an original, unmodified source file. Recursive\n * segment tracing ends at the `OriginalSource`.\n */\nexport function OriginalSource(source: string, content: string | null): OriginalSource {\n return Source(null, EMPTY_SOURCES, source, content);\n}\n\n/**\n * traceMappings is only called on the root level SourceMapTree, and begins the process of\n * resolving each mapping in terms of the original source files.\n */\nexport function traceMappings(tree: MapSource): GenMapping {\n // TODO: Eventually support sourceRoot, which has to be removed because the sources are already\n // fully resolved. We'll need to make sources relative to the sourceRoot before adding them.\n const gen = new GenMapping({ file: tree.map.file });\n const { sources: rootSources, map } = tree;\n const rootNames = map.names;\n const rootMappings = decodedMappings(map);\n\n for (let i = 0; i < rootMappings.length; i++) {\n const segments = rootMappings[i];\n\n for (let j = 0; j < segments.length; j++) {\n const segment = segments[j];\n const genCol = segment[0];\n let traced: SourceMapSegmentObject | null = SOURCELESS_MAPPING;\n\n // 1-length segments only move the current generated column, there's no source information\n // to gather from it.\n if (segment.length !== 1) {\n const source = rootSources[segment[1]];\n traced = originalPositionFor(\n source,\n segment[2],\n segment[3],\n segment.length === 5 ? rootNames[segment[4]] : ''\n );\n\n // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a\n // respective segment into an original source.\n if (traced == null) continue;\n }\n\n const { column, line, name, content, source } = traced;\n\n maybeAddSegment(gen, i, genCol, source, line, column, name);\n if (source && content != null) setSourceContent(gen, source, content);\n }\n }\n\n return gen;\n}\n\n/**\n * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own\n * child SourceMapTrees, until we find the original source map.\n */\nexport function originalPositionFor(\n source: Sources,\n line: number,\n column: number,\n name: string\n): SourceMapSegmentObject | null {\n if (!source.map) {\n return SegmentObject(source.source, line, column, name, source.content);\n }\n\n const segment = traceSegment(source.map, line, column);\n\n // If we couldn't find a segment, then this doesn't exist in the sourcemap.\n if (segment == null) return null;\n // 1-length segments only move the current generated column, there's no source information\n // to gather from it.\n if (segment.length === 1) return SOURCELESS_MAPPING;\n\n return originalPositionFor(\n source.sources[segment[1]],\n segment[2],\n segment[3],\n segment.length === 5 ? source.map.names[segment[4]] : name\n );\n}\n","import { TraceMap } from '@jridgewell/trace-mapping';\n\nimport { OriginalSource, MapSource } from './source-map-tree';\n\nimport type { Sources, MapSource as MapSourceType } from './source-map-tree';\nimport type { SourceMapInput, SourceMapLoader, LoaderContext } from './types';\n\nfunction asArray(value: T | T[]): T[] {\n if (Array.isArray(value)) return value;\n return [value];\n}\n\n/**\n * Recursively builds a tree structure out of sourcemap files, with each node\n * being either an `OriginalSource` \"leaf\" or a `SourceMapTree` composed of\n * `OriginalSource`s and `SourceMapTree`s.\n *\n * Every sourcemap is composed of a collection of source files and mappings\n * into locations of those source files. When we generate a `SourceMapTree` for\n * the sourcemap, we attempt to load each source file's own sourcemap. If it\n * does not have an associated sourcemap, it is considered an original,\n * unmodified source file.\n */\nexport default function buildSourceMapTree(\n input: SourceMapInput | SourceMapInput[],\n loader: SourceMapLoader\n): MapSourceType {\n const maps = asArray(input).map((m) => new TraceMap(m, ''));\n const map = maps.pop()!;\n\n for (let i = 0; i < maps.length; i++) {\n if (maps[i].sources.length > 1) {\n throw new Error(\n `Transformation map ${i} must have exactly one source file.\\n` +\n 'Did you specify these with the most recent transformation maps first?'\n );\n }\n }\n\n let tree = build(map, loader, '', 0);\n for (let i = maps.length - 1; i >= 0; i--) {\n tree = MapSource(maps[i], [tree]);\n }\n return tree;\n}\n\nfunction build(\n map: TraceMap,\n loader: SourceMapLoader,\n importer: string,\n importerDepth: number\n): MapSourceType {\n const { resolvedSources, sourcesContent } = map;\n\n const depth = importerDepth + 1;\n const children = resolvedSources.map((sourceFile: string | null, i: number): Sources => {\n // The loading context gives the loader more information about why this file is being loaded\n // (eg, from which importer). It also allows the loader to override the location of the loaded\n // sourcemap/original source, or to override the content in the sourcesContent field if it's\n // an unmodified source file.\n const ctx: LoaderContext = {\n importer,\n depth,\n source: sourceFile || '',\n content: undefined,\n };\n\n // Use the provided loader callback to retrieve the file's sourcemap.\n // TODO: We should eventually support async loading of sourcemap files.\n const sourceMap = loader(ctx.source, ctx);\n\n const { source, content } = ctx;\n\n // If there is a sourcemap, then we need to recurse into it to load its source files.\n if (sourceMap) return build(new TraceMap(sourceMap, source), loader, source, depth);\n\n // Else, it's an an unmodified source file.\n // The contents of this unmodified source file can be overridden via the loader context,\n // allowing it to be explicitly null or a string. If it remains undefined, we fall back to\n // the importing sourcemap's `sourcesContent` field.\n const sourceContent =\n content !== undefined ? content : sourcesContent ? sourcesContent[i] : null;\n return OriginalSource(source, sourceContent);\n });\n\n return MapSource(map, children);\n}\n","import { toDecodedMap, toEncodedMap } from '@jridgewell/gen-mapping';\n\nimport type { GenMapping } from '@jridgewell/gen-mapping';\nimport type { DecodedSourceMap, EncodedSourceMap, Options } from './types';\n\n/**\n * A SourceMap v3 compatible sourcemap, which only includes fields that were\n * provided to it.\n */\nexport default class SourceMap {\n declare file?: string | null;\n declare mappings: EncodedSourceMap['mappings'] | DecodedSourceMap['mappings'];\n declare sourceRoot?: string;\n declare names: string[];\n declare sources: (string | null)[];\n declare sourcesContent?: (string | null)[];\n declare version: 3;\n\n constructor(map: GenMapping, options: Options) {\n const out = options.decodedMappings ? toDecodedMap(map) : toEncodedMap(map);\n this.version = out.version; // SourceMap spec says this should be first.\n this.file = out.file;\n this.mappings = out.mappings as SourceMap['mappings'];\n this.names = out.names as SourceMap['names'];\n\n this.sourceRoot = out.sourceRoot;\n\n this.sources = out.sources as SourceMap['sources'];\n if (!options.excludeContent) {\n this.sourcesContent = out.sourcesContent as SourceMap['sourcesContent'];\n }\n }\n\n toString(): string {\n return JSON.stringify(this);\n }\n}\n","import buildSourceMapTree from './build-source-map-tree';\nimport { traceMappings } from './source-map-tree';\nimport SourceMap from './source-map';\n\nimport type { SourceMapInput, SourceMapLoader, Options } from './types';\nexport type {\n SourceMapSegment,\n EncodedSourceMap,\n EncodedSourceMap as RawSourceMap,\n DecodedSourceMap,\n SourceMapInput,\n SourceMapLoader,\n LoaderContext,\n Options,\n} from './types';\n\n/**\n * Traces through all the mappings in the root sourcemap, through the sources\n * (and their sourcemaps), all the way back to the original source location.\n *\n * `loader` will be called every time we encounter a source file. If it returns\n * a sourcemap, we will recurse into that sourcemap to continue the trace. If\n * it returns a falsey value, that source file is treated as an original,\n * unmodified source file.\n *\n * Pass `excludeContent` to exclude any self-containing source file content\n * from the output sourcemap.\n *\n * Pass `decodedMappings` to receive a SourceMap with decoded (instead of\n * VLQ encoded) mappings.\n */\nexport default function remapping(\n input: SourceMapInput | SourceMapInput[],\n loader: SourceMapLoader,\n options?: boolean | Options\n): SourceMap {\n const opts =\n typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false };\n const tree = buildSourceMapTree(input, loader);\n return new SourceMap(traceMappings(tree), opts);\n}\n"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@ampproject/remapping/dist/remapping.umd.js b/app/frontend/node_modules/@ampproject/remapping/dist/remapping.umd.js
new file mode 100644
index 0000000000000000000000000000000000000000..e292d4c37f803597bc490c40487645bbc2c97346
--- /dev/null
+++ b/app/frontend/node_modules/@ampproject/remapping/dist/remapping.umd.js
@@ -0,0 +1,196 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@jridgewell/trace-mapping'), require('@jridgewell/gen-mapping')) :
+ typeof define === 'function' && define.amd ? define(['@jridgewell/trace-mapping', '@jridgewell/gen-mapping'], factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.remapping = factory(global.traceMapping, global.genMapping));
+})(this, (function (traceMapping, genMapping) { 'use strict';
+
+ const SOURCELESS_MAPPING = /* #__PURE__ */ SegmentObject('', -1, -1, '', null);
+ const EMPTY_SOURCES = [];
+ function SegmentObject(source, line, column, name, content) {
+ return { source, line, column, name, content };
+ }
+ function Source(map, sources, source, content) {
+ return {
+ map,
+ sources,
+ source,
+ content,
+ };
+ }
+ /**
+ * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes
+ * (which may themselves be SourceMapTrees).
+ */
+ function MapSource(map, sources) {
+ return Source(map, sources, '', null);
+ }
+ /**
+ * A "leaf" node in the sourcemap tree, representing an original, unmodified source file. Recursive
+ * segment tracing ends at the `OriginalSource`.
+ */
+ function OriginalSource(source, content) {
+ return Source(null, EMPTY_SOURCES, source, content);
+ }
+ /**
+ * traceMappings is only called on the root level SourceMapTree, and begins the process of
+ * resolving each mapping in terms of the original source files.
+ */
+ function traceMappings(tree) {
+ // TODO: Eventually support sourceRoot, which has to be removed because the sources are already
+ // fully resolved. We'll need to make sources relative to the sourceRoot before adding them.
+ const gen = new genMapping.GenMapping({ file: tree.map.file });
+ const { sources: rootSources, map } = tree;
+ const rootNames = map.names;
+ const rootMappings = traceMapping.decodedMappings(map);
+ for (let i = 0; i < rootMappings.length; i++) {
+ const segments = rootMappings[i];
+ for (let j = 0; j < segments.length; j++) {
+ const segment = segments[j];
+ const genCol = segment[0];
+ let traced = SOURCELESS_MAPPING;
+ // 1-length segments only move the current generated column, there's no source information
+ // to gather from it.
+ if (segment.length !== 1) {
+ const source = rootSources[segment[1]];
+ traced = originalPositionFor(source, segment[2], segment[3], segment.length === 5 ? rootNames[segment[4]] : '');
+ // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a
+ // respective segment into an original source.
+ if (traced == null)
+ continue;
+ }
+ const { column, line, name, content, source } = traced;
+ genMapping.maybeAddSegment(gen, i, genCol, source, line, column, name);
+ if (source && content != null)
+ genMapping.setSourceContent(gen, source, content);
+ }
+ }
+ return gen;
+ }
+ /**
+ * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own
+ * child SourceMapTrees, until we find the original source map.
+ */
+ function originalPositionFor(source, line, column, name) {
+ if (!source.map) {
+ return SegmentObject(source.source, line, column, name, source.content);
+ }
+ const segment = traceMapping.traceSegment(source.map, line, column);
+ // If we couldn't find a segment, then this doesn't exist in the sourcemap.
+ if (segment == null)
+ return null;
+ // 1-length segments only move the current generated column, there's no source information
+ // to gather from it.
+ if (segment.length === 1)
+ return SOURCELESS_MAPPING;
+ return originalPositionFor(source.sources[segment[1]], segment[2], segment[3], segment.length === 5 ? source.map.names[segment[4]] : name);
+ }
+
+ function asArray(value) {
+ if (Array.isArray(value))
+ return value;
+ return [value];
+ }
+ /**
+ * Recursively builds a tree structure out of sourcemap files, with each node
+ * being either an `OriginalSource` "leaf" or a `SourceMapTree` composed of
+ * `OriginalSource`s and `SourceMapTree`s.
+ *
+ * Every sourcemap is composed of a collection of source files and mappings
+ * into locations of those source files. When we generate a `SourceMapTree` for
+ * the sourcemap, we attempt to load each source file's own sourcemap. If it
+ * does not have an associated sourcemap, it is considered an original,
+ * unmodified source file.
+ */
+ function buildSourceMapTree(input, loader) {
+ const maps = asArray(input).map((m) => new traceMapping.TraceMap(m, ''));
+ const map = maps.pop();
+ for (let i = 0; i < maps.length; i++) {
+ if (maps[i].sources.length > 1) {
+ throw new Error(`Transformation map ${i} must have exactly one source file.\n` +
+ 'Did you specify these with the most recent transformation maps first?');
+ }
+ }
+ let tree = build(map, loader, '', 0);
+ for (let i = maps.length - 1; i >= 0; i--) {
+ tree = MapSource(maps[i], [tree]);
+ }
+ return tree;
+ }
+ function build(map, loader, importer, importerDepth) {
+ const { resolvedSources, sourcesContent } = map;
+ const depth = importerDepth + 1;
+ const children = resolvedSources.map((sourceFile, i) => {
+ // The loading context gives the loader more information about why this file is being loaded
+ // (eg, from which importer). It also allows the loader to override the location of the loaded
+ // sourcemap/original source, or to override the content in the sourcesContent field if it's
+ // an unmodified source file.
+ const ctx = {
+ importer,
+ depth,
+ source: sourceFile || '',
+ content: undefined,
+ };
+ // Use the provided loader callback to retrieve the file's sourcemap.
+ // TODO: We should eventually support async loading of sourcemap files.
+ const sourceMap = loader(ctx.source, ctx);
+ const { source, content } = ctx;
+ // If there is a sourcemap, then we need to recurse into it to load its source files.
+ if (sourceMap)
+ return build(new traceMapping.TraceMap(sourceMap, source), loader, source, depth);
+ // Else, it's an an unmodified source file.
+ // The contents of this unmodified source file can be overridden via the loader context,
+ // allowing it to be explicitly null or a string. If it remains undefined, we fall back to
+ // the importing sourcemap's `sourcesContent` field.
+ const sourceContent = content !== undefined ? content : sourcesContent ? sourcesContent[i] : null;
+ return OriginalSource(source, sourceContent);
+ });
+ return MapSource(map, children);
+ }
+
+ /**
+ * A SourceMap v3 compatible sourcemap, which only includes fields that were
+ * provided to it.
+ */
+ class SourceMap {
+ constructor(map, options) {
+ const out = options.decodedMappings ? genMapping.toDecodedMap(map) : genMapping.toEncodedMap(map);
+ this.version = out.version; // SourceMap spec says this should be first.
+ this.file = out.file;
+ this.mappings = out.mappings;
+ this.names = out.names;
+ this.sourceRoot = out.sourceRoot;
+ this.sources = out.sources;
+ if (!options.excludeContent) {
+ this.sourcesContent = out.sourcesContent;
+ }
+ }
+ toString() {
+ return JSON.stringify(this);
+ }
+ }
+
+ /**
+ * Traces through all the mappings in the root sourcemap, through the sources
+ * (and their sourcemaps), all the way back to the original source location.
+ *
+ * `loader` will be called every time we encounter a source file. If it returns
+ * a sourcemap, we will recurse into that sourcemap to continue the trace. If
+ * it returns a falsey value, that source file is treated as an original,
+ * unmodified source file.
+ *
+ * Pass `excludeContent` to exclude any self-containing source file content
+ * from the output sourcemap.
+ *
+ * Pass `decodedMappings` to receive a SourceMap with decoded (instead of
+ * VLQ encoded) mappings.
+ */
+ function remapping(input, loader, options) {
+ const opts = typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false };
+ const tree = buildSourceMapTree(input, loader);
+ return new SourceMap(traceMappings(tree), opts);
+ }
+
+ return remapping;
+
+}));
+//# sourceMappingURL=remapping.umd.js.map
diff --git a/app/frontend/node_modules/@ampproject/remapping/dist/remapping.umd.js.map b/app/frontend/node_modules/@ampproject/remapping/dist/remapping.umd.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..9c898880b49663cb2b9e066c2d0f1ee14b2db29f
--- /dev/null
+++ b/app/frontend/node_modules/@ampproject/remapping/dist/remapping.umd.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"remapping.umd.js","sources":["../src/source-map-tree.ts","../src/build-source-map-tree.ts","../src/source-map.ts","../src/remapping.ts"],"sourcesContent":["import { GenMapping, maybeAddSegment, setSourceContent } from '@jridgewell/gen-mapping';\nimport { traceSegment, decodedMappings } from '@jridgewell/trace-mapping';\n\nimport type { TraceMap } from '@jridgewell/trace-mapping';\n\nexport type SourceMapSegmentObject = {\n column: number;\n line: number;\n name: string;\n source: string;\n content: string | null;\n};\n\nexport type OriginalSource = {\n map: null;\n sources: Sources[];\n source: string;\n content: string | null;\n};\n\nexport type MapSource = {\n map: TraceMap;\n sources: Sources[];\n source: string;\n content: null;\n};\n\nexport type Sources = OriginalSource | MapSource;\n\nconst SOURCELESS_MAPPING = /* #__PURE__ */ SegmentObject('', -1, -1, '', null);\nconst EMPTY_SOURCES: Sources[] = [];\n\nfunction SegmentObject(\n source: string,\n line: number,\n column: number,\n name: string,\n content: string | null\n): SourceMapSegmentObject {\n return { source, line, column, name, content };\n}\n\nfunction Source(map: TraceMap, sources: Sources[], source: '', content: null): MapSource;\nfunction Source(\n map: null,\n sources: Sources[],\n source: string,\n content: string | null\n): OriginalSource;\nfunction Source(\n map: TraceMap | null,\n sources: Sources[],\n source: string | '',\n content: string | null\n): Sources {\n return {\n map,\n sources,\n source,\n content,\n } as any;\n}\n\n/**\n * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes\n * (which may themselves be SourceMapTrees).\n */\nexport function MapSource(map: TraceMap, sources: Sources[]): MapSource {\n return Source(map, sources, '', null);\n}\n\n/**\n * A \"leaf\" node in the sourcemap tree, representing an original, unmodified source file. Recursive\n * segment tracing ends at the `OriginalSource`.\n */\nexport function OriginalSource(source: string, content: string | null): OriginalSource {\n return Source(null, EMPTY_SOURCES, source, content);\n}\n\n/**\n * traceMappings is only called on the root level SourceMapTree, and begins the process of\n * resolving each mapping in terms of the original source files.\n */\nexport function traceMappings(tree: MapSource): GenMapping {\n // TODO: Eventually support sourceRoot, which has to be removed because the sources are already\n // fully resolved. We'll need to make sources relative to the sourceRoot before adding them.\n const gen = new GenMapping({ file: tree.map.file });\n const { sources: rootSources, map } = tree;\n const rootNames = map.names;\n const rootMappings = decodedMappings(map);\n\n for (let i = 0; i < rootMappings.length; i++) {\n const segments = rootMappings[i];\n\n for (let j = 0; j < segments.length; j++) {\n const segment = segments[j];\n const genCol = segment[0];\n let traced: SourceMapSegmentObject | null = SOURCELESS_MAPPING;\n\n // 1-length segments only move the current generated column, there's no source information\n // to gather from it.\n if (segment.length !== 1) {\n const source = rootSources[segment[1]];\n traced = originalPositionFor(\n source,\n segment[2],\n segment[3],\n segment.length === 5 ? rootNames[segment[4]] : ''\n );\n\n // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a\n // respective segment into an original source.\n if (traced == null) continue;\n }\n\n const { column, line, name, content, source } = traced;\n\n maybeAddSegment(gen, i, genCol, source, line, column, name);\n if (source && content != null) setSourceContent(gen, source, content);\n }\n }\n\n return gen;\n}\n\n/**\n * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own\n * child SourceMapTrees, until we find the original source map.\n */\nexport function originalPositionFor(\n source: Sources,\n line: number,\n column: number,\n name: string\n): SourceMapSegmentObject | null {\n if (!source.map) {\n return SegmentObject(source.source, line, column, name, source.content);\n }\n\n const segment = traceSegment(source.map, line, column);\n\n // If we couldn't find a segment, then this doesn't exist in the sourcemap.\n if (segment == null) return null;\n // 1-length segments only move the current generated column, there's no source information\n // to gather from it.\n if (segment.length === 1) return SOURCELESS_MAPPING;\n\n return originalPositionFor(\n source.sources[segment[1]],\n segment[2],\n segment[3],\n segment.length === 5 ? source.map.names[segment[4]] : name\n );\n}\n","import { TraceMap } from '@jridgewell/trace-mapping';\n\nimport { OriginalSource, MapSource } from './source-map-tree';\n\nimport type { Sources, MapSource as MapSourceType } from './source-map-tree';\nimport type { SourceMapInput, SourceMapLoader, LoaderContext } from './types';\n\nfunction asArray(value: T | T[]): T[] {\n if (Array.isArray(value)) return value;\n return [value];\n}\n\n/**\n * Recursively builds a tree structure out of sourcemap files, with each node\n * being either an `OriginalSource` \"leaf\" or a `SourceMapTree` composed of\n * `OriginalSource`s and `SourceMapTree`s.\n *\n * Every sourcemap is composed of a collection of source files and mappings\n * into locations of those source files. When we generate a `SourceMapTree` for\n * the sourcemap, we attempt to load each source file's own sourcemap. If it\n * does not have an associated sourcemap, it is considered an original,\n * unmodified source file.\n */\nexport default function buildSourceMapTree(\n input: SourceMapInput | SourceMapInput[],\n loader: SourceMapLoader\n): MapSourceType {\n const maps = asArray(input).map((m) => new TraceMap(m, ''));\n const map = maps.pop()!;\n\n for (let i = 0; i < maps.length; i++) {\n if (maps[i].sources.length > 1) {\n throw new Error(\n `Transformation map ${i} must have exactly one source file.\\n` +\n 'Did you specify these with the most recent transformation maps first?'\n );\n }\n }\n\n let tree = build(map, loader, '', 0);\n for (let i = maps.length - 1; i >= 0; i--) {\n tree = MapSource(maps[i], [tree]);\n }\n return tree;\n}\n\nfunction build(\n map: TraceMap,\n loader: SourceMapLoader,\n importer: string,\n importerDepth: number\n): MapSourceType {\n const { resolvedSources, sourcesContent } = map;\n\n const depth = importerDepth + 1;\n const children = resolvedSources.map((sourceFile: string | null, i: number): Sources => {\n // The loading context gives the loader more information about why this file is being loaded\n // (eg, from which importer). It also allows the loader to override the location of the loaded\n // sourcemap/original source, or to override the content in the sourcesContent field if it's\n // an unmodified source file.\n const ctx: LoaderContext = {\n importer,\n depth,\n source: sourceFile || '',\n content: undefined,\n };\n\n // Use the provided loader callback to retrieve the file's sourcemap.\n // TODO: We should eventually support async loading of sourcemap files.\n const sourceMap = loader(ctx.source, ctx);\n\n const { source, content } = ctx;\n\n // If there is a sourcemap, then we need to recurse into it to load its source files.\n if (sourceMap) return build(new TraceMap(sourceMap, source), loader, source, depth);\n\n // Else, it's an an unmodified source file.\n // The contents of this unmodified source file can be overridden via the loader context,\n // allowing it to be explicitly null or a string. If it remains undefined, we fall back to\n // the importing sourcemap's `sourcesContent` field.\n const sourceContent =\n content !== undefined ? content : sourcesContent ? sourcesContent[i] : null;\n return OriginalSource(source, sourceContent);\n });\n\n return MapSource(map, children);\n}\n","import { toDecodedMap, toEncodedMap } from '@jridgewell/gen-mapping';\n\nimport type { GenMapping } from '@jridgewell/gen-mapping';\nimport type { DecodedSourceMap, EncodedSourceMap, Options } from './types';\n\n/**\n * A SourceMap v3 compatible sourcemap, which only includes fields that were\n * provided to it.\n */\nexport default class SourceMap {\n declare file?: string | null;\n declare mappings: EncodedSourceMap['mappings'] | DecodedSourceMap['mappings'];\n declare sourceRoot?: string;\n declare names: string[];\n declare sources: (string | null)[];\n declare sourcesContent?: (string | null)[];\n declare version: 3;\n\n constructor(map: GenMapping, options: Options) {\n const out = options.decodedMappings ? toDecodedMap(map) : toEncodedMap(map);\n this.version = out.version; // SourceMap spec says this should be first.\n this.file = out.file;\n this.mappings = out.mappings as SourceMap['mappings'];\n this.names = out.names as SourceMap['names'];\n\n this.sourceRoot = out.sourceRoot;\n\n this.sources = out.sources as SourceMap['sources'];\n if (!options.excludeContent) {\n this.sourcesContent = out.sourcesContent as SourceMap['sourcesContent'];\n }\n }\n\n toString(): string {\n return JSON.stringify(this);\n }\n}\n","import buildSourceMapTree from './build-source-map-tree';\nimport { traceMappings } from './source-map-tree';\nimport SourceMap from './source-map';\n\nimport type { SourceMapInput, SourceMapLoader, Options } from './types';\nexport type {\n SourceMapSegment,\n EncodedSourceMap,\n EncodedSourceMap as RawSourceMap,\n DecodedSourceMap,\n SourceMapInput,\n SourceMapLoader,\n LoaderContext,\n Options,\n} from './types';\n\n/**\n * Traces through all the mappings in the root sourcemap, through the sources\n * (and their sourcemaps), all the way back to the original source location.\n *\n * `loader` will be called every time we encounter a source file. If it returns\n * a sourcemap, we will recurse into that sourcemap to continue the trace. If\n * it returns a falsey value, that source file is treated as an original,\n * unmodified source file.\n *\n * Pass `excludeContent` to exclude any self-containing source file content\n * from the output sourcemap.\n *\n * Pass `decodedMappings` to receive a SourceMap with decoded (instead of\n * VLQ encoded) mappings.\n */\nexport default function remapping(\n input: SourceMapInput | SourceMapInput[],\n loader: SourceMapLoader,\n options?: boolean | Options\n): SourceMap {\n const opts =\n typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false };\n const tree = buildSourceMapTree(input, loader);\n return new SourceMap(traceMappings(tree), opts);\n}\n"],"names":["GenMapping","decodedMappings","maybeAddSegment","setSourceContent","traceSegment","TraceMap","toDecodedMap","toEncodedMap"],"mappings":"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"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@ampproject/remapping/dist/types/build-source-map-tree.d.ts b/app/frontend/node_modules/@ampproject/remapping/dist/types/build-source-map-tree.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f87fceab779ab635c51c3c74248e3bdfedf22e4e
--- /dev/null
+++ b/app/frontend/node_modules/@ampproject/remapping/dist/types/build-source-map-tree.d.ts
@@ -0,0 +1,14 @@
+import type { MapSource as MapSourceType } from './source-map-tree';
+import type { SourceMapInput, SourceMapLoader } from './types';
+/**
+ * Recursively builds a tree structure out of sourcemap files, with each node
+ * being either an `OriginalSource` "leaf" or a `SourceMapTree` composed of
+ * `OriginalSource`s and `SourceMapTree`s.
+ *
+ * Every sourcemap is composed of a collection of source files and mappings
+ * into locations of those source files. When we generate a `SourceMapTree` for
+ * the sourcemap, we attempt to load each source file's own sourcemap. If it
+ * does not have an associated sourcemap, it is considered an original,
+ * unmodified source file.
+ */
+export default function buildSourceMapTree(input: SourceMapInput | SourceMapInput[], loader: SourceMapLoader): MapSourceType;
diff --git a/app/frontend/node_modules/@ampproject/remapping/dist/types/remapping.d.ts b/app/frontend/node_modules/@ampproject/remapping/dist/types/remapping.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0b58ea9ae11f652636d36891f0bcc753b0ad0d55
--- /dev/null
+++ b/app/frontend/node_modules/@ampproject/remapping/dist/types/remapping.d.ts
@@ -0,0 +1,19 @@
+import SourceMap from './source-map';
+import type { SourceMapInput, SourceMapLoader, Options } from './types';
+export type { SourceMapSegment, EncodedSourceMap, EncodedSourceMap as RawSourceMap, DecodedSourceMap, SourceMapInput, SourceMapLoader, LoaderContext, Options, } from './types';
+/**
+ * Traces through all the mappings in the root sourcemap, through the sources
+ * (and their sourcemaps), all the way back to the original source location.
+ *
+ * `loader` will be called every time we encounter a source file. If it returns
+ * a sourcemap, we will recurse into that sourcemap to continue the trace. If
+ * it returns a falsey value, that source file is treated as an original,
+ * unmodified source file.
+ *
+ * Pass `excludeContent` to exclude any self-containing source file content
+ * from the output sourcemap.
+ *
+ * Pass `decodedMappings` to receive a SourceMap with decoded (instead of
+ * VLQ encoded) mappings.
+ */
+export default function remapping(input: SourceMapInput | SourceMapInput[], loader: SourceMapLoader, options?: boolean | Options): SourceMap;
diff --git a/app/frontend/node_modules/@ampproject/remapping/dist/types/source-map-tree.d.ts b/app/frontend/node_modules/@ampproject/remapping/dist/types/source-map-tree.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3a9f7af65688086068455aac0a89e4d2f2b9bbbb
--- /dev/null
+++ b/app/frontend/node_modules/@ampproject/remapping/dist/types/source-map-tree.d.ts
@@ -0,0 +1,42 @@
+import { GenMapping } from '@jridgewell/gen-mapping';
+import type { TraceMap } from '@jridgewell/trace-mapping';
+export declare type SourceMapSegmentObject = {
+ column: number;
+ line: number;
+ name: string;
+ source: string;
+ content: string | null;
+};
+export declare type OriginalSource = {
+ map: null;
+ sources: Sources[];
+ source: string;
+ content: string | null;
+};
+export declare type MapSource = {
+ map: TraceMap;
+ sources: Sources[];
+ source: string;
+ content: null;
+};
+export declare type Sources = OriginalSource | MapSource;
+/**
+ * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes
+ * (which may themselves be SourceMapTrees).
+ */
+export declare function MapSource(map: TraceMap, sources: Sources[]): MapSource;
+/**
+ * A "leaf" node in the sourcemap tree, representing an original, unmodified source file. Recursive
+ * segment tracing ends at the `OriginalSource`.
+ */
+export declare function OriginalSource(source: string, content: string | null): OriginalSource;
+/**
+ * traceMappings is only called on the root level SourceMapTree, and begins the process of
+ * resolving each mapping in terms of the original source files.
+ */
+export declare function traceMappings(tree: MapSource): GenMapping;
+/**
+ * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own
+ * child SourceMapTrees, until we find the original source map.
+ */
+export declare function originalPositionFor(source: Sources, line: number, column: number, name: string): SourceMapSegmentObject | null;
diff --git a/app/frontend/node_modules/@ampproject/remapping/dist/types/source-map.d.ts b/app/frontend/node_modules/@ampproject/remapping/dist/types/source-map.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ef999b757a1a0f9529492f574a2e5916fa932c24
--- /dev/null
+++ b/app/frontend/node_modules/@ampproject/remapping/dist/types/source-map.d.ts
@@ -0,0 +1,17 @@
+import type { GenMapping } from '@jridgewell/gen-mapping';
+import type { DecodedSourceMap, EncodedSourceMap, Options } from './types';
+/**
+ * A SourceMap v3 compatible sourcemap, which only includes fields that were
+ * provided to it.
+ */
+export default class SourceMap {
+ file?: string | null;
+ mappings: EncodedSourceMap['mappings'] | DecodedSourceMap['mappings'];
+ sourceRoot?: string;
+ names: string[];
+ sources: (string | null)[];
+ sourcesContent?: (string | null)[];
+ version: 3;
+ constructor(map: GenMapping, options: Options);
+ toString(): string;
+}
diff --git a/app/frontend/node_modules/@ampproject/remapping/dist/types/types.d.ts b/app/frontend/node_modules/@ampproject/remapping/dist/types/types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..730a9637e63ffd73942c86534563d30b6adf931b
--- /dev/null
+++ b/app/frontend/node_modules/@ampproject/remapping/dist/types/types.d.ts
@@ -0,0 +1,14 @@
+import type { SourceMapInput } from '@jridgewell/trace-mapping';
+export type { SourceMapSegment, DecodedSourceMap, EncodedSourceMap, } from '@jridgewell/trace-mapping';
+export type { SourceMapInput };
+export declare type LoaderContext = {
+ readonly importer: string;
+ readonly depth: number;
+ source: string;
+ content: string | null | undefined;
+};
+export declare type SourceMapLoader = (file: string, ctx: LoaderContext) => SourceMapInput | null | undefined | void;
+export declare type Options = {
+ excludeContent?: boolean;
+ decodedMappings?: boolean;
+};
diff --git a/app/frontend/node_modules/@ampproject/remapping/package.json b/app/frontend/node_modules/@ampproject/remapping/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..bf3dad29b5c235ae94852ba319824053533be31e
--- /dev/null
+++ b/app/frontend/node_modules/@ampproject/remapping/package.json
@@ -0,0 +1,75 @@
+{
+ "name": "@ampproject/remapping",
+ "version": "2.2.1",
+ "description": "Remap sequential sourcemaps through transformations to point at the original source code",
+ "keywords": [
+ "source",
+ "map",
+ "remap"
+ ],
+ "main": "dist/remapping.umd.js",
+ "module": "dist/remapping.mjs",
+ "types": "dist/types/remapping.d.ts",
+ "exports": {
+ ".": [
+ {
+ "types": "./dist/types/remapping.d.ts",
+ "browser": "./dist/remapping.umd.js",
+ "require": "./dist/remapping.umd.js",
+ "import": "./dist/remapping.mjs"
+ },
+ "./dist/remapping.umd.js"
+ ],
+ "./package.json": "./package.json"
+ },
+ "files": [
+ "dist"
+ ],
+ "author": "Justin Ridgewell ",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/ampproject/remapping.git"
+ },
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=6.0.0"
+ },
+ "scripts": {
+ "build": "run-s -n build:*",
+ "build:rollup": "rollup -c rollup.config.js",
+ "build:ts": "tsc --project tsconfig.build.json",
+ "lint": "run-s -n lint:*",
+ "lint:prettier": "npm run test:lint:prettier -- --write",
+ "lint:ts": "npm run test:lint:ts -- --fix",
+ "prebuild": "rm -rf dist",
+ "prepublishOnly": "npm run preversion",
+ "preversion": "run-s test build",
+ "test": "run-s -n test:lint test:only",
+ "test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand",
+ "test:lint": "run-s -n test:lint:*",
+ "test:lint:prettier": "prettier --check '{src,test}/**/*.ts'",
+ "test:lint:ts": "eslint '{src,test}/**/*.ts'",
+ "test:only": "jest --coverage",
+ "test:watch": "jest --coverage --watch"
+ },
+ "devDependencies": {
+ "@rollup/plugin-typescript": "8.3.2",
+ "@types/jest": "27.4.1",
+ "@typescript-eslint/eslint-plugin": "5.20.0",
+ "@typescript-eslint/parser": "5.20.0",
+ "eslint": "8.14.0",
+ "eslint-config-prettier": "8.5.0",
+ "jest": "27.5.1",
+ "jest-config": "27.5.1",
+ "npm-run-all": "4.1.5",
+ "prettier": "2.6.2",
+ "rollup": "2.70.2",
+ "ts-jest": "27.1.4",
+ "tslib": "2.4.0",
+ "typescript": "4.6.3"
+ },
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+}
diff --git a/app/frontend/node_modules/@esbuild/linux-x64/README.md b/app/frontend/node_modules/@esbuild/linux-x64/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b2f19300430eb75c1a1fc7d5700ad0b6e7e69333
--- /dev/null
+++ b/app/frontend/node_modules/@esbuild/linux-x64/README.md
@@ -0,0 +1,3 @@
+# esbuild
+
+This is the Linux 64-bit binary for esbuild, a JavaScript bundler and minifier. See https://github.com/evanw/esbuild for details.
diff --git a/app/frontend/node_modules/@esbuild/linux-x64/bin/esbuild b/app/frontend/node_modules/@esbuild/linux-x64/bin/esbuild
new file mode 100644
index 0000000000000000000000000000000000000000..5c1a708e8a3bb98ea466f9679c5948272f65b240
--- /dev/null
+++ b/app/frontend/node_modules/@esbuild/linux-x64/bin/esbuild
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f5e95cf71da076b05263e9109f9aa0bd8e7b55e8ac8f1c4bf32e6eab444fcfab
+size 9424896
diff --git a/app/frontend/node_modules/@esbuild/linux-x64/package.json b/app/frontend/node_modules/@esbuild/linux-x64/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..761b683bcb06894f398611e9f94f3d7fc79ff25f
--- /dev/null
+++ b/app/frontend/node_modules/@esbuild/linux-x64/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@esbuild/linux-x64",
+ "version": "0.19.5",
+ "description": "The Linux 64-bit binary for esbuild, a JavaScript bundler.",
+ "repository": "https://github.com/evanw/esbuild",
+ "license": "MIT",
+ "preferUnplugged": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "os": [
+ "linux"
+ ],
+ "cpu": [
+ "x64"
+ ]
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/262.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/262.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d4327a76e701d2c2cba0db665523ec6400728a38
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/262.d.ts
@@ -0,0 +1,92 @@
+/**
+ * https://tc39.es/ecma262/#sec-tostring
+ */
+export declare function ToString(o: unknown): string;
+/**
+ * https://tc39.es/ecma262/#sec-tonumber
+ * @param val
+ */
+export declare function ToNumber(val: any): number;
+/**
+ * https://tc39.es/ecma262/#sec-timeclip
+ * @param time
+ */
+export declare function TimeClip(time: number): number;
+/**
+ * https://tc39.es/ecma262/#sec-toobject
+ * @param arg
+ */
+export declare function ToObject(arg: T): T extends null ? never : T extends undefined ? never : T;
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-samevalue
+ * @param x
+ * @param y
+ */
+export declare function SameValue(x: any, y: any): boolean;
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-arraycreate
+ * @param len
+ */
+export declare function ArrayCreate(len: number): any[];
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-hasownproperty
+ * @param o
+ * @param prop
+ */
+export declare function HasOwnProperty(o: object, prop: string): boolean;
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-type
+ * @param x
+ */
+export declare function Type(x: any): "Null" | "Undefined" | "Object" | "Number" | "Boolean" | "String" | "Symbol" | "BigInt" | undefined;
+/**
+ * https://tc39.es/ecma262/#eqn-Day
+ * @param t
+ */
+export declare function Day(t: number): number;
+/**
+ * https://tc39.es/ecma262/#sec-week-day
+ * @param t
+ */
+export declare function WeekDay(t: number): number;
+/**
+ * https://tc39.es/ecma262/#sec-year-number
+ * @param y
+ */
+export declare function DayFromYear(y: number): number;
+/**
+ * https://tc39.es/ecma262/#sec-year-number
+ * @param y
+ */
+export declare function TimeFromYear(y: number): number;
+/**
+ * https://tc39.es/ecma262/#sec-year-number
+ * @param t
+ */
+export declare function YearFromTime(t: number): number;
+export declare function DaysInYear(y: number): 365 | 366;
+export declare function DayWithinYear(t: number): number;
+export declare function InLeapYear(t: number): 0 | 1;
+/**
+ * https://tc39.es/ecma262/#sec-month-number
+ * @param t
+ */
+export declare function MonthFromTime(t: number): 0 | 1 | 2 | 3 | 4 | 7 | 5 | 6 | 8 | 9 | 10 | 11;
+export declare function DateFromTime(t: number): number;
+export declare function HourFromTime(t: number): number;
+export declare function MinFromTime(t: number): number;
+export declare function SecFromTime(t: number): number;
+/**
+ * The abstract operation OrdinaryHasInstance implements
+ * the default algorithm for determining if an object O
+ * inherits from the instance object inheritance path
+ * provided by constructor C.
+ * @param C class
+ * @param O object
+ * @param internalSlots internalSlots
+ */
+export declare function OrdinaryHasInstance(C: Object, O: any, internalSlots?: {
+ boundTargetFunction: any;
+}): boolean;
+export declare function msFromTime(t: number): number;
+//# sourceMappingURL=262.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/262.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/262.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..b339ced4a37f869ab5952441a932a146420cd39e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/262.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"262.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/262.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAM3C;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAiBzC;AAwBD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,UAQpC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACxB,GAAG,EAAE,CAAC,GACL,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAK1D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,WAYvC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,SAEtC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,WAErD;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,GAAG,uGAyB1B;AAcD;;;GAGG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,UAE5B;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,UAEhC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,UAEpC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,UAErC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,UAErC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,aAWnC;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,UAEtC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAE3C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,mDAwCtC;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,UAyCrC;AASD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,UAErC;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,UAEpC;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,UAEpC;AAMD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,GAAG,EACN,aAAa,CAAC,EAAE;IAAC,mBAAmB,EAAE,GAAG,CAAA;CAAC,WAmB3C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/262.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/262.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5e1db09380b4a264039d98b8f6374bf9c0c8840
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/262.js
@@ -0,0 +1,362 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.msFromTime = exports.OrdinaryHasInstance = exports.SecFromTime = exports.MinFromTime = exports.HourFromTime = exports.DateFromTime = exports.MonthFromTime = exports.InLeapYear = exports.DayWithinYear = exports.DaysInYear = exports.YearFromTime = exports.TimeFromYear = exports.DayFromYear = exports.WeekDay = exports.Day = exports.Type = exports.HasOwnProperty = exports.ArrayCreate = exports.SameValue = exports.ToObject = exports.TimeClip = exports.ToNumber = exports.ToString = void 0;
+/**
+ * https://tc39.es/ecma262/#sec-tostring
+ */
+function ToString(o) {
+ // Only symbol is irregular...
+ if (typeof o === 'symbol') {
+ throw TypeError('Cannot convert a Symbol value to a string');
+ }
+ return String(o);
+}
+exports.ToString = ToString;
+/**
+ * https://tc39.es/ecma262/#sec-tonumber
+ * @param val
+ */
+function ToNumber(val) {
+ if (val === undefined) {
+ return NaN;
+ }
+ if (val === null) {
+ return +0;
+ }
+ if (typeof val === 'boolean') {
+ return val ? 1 : +0;
+ }
+ if (typeof val === 'number') {
+ return val;
+ }
+ if (typeof val === 'symbol' || typeof val === 'bigint') {
+ throw new TypeError('Cannot convert symbol/bigint to number');
+ }
+ return Number(val);
+}
+exports.ToNumber = ToNumber;
+/**
+ * https://tc39.es/ecma262/#sec-tointeger
+ * @param n
+ */
+function ToInteger(n) {
+ var number = ToNumber(n);
+ if (isNaN(number) || SameValue(number, -0)) {
+ return 0;
+ }
+ if (isFinite(number)) {
+ return number;
+ }
+ var integer = Math.floor(Math.abs(number));
+ if (number < 0) {
+ integer = -integer;
+ }
+ if (SameValue(integer, -0)) {
+ return 0;
+ }
+ return integer;
+}
+/**
+ * https://tc39.es/ecma262/#sec-timeclip
+ * @param time
+ */
+function TimeClip(time) {
+ if (!isFinite(time)) {
+ return NaN;
+ }
+ if (Math.abs(time) > 8.64 * 1e15) {
+ return NaN;
+ }
+ return ToInteger(time);
+}
+exports.TimeClip = TimeClip;
+/**
+ * https://tc39.es/ecma262/#sec-toobject
+ * @param arg
+ */
+function ToObject(arg) {
+ if (arg == null) {
+ throw new TypeError('undefined/null cannot be converted to object');
+ }
+ return Object(arg);
+}
+exports.ToObject = ToObject;
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-samevalue
+ * @param x
+ * @param y
+ */
+function SameValue(x, y) {
+ if (Object.is) {
+ return Object.is(x, y);
+ }
+ // SameValue algorithm
+ if (x === y) {
+ // Steps 1-5, 7-10
+ // Steps 6.b-6.e: +0 != -0
+ return x !== 0 || 1 / x === 1 / y;
+ }
+ // Step 6.a: NaN == NaN
+ return x !== x && y !== y;
+}
+exports.SameValue = SameValue;
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-arraycreate
+ * @param len
+ */
+function ArrayCreate(len) {
+ return new Array(len);
+}
+exports.ArrayCreate = ArrayCreate;
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-hasownproperty
+ * @param o
+ * @param prop
+ */
+function HasOwnProperty(o, prop) {
+ return Object.prototype.hasOwnProperty.call(o, prop);
+}
+exports.HasOwnProperty = HasOwnProperty;
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-type
+ * @param x
+ */
+function Type(x) {
+ if (x === null) {
+ return 'Null';
+ }
+ if (typeof x === 'undefined') {
+ return 'Undefined';
+ }
+ if (typeof x === 'function' || typeof x === 'object') {
+ return 'Object';
+ }
+ if (typeof x === 'number') {
+ return 'Number';
+ }
+ if (typeof x === 'boolean') {
+ return 'Boolean';
+ }
+ if (typeof x === 'string') {
+ return 'String';
+ }
+ if (typeof x === 'symbol') {
+ return 'Symbol';
+ }
+ if (typeof x === 'bigint') {
+ return 'BigInt';
+ }
+}
+exports.Type = Type;
+var MS_PER_DAY = 86400000;
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#eqn-modulo
+ * @param x
+ * @param y
+ * @return k of the same sign as y
+ */
+function mod(x, y) {
+ return x - Math.floor(x / y) * y;
+}
+/**
+ * https://tc39.es/ecma262/#eqn-Day
+ * @param t
+ */
+function Day(t) {
+ return Math.floor(t / MS_PER_DAY);
+}
+exports.Day = Day;
+/**
+ * https://tc39.es/ecma262/#sec-week-day
+ * @param t
+ */
+function WeekDay(t) {
+ return mod(Day(t) + 4, 7);
+}
+exports.WeekDay = WeekDay;
+/**
+ * https://tc39.es/ecma262/#sec-year-number
+ * @param y
+ */
+function DayFromYear(y) {
+ return Date.UTC(y, 0) / MS_PER_DAY;
+}
+exports.DayFromYear = DayFromYear;
+/**
+ * https://tc39.es/ecma262/#sec-year-number
+ * @param y
+ */
+function TimeFromYear(y) {
+ return Date.UTC(y, 0);
+}
+exports.TimeFromYear = TimeFromYear;
+/**
+ * https://tc39.es/ecma262/#sec-year-number
+ * @param t
+ */
+function YearFromTime(t) {
+ return new Date(t).getUTCFullYear();
+}
+exports.YearFromTime = YearFromTime;
+function DaysInYear(y) {
+ if (y % 4 !== 0) {
+ return 365;
+ }
+ if (y % 100 !== 0) {
+ return 366;
+ }
+ if (y % 400 !== 0) {
+ return 365;
+ }
+ return 366;
+}
+exports.DaysInYear = DaysInYear;
+function DayWithinYear(t) {
+ return Day(t) - DayFromYear(YearFromTime(t));
+}
+exports.DayWithinYear = DayWithinYear;
+function InLeapYear(t) {
+ return DaysInYear(YearFromTime(t)) === 365 ? 0 : 1;
+}
+exports.InLeapYear = InLeapYear;
+/**
+ * https://tc39.es/ecma262/#sec-month-number
+ * @param t
+ */
+function MonthFromTime(t) {
+ var dwy = DayWithinYear(t);
+ var leap = InLeapYear(t);
+ if (dwy >= 0 && dwy < 31) {
+ return 0;
+ }
+ if (dwy < 59 + leap) {
+ return 1;
+ }
+ if (dwy < 90 + leap) {
+ return 2;
+ }
+ if (dwy < 120 + leap) {
+ return 3;
+ }
+ if (dwy < 151 + leap) {
+ return 4;
+ }
+ if (dwy < 181 + leap) {
+ return 5;
+ }
+ if (dwy < 212 + leap) {
+ return 6;
+ }
+ if (dwy < 243 + leap) {
+ return 7;
+ }
+ if (dwy < 273 + leap) {
+ return 8;
+ }
+ if (dwy < 304 + leap) {
+ return 9;
+ }
+ if (dwy < 334 + leap) {
+ return 10;
+ }
+ if (dwy < 365 + leap) {
+ return 11;
+ }
+ throw new Error('Invalid time');
+}
+exports.MonthFromTime = MonthFromTime;
+function DateFromTime(t) {
+ var dwy = DayWithinYear(t);
+ var mft = MonthFromTime(t);
+ var leap = InLeapYear(t);
+ if (mft === 0) {
+ return dwy + 1;
+ }
+ if (mft === 1) {
+ return dwy - 30;
+ }
+ if (mft === 2) {
+ return dwy - 58 - leap;
+ }
+ if (mft === 3) {
+ return dwy - 89 - leap;
+ }
+ if (mft === 4) {
+ return dwy - 119 - leap;
+ }
+ if (mft === 5) {
+ return dwy - 150 - leap;
+ }
+ if (mft === 6) {
+ return dwy - 180 - leap;
+ }
+ if (mft === 7) {
+ return dwy - 211 - leap;
+ }
+ if (mft === 8) {
+ return dwy - 242 - leap;
+ }
+ if (mft === 9) {
+ return dwy - 272 - leap;
+ }
+ if (mft === 10) {
+ return dwy - 303 - leap;
+ }
+ if (mft === 11) {
+ return dwy - 333 - leap;
+ }
+ throw new Error('Invalid time');
+}
+exports.DateFromTime = DateFromTime;
+var HOURS_PER_DAY = 24;
+var MINUTES_PER_HOUR = 60;
+var SECONDS_PER_MINUTE = 60;
+var MS_PER_SECOND = 1e3;
+var MS_PER_MINUTE = MS_PER_SECOND * SECONDS_PER_MINUTE;
+var MS_PER_HOUR = MS_PER_MINUTE * MINUTES_PER_HOUR;
+function HourFromTime(t) {
+ return mod(Math.floor(t / MS_PER_HOUR), HOURS_PER_DAY);
+}
+exports.HourFromTime = HourFromTime;
+function MinFromTime(t) {
+ return mod(Math.floor(t / MS_PER_MINUTE), MINUTES_PER_HOUR);
+}
+exports.MinFromTime = MinFromTime;
+function SecFromTime(t) {
+ return mod(Math.floor(t / MS_PER_SECOND), SECONDS_PER_MINUTE);
+}
+exports.SecFromTime = SecFromTime;
+function IsCallable(fn) {
+ return typeof fn === 'function';
+}
+/**
+ * The abstract operation OrdinaryHasInstance implements
+ * the default algorithm for determining if an object O
+ * inherits from the instance object inheritance path
+ * provided by constructor C.
+ * @param C class
+ * @param O object
+ * @param internalSlots internalSlots
+ */
+function OrdinaryHasInstance(C, O, internalSlots) {
+ if (!IsCallable(C)) {
+ return false;
+ }
+ if (internalSlots === null || internalSlots === void 0 ? void 0 : internalSlots.boundTargetFunction) {
+ var BC = internalSlots === null || internalSlots === void 0 ? void 0 : internalSlots.boundTargetFunction;
+ return O instanceof BC;
+ }
+ if (typeof O !== 'object') {
+ return false;
+ }
+ var P = C.prototype;
+ if (typeof P !== 'object') {
+ throw new TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.');
+ }
+ return Object.prototype.isPrototypeOf.call(P, O);
+}
+exports.OrdinaryHasInstance = OrdinaryHasInstance;
+function msFromTime(t) {
+ return mod(t, MS_PER_SECOND);
+}
+exports.msFromTime = msFromTime;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeLocaleList.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeLocaleList.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b2e2872827aa19359228a1914b04e6a3eb13c4b9
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeLocaleList.d.ts
@@ -0,0 +1,6 @@
+/**
+ * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist
+ * @param locales
+ */
+export declare function CanonicalizeLocaleList(locales?: string | string[]): string[];
+//# sourceMappingURL=CanonicalizeLocaleList.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeLocaleList.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeLocaleList.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..22d9c26e97536b0b0722e2324318e778de7bb44c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeLocaleList.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CanonicalizeLocaleList.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/CanonicalizeLocaleList.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAG5E"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeLocaleList.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeLocaleList.js
new file mode 100644
index 0000000000000000000000000000000000000000..a9b77c072c7d5d1df6cd3c035a4416820a0e9c55
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeLocaleList.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CanonicalizeLocaleList = void 0;
+/**
+ * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist
+ * @param locales
+ */
+function CanonicalizeLocaleList(locales) {
+ // TODO
+ return Intl.getCanonicalLocales(locales);
+}
+exports.CanonicalizeLocaleList = CanonicalizeLocaleList;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeTimeZoneName.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeTimeZoneName.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2340ce8178058b0794264a9ddf5820f98003bd41
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeTimeZoneName.d.ts
@@ -0,0 +1,9 @@
+/**
+ * https://tc39.es/ecma402/#sec-canonicalizetimezonename
+ * @param tz
+ */
+export declare function CanonicalizeTimeZoneName(tz: string, { tzData, uppercaseLinks, }: {
+ tzData: Record;
+ uppercaseLinks: Record;
+}): string;
+//# sourceMappingURL=CanonicalizeTimeZoneName.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeTimeZoneName.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeTimeZoneName.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7862af1bd9a32e82b4e818febd994c848ccd2126
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeTimeZoneName.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CanonicalizeTimeZoneName.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/CanonicalizeTimeZoneName.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,EACV,EACE,MAAM,EACN,cAAc,GACf,EAAE;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC,UAgBF"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeTimeZoneName.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeTimeZoneName.js
new file mode 100644
index 0000000000000000000000000000000000000000..682025fd352e73e43d5cc83c311bdddd41204dd9
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/CanonicalizeTimeZoneName.js
@@ -0,0 +1,21 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CanonicalizeTimeZoneName = void 0;
+/**
+ * https://tc39.es/ecma402/#sec-canonicalizetimezonename
+ * @param tz
+ */
+function CanonicalizeTimeZoneName(tz, _a) {
+ var tzData = _a.tzData, uppercaseLinks = _a.uppercaseLinks;
+ var uppercasedTz = tz.toUpperCase();
+ var uppercasedZones = Object.keys(tzData).reduce(function (all, z) {
+ all[z.toUpperCase()] = z;
+ return all;
+ }, {});
+ var ianaTimeZone = uppercaseLinks[uppercasedTz] || uppercasedZones[uppercasedTz];
+ if (ianaTimeZone === 'Etc/UTC' || ianaTimeZone === 'Etc/GMT') {
+ return 'UTC';
+ }
+ return ianaTimeZone;
+}
+exports.CanonicalizeTimeZoneName = CanonicalizeTimeZoneName;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/CoerceOptionsToObject.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/CoerceOptionsToObject.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..055e93e310e0eb4f3f78be09ba7e1e70d9fa92f6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/CoerceOptionsToObject.d.ts
@@ -0,0 +1,7 @@
+/**
+ * https://tc39.es/ecma402/#sec-coerceoptionstoobject
+ * @param options
+ * @returns
+ */
+export declare function CoerceOptionsToObject(options?: T): T;
+//# sourceMappingURL=CoerceOptionsToObject.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/CoerceOptionsToObject.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/CoerceOptionsToObject.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..4ba22ac40f102841c6a651c404b96380dbfebaa9
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/CoerceOptionsToObject.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CoerceOptionsToObject.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/CoerceOptionsToObject.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAKvD"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/CoerceOptionsToObject.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/CoerceOptionsToObject.js
new file mode 100644
index 0000000000000000000000000000000000000000..32a93d8ce8106a1abd97fa94a9f6e76ca0f4f8fd
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/CoerceOptionsToObject.js
@@ -0,0 +1,16 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CoerceOptionsToObject = void 0;
+var _262_1 = require("./262");
+/**
+ * https://tc39.es/ecma402/#sec-coerceoptionstoobject
+ * @param options
+ * @returns
+ */
+function CoerceOptionsToObject(options) {
+ if (typeof options === 'undefined') {
+ return Object.create(null);
+ }
+ return (0, _262_1.ToObject)(options);
+}
+exports.CoerceOptionsToObject = CoerceOptionsToObject;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/DefaultNumberOption.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/DefaultNumberOption.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3ad5614cc7c3114782568bd1eefb43683eab66b9
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/DefaultNumberOption.d.ts
@@ -0,0 +1,9 @@
+/**
+ * https://tc39.es/ecma402/#sec-defaultnumberoption
+ * @param val
+ * @param min
+ * @param max
+ * @param fallback
+ */
+export declare function DefaultNumberOption(val: any, min: number, max: number, fallback: number): number;
+//# sourceMappingURL=DefaultNumberOption.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/DefaultNumberOption.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/DefaultNumberOption.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..dbe63c1caf2ba7ecca3526880231b0edb0169627
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/DefaultNumberOption.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"DefaultNumberOption.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/DefaultNumberOption.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,MAAM,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/DefaultNumberOption.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/DefaultNumberOption.js
new file mode 100644
index 0000000000000000000000000000000000000000..f5adbeb6c3fed384d7a69746d082efd42fd70a1d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/DefaultNumberOption.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.DefaultNumberOption = void 0;
+function DefaultNumberOption(val, min, max, fallback) {
+ if (val !== undefined) {
+ val = Number(val);
+ if (isNaN(val) || val < min || val > max) {
+ throw new RangeError("".concat(val, " is outside of range [").concat(min, ", ").concat(max, "]"));
+ }
+ return Math.floor(val);
+ }
+ return fallback;
+}
+exports.DefaultNumberOption = DefaultNumberOption;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/GetNumberOption.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetNumberOption.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2fd66fa8600ef72c771d87027e64890e593e9930
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetNumberOption.d.ts
@@ -0,0 +1,10 @@
+/**
+ * https://tc39.es/ecma402/#sec-getnumberoption
+ * @param options
+ * @param property
+ * @param min
+ * @param max
+ * @param fallback
+ */
+export declare function GetNumberOption(options: T, property: K, minimum: number, maximum: number, fallback: number): number;
+//# sourceMappingURL=GetNumberOption.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/GetNumberOption.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetNumberOption.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..5948deb8f9979231c929a468180c13727789c32c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetNumberOption.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetNumberOption.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/GetNumberOption.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EACjE,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,MAAM,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/GetNumberOption.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetNumberOption.js
new file mode 100644
index 0000000000000000000000000000000000000000..fc4ca6b7abf12d521ff80152ab607950652267d8
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetNumberOption.js
@@ -0,0 +1,18 @@
+"use strict";
+/**
+ * https://tc39.es/ecma402/#sec-getnumberoption
+ * @param options
+ * @param property
+ * @param min
+ * @param max
+ * @param fallback
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.GetNumberOption = void 0;
+var DefaultNumberOption_1 = require("./DefaultNumberOption");
+function GetNumberOption(options, property, minimum, maximum, fallback) {
+ var val = options[property];
+ // @ts-expect-error
+ return (0, DefaultNumberOption_1.DefaultNumberOption)(val, minimum, maximum, fallback);
+}
+exports.GetNumberOption = GetNumberOption;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOption.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOption.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..842151d11e21dd8cdf95b630c9e25ec82314351b
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOption.d.ts
@@ -0,0 +1,10 @@
+/**
+ * https://tc39.es/ecma402/#sec-getoption
+ * @param opts
+ * @param prop
+ * @param type
+ * @param values
+ * @param fallback
+ */
+export declare function GetOption(opts: T, prop: K, type: 'string' | 'boolean', values: T[K][] | undefined, fallback: F): Exclude | F;
+//# sourceMappingURL=GetOption.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOption.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOption.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..5e6083877f07b665beeec618d452a55bdddd8401
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOption.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetOption.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/GetOption.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,EAC9D,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAC1B,QAAQ,EAAE,CAAC,GACV,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAqB9B"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOption.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOption.js
new file mode 100644
index 0000000000000000000000000000000000000000..9362f375e225f1cde6c83506d1f651bea1bdcbd5
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOption.js
@@ -0,0 +1,35 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.GetOption = void 0;
+var _262_1 = require("./262");
+/**
+ * https://tc39.es/ecma402/#sec-getoption
+ * @param opts
+ * @param prop
+ * @param type
+ * @param values
+ * @param fallback
+ */
+function GetOption(opts, prop, type, values, fallback) {
+ if (typeof opts !== 'object') {
+ throw new TypeError('Options must be an object');
+ }
+ var value = opts[prop];
+ if (value !== undefined) {
+ if (type !== 'boolean' && type !== 'string') {
+ throw new TypeError('invalid type');
+ }
+ if (type === 'boolean') {
+ value = Boolean(value);
+ }
+ if (type === 'string') {
+ value = (0, _262_1.ToString)(value);
+ }
+ if (values !== undefined && !values.filter(function (val) { return val == value; }).length) {
+ throw new RangeError("".concat(value, " is not within ").concat(values.join(', ')));
+ }
+ return value;
+ }
+ return fallback;
+}
+exports.GetOption = GetOption;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOptionsObject.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOptionsObject.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..96f3adb66a0752839ef318c79a75e7db49e0b137
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOptionsObject.d.ts
@@ -0,0 +1,7 @@
+/**
+ * https://tc39.es/ecma402/#sec-getoptionsobject
+ * @param options
+ * @returns
+ */
+export declare function GetOptionsObject(options?: T): T;
+//# sourceMappingURL=GetOptionsObject.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOptionsObject.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOptionsObject.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..85357bcba6e84a349adefa142a3b6969d8858590
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOptionsObject.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetOptionsObject.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/GetOptionsObject.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAQjE"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOptionsObject.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOptionsObject.js
new file mode 100644
index 0000000000000000000000000000000000000000..410e0c4e6e4ab5d6f5502ca816837a56b153df17
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/GetOptionsObject.js
@@ -0,0 +1,18 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.GetOptionsObject = void 0;
+/**
+ * https://tc39.es/ecma402/#sec-getoptionsobject
+ * @param options
+ * @returns
+ */
+function GetOptionsObject(options) {
+ if (typeof options === 'undefined') {
+ return Object.create(null);
+ }
+ if (typeof options === 'object') {
+ return options;
+ }
+ throw new TypeError('Options must be an object');
+}
+exports.GetOptionsObject = GetOptionsObject;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/IsSanctionedSimpleUnitIdentifier.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsSanctionedSimpleUnitIdentifier.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fbb951d4d507e99f8553f1f255b79412c4c537d6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsSanctionedSimpleUnitIdentifier.d.ts
@@ -0,0 +1,14 @@
+/**
+ * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers
+ */
+export declare const SANCTIONED_UNITS: string[];
+export declare function removeUnitNamespace(unit: string): string;
+/**
+ * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers
+ */
+export declare const SIMPLE_UNITS: string[];
+/**
+ * https://tc39.es/ecma402/#sec-issanctionedsimpleunitidentifier
+ */
+export declare function IsSanctionedSimpleUnitIdentifier(unitIdentifier: string): boolean;
+//# sourceMappingURL=IsSanctionedSimpleUnitIdentifier.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/IsSanctionedSimpleUnitIdentifier.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsSanctionedSimpleUnitIdentifier.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..31f162a3c7e2647d7a05fbfa7f1c5a787b41026f
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsSanctionedSimpleUnitIdentifier.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"IsSanctionedSimpleUnitIdentifier.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/IsSanctionedSimpleUnitIdentifier.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,gBAAgB,UA4C5B,CAAA;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,UAE/C;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,UAA4C,CAAA;AAErE;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,cAAc,EAAE,MAAM,WAEtE"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/IsSanctionedSimpleUnitIdentifier.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsSanctionedSimpleUnitIdentifier.js
new file mode 100644
index 0000000000000000000000000000000000000000..62517d1e438063a683b4d4bb351bbf29e8409f90
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsSanctionedSimpleUnitIdentifier.js
@@ -0,0 +1,68 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.IsSanctionedSimpleUnitIdentifier = exports.SIMPLE_UNITS = exports.removeUnitNamespace = exports.SANCTIONED_UNITS = void 0;
+/**
+ * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers
+ */
+exports.SANCTIONED_UNITS = [
+ 'angle-degree',
+ 'area-acre',
+ 'area-hectare',
+ 'concentr-percent',
+ 'digital-bit',
+ 'digital-byte',
+ 'digital-gigabit',
+ 'digital-gigabyte',
+ 'digital-kilobit',
+ 'digital-kilobyte',
+ 'digital-megabit',
+ 'digital-megabyte',
+ 'digital-petabyte',
+ 'digital-terabit',
+ 'digital-terabyte',
+ 'duration-day',
+ 'duration-hour',
+ 'duration-millisecond',
+ 'duration-minute',
+ 'duration-month',
+ 'duration-second',
+ 'duration-week',
+ 'duration-year',
+ 'length-centimeter',
+ 'length-foot',
+ 'length-inch',
+ 'length-kilometer',
+ 'length-meter',
+ 'length-mile-scandinavian',
+ 'length-mile',
+ 'length-millimeter',
+ 'length-yard',
+ 'mass-gram',
+ 'mass-kilogram',
+ 'mass-ounce',
+ 'mass-pound',
+ 'mass-stone',
+ 'temperature-celsius',
+ 'temperature-fahrenheit',
+ 'volume-fluid-ounce',
+ 'volume-gallon',
+ 'volume-liter',
+ 'volume-milliliter',
+];
+// In CLDR, the unit name always follows the form `namespace-unit` pattern.
+// For example: `digital-bit` instead of `bit`. This function removes the namespace prefix.
+function removeUnitNamespace(unit) {
+ return unit.slice(unit.indexOf('-') + 1);
+}
+exports.removeUnitNamespace = removeUnitNamespace;
+/**
+ * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers
+ */
+exports.SIMPLE_UNITS = exports.SANCTIONED_UNITS.map(removeUnitNamespace);
+/**
+ * https://tc39.es/ecma402/#sec-issanctionedsimpleunitidentifier
+ */
+function IsSanctionedSimpleUnitIdentifier(unitIdentifier) {
+ return exports.SIMPLE_UNITS.indexOf(unitIdentifier) > -1;
+}
+exports.IsSanctionedSimpleUnitIdentifier = IsSanctionedSimpleUnitIdentifier;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/IsValidTimeZoneName.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsValidTimeZoneName.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3d571da9810e404bcea5a10c0b9b9f983d6ec78f
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsValidTimeZoneName.d.ts
@@ -0,0 +1,10 @@
+/**
+ * https://tc39.es/ecma402/#sec-isvalidtimezonename
+ * @param tz
+ * @param implDetails implementation details
+ */
+export declare function IsValidTimeZoneName(tz: string, { tzData, uppercaseLinks, }: {
+ tzData: Record;
+ uppercaseLinks: Record;
+}): boolean;
+//# sourceMappingURL=IsValidTimeZoneName.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/IsValidTimeZoneName.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsValidTimeZoneName.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..571a910e22b8d8620d54b2334b13ed3016e9062c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsValidTimeZoneName.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"IsValidTimeZoneName.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/IsValidTimeZoneName.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,EACV,EACE,MAAM,EACN,cAAc,GACf,EAAE;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC,GACA,OAAO,CAYT"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/IsValidTimeZoneName.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsValidTimeZoneName.js
new file mode 100644
index 0000000000000000000000000000000000000000..84016c4adeb0c9d5b34356ac87ec72c76c0a7671
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsValidTimeZoneName.js
@@ -0,0 +1,23 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.IsValidTimeZoneName = void 0;
+/**
+ * https://tc39.es/ecma402/#sec-isvalidtimezonename
+ * @param tz
+ * @param implDetails implementation details
+ */
+function IsValidTimeZoneName(tz, _a) {
+ var tzData = _a.tzData, uppercaseLinks = _a.uppercaseLinks;
+ var uppercasedTz = tz.toUpperCase();
+ var zoneNames = new Set();
+ var linkNames = new Set();
+ Object.keys(tzData)
+ .map(function (z) { return z.toUpperCase(); })
+ .forEach(function (z) { return zoneNames.add(z); });
+ Object.keys(uppercaseLinks).forEach(function (linkName) {
+ linkNames.add(linkName.toUpperCase());
+ zoneNames.add(uppercaseLinks[linkName].toUpperCase());
+ });
+ return zoneNames.has(uppercasedTz) || linkNames.has(uppercasedTz);
+}
+exports.IsValidTimeZoneName = IsValidTimeZoneName;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedCurrencyCode.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedCurrencyCode.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..76f4d89f10aa6032a9ff264da03fe113b3298af1
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedCurrencyCode.d.ts
@@ -0,0 +1,5 @@
+/**
+ * https://tc39.es/ecma402/#sec-iswellformedcurrencycode
+ */
+export declare function IsWellFormedCurrencyCode(currency: string): boolean;
+//# sourceMappingURL=IsWellFormedCurrencyCode.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedCurrencyCode.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedCurrencyCode.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..fb6fe5be888d0b9afaa199578fd0256d123c462a
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedCurrencyCode.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"IsWellFormedCurrencyCode.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/IsWellFormedCurrencyCode.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CASlE"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedCurrencyCode.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedCurrencyCode.js
new file mode 100644
index 0000000000000000000000000000000000000000..5844bca9060c1e01e934f0a9448b0fc6acb54bf6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedCurrencyCode.js
@@ -0,0 +1,25 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.IsWellFormedCurrencyCode = void 0;
+/**
+ * This follows https://tc39.es/ecma402/#sec-case-sensitivity-and-case-mapping
+ * @param str string to convert
+ */
+function toUpperCase(str) {
+ return str.replace(/([a-z])/g, function (_, c) { return c.toUpperCase(); });
+}
+var NOT_A_Z_REGEX = /[^A-Z]/;
+/**
+ * https://tc39.es/ecma402/#sec-iswellformedcurrencycode
+ */
+function IsWellFormedCurrencyCode(currency) {
+ currency = toUpperCase(currency);
+ if (currency.length !== 3) {
+ return false;
+ }
+ if (NOT_A_Z_REGEX.test(currency)) {
+ return false;
+ }
+ return true;
+}
+exports.IsWellFormedCurrencyCode = IsWellFormedCurrencyCode;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedUnitIdentifier.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedUnitIdentifier.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c3b955171ca65a3655e83fa946c531ff04074b0c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedUnitIdentifier.d.ts
@@ -0,0 +1,6 @@
+/**
+ * https://tc39.es/ecma402/#sec-iswellformedunitidentifier
+ * @param unit
+ */
+export declare function IsWellFormedUnitIdentifier(unit: string): boolean;
+//# sourceMappingURL=IsWellFormedUnitIdentifier.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedUnitIdentifier.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedUnitIdentifier.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e1f3f154be1780209b321e582efd69e6299075b7
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedUnitIdentifier.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"IsWellFormedUnitIdentifier.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/IsWellFormedUnitIdentifier.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,WAiBtD"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedUnitIdentifier.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedUnitIdentifier.js
new file mode 100644
index 0000000000000000000000000000000000000000..bf56ea2017da56e12566e2e077a0984b516c6b6b
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/IsWellFormedUnitIdentifier.js
@@ -0,0 +1,32 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.IsWellFormedUnitIdentifier = void 0;
+var IsSanctionedSimpleUnitIdentifier_1 = require("./IsSanctionedSimpleUnitIdentifier");
+/**
+ * This follows https://tc39.es/ecma402/#sec-case-sensitivity-and-case-mapping
+ * @param str string to convert
+ */
+function toLowerCase(str) {
+ return str.replace(/([A-Z])/g, function (_, c) { return c.toLowerCase(); });
+}
+/**
+ * https://tc39.es/ecma402/#sec-iswellformedunitidentifier
+ * @param unit
+ */
+function IsWellFormedUnitIdentifier(unit) {
+ unit = toLowerCase(unit);
+ if ((0, IsSanctionedSimpleUnitIdentifier_1.IsSanctionedSimpleUnitIdentifier)(unit)) {
+ return true;
+ }
+ var units = unit.split('-per-');
+ if (units.length !== 2) {
+ return false;
+ }
+ var numerator = units[0], denominator = units[1];
+ if (!(0, IsSanctionedSimpleUnitIdentifier_1.IsSanctionedSimpleUnitIdentifier)(numerator) ||
+ !(0, IsSanctionedSimpleUnitIdentifier_1.IsSanctionedSimpleUnitIdentifier)(denominator)) {
+ return false;
+ }
+ return true;
+}
+exports.IsWellFormedUnitIdentifier = IsWellFormedUnitIdentifier;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/LICENSE.md b/app/frontend/node_modules/@formatjs/ecma402-abstract/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..0320eebafa71377cef72eabddb673e850d6d4517
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/LICENSE.md
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) 2021 FormatJS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponent.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..897decc00bc394baef6accab21eb9c1dd3230175
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponent.d.ts
@@ -0,0 +1,12 @@
+import { NumberFormatInternal } from '../types/number';
+/**
+ * The abstract operation ComputeExponent computes an exponent (power of ten) by which to scale x
+ * according to the number formatting settings. It handles cases such as 999 rounding up to 1000,
+ * requiring a different exponent.
+ *
+ * NOT IN SPEC: it returns [exponent, magnitude].
+ */
+export declare function ComputeExponent(numberFormat: Intl.NumberFormat, x: number, { getInternalSlots, }: {
+ getInternalSlots(nf: Intl.NumberFormat): NumberFormatInternal;
+}): [number, number];
+//# sourceMappingURL=ComputeExponent.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponent.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponent.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..f9c6fce341f0701c52f904042373536459fa23b9
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponent.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ComputeExponent.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/NumberFormat/ComputeExponent.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,oBAAoB,EAAC,MAAM,iBAAiB,CAAA;AAEpD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,CAAC,EAAE,MAAM,EACT,EACE,gBAAgB,GACjB,EAAE;IAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;CAAC,GACjE,CAAC,MAAM,EAAE,MAAM,CAAC,CA8BlB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponent.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponent.js
new file mode 100644
index 0000000000000000000000000000000000000000..ac91a6b8d63f0d6f9ab573b9c90ff5de36c7763f
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponent.js
@@ -0,0 +1,43 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ComputeExponent = void 0;
+var utils_1 = require("../utils");
+var ComputeExponentForMagnitude_1 = require("./ComputeExponentForMagnitude");
+var FormatNumericToString_1 = require("./FormatNumericToString");
+/**
+ * The abstract operation ComputeExponent computes an exponent (power of ten) by which to scale x
+ * according to the number formatting settings. It handles cases such as 999 rounding up to 1000,
+ * requiring a different exponent.
+ *
+ * NOT IN SPEC: it returns [exponent, magnitude].
+ */
+function ComputeExponent(numberFormat, x, _a) {
+ var getInternalSlots = _a.getInternalSlots;
+ if (x === 0) {
+ return [0, 0];
+ }
+ if (x < 0) {
+ x = -x;
+ }
+ var magnitude = (0, utils_1.getMagnitude)(x);
+ var exponent = (0, ComputeExponentForMagnitude_1.ComputeExponentForMagnitude)(numberFormat, magnitude, {
+ getInternalSlots: getInternalSlots,
+ });
+ // Preserve more precision by doing multiplication when exponent is negative.
+ x = exponent < 0 ? x * Math.pow(10, -exponent) : x / Math.pow(10, exponent);
+ var formatNumberResult = (0, FormatNumericToString_1.FormatNumericToString)(getInternalSlots(numberFormat), x);
+ if (formatNumberResult.roundedNumber === 0) {
+ return [exponent, magnitude];
+ }
+ var newMagnitude = (0, utils_1.getMagnitude)(formatNumberResult.roundedNumber);
+ if (newMagnitude === magnitude - exponent) {
+ return [exponent, magnitude];
+ }
+ return [
+ (0, ComputeExponentForMagnitude_1.ComputeExponentForMagnitude)(numberFormat, magnitude + 1, {
+ getInternalSlots: getInternalSlots,
+ }),
+ magnitude + 1,
+ ];
+}
+exports.ComputeExponent = ComputeExponent;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..60eedae11d8d90c2d5cba0cbf12ad4b988753c6b
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.d.ts
@@ -0,0 +1,10 @@
+import { NumberFormatInternal } from '../types/number';
+/**
+ * The abstract operation ComputeExponentForMagnitude computes an exponent by which to scale a
+ * number of the given magnitude (power of ten of the most significant digit) according to the
+ * locale and the desired notation (scientific, engineering, or compact).
+ */
+export declare function ComputeExponentForMagnitude(numberFormat: Intl.NumberFormat, magnitude: number, { getInternalSlots, }: {
+ getInternalSlots(nf: Intl.NumberFormat): NumberFormatInternal;
+}): number;
+//# sourceMappingURL=ComputeExponentForMagnitude.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..99c39bdacd3847e0f58b6debcb70b4f14610d9b2
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ComputeExponentForMagnitude.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAmB,MAAM,iBAAiB,CAAA;AAEtE;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,SAAS,EAAE,MAAM,EACjB,EACE,gBAAgB,GACjB,EAAE;IAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;CAAC,GACjE,MAAM,CAyDR"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.js
new file mode 100644
index 0000000000000000000000000000000000000000..15cfe223953be6d6c4e5b6863ec16e488b048013
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.js
@@ -0,0 +1,64 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ComputeExponentForMagnitude = void 0;
+/**
+ * The abstract operation ComputeExponentForMagnitude computes an exponent by which to scale a
+ * number of the given magnitude (power of ten of the most significant digit) according to the
+ * locale and the desired notation (scientific, engineering, or compact).
+ */
+function ComputeExponentForMagnitude(numberFormat, magnitude, _a) {
+ var getInternalSlots = _a.getInternalSlots;
+ var internalSlots = getInternalSlots(numberFormat);
+ var notation = internalSlots.notation, dataLocaleData = internalSlots.dataLocaleData, numberingSystem = internalSlots.numberingSystem;
+ switch (notation) {
+ case 'standard':
+ return 0;
+ case 'scientific':
+ return magnitude;
+ case 'engineering':
+ return Math.floor(magnitude / 3) * 3;
+ default: {
+ // Let exponent be an implementation- and locale-dependent (ILD) integer by which to scale a
+ // number of the given magnitude in compact notation for the current locale.
+ var compactDisplay = internalSlots.compactDisplay, style = internalSlots.style, currencyDisplay = internalSlots.currencyDisplay;
+ var thresholdMap = void 0;
+ if (style === 'currency' && currencyDisplay !== 'name') {
+ var currency = dataLocaleData.numbers.currency[numberingSystem] ||
+ dataLocaleData.numbers.currency[dataLocaleData.numbers.nu[0]];
+ thresholdMap = currency.short;
+ }
+ else {
+ var decimal = dataLocaleData.numbers.decimal[numberingSystem] ||
+ dataLocaleData.numbers.decimal[dataLocaleData.numbers.nu[0]];
+ thresholdMap = compactDisplay === 'long' ? decimal.long : decimal.short;
+ }
+ if (!thresholdMap) {
+ return 0;
+ }
+ var num = String(Math.pow(10, magnitude));
+ var thresholds = Object.keys(thresholdMap); // TODO: this can be pre-processed
+ if (num < thresholds[0]) {
+ return 0;
+ }
+ if (num > thresholds[thresholds.length - 1]) {
+ return thresholds[thresholds.length - 1].length - 1;
+ }
+ var i = thresholds.indexOf(num);
+ if (i === -1) {
+ return 0;
+ }
+ // See https://unicode.org/reports/tr35/tr35-numbers.html#Compact_Number_Formats
+ // Special handling if the pattern is precisely `0`.
+ var magnitudeKey = thresholds[i];
+ // TODO: do we need to handle plural here?
+ var compactPattern = thresholdMap[magnitudeKey].other;
+ if (compactPattern === '0') {
+ return 0;
+ }
+ // Example: in zh-TW, `10000000` maps to `0000萬`. So we need to return 8 - 4 = 4 here.
+ return (magnitudeKey.length -
+ thresholdMap[magnitudeKey].other.match(/0+/)[0].length);
+ }
+ }
+}
+exports.ComputeExponentForMagnitude = ComputeExponentForMagnitude;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/CurrencyDigits.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/CurrencyDigits.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..94f14d48462dd3e1b6566debd541257e9defa22d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/CurrencyDigits.d.ts
@@ -0,0 +1,7 @@
+/**
+ * https://tc39.es/ecma402/#sec-currencydigits
+ */
+export declare function CurrencyDigits(c: string, { currencyDigitsData }: {
+ currencyDigitsData: Record;
+}): number;
+//# sourceMappingURL=CurrencyDigits.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/CurrencyDigits.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/CurrencyDigits.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..d66178cb180c47227eed194c920c3eca125e6f60
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/CurrencyDigits.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CurrencyDigits.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/NumberFormat/CurrencyDigits.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,EACT,EAAC,kBAAkB,EAAC,EAAE;IAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAC,GACjE,MAAM,CAIR"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/CurrencyDigits.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/CurrencyDigits.js
new file mode 100644
index 0000000000000000000000000000000000000000..e25a6edc993dace31f776a0cf424be2d71ea5271
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/CurrencyDigits.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CurrencyDigits = void 0;
+var _262_1 = require("../262");
+/**
+ * https://tc39.es/ecma402/#sec-currencydigits
+ */
+function CurrencyDigits(c, _a) {
+ var currencyDigitsData = _a.currencyDigitsData;
+ return (0, _262_1.HasOwnProperty)(currencyDigitsData, c)
+ ? currencyDigitsData[c]
+ : 2;
+}
+exports.CurrencyDigits = CurrencyDigits;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToParts.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToParts.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..053b18510f657e525c5f9bbf6fc3eb003fb845aa
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToParts.d.ts
@@ -0,0 +1,5 @@
+import { NumberFormatInternal, NumberFormatPart } from '../types/number';
+export declare function FormatNumericToParts(nf: Intl.NumberFormat, x: number, implDetails: {
+ getInternalSlots(nf: Intl.NumberFormat): NumberFormatInternal;
+}): NumberFormatPart[];
+//# sourceMappingURL=FormatNumericToParts.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToParts.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToParts.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..9ff1447a2e262836c6a59e68293d14e86c8a4b05
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToParts.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"FormatNumericToParts.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/NumberFormat/FormatNumericToParts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,oBAAoB,EAAE,gBAAgB,EAAC,MAAM,iBAAiB,CAAA;AAEtE,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,IAAI,CAAC,YAAY,EACrB,CAAC,EAAE,MAAM,EACT,WAAW,EAAE;IACX,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;CAC9D,GACA,gBAAgB,EAAE,CAWpB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToParts.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToParts.js
new file mode 100644
index 0000000000000000000000000000000000000000..32a58d16ec5c15650c18c8ad5967cfef48111815
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToParts.js
@@ -0,0 +1,18 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FormatNumericToParts = void 0;
+var PartitionNumberPattern_1 = require("./PartitionNumberPattern");
+var _262_1 = require("../262");
+function FormatNumericToParts(nf, x, implDetails) {
+ var parts = (0, PartitionNumberPattern_1.PartitionNumberPattern)(nf, x, implDetails);
+ var result = (0, _262_1.ArrayCreate)(0);
+ for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {
+ var part = parts_1[_i];
+ result.push({
+ type: part.type,
+ value: part.value,
+ });
+ }
+ return result;
+}
+exports.FormatNumericToParts = FormatNumericToParts;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToString.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToString.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..091b1c4fefce9e15db018e647541ea30f8da92a8
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToString.d.ts
@@ -0,0 +1,9 @@
+import { NumberFormatDigitInternalSlots } from '../types/number';
+/**
+ * https://tc39.es/ecma402/#sec-formatnumberstring
+ */
+export declare function FormatNumericToString(intlObject: Pick, x: number): {
+ roundedNumber: number;
+ formattedString: string;
+};
+//# sourceMappingURL=FormatNumericToString.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToString.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToString.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..91a69177a31ac9e55e296d5e74424b3828c00958
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToString.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"FormatNumericToString.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/NumberFormat/FormatNumericToString.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,8BAA8B,EAE/B,MAAM,iBAAiB,CAAA;AAGxB;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,IAAI,CACd,8BAA8B,EAC5B,cAAc,GACd,0BAA0B,GAC1B,0BAA0B,GAC1B,sBAAsB,GACtB,uBAAuB,GACvB,uBAAuB,CAC1B,EACD,CAAC,EAAE,MAAM;;;EAgDV"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToString.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToString.js
new file mode 100644
index 0000000000000000000000000000000000000000..23bf64c932495083e834c06f869ddfd6588e4253
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToString.js
@@ -0,0 +1,45 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FormatNumericToString = void 0;
+var _262_1 = require("../262");
+var ToRawPrecision_1 = require("./ToRawPrecision");
+var utils_1 = require("../utils");
+var ToRawFixed_1 = require("./ToRawFixed");
+/**
+ * https://tc39.es/ecma402/#sec-formatnumberstring
+ */
+function FormatNumericToString(intlObject, x) {
+ var isNegative = x < 0 || (0, _262_1.SameValue)(x, -0);
+ if (isNegative) {
+ x = -x;
+ }
+ var result;
+ var rourndingType = intlObject.roundingType;
+ switch (rourndingType) {
+ case 'significantDigits':
+ result = (0, ToRawPrecision_1.ToRawPrecision)(x, intlObject.minimumSignificantDigits, intlObject.maximumSignificantDigits);
+ break;
+ case 'fractionDigits':
+ result = (0, ToRawFixed_1.ToRawFixed)(x, intlObject.minimumFractionDigits, intlObject.maximumFractionDigits);
+ break;
+ default:
+ result = (0, ToRawPrecision_1.ToRawPrecision)(x, 1, 2);
+ if (result.integerDigitsCount > 1) {
+ result = (0, ToRawFixed_1.ToRawFixed)(x, 0, 0);
+ }
+ break;
+ }
+ x = result.roundedNumber;
+ var string = result.formattedString;
+ var int = result.integerDigitsCount;
+ var minInteger = intlObject.minimumIntegerDigits;
+ if (int < minInteger) {
+ var forwardZeros = (0, utils_1.repeat)('0', minInteger - int);
+ string = forwardZeros + string;
+ }
+ if (isNegative) {
+ x = -x;
+ }
+ return { roundedNumber: x, formattedString: string };
+}
+exports.FormatNumericToString = FormatNumericToString;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/InitializeNumberFormat.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/InitializeNumberFormat.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..abea59c181fc933d063a1b23fb30b9723ab60919
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/InitializeNumberFormat.d.ts
@@ -0,0 +1,13 @@
+import { NumberFormatInternal, NumberFormatOptions, NumberFormatLocaleInternalData } from '../types/number';
+/**
+ * https://tc39.es/ecma402/#sec-initializenumberformat
+ */
+export declare function InitializeNumberFormat(nf: Intl.NumberFormat, locales: string | ReadonlyArray | undefined, opts: NumberFormatOptions | undefined, { getInternalSlots, localeData, availableLocales, numberingSystemNames, getDefaultLocale, currencyDigitsData, }: {
+ getInternalSlots(nf: Intl.NumberFormat): NumberFormatInternal;
+ localeData: Record;
+ availableLocales: Set;
+ numberingSystemNames: ReadonlyArray;
+ getDefaultLocale(): string;
+ currencyDigitsData: Record;
+}): Intl.NumberFormat;
+//# sourceMappingURL=InitializeNumberFormat.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/InitializeNumberFormat.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/InitializeNumberFormat.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..9eb9e6aba6d2af34174dad2ed4da031d8aec6852
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/InitializeNumberFormat.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"InitializeNumberFormat.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/NumberFormat/InitializeNumberFormat.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,8BAA8B,EAC/B,MAAM,iBAAiB,CAAA;AAUxB;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,IAAI,CAAC,YAAY,EACrB,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,EACnD,IAAI,EAAE,mBAAmB,GAAG,SAAS,EACrC,EACE,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,EAAE;IACD,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;IAC7D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,8BAA8B,GAAG,SAAS,CAAC,CAAA;IACtE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC7B,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3C,gBAAgB,IAAI,MAAM,CAAA;IAC1B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC3C,qBA+GF"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/InitializeNumberFormat.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/InitializeNumberFormat.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ed24c76e3dceee3e52328975de8cde4094e3ee3
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/InitializeNumberFormat.js
@@ -0,0 +1,68 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.InitializeNumberFormat = void 0;
+var CanonicalizeLocaleList_1 = require("../CanonicalizeLocaleList");
+var GetOption_1 = require("../GetOption");
+var intl_localematcher_1 = require("@formatjs/intl-localematcher");
+var SetNumberFormatUnitOptions_1 = require("./SetNumberFormatUnitOptions");
+var CurrencyDigits_1 = require("./CurrencyDigits");
+var SetNumberFormatDigitOptions_1 = require("./SetNumberFormatDigitOptions");
+var utils_1 = require("../utils");
+var CoerceOptionsToObject_1 = require("../CoerceOptionsToObject");
+/**
+ * https://tc39.es/ecma402/#sec-initializenumberformat
+ */
+function InitializeNumberFormat(nf, locales, opts, _a) {
+ var getInternalSlots = _a.getInternalSlots, localeData = _a.localeData, availableLocales = _a.availableLocales, numberingSystemNames = _a.numberingSystemNames, getDefaultLocale = _a.getDefaultLocale, currencyDigitsData = _a.currencyDigitsData;
+ // @ts-ignore
+ var requestedLocales = (0, CanonicalizeLocaleList_1.CanonicalizeLocaleList)(locales);
+ var options = (0, CoerceOptionsToObject_1.CoerceOptionsToObject)(opts);
+ var opt = Object.create(null);
+ var matcher = (0, GetOption_1.GetOption)(options, 'localeMatcher', 'string', ['lookup', 'best fit'], 'best fit');
+ opt.localeMatcher = matcher;
+ var numberingSystem = (0, GetOption_1.GetOption)(options, 'numberingSystem', 'string', undefined, undefined);
+ if (numberingSystem !== undefined &&
+ numberingSystemNames.indexOf(numberingSystem) < 0) {
+ // 8.a. If numberingSystem does not match the Unicode Locale Identifier type nonterminal,
+ // throw a RangeError exception.
+ throw RangeError("Invalid numberingSystems: ".concat(numberingSystem));
+ }
+ opt.nu = numberingSystem;
+ var r = (0, intl_localematcher_1.ResolveLocale)(availableLocales, requestedLocales, opt,
+ // [[RelevantExtensionKeys]] slot, which is a constant
+ ['nu'], localeData, getDefaultLocale);
+ var dataLocaleData = localeData[r.dataLocale];
+ (0, utils_1.invariant)(!!dataLocaleData, "Missing locale data for ".concat(r.dataLocale));
+ var internalSlots = getInternalSlots(nf);
+ internalSlots.locale = r.locale;
+ internalSlots.dataLocale = r.dataLocale;
+ internalSlots.numberingSystem = r.nu;
+ internalSlots.dataLocaleData = dataLocaleData;
+ (0, SetNumberFormatUnitOptions_1.SetNumberFormatUnitOptions)(nf, options, { getInternalSlots: getInternalSlots });
+ var style = internalSlots.style;
+ var mnfdDefault;
+ var mxfdDefault;
+ if (style === 'currency') {
+ var currency = internalSlots.currency;
+ var cDigits = (0, CurrencyDigits_1.CurrencyDigits)(currency, { currencyDigitsData: currencyDigitsData });
+ mnfdDefault = cDigits;
+ mxfdDefault = cDigits;
+ }
+ else {
+ mnfdDefault = 0;
+ mxfdDefault = style === 'percent' ? 0 : 3;
+ }
+ var notation = (0, GetOption_1.GetOption)(options, 'notation', 'string', ['standard', 'scientific', 'engineering', 'compact'], 'standard');
+ internalSlots.notation = notation;
+ (0, SetNumberFormatDigitOptions_1.SetNumberFormatDigitOptions)(internalSlots, options, mnfdDefault, mxfdDefault, notation);
+ var compactDisplay = (0, GetOption_1.GetOption)(options, 'compactDisplay', 'string', ['short', 'long'], 'short');
+ if (notation === 'compact') {
+ internalSlots.compactDisplay = compactDisplay;
+ }
+ var useGrouping = (0, GetOption_1.GetOption)(options, 'useGrouping', 'boolean', undefined, true);
+ internalSlots.useGrouping = useGrouping;
+ var signDisplay = (0, GetOption_1.GetOption)(options, 'signDisplay', 'string', ['auto', 'never', 'always', 'exceptZero'], 'auto');
+ internalSlots.signDisplay = signDisplay;
+ return nf;
+}
+exports.InitializeNumberFormat = InitializeNumberFormat;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/PartitionNumberPattern.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/PartitionNumberPattern.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fca6056ea220fc58e13c5f20d85de99ac587a546
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/PartitionNumberPattern.d.ts
@@ -0,0 +1,8 @@
+import { NumberFormatInternal } from '../types/number';
+/**
+ * https://tc39.es/ecma402/#sec-formatnumberstring
+ */
+export declare function PartitionNumberPattern(numberFormat: Intl.NumberFormat, x: number, { getInternalSlots, }: {
+ getInternalSlots(nf: Intl.NumberFormat): NumberFormatInternal;
+}): import("../types/number").NumberFormatPart[];
+//# sourceMappingURL=PartitionNumberPattern.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/PartitionNumberPattern.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/PartitionNumberPattern.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..2273dfef86b7e454494b5be7ef9ea9864973498d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/PartitionNumberPattern.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"PartitionNumberPattern.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/NumberFormat/PartitionNumberPattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,iBAAiB,CAAA;AAMpD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,CAAC,EAAE,MAAM,EACT,EACE,gBAAgB,GACjB,EAAE;IACD,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;CAC9D,gDAqEF"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/PartitionNumberPattern.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/PartitionNumberPattern.js
new file mode 100644
index 0000000000000000000000000000000000000000..c3a292f7460dae85ca826963d763c34969ed357e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/PartitionNumberPattern.js
@@ -0,0 +1,80 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.PartitionNumberPattern = void 0;
+var tslib_1 = require("tslib");
+var FormatNumericToString_1 = require("./FormatNumericToString");
+var _262_1 = require("../262");
+var ComputeExponent_1 = require("./ComputeExponent");
+var format_to_parts_1 = (0, tslib_1.__importDefault)(require("./format_to_parts"));
+/**
+ * https://tc39.es/ecma402/#sec-formatnumberstring
+ */
+function PartitionNumberPattern(numberFormat, x, _a) {
+ var _b;
+ var getInternalSlots = _a.getInternalSlots;
+ var internalSlots = getInternalSlots(numberFormat);
+ var pl = internalSlots.pl, dataLocaleData = internalSlots.dataLocaleData, numberingSystem = internalSlots.numberingSystem;
+ var symbols = dataLocaleData.numbers.symbols[numberingSystem] ||
+ dataLocaleData.numbers.symbols[dataLocaleData.numbers.nu[0]];
+ var magnitude = 0;
+ var exponent = 0;
+ var n;
+ if (isNaN(x)) {
+ n = symbols.nan;
+ }
+ else if (!isFinite(x)) {
+ n = symbols.infinity;
+ }
+ else {
+ if (internalSlots.style === 'percent') {
+ x *= 100;
+ }
+ ;
+ _b = (0, ComputeExponent_1.ComputeExponent)(numberFormat, x, {
+ getInternalSlots: getInternalSlots,
+ }), exponent = _b[0], magnitude = _b[1];
+ // Preserve more precision by doing multiplication when exponent is negative.
+ x = exponent < 0 ? x * Math.pow(10, -exponent) : x / Math.pow(10, exponent);
+ var formatNumberResult = (0, FormatNumericToString_1.FormatNumericToString)(internalSlots, x);
+ n = formatNumberResult.formattedString;
+ x = formatNumberResult.roundedNumber;
+ }
+ // Based on https://tc39.es/ecma402/#sec-getnumberformatpattern
+ // We need to do this before `x` is rounded.
+ var sign;
+ var signDisplay = internalSlots.signDisplay;
+ switch (signDisplay) {
+ case 'never':
+ sign = 0;
+ break;
+ case 'auto':
+ if ((0, _262_1.SameValue)(x, 0) || x > 0 || isNaN(x)) {
+ sign = 0;
+ }
+ else {
+ sign = -1;
+ }
+ break;
+ case 'always':
+ if ((0, _262_1.SameValue)(x, 0) || x > 0 || isNaN(x)) {
+ sign = 1;
+ }
+ else {
+ sign = -1;
+ }
+ break;
+ default:
+ // x === 0 -> x is 0 or x is -0
+ if (x === 0 || isNaN(x)) {
+ sign = 0;
+ }
+ else if (x > 0) {
+ sign = 1;
+ }
+ else {
+ sign = -1;
+ }
+ }
+ return (0, format_to_parts_1.default)({ roundedNumber: x, formattedString: n, exponent: exponent, magnitude: magnitude, sign: sign }, internalSlots.dataLocaleData, pl, internalSlots);
+}
+exports.PartitionNumberPattern = PartitionNumberPattern;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatDigitOptions.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatDigitOptions.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1b96f54f41006d4ca1461de1126674329e99c050
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatDigitOptions.d.ts
@@ -0,0 +1,6 @@
+import { NumberFormatDigitOptions, NumberFormatNotation, NumberFormatDigitInternalSlots } from '../types/number';
+/**
+ * https://tc39.es/ecma402/#sec-setnfdigitoptions
+ */
+export declare function SetNumberFormatDigitOptions(internalSlots: NumberFormatDigitInternalSlots, opts: NumberFormatDigitOptions, mnfdDefault: number, mxfdDefault: number, notation: NumberFormatNotation): void;
+//# sourceMappingURL=SetNumberFormatDigitOptions.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatDigitOptions.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatDigitOptions.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..01737b07ecd8357c821e103e5f50757b44e83dec
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatDigitOptions.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"SetNumberFormatDigitOptions.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/NumberFormat/SetNumberFormatDigitOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,EAC/B,MAAM,iBAAiB,CAAA;AAIxB;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,8BAA8B,EAC7C,IAAI,EAAE,wBAAwB,EAC9B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,oBAAoB,QA4B/B"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatDigitOptions.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatDigitOptions.js
new file mode 100644
index 0000000000000000000000000000000000000000..717f103e8cd1ea502bcb54bd44a0567b41b9c789
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatDigitOptions.js
@@ -0,0 +1,40 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.SetNumberFormatDigitOptions = void 0;
+var GetNumberOption_1 = require("../GetNumberOption");
+var DefaultNumberOption_1 = require("../DefaultNumberOption");
+/**
+ * https://tc39.es/ecma402/#sec-setnfdigitoptions
+ */
+function SetNumberFormatDigitOptions(internalSlots, opts, mnfdDefault, mxfdDefault, notation) {
+ var mnid = (0, GetNumberOption_1.GetNumberOption)(opts, 'minimumIntegerDigits', 1, 21, 1);
+ var mnfd = opts.minimumFractionDigits;
+ var mxfd = opts.maximumFractionDigits;
+ var mnsd = opts.minimumSignificantDigits;
+ var mxsd = opts.maximumSignificantDigits;
+ internalSlots.minimumIntegerDigits = mnid;
+ if (mnsd !== undefined || mxsd !== undefined) {
+ internalSlots.roundingType = 'significantDigits';
+ mnsd = (0, DefaultNumberOption_1.DefaultNumberOption)(mnsd, 1, 21, 1);
+ mxsd = (0, DefaultNumberOption_1.DefaultNumberOption)(mxsd, mnsd, 21, 21);
+ internalSlots.minimumSignificantDigits = mnsd;
+ internalSlots.maximumSignificantDigits = mxsd;
+ }
+ else if (mnfd !== undefined || mxfd !== undefined) {
+ internalSlots.roundingType = 'fractionDigits';
+ mnfd = (0, DefaultNumberOption_1.DefaultNumberOption)(mnfd, 0, 20, mnfdDefault);
+ var mxfdActualDefault = Math.max(mnfd, mxfdDefault);
+ mxfd = (0, DefaultNumberOption_1.DefaultNumberOption)(mxfd, mnfd, 20, mxfdActualDefault);
+ internalSlots.minimumFractionDigits = mnfd;
+ internalSlots.maximumFractionDigits = mxfd;
+ }
+ else if (notation === 'compact') {
+ internalSlots.roundingType = 'compactRounding';
+ }
+ else {
+ internalSlots.roundingType = 'fractionDigits';
+ internalSlots.minimumFractionDigits = mnfdDefault;
+ internalSlots.maximumFractionDigits = mxfdDefault;
+ }
+}
+exports.SetNumberFormatDigitOptions = SetNumberFormatDigitOptions;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatUnitOptions.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatUnitOptions.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a4460df9da237d58373bcdfcb39fed08d23b4936
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatUnitOptions.d.ts
@@ -0,0 +1,8 @@
+import { NumberFormatInternal, NumberFormatOptions } from '../types/number';
+/**
+ * https://tc39.es/ecma402/#sec-setnumberformatunitoptions
+ */
+export declare function SetNumberFormatUnitOptions(nf: Intl.NumberFormat, options: NumberFormatOptions | undefined, { getInternalSlots, }: {
+ getInternalSlots(nf: Intl.NumberFormat): NumberFormatInternal;
+}): void;
+//# sourceMappingURL=SetNumberFormatUnitOptions.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatUnitOptions.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatUnitOptions.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..be02d809df7b0053696205d042bc039f5316db0e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatUnitOptions.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"SetNumberFormatUnitOptions.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/NumberFormat/SetNumberFormatUnitOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAA;AAKzE;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,IAAI,CAAC,YAAY,EACrB,OAAO,iCAA2C,EAClD,EACE,gBAAgB,GACjB,EAAE;IAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;CAAC,QA+DnE"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatUnitOptions.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatUnitOptions.js
new file mode 100644
index 0000000000000000000000000000000000000000..953047c321b9a784bbb793cfae01c6b526bb8546
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatUnitOptions.js
@@ -0,0 +1,43 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.SetNumberFormatUnitOptions = void 0;
+var GetOption_1 = require("../GetOption");
+var IsWellFormedCurrencyCode_1 = require("../IsWellFormedCurrencyCode");
+var IsWellFormedUnitIdentifier_1 = require("../IsWellFormedUnitIdentifier");
+/**
+ * https://tc39.es/ecma402/#sec-setnumberformatunitoptions
+ */
+function SetNumberFormatUnitOptions(nf, options, _a) {
+ if (options === void 0) { options = Object.create(null); }
+ var getInternalSlots = _a.getInternalSlots;
+ var internalSlots = getInternalSlots(nf);
+ var style = (0, GetOption_1.GetOption)(options, 'style', 'string', ['decimal', 'percent', 'currency', 'unit'], 'decimal');
+ internalSlots.style = style;
+ var currency = (0, GetOption_1.GetOption)(options, 'currency', 'string', undefined, undefined);
+ if (currency !== undefined && !(0, IsWellFormedCurrencyCode_1.IsWellFormedCurrencyCode)(currency)) {
+ throw RangeError('Malformed currency code');
+ }
+ if (style === 'currency' && currency === undefined) {
+ throw TypeError('currency cannot be undefined');
+ }
+ var currencyDisplay = (0, GetOption_1.GetOption)(options, 'currencyDisplay', 'string', ['code', 'symbol', 'narrowSymbol', 'name'], 'symbol');
+ var currencySign = (0, GetOption_1.GetOption)(options, 'currencySign', 'string', ['standard', 'accounting'], 'standard');
+ var unit = (0, GetOption_1.GetOption)(options, 'unit', 'string', undefined, undefined);
+ if (unit !== undefined && !(0, IsWellFormedUnitIdentifier_1.IsWellFormedUnitIdentifier)(unit)) {
+ throw RangeError('Invalid unit argument for Intl.NumberFormat()');
+ }
+ if (style === 'unit' && unit === undefined) {
+ throw TypeError('unit cannot be undefined');
+ }
+ var unitDisplay = (0, GetOption_1.GetOption)(options, 'unitDisplay', 'string', ['short', 'narrow', 'long'], 'short');
+ if (style === 'currency') {
+ internalSlots.currency = currency.toUpperCase();
+ internalSlots.currencyDisplay = currencyDisplay;
+ internalSlots.currencySign = currencySign;
+ }
+ if (style === 'unit') {
+ internalSlots.unit = unit;
+ internalSlots.unitDisplay = unitDisplay;
+ }
+}
+exports.SetNumberFormatUnitOptions = SetNumberFormatUnitOptions;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawFixed.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawFixed.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..de99cbd43ae9060aa64305ad279d0d7ce112e5e9
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawFixed.d.ts
@@ -0,0 +1,10 @@
+import { RawNumberFormatResult } from '../types/number';
+/**
+ * TODO: dedup with intl-pluralrules and support BigInt
+ * https://tc39.es/ecma402/#sec-torawfixed
+ * @param x a finite non-negative Number or BigInt
+ * @param minFraction and integer between 0 and 20
+ * @param maxFraction and integer between 0 and 20
+ */
+export declare function ToRawFixed(x: number, minFraction: number, maxFraction: number): RawNumberFormatResult;
+//# sourceMappingURL=ToRawFixed.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawFixed.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawFixed.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..2bdd47c5a801d9e15d890e86524146e840bb4cbf
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawFixed.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ToRawFixed.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/NumberFormat/ToRawFixed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,iBAAiB,CAAA;AAGrD;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,CAAC,EAAE,MAAM,EACT,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,qBAAqB,CAyCvB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawFixed.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawFixed.js
new file mode 100644
index 0000000000000000000000000000000000000000..e464d0f066e647fbeeb9594f6dc9066291cdfc41
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawFixed.js
@@ -0,0 +1,55 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ToRawFixed = void 0;
+var utils_1 = require("../utils");
+/**
+ * TODO: dedup with intl-pluralrules and support BigInt
+ * https://tc39.es/ecma402/#sec-torawfixed
+ * @param x a finite non-negative Number or BigInt
+ * @param minFraction and integer between 0 and 20
+ * @param maxFraction and integer between 0 and 20
+ */
+function ToRawFixed(x, minFraction, maxFraction) {
+ var f = maxFraction;
+ var n = Math.round(x * Math.pow(10, f));
+ var xFinal = n / Math.pow(10, f);
+ // n is a positive integer, but it is possible to be greater than 1e21.
+ // In such case we will go the slow path.
+ // See also: https://tc39.es/ecma262/#sec-numeric-types-number-tostring
+ var m;
+ if (n < 1e21) {
+ m = n.toString();
+ }
+ else {
+ m = n.toString();
+ var _a = m.split('e'), mantissa = _a[0], exponent = _a[1];
+ m = mantissa.replace('.', '');
+ m = m + (0, utils_1.repeat)('0', Math.max(+exponent - m.length + 1, 0));
+ }
+ var int;
+ if (f !== 0) {
+ var k = m.length;
+ if (k <= f) {
+ var z = (0, utils_1.repeat)('0', f + 1 - k);
+ m = z + m;
+ k = f + 1;
+ }
+ var a = m.slice(0, k - f);
+ var b = m.slice(k - f);
+ m = "".concat(a, ".").concat(b);
+ int = a.length;
+ }
+ else {
+ int = m.length;
+ }
+ var cut = maxFraction - minFraction;
+ while (cut > 0 && m[m.length - 1] === '0') {
+ m = m.slice(0, -1);
+ cut--;
+ }
+ if (m[m.length - 1] === '.') {
+ m = m.slice(0, -1);
+ }
+ return { formattedString: m, roundedNumber: xFinal, integerDigitsCount: int };
+}
+exports.ToRawFixed = ToRawFixed;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawPrecision.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawPrecision.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..21f71153ef746dccc5f44927c732230957ef2e1c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawPrecision.d.ts
@@ -0,0 +1,3 @@
+import { RawNumberFormatResult } from '../types/number';
+export declare function ToRawPrecision(x: number, minPrecision: number, maxPrecision: number): RawNumberFormatResult;
+//# sourceMappingURL=ToRawPrecision.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawPrecision.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawPrecision.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..95a829c46b76617ef1098f1f07b79ddd3320096b
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawPrecision.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ToRawPrecision.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/NumberFormat/ToRawPrecision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,iBAAiB,CAAA;AAGrD,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,EACT,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,qBAAqB,CA8EvB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawPrecision.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawPrecision.js
new file mode 100644
index 0000000000000000000000000000000000000000..e6f8980bc352dcb92de51073de7cd11c70f0cb09
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawPrecision.js
@@ -0,0 +1,78 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ToRawPrecision = void 0;
+var utils_1 = require("../utils");
+function ToRawPrecision(x, minPrecision, maxPrecision) {
+ var p = maxPrecision;
+ var m;
+ var e;
+ var xFinal;
+ if (x === 0) {
+ m = (0, utils_1.repeat)('0', p);
+ e = 0;
+ xFinal = 0;
+ }
+ else {
+ var xToString = x.toString();
+ // If xToString is formatted as scientific notation, the number is either very small or very
+ // large. If the precision of the formatted string is lower that requested max precision, we
+ // should still infer them from the formatted string, otherwise the formatted result might have
+ // precision loss (e.g. 1e41 will not have 0 in every trailing digits).
+ var xToStringExponentIndex = xToString.indexOf('e');
+ var _a = xToString.split('e'), xToStringMantissa = _a[0], xToStringExponent = _a[1];
+ var xToStringMantissaWithoutDecimalPoint = xToStringMantissa.replace('.', '');
+ if (xToStringExponentIndex >= 0 &&
+ xToStringMantissaWithoutDecimalPoint.length <= p) {
+ e = +xToStringExponent;
+ m =
+ xToStringMantissaWithoutDecimalPoint +
+ (0, utils_1.repeat)('0', p - xToStringMantissaWithoutDecimalPoint.length);
+ xFinal = x;
+ }
+ else {
+ e = (0, utils_1.getMagnitude)(x);
+ var decimalPlaceOffset = e - p + 1;
+ // n is the integer containing the required precision digits. To derive the formatted string,
+ // we will adjust its decimal place in the logic below.
+ var n = Math.round(adjustDecimalPlace(x, decimalPlaceOffset));
+ // The rounding caused the change of magnitude, so we should increment `e` by 1.
+ if (adjustDecimalPlace(n, p - 1) >= 10) {
+ e = e + 1;
+ // Divide n by 10 to swallow one precision.
+ n = Math.floor(n / 10);
+ }
+ m = n.toString();
+ // Equivalent of n * 10 ** (e - p + 1)
+ xFinal = adjustDecimalPlace(n, p - 1 - e);
+ }
+ }
+ var int;
+ if (e >= p - 1) {
+ m = m + (0, utils_1.repeat)('0', e - p + 1);
+ int = e + 1;
+ }
+ else if (e >= 0) {
+ m = "".concat(m.slice(0, e + 1), ".").concat(m.slice(e + 1));
+ int = e + 1;
+ }
+ else {
+ m = "0.".concat((0, utils_1.repeat)('0', -e - 1)).concat(m);
+ int = 1;
+ }
+ if (m.indexOf('.') >= 0 && maxPrecision > minPrecision) {
+ var cut = maxPrecision - minPrecision;
+ while (cut > 0 && m[m.length - 1] === '0') {
+ m = m.slice(0, -1);
+ cut--;
+ }
+ if (m[m.length - 1] === '.') {
+ m = m.slice(0, -1);
+ }
+ }
+ return { formattedString: m, roundedNumber: xFinal, integerDigitsCount: int };
+ // x / (10 ** magnitude), but try to preserve as much floating point precision as possible.
+ function adjustDecimalPlace(x, magnitude) {
+ return magnitude < 0 ? x * Math.pow(10, -magnitude) : x / Math.pow(10, magnitude);
+ }
+}
+exports.ToRawPrecision = ToRawPrecision;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/digit-mapping.generated.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/digit-mapping.generated.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4d0f8e1142c3efebaf1677c9fd43d741b2c9221c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/digit-mapping.generated.d.ts
@@ -0,0 +1,2 @@
+export declare const digitMapping: Record>;
+//# sourceMappingURL=digit-mapping.generated.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/digit-mapping.generated.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/digit-mapping.generated.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..b633b73a6c032499ec844a4cf042391defbd1444
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/digit-mapping.generated.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"digit-mapping.generated.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/NumberFormat/digit-mapping.generated.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAA67G,CAAC"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/digit-mapping.generated.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/digit-mapping.generated.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8bd9ef40016fe17d56c8a9b2835e4df352a6e1f
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/digit-mapping.generated.js
@@ -0,0 +1,4 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.digitMapping = void 0;
+exports.digitMapping = { "adlm": ["𞥐", "𞥑", "𞥒", "𞥓", "𞥔", "𞥕", "𞥖", "𞥗", "𞥘", "𞥙"], "ahom": ["𑜰", "𑜱", "𑜲", "𑜳", "𑜴", "𑜵", "𑜶", "𑜷", "𑜸", "𑜹"], "arab": ["٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"], "arabext": ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"], "bali": ["᭐", "᭑", "᭒", "᭓", "᭔", "᭕", "᭖", "᭗", "᭘", "᭙"], "beng": ["০", "১", "২", "৩", "৪", "৫", "৬", "৭", "৮", "৯"], "bhks": ["𑱐", "𑱑", "𑱒", "𑱓", "𑱔", "𑱕", "𑱖", "𑱗", "𑱘", "𑱙"], "brah": ["𑁦", "𑁧", "𑁨", "𑁩", "𑁪", "𑁫", "𑁬", "𑁭", "𑁮", "𑁯"], "cakm": ["𑄶", "𑄷", "𑄸", "𑄹", "𑄺", "𑄻", "𑄼", "𑄽", "𑄾", "𑄿"], "cham": ["꩐", "꩑", "꩒", "꩓", "꩔", "꩕", "꩖", "꩗", "꩘", "꩙"], "deva": ["०", "१", "२", "३", "४", "५", "६", "७", "८", "९"], "diak": ["𑥐", "𑥑", "𑥒", "𑥓", "𑥔", "𑥕", "𑥖", "𑥗", "𑥘", "𑥙"], "fullwide": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], "gong": ["𑶠", "𑶡", "𑶢", "𑶣", "𑶤", "𑶥", "𑶦", "𑶧", "𑶨", "𑶩"], "gonm": ["𑵐", "𑵑", "𑵒", "𑵓", "𑵔", "𑵕", "𑵖", "𑵗", "𑵘", "𑵙"], "gujr": ["૦", "૧", "૨", "૩", "૪", "૫", "૬", "૭", "૮", "૯"], "guru": ["੦", "੧", "੨", "੩", "੪", "੫", "੬", "੭", "੮", "੯"], "hanidec": ["〇", "一", "二", "三", "四", "五", "六", "七", "八", "九"], "hmng": ["𖭐", "𖭑", "𖭒", "𖭓", "𖭔", "𖭕", "𖭖", "𖭗", "𖭘", "𖭙"], "hmnp": ["𞅀", "𞅁", "𞅂", "𞅃", "𞅄", "𞅅", "𞅆", "𞅇", "𞅈", "𞅉"], "java": ["꧐", "꧑", "꧒", "꧓", "꧔", "꧕", "꧖", "꧗", "꧘", "꧙"], "kali": ["꤀", "꤁", "꤂", "꤃", "꤄", "꤅", "꤆", "꤇", "꤈", "꤉"], "khmr": ["០", "១", "២", "៣", "៤", "៥", "៦", "៧", "៨", "៩"], "knda": ["೦", "೧", "೨", "೩", "೪", "೫", "೬", "೭", "೮", "೯"], "lana": ["᪀", "᪁", "᪂", "᪃", "᪄", "᪅", "᪆", "᪇", "᪈", "᪉"], "lanatham": ["᪐", "᪑", "᪒", "᪓", "᪔", "᪕", "᪖", "᪗", "᪘", "᪙"], "laoo": ["໐", "໑", "໒", "໓", "໔", "໕", "໖", "໗", "໘", "໙"], "lepc": ["᪐", "᪑", "᪒", "᪓", "᪔", "᪕", "᪖", "᪗", "᪘", "᪙"], "limb": ["᥆", "᥇", "᥈", "᥉", "᥊", "᥋", "᥌", "᥍", "᥎", "᥏"], "mathbold": ["𝟎", "𝟏", "𝟐", "𝟑", "𝟒", "𝟓", "𝟔", "𝟕", "𝟖", "𝟗"], "mathdbl": ["𝟘", "𝟙", "𝟚", "𝟛", "𝟜", "𝟝", "𝟞", "𝟟", "𝟠", "𝟡"], "mathmono": ["𝟶", "𝟷", "𝟸", "𝟹", "𝟺", "𝟻", "𝟼", "𝟽", "𝟾", "𝟿"], "mathsanb": ["𝟬", "𝟭", "𝟮", "𝟯", "𝟰", "𝟱", "𝟲", "𝟳", "𝟴", "𝟵"], "mathsans": ["𝟢", "𝟣", "𝟤", "𝟥", "𝟦", "𝟧", "𝟨", "𝟩", "𝟪", "𝟫"], "mlym": ["൦", "൧", "൨", "൩", "൪", "൫", "൬", "൭", "൮", "൯"], "modi": ["𑙐", "𑙑", "𑙒", "𑙓", "𑙔", "𑙕", "𑙖", "𑙗", "𑙘", "𑙙"], "mong": ["᠐", "᠑", "᠒", "᠓", "᠔", "᠕", "᠖", "᠗", "᠘", "᠙"], "mroo": ["𖩠", "𖩡", "𖩢", "𖩣", "𖩤", "𖩥", "𖩦", "𖩧", "𖩨", "𖩩"], "mtei": ["꯰", "꯱", "꯲", "꯳", "꯴", "꯵", "꯶", "꯷", "꯸", "꯹"], "mymr": ["၀", "၁", "၂", "၃", "၄", "၅", "၆", "၇", "၈", "၉"], "mymrshan": ["႐", "႑", "႒", "႓", "႔", "႕", "႖", "႗", "႘", "႙"], "mymrtlng": ["꧰", "꧱", "꧲", "꧳", "꧴", "꧵", "꧶", "꧷", "꧸", "꧹"], "newa": ["𑑐", "𑑑", "𑑒", "𑑓", "𑑔", "𑑕", "𑑖", "𑑗", "𑑘", "𑑙"], "nkoo": ["߀", "߁", "߂", "߃", "߄", "߅", "߆", "߇", "߈", "߉"], "olck": ["᱐", "᱑", "᱒", "᱓", "᱔", "᱕", "᱖", "᱗", "᱘", "᱙"], "orya": ["୦", "୧", "୨", "୩", "୪", "୫", "୬", "୭", "୮", "୯"], "osma": ["𐒠", "𐒡", "𐒢", "𐒣", "𐒤", "𐒥", "𐒦", "𐒧", "𐒨", "𐒩"], "rohg": ["𐴰", "𐴱", "𐴲", "𐴳", "𐴴", "𐴵", "𐴶", "𐴷", "𐴸", "𐴹"], "saur": ["꣐", "꣑", "꣒", "꣓", "꣔", "꣕", "꣖", "꣗", "꣘", "꣙"], "segment": ["🯰", "🯱", "🯲", "🯳", "🯴", "🯵", "🯶", "🯷", "🯸", "🯹"], "shrd": ["𑇐", "𑇑", "𑇒", "𑇓", "𑇔", "𑇕", "𑇖", "𑇗", "𑇘", "𑇙"], "sind": ["𑋰", "𑋱", "𑋲", "𑋳", "𑋴", "𑋵", "𑋶", "𑋷", "𑋸", "𑋹"], "sinh": ["෦", "෧", "෨", "෩", "෪", "෫", "෬", "෭", "෮", "෯"], "sora": ["𑃰", "𑃱", "𑃲", "𑃳", "𑃴", "𑃵", "𑃶", "𑃷", "𑃸", "𑃹"], "sund": ["᮰", "᮱", "᮲", "᮳", "᮴", "᮵", "᮶", "᮷", "᮸", "᮹"], "takr": ["𑛀", "𑛁", "𑛂", "𑛃", "𑛄", "𑛅", "𑛆", "𑛇", "𑛈", "𑛉"], "talu": ["᧐", "᧑", "᧒", "᧓", "᧔", "᧕", "᧖", "᧗", "᧘", "᧙"], "tamldec": ["௦", "௧", "௨", "௩", "௪", "௫", "௬", "௭", "௮", "௯"], "telu": ["౦", "౧", "౨", "౩", "౪", "౫", "౬", "౭", "౮", "౯"], "thai": ["๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙"], "tibt": ["༠", "༡", "༢", "༣", "༤", "༥", "༦", "༧", "༨", "༩"], "tirh": ["𑓐", "𑓑", "𑓒", "𑓓", "𑓔", "𑓕", "𑓖", "𑓗", "𑓘", "𑓙"], "vaii": ["ᘠ", "ᘡ", "ᘢ", "ᘣ", "ᘤ", "ᘥ", "ᘦ", "ᘧ", "ᘨ", "ᘩ"], "wara": ["𑣠", "𑣡", "𑣢", "𑣣", "𑣤", "𑣥", "𑣦", "𑣧", "𑣨", "𑣩"], "wcho": ["𞋰", "𞋱", "𞋲", "𞋳", "𞋴", "𞋵", "𞋶", "𞋷", "𞋸", "𞋹"] };
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/format_to_parts.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/format_to_parts.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..91705dff6dd94f25f427c1962e0ce62ebcb604e6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/format_to_parts.d.ts
@@ -0,0 +1,22 @@
+import { NumberFormatOptionsStyle, NumberFormatOptionsNotation, NumberFormatOptionsCompactDisplay, NumberFormatOptionsCurrencyDisplay, NumberFormatOptionsCurrencySign, NumberFormatOptionsUnitDisplay, NumberFormatLocaleInternalData, NumberFormatPart } from '../types/number';
+interface NumberResult {
+ formattedString: string;
+ roundedNumber: number;
+ sign: -1 | 0 | 1;
+ exponent: number;
+ magnitude: number;
+}
+export default function formatToParts(numberResult: NumberResult, data: NumberFormatLocaleInternalData, pl: Intl.PluralRules, options: {
+ numberingSystem: string;
+ useGrouping: boolean;
+ style: NumberFormatOptionsStyle;
+ notation: NumberFormatOptionsNotation;
+ compactDisplay?: NumberFormatOptionsCompactDisplay;
+ currency?: string;
+ currencyDisplay?: NumberFormatOptionsCurrencyDisplay;
+ currencySign?: NumberFormatOptionsCurrencySign;
+ unit?: string;
+ unitDisplay?: NumberFormatOptionsUnitDisplay;
+}): NumberFormatPart[];
+export {};
+//# sourceMappingURL=format_to_parts.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/format_to_parts.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/format_to_parts.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..f5aabf2939b7d71a72d7937b21f7b9b98dcc1d9f
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/format_to_parts.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"format_to_parts.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/NumberFormat/format_to_parts.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,iCAAiC,EACjC,kCAAkC,EAClC,+BAA+B,EAC/B,8BAA8B,EAC9B,8BAA8B,EAM9B,gBAAgB,EACjB,MAAM,iBAAiB,CAAA;AAexB,UAAU,YAAY;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAEhB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,8BAA8B,EACpC,EAAE,EAAE,IAAI,CAAC,WAAW,EACpB,OAAO,EAAE;IACP,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,EAAE,wBAAwB,CAAA;IAE/B,QAAQ,EAAE,2BAA2B,CAAA;IAErC,cAAc,CAAC,EAAE,iCAAiC,CAAA;IAElD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,kCAAkC,CAAA;IACpD,YAAY,CAAC,EAAE,+BAA+B,CAAA;IAE9C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,8BAA8B,CAAA;CAC7C,GACA,gBAAgB,EAAE,CAySpB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/format_to_parts.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/format_to_parts.js
new file mode 100644
index 0000000000000000000000000000000000000000..dcd6bc8b30901dfe66f821a84b4acdd34e1be529
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/NumberFormat/format_to_parts.js
@@ -0,0 +1,424 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var ToRawFixed_1 = require("./ToRawFixed");
+var digit_mapping_generated_1 = require("./digit-mapping.generated");
+var regex_generated_1 = require("../regex.generated");
+// This is from: unicode-12.1.0/General_Category/Symbol/regex.js
+// IE11 does not support unicode flag, otherwise this is just /\p{S}/u.
+// /^\p{S}/u
+var CARET_S_UNICODE_REGEX = new RegExp("^".concat(regex_generated_1.S_UNICODE_REGEX.source));
+// /\p{S}$/u
+var S_DOLLAR_UNICODE_REGEX = new RegExp("".concat(regex_generated_1.S_UNICODE_REGEX.source, "$"));
+var CLDR_NUMBER_PATTERN = /[#0](?:[\.,][#0]+)*/g;
+function formatToParts(numberResult, data, pl, options) {
+ var sign = numberResult.sign, exponent = numberResult.exponent, magnitude = numberResult.magnitude;
+ var notation = options.notation, style = options.style, numberingSystem = options.numberingSystem;
+ var defaultNumberingSystem = data.numbers.nu[0];
+ // #region Part 1: partition and interpolate the CLDR number pattern.
+ // ----------------------------------------------------------
+ var compactNumberPattern = null;
+ if (notation === 'compact' && magnitude) {
+ compactNumberPattern = getCompactDisplayPattern(numberResult, pl, data, style, options.compactDisplay, options.currencyDisplay, numberingSystem);
+ }
+ // This is used multiple times
+ var nonNameCurrencyPart;
+ if (style === 'currency' && options.currencyDisplay !== 'name') {
+ var byCurrencyDisplay = data.currencies[options.currency];
+ if (byCurrencyDisplay) {
+ switch (options.currencyDisplay) {
+ case 'code':
+ nonNameCurrencyPart = options.currency;
+ break;
+ case 'symbol':
+ nonNameCurrencyPart = byCurrencyDisplay.symbol;
+ break;
+ default:
+ nonNameCurrencyPart = byCurrencyDisplay.narrow;
+ break;
+ }
+ }
+ else {
+ // Fallback for unknown currency
+ nonNameCurrencyPart = options.currency;
+ }
+ }
+ var numberPattern;
+ if (!compactNumberPattern) {
+ // Note: if the style is unit, or is currency and the currency display is name,
+ // its unit parts will be interpolated in part 2. So here we can fallback to decimal.
+ if (style === 'decimal' ||
+ style === 'unit' ||
+ (style === 'currency' && options.currencyDisplay === 'name')) {
+ // Shortcut for decimal
+ var decimalData = data.numbers.decimal[numberingSystem] ||
+ data.numbers.decimal[defaultNumberingSystem];
+ numberPattern = getPatternForSign(decimalData.standard, sign);
+ }
+ else if (style === 'currency') {
+ var currencyData = data.numbers.currency[numberingSystem] ||
+ data.numbers.currency[defaultNumberingSystem];
+ // We replace number pattern part with `0` for easier postprocessing.
+ numberPattern = getPatternForSign(currencyData[options.currencySign], sign);
+ }
+ else {
+ // percent
+ var percentPattern = data.numbers.percent[numberingSystem] ||
+ data.numbers.percent[defaultNumberingSystem];
+ numberPattern = getPatternForSign(percentPattern, sign);
+ }
+ }
+ else {
+ numberPattern = compactNumberPattern;
+ }
+ // Extract the decimal number pattern string. It looks like "#,##0,00", which will later be
+ // used to infer decimal group sizes.
+ var decimalNumberPattern = CLDR_NUMBER_PATTERN.exec(numberPattern)[0];
+ // Now we start to substitute patterns
+ // 1. replace strings like `0` and `#,##0.00` with `{0}`
+ // 2. unquote characters (invariant: the quoted characters does not contain the special tokens)
+ numberPattern = numberPattern
+ .replace(CLDR_NUMBER_PATTERN, '{0}')
+ .replace(/'(.)'/g, '$1');
+ // Handle currency spacing (both compact and non-compact).
+ if (style === 'currency' && options.currencyDisplay !== 'name') {
+ var currencyData = data.numbers.currency[numberingSystem] ||
+ data.numbers.currency[defaultNumberingSystem];
+ // See `currencySpacing` substitution rule in TR-35.
+ // Here we always assume the currencyMatch is "[:^S:]" and surroundingMatch is "[:digit:]".
+ //
+ // Example 1: for pattern "#,##0.00¤" with symbol "US$", we replace "¤" with the symbol,
+ // but insert an extra non-break space before the symbol, because "[:^S:]" matches "U" in
+ // "US$" and "[:digit:]" matches the latn numbering system digits.
+ //
+ // Example 2: for pattern "¤#,##0.00" with symbol "US$", there is no spacing between symbol
+ // and number, because `$` does not match "[:^S:]".
+ //
+ // Implementation note: here we do the best effort to infer the insertion.
+ // We also assume that `beforeInsertBetween` and `afterInsertBetween` will never be `;`.
+ var afterCurrency = currencyData.currencySpacing.afterInsertBetween;
+ if (afterCurrency && !S_DOLLAR_UNICODE_REGEX.test(nonNameCurrencyPart)) {
+ numberPattern = numberPattern.replace('¤{0}', "\u00A4".concat(afterCurrency, "{0}"));
+ }
+ var beforeCurrency = currencyData.currencySpacing.beforeInsertBetween;
+ if (beforeCurrency && !CARET_S_UNICODE_REGEX.test(nonNameCurrencyPart)) {
+ numberPattern = numberPattern.replace('{0}¤', "{0}".concat(beforeCurrency, "\u00A4"));
+ }
+ }
+ // The following tokens are special: `{0}`, `¤`, `%`, `-`, `+`, `{c:...}.
+ var numberPatternParts = numberPattern.split(/({c:[^}]+}|\{0\}|[¤%\-\+])/g);
+ var numberParts = [];
+ var symbols = data.numbers.symbols[numberingSystem] ||
+ data.numbers.symbols[defaultNumberingSystem];
+ for (var _i = 0, numberPatternParts_1 = numberPatternParts; _i < numberPatternParts_1.length; _i++) {
+ var part = numberPatternParts_1[_i];
+ if (!part) {
+ continue;
+ }
+ switch (part) {
+ case '{0}': {
+ // We only need to handle scientific and engineering notation here.
+ numberParts.push.apply(numberParts, paritionNumberIntoParts(symbols, numberResult, notation, exponent, numberingSystem,
+ // If compact number pattern exists, do not insert group separators.
+ !compactNumberPattern && options.useGrouping, decimalNumberPattern));
+ break;
+ }
+ case '-':
+ numberParts.push({ type: 'minusSign', value: symbols.minusSign });
+ break;
+ case '+':
+ numberParts.push({ type: 'plusSign', value: symbols.plusSign });
+ break;
+ case '%':
+ numberParts.push({ type: 'percentSign', value: symbols.percentSign });
+ break;
+ case '¤':
+ // Computed above when handling currency spacing.
+ numberParts.push({ type: 'currency', value: nonNameCurrencyPart });
+ break;
+ default:
+ if (/^\{c:/.test(part)) {
+ numberParts.push({
+ type: 'compact',
+ value: part.substring(3, part.length - 1),
+ });
+ }
+ else {
+ // literal
+ numberParts.push({ type: 'literal', value: part });
+ }
+ break;
+ }
+ }
+ // #endregion
+ // #region Part 2: interpolate unit pattern if necessary.
+ // ----------------------------------------------
+ switch (style) {
+ case 'currency': {
+ // `currencyDisplay: 'name'` has similar pattern handling as units.
+ if (options.currencyDisplay === 'name') {
+ var unitPattern = (data.numbers.currency[numberingSystem] ||
+ data.numbers.currency[defaultNumberingSystem]).unitPattern;
+ // Select plural
+ var unitName = void 0;
+ var currencyNameData = data.currencies[options.currency];
+ if (currencyNameData) {
+ unitName = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), currencyNameData.displayName);
+ }
+ else {
+ // Fallback for unknown currency
+ unitName = options.currency;
+ }
+ // Do {0} and {1} substitution
+ var unitPatternParts = unitPattern.split(/(\{[01]\})/g);
+ var result = [];
+ for (var _a = 0, unitPatternParts_1 = unitPatternParts; _a < unitPatternParts_1.length; _a++) {
+ var part = unitPatternParts_1[_a];
+ switch (part) {
+ case '{0}':
+ result.push.apply(result, numberParts);
+ break;
+ case '{1}':
+ result.push({ type: 'currency', value: unitName });
+ break;
+ default:
+ if (part) {
+ result.push({ type: 'literal', value: part });
+ }
+ break;
+ }
+ }
+ return result;
+ }
+ else {
+ return numberParts;
+ }
+ }
+ case 'unit': {
+ var unit = options.unit, unitDisplay = options.unitDisplay;
+ var unitData = data.units.simple[unit];
+ var unitPattern = void 0;
+ if (unitData) {
+ // Simple unit pattern
+ unitPattern = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), data.units.simple[unit][unitDisplay]);
+ }
+ else {
+ // See: http://unicode.org/reports/tr35/tr35-general.html#perUnitPatterns
+ // If cannot find unit in the simple pattern, it must be "per" compound pattern.
+ // Implementation note: we are not following TR-35 here because we need to format to parts!
+ var _b = unit.split('-per-'), numeratorUnit = _b[0], denominatorUnit = _b[1];
+ unitData = data.units.simple[numeratorUnit];
+ var numeratorUnitPattern = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), data.units.simple[numeratorUnit][unitDisplay]);
+ var perUnitPattern = data.units.simple[denominatorUnit].perUnit[unitDisplay];
+ if (perUnitPattern) {
+ // perUnitPattern exists, combine it with numeratorUnitPattern
+ unitPattern = perUnitPattern.replace('{0}', numeratorUnitPattern);
+ }
+ else {
+ // get compoundUnit pattern (e.g. "{0} per {1}"), repalce {0} with numerator pattern and {1} with
+ // the denominator pattern in singular form.
+ var perPattern = data.units.compound.per[unitDisplay];
+ var denominatorPattern = selectPlural(pl, 1, data.units.simple[denominatorUnit][unitDisplay]);
+ unitPattern = unitPattern = perPattern
+ .replace('{0}', numeratorUnitPattern)
+ .replace('{1}', denominatorPattern.replace('{0}', ''));
+ }
+ }
+ var result = [];
+ // We need spacing around "{0}" because they are not treated as "unit" parts, but "literal".
+ for (var _c = 0, _d = unitPattern.split(/(\s*\{0\}\s*)/); _c < _d.length; _c++) {
+ var part = _d[_c];
+ var interpolateMatch = /^(\s*)\{0\}(\s*)$/.exec(part);
+ if (interpolateMatch) {
+ // Space before "{0}"
+ if (interpolateMatch[1]) {
+ result.push({ type: 'literal', value: interpolateMatch[1] });
+ }
+ // "{0}" itself
+ result.push.apply(result, numberParts);
+ // Space after "{0}"
+ if (interpolateMatch[2]) {
+ result.push({ type: 'literal', value: interpolateMatch[2] });
+ }
+ }
+ else if (part) {
+ result.push({ type: 'unit', value: part });
+ }
+ }
+ return result;
+ }
+ default:
+ return numberParts;
+ }
+ // #endregion
+}
+exports.default = formatToParts;
+// A subset of https://tc39.es/ecma402/#sec-partitionnotationsubpattern
+// Plus the exponent parts handling.
+function paritionNumberIntoParts(symbols, numberResult, notation, exponent, numberingSystem, useGrouping,
+/**
+ * This is the decimal number pattern without signs or symbols.
+ * It is used to infer the group size when `useGrouping` is true.
+ *
+ * A typical value looks like "#,##0.00" (primary group size is 3).
+ * Some locales like Hindi has secondary group size of 2 (e.g. "#,##,##0.00").
+ */
+decimalNumberPattern) {
+ var result = [];
+ // eslint-disable-next-line prefer-const
+ var n = numberResult.formattedString, x = numberResult.roundedNumber;
+ if (isNaN(x)) {
+ return [{ type: 'nan', value: n }];
+ }
+ else if (!isFinite(x)) {
+ return [{ type: 'infinity', value: n }];
+ }
+ var digitReplacementTable = digit_mapping_generated_1.digitMapping[numberingSystem];
+ if (digitReplacementTable) {
+ n = n.replace(/\d/g, function (digit) { return digitReplacementTable[+digit] || digit; });
+ }
+ // TODO: Else use an implementation dependent algorithm to map n to the appropriate
+ // representation of n in the given numbering system.
+ var decimalSepIndex = n.indexOf('.');
+ var integer;
+ var fraction;
+ if (decimalSepIndex > 0) {
+ integer = n.slice(0, decimalSepIndex);
+ fraction = n.slice(decimalSepIndex + 1);
+ }
+ else {
+ integer = n;
+ }
+ // #region Grouping integer digits
+ // The weird compact and x >= 10000 check is to ensure consistency with Node.js and Chrome.
+ // Note that `de` does not have compact form for thousands, but Node.js does not insert grouping separator
+ // unless the rounded number is greater than 10000:
+ // NumberFormat('de', {notation: 'compact', compactDisplay: 'short'}).format(1234) //=> "1234"
+ // NumberFormat('de').format(1234) //=> "1.234"
+ if (useGrouping && (notation !== 'compact' || x >= 10000)) {
+ var groupSepSymbol = symbols.group;
+ var groups = [];
+ // > There may be two different grouping sizes: The primary grouping size used for the least
+ // > significant integer group, and the secondary grouping size used for more significant groups.
+ // > If a pattern contains multiple grouping separators, the interval between the last one and the
+ // > end of the integer defines the primary grouping size, and the interval between the last two
+ // > defines the secondary grouping size. All others are ignored.
+ var integerNumberPattern = decimalNumberPattern.split('.')[0];
+ var patternGroups = integerNumberPattern.split(',');
+ var primaryGroupingSize = 3;
+ var secondaryGroupingSize = 3;
+ if (patternGroups.length > 1) {
+ primaryGroupingSize = patternGroups[patternGroups.length - 1].length;
+ }
+ if (patternGroups.length > 2) {
+ secondaryGroupingSize = patternGroups[patternGroups.length - 2].length;
+ }
+ var i = integer.length - primaryGroupingSize;
+ if (i > 0) {
+ // Slice the least significant integer group
+ groups.push(integer.slice(i, i + primaryGroupingSize));
+ // Then iteratively push the more signicant groups
+ // TODO: handle surrogate pairs in some numbering system digits
+ for (i -= secondaryGroupingSize; i > 0; i -= secondaryGroupingSize) {
+ groups.push(integer.slice(i, i + secondaryGroupingSize));
+ }
+ groups.push(integer.slice(0, i + secondaryGroupingSize));
+ }
+ else {
+ groups.push(integer);
+ }
+ while (groups.length > 0) {
+ var integerGroup = groups.pop();
+ result.push({ type: 'integer', value: integerGroup });
+ if (groups.length > 0) {
+ result.push({ type: 'group', value: groupSepSymbol });
+ }
+ }
+ }
+ else {
+ result.push({ type: 'integer', value: integer });
+ }
+ // #endregion
+ if (fraction !== undefined) {
+ result.push({ type: 'decimal', value: symbols.decimal }, { type: 'fraction', value: fraction });
+ }
+ if ((notation === 'scientific' || notation === 'engineering') &&
+ isFinite(x)) {
+ result.push({ type: 'exponentSeparator', value: symbols.exponential });
+ if (exponent < 0) {
+ result.push({ type: 'exponentMinusSign', value: symbols.minusSign });
+ exponent = -exponent;
+ }
+ var exponentResult = (0, ToRawFixed_1.ToRawFixed)(exponent, 0, 0);
+ result.push({
+ type: 'exponentInteger',
+ value: exponentResult.formattedString,
+ });
+ }
+ return result;
+}
+function getPatternForSign(pattern, sign) {
+ if (pattern.indexOf(';') < 0) {
+ pattern = "".concat(pattern, ";-").concat(pattern);
+ }
+ var _a = pattern.split(';'), zeroPattern = _a[0], negativePattern = _a[1];
+ switch (sign) {
+ case 0:
+ return zeroPattern;
+ case -1:
+ return negativePattern;
+ default:
+ return negativePattern.indexOf('-') >= 0
+ ? negativePattern.replace(/-/g, '+')
+ : "+".concat(zeroPattern);
+ }
+}
+// Find the CLDR pattern for compact notation based on the magnitude of data and style.
+//
+// Example return value: "¤ {c:laki}000;¤{c:laki} -0" (`sw` locale):
+// - Notice the `{c:...}` token that wraps the compact literal.
+// - The consecutive zeros are normalized to single zero to match CLDR_NUMBER_PATTERN.
+//
+// Returning null means the compact display pattern cannot be found.
+function getCompactDisplayPattern(numberResult, pl, data, style, compactDisplay, currencyDisplay, numberingSystem) {
+ var _a;
+ var roundedNumber = numberResult.roundedNumber, sign = numberResult.sign, magnitude = numberResult.magnitude;
+ var magnitudeKey = String(Math.pow(10, magnitude));
+ var defaultNumberingSystem = data.numbers.nu[0];
+ var pattern;
+ if (style === 'currency' && currencyDisplay !== 'name') {
+ var byNumberingSystem = data.numbers.currency;
+ var currencyData = byNumberingSystem[numberingSystem] ||
+ byNumberingSystem[defaultNumberingSystem];
+ // NOTE: compact notation ignores currencySign!
+ var compactPluralRules = (_a = currencyData.short) === null || _a === void 0 ? void 0 : _a[magnitudeKey];
+ if (!compactPluralRules) {
+ return null;
+ }
+ pattern = selectPlural(pl, roundedNumber, compactPluralRules);
+ }
+ else {
+ var byNumberingSystem = data.numbers.decimal;
+ var byCompactDisplay = byNumberingSystem[numberingSystem] ||
+ byNumberingSystem[defaultNumberingSystem];
+ var compactPlaralRule = byCompactDisplay[compactDisplay][magnitudeKey];
+ if (!compactPlaralRule) {
+ return null;
+ }
+ pattern = selectPlural(pl, roundedNumber, compactPlaralRule);
+ }
+ // See https://unicode.org/reports/tr35/tr35-numbers.html#Compact_Number_Formats
+ // > If the value is precisely “0”, either explicit or defaulted, then the normal number format
+ // > pattern for that sort of object is supplied.
+ if (pattern === '0') {
+ return null;
+ }
+ pattern = getPatternForSign(pattern, sign)
+ // Extract compact literal from the pattern
+ .replace(/([^\s;\-\+\d¤]+)/g, '{c:$1}')
+ // We replace one or more zeros with a single zero so it matches `CLDR_NUMBER_PATTERN`.
+ .replace(/0+/, '0');
+ return pattern;
+}
+function selectPlural(pl, x, rules) {
+ return rules[pl.select(x)] || rules.other;
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/PartitionPattern.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/PartitionPattern.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1a619e2af9bd77675efebf62321eb41065393f16
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/PartitionPattern.d.ts
@@ -0,0 +1,9 @@
+/**
+ * https://tc39.es/ecma402/#sec-partitionpattern
+ * @param pattern
+ */
+export declare function PartitionPattern(pattern: string): Array<{
+ type: T;
+ value: string | undefined;
+}>;
+//# sourceMappingURL=PartitionPattern.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/PartitionPattern.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/PartitionPattern.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e418e8e849174d3f4cfe744677a372b4045c5dda
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/PartitionPattern.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"PartitionPattern.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/PartitionPattern.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAC/C,OAAO,EAAE,MAAM,GACd,KAAK,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAC,CAAC,CA6B7C"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/PartitionPattern.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/PartitionPattern.js
new file mode 100644
index 0000000000000000000000000000000000000000..2e64bd1d1c77a54396dc2748c23e64799188f01e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/PartitionPattern.js
@@ -0,0 +1,39 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.PartitionPattern = void 0;
+var utils_1 = require("./utils");
+/**
+ * https://tc39.es/ecma402/#sec-partitionpattern
+ * @param pattern
+ */
+function PartitionPattern(pattern) {
+ var result = [];
+ var beginIndex = pattern.indexOf('{');
+ var endIndex = 0;
+ var nextIndex = 0;
+ var length = pattern.length;
+ while (beginIndex < pattern.length && beginIndex > -1) {
+ endIndex = pattern.indexOf('}', beginIndex);
+ (0, utils_1.invariant)(endIndex > beginIndex, "Invalid pattern ".concat(pattern));
+ if (beginIndex > nextIndex) {
+ result.push({
+ type: 'literal',
+ value: pattern.substring(nextIndex, beginIndex),
+ });
+ }
+ result.push({
+ type: pattern.substring(beginIndex + 1, endIndex),
+ value: undefined,
+ });
+ nextIndex = endIndex + 1;
+ beginIndex = pattern.indexOf('{', nextIndex);
+ }
+ if (nextIndex < length) {
+ result.push({
+ type: 'literal',
+ value: pattern.substring(nextIndex, length),
+ });
+ }
+ return result;
+}
+exports.PartitionPattern = PartitionPattern;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/README.md b/app/frontend/node_modules/@formatjs/ecma402-abstract/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..922a05fccd21475fa6066402c67b7a2b93f3a059
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/README.md
@@ -0,0 +1,7 @@
+# ECMA402 Abstract
+
+Implementation for various ECMAScript 402 abstract operations.
+
+[](https://www.npmjs.org/package/@formatjs/ecma402-abstract)
+
+**IMPORTANT: This does not follow semver so please pin the version to the exact one that you need.**
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/SupportedLocales.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/SupportedLocales.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d8980868d2216eaed23c0589b40250c73388706c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/SupportedLocales.d.ts
@@ -0,0 +1,10 @@
+/**
+ * https://tc39.es/ecma402/#sec-supportedlocales
+ * @param availableLocales
+ * @param requestedLocales
+ * @param options
+ */
+export declare function SupportedLocales(availableLocales: Set, requestedLocales: string[], options?: {
+ localeMatcher?: 'best fit' | 'lookup';
+}): string[];
+//# sourceMappingURL=SupportedLocales.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/SupportedLocales.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/SupportedLocales.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..d0ea081b4fd31e31f5f4b7cff9b00ccc572da598
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/SupportedLocales.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"SupportedLocales.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/SupportedLocales.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,gBAAgB,EAAE,MAAM,EAAE,EAC1B,OAAO,CAAC,EAAE;IAAC,aAAa,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;CAAC,GAChD,MAAM,EAAE,CAgBV"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/SupportedLocales.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/SupportedLocales.js
new file mode 100644
index 0000000000000000000000000000000000000000..2f9e1028cd81a94c23424ca88f6f5889b1a60b8d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/SupportedLocales.js
@@ -0,0 +1,24 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.SupportedLocales = void 0;
+var _262_1 = require("./262");
+var GetOption_1 = require("./GetOption");
+var intl_localematcher_1 = require("@formatjs/intl-localematcher");
+/**
+ * https://tc39.es/ecma402/#sec-supportedlocales
+ * @param availableLocales
+ * @param requestedLocales
+ * @param options
+ */
+function SupportedLocales(availableLocales, requestedLocales, options) {
+ var matcher = 'best fit';
+ if (options !== undefined) {
+ options = (0, _262_1.ToObject)(options);
+ matcher = (0, GetOption_1.GetOption)(options, 'localeMatcher', 'string', ['lookup', 'best fit'], 'best fit');
+ }
+ if (matcher === 'best fit') {
+ return (0, intl_localematcher_1.LookupSupportedLocales)(availableLocales, requestedLocales);
+ }
+ return (0, intl_localematcher_1.LookupSupportedLocales)(availableLocales, requestedLocales);
+}
+exports.SupportedLocales = SupportedLocales;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/data.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/data.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..82e8baf43c45bb0f4750cb9c70c8e532ca89741a
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/data.d.ts
@@ -0,0 +1,6 @@
+declare class MissingLocaleDataError extends Error {
+ type: string;
+}
+export declare function isMissingLocaleDataError(e: Error): e is MissingLocaleDataError;
+export {};
+//# sourceMappingURL=data.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/data.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/data.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..3d07b4d3f2eba17f644b4e70fd84b8f0b090a0bf
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/data.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/data.ts"],"names":[],"mappings":"AAAA,cAAM,sBAAuB,SAAQ,KAAK;IACjC,IAAI,SAAwB;CACpC;AAED,wBAAgB,wBAAwB,CACtC,CAAC,EAAE,KAAK,GACP,CAAC,IAAI,sBAAsB,CAE7B"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/data.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/data.js
new file mode 100644
index 0000000000000000000000000000000000000000..612d32a1707a3405650da26687852e9b97b23ea8
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/data.js
@@ -0,0 +1,17 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isMissingLocaleDataError = void 0;
+var tslib_1 = require("tslib");
+var MissingLocaleDataError = /** @class */ (function (_super) {
+ (0, tslib_1.__extends)(MissingLocaleDataError, _super);
+ function MissingLocaleDataError() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.type = 'MISSING_LOCALE_DATA';
+ return _this;
+ }
+ return MissingLocaleDataError;
+}(Error));
+function isMissingLocaleDataError(e) {
+ return e.type === 'MISSING_LOCALE_DATA';
+}
+exports.isMissingLocaleDataError = isMissingLocaleDataError;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/index.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..051620b9848f65c116324335add3721f3d397e68
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/index.d.ts
@@ -0,0 +1,37 @@
+export * from './CanonicalizeLocaleList';
+export * from './CanonicalizeTimeZoneName';
+export * from './CoerceOptionsToObject';
+export * from './GetNumberOption';
+export * from './GetOption';
+export * from './GetOptionsObject';
+export * from './IsSanctionedSimpleUnitIdentifier';
+export * from './IsValidTimeZoneName';
+export * from './IsWellFormedCurrencyCode';
+export * from './IsWellFormedUnitIdentifier';
+export * from './NumberFormat/ComputeExponent';
+export * from './NumberFormat/ComputeExponentForMagnitude';
+export * from './NumberFormat/CurrencyDigits';
+export * from './NumberFormat/FormatNumericToParts';
+export * from './NumberFormat/FormatNumericToString';
+export * from './NumberFormat/InitializeNumberFormat';
+export * from './NumberFormat/PartitionNumberPattern';
+export * from './NumberFormat/SetNumberFormatDigitOptions';
+export * from './NumberFormat/SetNumberFormatUnitOptions';
+export * from './NumberFormat/ToRawFixed';
+export * from './NumberFormat/ToRawPrecision';
+export { default as _formatToParts } from './NumberFormat/format_to_parts';
+export * from './PartitionPattern';
+export * from './SupportedLocales';
+export { getInternalSlot, getMultiInternalSlots, isLiteralPart, setInternalSlot, setMultiInternalSlots, getMagnitude, defineProperty, } from './utils';
+export type { LiteralPart } from './utils';
+export { isMissingLocaleDataError } from './data';
+export * from './types/relative-time';
+export * from './types/date-time';
+export * from './types/list';
+export * from './types/plural-rules';
+export * from './types/number';
+export * from './types/displaynames';
+export { invariant } from './utils';
+export type { LocaleData } from './types/core';
+export * from './262';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/index.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..93b54643f9ac09ab18cfdc1edb0a6faf84f05b02
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oCAAoC,CAAA;AAClD,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,4CAA4C,CAAA;AAC1D,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qCAAqC,CAAA;AACnD,cAAc,sCAAsC,CAAA;AACpD,cAAc,uCAAuC,CAAA;AACrD,cAAc,uCAAuC,CAAA;AACrD,cAAc,4CAA4C,CAAA;AAC1D,cAAc,2CAA2C,CAAA;AACzD,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,gCAAgC,CAAA;AACxE,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,YAAY,EACZ,cAAc,GACf,MAAM,SAAS,CAAA;AAChB,YAAY,EAAC,WAAW,EAAC,MAAM,SAAS,CAAA;AAExC,OAAO,EAAC,wBAAwB,EAAC,MAAM,QAAQ,CAAA;AAC/C,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAA;AACjC,YAAY,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAC5C,cAAc,OAAO,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/index.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c44747b1d9767e1193c8b586b76391bd50cf838
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/index.js
@@ -0,0 +1,48 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.invariant = exports.isMissingLocaleDataError = exports.defineProperty = exports.getMagnitude = exports.setMultiInternalSlots = exports.setInternalSlot = exports.isLiteralPart = exports.getMultiInternalSlots = exports.getInternalSlot = exports._formatToParts = void 0;
+var tslib_1 = require("tslib");
+(0, tslib_1.__exportStar)(require("./CanonicalizeLocaleList"), exports);
+(0, tslib_1.__exportStar)(require("./CanonicalizeTimeZoneName"), exports);
+(0, tslib_1.__exportStar)(require("./CoerceOptionsToObject"), exports);
+(0, tslib_1.__exportStar)(require("./GetNumberOption"), exports);
+(0, tslib_1.__exportStar)(require("./GetOption"), exports);
+(0, tslib_1.__exportStar)(require("./GetOptionsObject"), exports);
+(0, tslib_1.__exportStar)(require("./IsSanctionedSimpleUnitIdentifier"), exports);
+(0, tslib_1.__exportStar)(require("./IsValidTimeZoneName"), exports);
+(0, tslib_1.__exportStar)(require("./IsWellFormedCurrencyCode"), exports);
+(0, tslib_1.__exportStar)(require("./IsWellFormedUnitIdentifier"), exports);
+(0, tslib_1.__exportStar)(require("./NumberFormat/ComputeExponent"), exports);
+(0, tslib_1.__exportStar)(require("./NumberFormat/ComputeExponentForMagnitude"), exports);
+(0, tslib_1.__exportStar)(require("./NumberFormat/CurrencyDigits"), exports);
+(0, tslib_1.__exportStar)(require("./NumberFormat/FormatNumericToParts"), exports);
+(0, tslib_1.__exportStar)(require("./NumberFormat/FormatNumericToString"), exports);
+(0, tslib_1.__exportStar)(require("./NumberFormat/InitializeNumberFormat"), exports);
+(0, tslib_1.__exportStar)(require("./NumberFormat/PartitionNumberPattern"), exports);
+(0, tslib_1.__exportStar)(require("./NumberFormat/SetNumberFormatDigitOptions"), exports);
+(0, tslib_1.__exportStar)(require("./NumberFormat/SetNumberFormatUnitOptions"), exports);
+(0, tslib_1.__exportStar)(require("./NumberFormat/ToRawFixed"), exports);
+(0, tslib_1.__exportStar)(require("./NumberFormat/ToRawPrecision"), exports);
+var format_to_parts_1 = require("./NumberFormat/format_to_parts");
+Object.defineProperty(exports, "_formatToParts", { enumerable: true, get: function () { return (0, tslib_1.__importDefault)(format_to_parts_1).default; } });
+(0, tslib_1.__exportStar)(require("./PartitionPattern"), exports);
+(0, tslib_1.__exportStar)(require("./SupportedLocales"), exports);
+var utils_1 = require("./utils");
+Object.defineProperty(exports, "getInternalSlot", { enumerable: true, get: function () { return utils_1.getInternalSlot; } });
+Object.defineProperty(exports, "getMultiInternalSlots", { enumerable: true, get: function () { return utils_1.getMultiInternalSlots; } });
+Object.defineProperty(exports, "isLiteralPart", { enumerable: true, get: function () { return utils_1.isLiteralPart; } });
+Object.defineProperty(exports, "setInternalSlot", { enumerable: true, get: function () { return utils_1.setInternalSlot; } });
+Object.defineProperty(exports, "setMultiInternalSlots", { enumerable: true, get: function () { return utils_1.setMultiInternalSlots; } });
+Object.defineProperty(exports, "getMagnitude", { enumerable: true, get: function () { return utils_1.getMagnitude; } });
+Object.defineProperty(exports, "defineProperty", { enumerable: true, get: function () { return utils_1.defineProperty; } });
+var data_1 = require("./data");
+Object.defineProperty(exports, "isMissingLocaleDataError", { enumerable: true, get: function () { return data_1.isMissingLocaleDataError; } });
+(0, tslib_1.__exportStar)(require("./types/relative-time"), exports);
+(0, tslib_1.__exportStar)(require("./types/date-time"), exports);
+(0, tslib_1.__exportStar)(require("./types/list"), exports);
+(0, tslib_1.__exportStar)(require("./types/plural-rules"), exports);
+(0, tslib_1.__exportStar)(require("./types/number"), exports);
+(0, tslib_1.__exportStar)(require("./types/displaynames"), exports);
+var utils_2 = require("./utils");
+Object.defineProperty(exports, "invariant", { enumerable: true, get: function () { return utils_2.invariant; } });
+(0, tslib_1.__exportStar)(require("./262"), exports);
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/262.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/262.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d4327a76e701d2c2cba0db665523ec6400728a38
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/262.d.ts
@@ -0,0 +1,92 @@
+/**
+ * https://tc39.es/ecma262/#sec-tostring
+ */
+export declare function ToString(o: unknown): string;
+/**
+ * https://tc39.es/ecma262/#sec-tonumber
+ * @param val
+ */
+export declare function ToNumber(val: any): number;
+/**
+ * https://tc39.es/ecma262/#sec-timeclip
+ * @param time
+ */
+export declare function TimeClip(time: number): number;
+/**
+ * https://tc39.es/ecma262/#sec-toobject
+ * @param arg
+ */
+export declare function ToObject(arg: T): T extends null ? never : T extends undefined ? never : T;
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-samevalue
+ * @param x
+ * @param y
+ */
+export declare function SameValue(x: any, y: any): boolean;
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-arraycreate
+ * @param len
+ */
+export declare function ArrayCreate(len: number): any[];
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-hasownproperty
+ * @param o
+ * @param prop
+ */
+export declare function HasOwnProperty(o: object, prop: string): boolean;
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-type
+ * @param x
+ */
+export declare function Type(x: any): "Null" | "Undefined" | "Object" | "Number" | "Boolean" | "String" | "Symbol" | "BigInt" | undefined;
+/**
+ * https://tc39.es/ecma262/#eqn-Day
+ * @param t
+ */
+export declare function Day(t: number): number;
+/**
+ * https://tc39.es/ecma262/#sec-week-day
+ * @param t
+ */
+export declare function WeekDay(t: number): number;
+/**
+ * https://tc39.es/ecma262/#sec-year-number
+ * @param y
+ */
+export declare function DayFromYear(y: number): number;
+/**
+ * https://tc39.es/ecma262/#sec-year-number
+ * @param y
+ */
+export declare function TimeFromYear(y: number): number;
+/**
+ * https://tc39.es/ecma262/#sec-year-number
+ * @param t
+ */
+export declare function YearFromTime(t: number): number;
+export declare function DaysInYear(y: number): 365 | 366;
+export declare function DayWithinYear(t: number): number;
+export declare function InLeapYear(t: number): 0 | 1;
+/**
+ * https://tc39.es/ecma262/#sec-month-number
+ * @param t
+ */
+export declare function MonthFromTime(t: number): 0 | 1 | 2 | 3 | 4 | 7 | 5 | 6 | 8 | 9 | 10 | 11;
+export declare function DateFromTime(t: number): number;
+export declare function HourFromTime(t: number): number;
+export declare function MinFromTime(t: number): number;
+export declare function SecFromTime(t: number): number;
+/**
+ * The abstract operation OrdinaryHasInstance implements
+ * the default algorithm for determining if an object O
+ * inherits from the instance object inheritance path
+ * provided by constructor C.
+ * @param C class
+ * @param O object
+ * @param internalSlots internalSlots
+ */
+export declare function OrdinaryHasInstance(C: Object, O: any, internalSlots?: {
+ boundTargetFunction: any;
+}): boolean;
+export declare function msFromTime(t: number): number;
+//# sourceMappingURL=262.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/262.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/262.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..69915bb06c8ac31782f2077e7e5993faf1e82c8d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/262.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"262.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/262.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAM3C;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAiBzC;AAwBD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,UAQpC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACxB,GAAG,EAAE,CAAC,GACL,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAK1D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,WAYvC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,SAEtC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,WAErD;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,GAAG,uGAyB1B;AAcD;;;GAGG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,UAE5B;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,UAEhC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,UAEpC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,UAErC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,UAErC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,aAWnC;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,UAEtC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAE3C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,mDAwCtC;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,UAyCrC;AASD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,UAErC;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,UAEpC;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,UAEpC;AAMD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,GAAG,EACN,aAAa,CAAC,EAAE;IAAC,mBAAmB,EAAE,GAAG,CAAA;CAAC,WAmB3C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/262.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/262.js
new file mode 100644
index 0000000000000000000000000000000000000000..721bb23b442abede1f9133800a3117176fbe0805
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/262.js
@@ -0,0 +1,336 @@
+/**
+ * https://tc39.es/ecma262/#sec-tostring
+ */
+export function ToString(o) {
+ // Only symbol is irregular...
+ if (typeof o === 'symbol') {
+ throw TypeError('Cannot convert a Symbol value to a string');
+ }
+ return String(o);
+}
+/**
+ * https://tc39.es/ecma262/#sec-tonumber
+ * @param val
+ */
+export function ToNumber(val) {
+ if (val === undefined) {
+ return NaN;
+ }
+ if (val === null) {
+ return +0;
+ }
+ if (typeof val === 'boolean') {
+ return val ? 1 : +0;
+ }
+ if (typeof val === 'number') {
+ return val;
+ }
+ if (typeof val === 'symbol' || typeof val === 'bigint') {
+ throw new TypeError('Cannot convert symbol/bigint to number');
+ }
+ return Number(val);
+}
+/**
+ * https://tc39.es/ecma262/#sec-tointeger
+ * @param n
+ */
+function ToInteger(n) {
+ var number = ToNumber(n);
+ if (isNaN(number) || SameValue(number, -0)) {
+ return 0;
+ }
+ if (isFinite(number)) {
+ return number;
+ }
+ var integer = Math.floor(Math.abs(number));
+ if (number < 0) {
+ integer = -integer;
+ }
+ if (SameValue(integer, -0)) {
+ return 0;
+ }
+ return integer;
+}
+/**
+ * https://tc39.es/ecma262/#sec-timeclip
+ * @param time
+ */
+export function TimeClip(time) {
+ if (!isFinite(time)) {
+ return NaN;
+ }
+ if (Math.abs(time) > 8.64 * 1e15) {
+ return NaN;
+ }
+ return ToInteger(time);
+}
+/**
+ * https://tc39.es/ecma262/#sec-toobject
+ * @param arg
+ */
+export function ToObject(arg) {
+ if (arg == null) {
+ throw new TypeError('undefined/null cannot be converted to object');
+ }
+ return Object(arg);
+}
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-samevalue
+ * @param x
+ * @param y
+ */
+export function SameValue(x, y) {
+ if (Object.is) {
+ return Object.is(x, y);
+ }
+ // SameValue algorithm
+ if (x === y) {
+ // Steps 1-5, 7-10
+ // Steps 6.b-6.e: +0 != -0
+ return x !== 0 || 1 / x === 1 / y;
+ }
+ // Step 6.a: NaN == NaN
+ return x !== x && y !== y;
+}
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-arraycreate
+ * @param len
+ */
+export function ArrayCreate(len) {
+ return new Array(len);
+}
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-hasownproperty
+ * @param o
+ * @param prop
+ */
+export function HasOwnProperty(o, prop) {
+ return Object.prototype.hasOwnProperty.call(o, prop);
+}
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#sec-type
+ * @param x
+ */
+export function Type(x) {
+ if (x === null) {
+ return 'Null';
+ }
+ if (typeof x === 'undefined') {
+ return 'Undefined';
+ }
+ if (typeof x === 'function' || typeof x === 'object') {
+ return 'Object';
+ }
+ if (typeof x === 'number') {
+ return 'Number';
+ }
+ if (typeof x === 'boolean') {
+ return 'Boolean';
+ }
+ if (typeof x === 'string') {
+ return 'String';
+ }
+ if (typeof x === 'symbol') {
+ return 'Symbol';
+ }
+ if (typeof x === 'bigint') {
+ return 'BigInt';
+ }
+}
+var MS_PER_DAY = 86400000;
+/**
+ * https://www.ecma-international.org/ecma-262/11.0/index.html#eqn-modulo
+ * @param x
+ * @param y
+ * @return k of the same sign as y
+ */
+function mod(x, y) {
+ return x - Math.floor(x / y) * y;
+}
+/**
+ * https://tc39.es/ecma262/#eqn-Day
+ * @param t
+ */
+export function Day(t) {
+ return Math.floor(t / MS_PER_DAY);
+}
+/**
+ * https://tc39.es/ecma262/#sec-week-day
+ * @param t
+ */
+export function WeekDay(t) {
+ return mod(Day(t) + 4, 7);
+}
+/**
+ * https://tc39.es/ecma262/#sec-year-number
+ * @param y
+ */
+export function DayFromYear(y) {
+ return Date.UTC(y, 0) / MS_PER_DAY;
+}
+/**
+ * https://tc39.es/ecma262/#sec-year-number
+ * @param y
+ */
+export function TimeFromYear(y) {
+ return Date.UTC(y, 0);
+}
+/**
+ * https://tc39.es/ecma262/#sec-year-number
+ * @param t
+ */
+export function YearFromTime(t) {
+ return new Date(t).getUTCFullYear();
+}
+export function DaysInYear(y) {
+ if (y % 4 !== 0) {
+ return 365;
+ }
+ if (y % 100 !== 0) {
+ return 366;
+ }
+ if (y % 400 !== 0) {
+ return 365;
+ }
+ return 366;
+}
+export function DayWithinYear(t) {
+ return Day(t) - DayFromYear(YearFromTime(t));
+}
+export function InLeapYear(t) {
+ return DaysInYear(YearFromTime(t)) === 365 ? 0 : 1;
+}
+/**
+ * https://tc39.es/ecma262/#sec-month-number
+ * @param t
+ */
+export function MonthFromTime(t) {
+ var dwy = DayWithinYear(t);
+ var leap = InLeapYear(t);
+ if (dwy >= 0 && dwy < 31) {
+ return 0;
+ }
+ if (dwy < 59 + leap) {
+ return 1;
+ }
+ if (dwy < 90 + leap) {
+ return 2;
+ }
+ if (dwy < 120 + leap) {
+ return 3;
+ }
+ if (dwy < 151 + leap) {
+ return 4;
+ }
+ if (dwy < 181 + leap) {
+ return 5;
+ }
+ if (dwy < 212 + leap) {
+ return 6;
+ }
+ if (dwy < 243 + leap) {
+ return 7;
+ }
+ if (dwy < 273 + leap) {
+ return 8;
+ }
+ if (dwy < 304 + leap) {
+ return 9;
+ }
+ if (dwy < 334 + leap) {
+ return 10;
+ }
+ if (dwy < 365 + leap) {
+ return 11;
+ }
+ throw new Error('Invalid time');
+}
+export function DateFromTime(t) {
+ var dwy = DayWithinYear(t);
+ var mft = MonthFromTime(t);
+ var leap = InLeapYear(t);
+ if (mft === 0) {
+ return dwy + 1;
+ }
+ if (mft === 1) {
+ return dwy - 30;
+ }
+ if (mft === 2) {
+ return dwy - 58 - leap;
+ }
+ if (mft === 3) {
+ return dwy - 89 - leap;
+ }
+ if (mft === 4) {
+ return dwy - 119 - leap;
+ }
+ if (mft === 5) {
+ return dwy - 150 - leap;
+ }
+ if (mft === 6) {
+ return dwy - 180 - leap;
+ }
+ if (mft === 7) {
+ return dwy - 211 - leap;
+ }
+ if (mft === 8) {
+ return dwy - 242 - leap;
+ }
+ if (mft === 9) {
+ return dwy - 272 - leap;
+ }
+ if (mft === 10) {
+ return dwy - 303 - leap;
+ }
+ if (mft === 11) {
+ return dwy - 333 - leap;
+ }
+ throw new Error('Invalid time');
+}
+var HOURS_PER_DAY = 24;
+var MINUTES_PER_HOUR = 60;
+var SECONDS_PER_MINUTE = 60;
+var MS_PER_SECOND = 1e3;
+var MS_PER_MINUTE = MS_PER_SECOND * SECONDS_PER_MINUTE;
+var MS_PER_HOUR = MS_PER_MINUTE * MINUTES_PER_HOUR;
+export function HourFromTime(t) {
+ return mod(Math.floor(t / MS_PER_HOUR), HOURS_PER_DAY);
+}
+export function MinFromTime(t) {
+ return mod(Math.floor(t / MS_PER_MINUTE), MINUTES_PER_HOUR);
+}
+export function SecFromTime(t) {
+ return mod(Math.floor(t / MS_PER_SECOND), SECONDS_PER_MINUTE);
+}
+function IsCallable(fn) {
+ return typeof fn === 'function';
+}
+/**
+ * The abstract operation OrdinaryHasInstance implements
+ * the default algorithm for determining if an object O
+ * inherits from the instance object inheritance path
+ * provided by constructor C.
+ * @param C class
+ * @param O object
+ * @param internalSlots internalSlots
+ */
+export function OrdinaryHasInstance(C, O, internalSlots) {
+ if (!IsCallable(C)) {
+ return false;
+ }
+ if (internalSlots === null || internalSlots === void 0 ? void 0 : internalSlots.boundTargetFunction) {
+ var BC = internalSlots === null || internalSlots === void 0 ? void 0 : internalSlots.boundTargetFunction;
+ return O instanceof BC;
+ }
+ if (typeof O !== 'object') {
+ return false;
+ }
+ var P = C.prototype;
+ if (typeof P !== 'object') {
+ throw new TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.');
+ }
+ return Object.prototype.isPrototypeOf.call(P, O);
+}
+export function msFromTime(t) {
+ return mod(t, MS_PER_SECOND);
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b2e2872827aa19359228a1914b04e6a3eb13c4b9
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.d.ts
@@ -0,0 +1,6 @@
+/**
+ * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist
+ * @param locales
+ */
+export declare function CanonicalizeLocaleList(locales?: string | string[]): string[];
+//# sourceMappingURL=CanonicalizeLocaleList.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..2216fc21417807257966e757cb2c15e40e6c2170
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CanonicalizeLocaleList.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/CanonicalizeLocaleList.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAG5E"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.js
new file mode 100644
index 0000000000000000000000000000000000000000..3b633c3bd575a42be16822e859f93b02f1ecae0f
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeLocaleList.js
@@ -0,0 +1,8 @@
+/**
+ * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist
+ * @param locales
+ */
+export function CanonicalizeLocaleList(locales) {
+ // TODO
+ return Intl.getCanonicalLocales(locales);
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2340ce8178058b0794264a9ddf5820f98003bd41
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.d.ts
@@ -0,0 +1,9 @@
+/**
+ * https://tc39.es/ecma402/#sec-canonicalizetimezonename
+ * @param tz
+ */
+export declare function CanonicalizeTimeZoneName(tz: string, { tzData, uppercaseLinks, }: {
+ tzData: Record;
+ uppercaseLinks: Record;
+}): string;
+//# sourceMappingURL=CanonicalizeTimeZoneName.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..14538ed409012c2e1f5e56de53b140f8768740e8
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CanonicalizeTimeZoneName.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/CanonicalizeTimeZoneName.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,EACV,EACE,MAAM,EACN,cAAc,GACf,EAAE;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC,UAgBF"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.js
new file mode 100644
index 0000000000000000000000000000000000000000..ebbe30b2168fdcf776c6f41dcf49f8b5d0e1d669
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CanonicalizeTimeZoneName.js
@@ -0,0 +1,17 @@
+/**
+ * https://tc39.es/ecma402/#sec-canonicalizetimezonename
+ * @param tz
+ */
+export function CanonicalizeTimeZoneName(tz, _a) {
+ var tzData = _a.tzData, uppercaseLinks = _a.uppercaseLinks;
+ var uppercasedTz = tz.toUpperCase();
+ var uppercasedZones = Object.keys(tzData).reduce(function (all, z) {
+ all[z.toUpperCase()] = z;
+ return all;
+ }, {});
+ var ianaTimeZone = uppercaseLinks[uppercasedTz] || uppercasedZones[uppercasedTz];
+ if (ianaTimeZone === 'Etc/UTC' || ianaTimeZone === 'Etc/GMT') {
+ return 'UTC';
+ }
+ return ianaTimeZone;
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..055e93e310e0eb4f3f78be09ba7e1e70d9fa92f6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.d.ts
@@ -0,0 +1,7 @@
+/**
+ * https://tc39.es/ecma402/#sec-coerceoptionstoobject
+ * @param options
+ * @returns
+ */
+export declare function CoerceOptionsToObject(options?: T): T;
+//# sourceMappingURL=CoerceOptionsToObject.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..677c8abe9749d365c4363f5b04efc7ba66e1b18c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CoerceOptionsToObject.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/CoerceOptionsToObject.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAKvD"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.js
new file mode 100644
index 0000000000000000000000000000000000000000..28091f2dca0309797ebc653ae5a3ca640483d72d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/CoerceOptionsToObject.js
@@ -0,0 +1,12 @@
+import { ToObject } from './262';
+/**
+ * https://tc39.es/ecma402/#sec-coerceoptionstoobject
+ * @param options
+ * @returns
+ */
+export function CoerceOptionsToObject(options) {
+ if (typeof options === 'undefined') {
+ return Object.create(null);
+ }
+ return ToObject(options);
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3ad5614cc7c3114782568bd1eefb43683eab66b9
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.d.ts
@@ -0,0 +1,9 @@
+/**
+ * https://tc39.es/ecma402/#sec-defaultnumberoption
+ * @param val
+ * @param min
+ * @param max
+ * @param fallback
+ */
+export declare function DefaultNumberOption(val: any, min: number, max: number, fallback: number): number;
+//# sourceMappingURL=DefaultNumberOption.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..82829b1bd789daedb9f77ff817d632c17955e03f
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"DefaultNumberOption.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/DefaultNumberOption.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,MAAM,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.js
new file mode 100644
index 0000000000000000000000000000000000000000..badca05ef0e31840954246c73a02d76307cc8021
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/DefaultNumberOption.js
@@ -0,0 +1,10 @@
+export function DefaultNumberOption(val, min, max, fallback) {
+ if (val !== undefined) {
+ val = Number(val);
+ if (isNaN(val) || val < min || val > max) {
+ throw new RangeError("".concat(val, " is outside of range [").concat(min, ", ").concat(max, "]"));
+ }
+ return Math.floor(val);
+ }
+ return fallback;
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2fd66fa8600ef72c771d87027e64890e593e9930
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.d.ts
@@ -0,0 +1,10 @@
+/**
+ * https://tc39.es/ecma402/#sec-getnumberoption
+ * @param options
+ * @param property
+ * @param min
+ * @param max
+ * @param fallback
+ */
+export declare function GetNumberOption(options: T, property: K, minimum: number, maximum: number, fallback: number): number;
+//# sourceMappingURL=GetNumberOption.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..33715306996b5a52879c44781474282ab28c372b
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetNumberOption.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/GetNumberOption.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EACjE,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,MAAM,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.js
new file mode 100644
index 0000000000000000000000000000000000000000..479372650b75b3b8ca01c1822a1c97011f125152
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetNumberOption.js
@@ -0,0 +1,14 @@
+/**
+ * https://tc39.es/ecma402/#sec-getnumberoption
+ * @param options
+ * @param property
+ * @param min
+ * @param max
+ * @param fallback
+ */
+import { DefaultNumberOption } from './DefaultNumberOption';
+export function GetNumberOption(options, property, minimum, maximum, fallback) {
+ var val = options[property];
+ // @ts-expect-error
+ return DefaultNumberOption(val, minimum, maximum, fallback);
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOption.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOption.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..842151d11e21dd8cdf95b630c9e25ec82314351b
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOption.d.ts
@@ -0,0 +1,10 @@
+/**
+ * https://tc39.es/ecma402/#sec-getoption
+ * @param opts
+ * @param prop
+ * @param type
+ * @param values
+ * @param fallback
+ */
+export declare function GetOption(opts: T, prop: K, type: 'string' | 'boolean', values: T[K][] | undefined, fallback: F): Exclude | F;
+//# sourceMappingURL=GetOption.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOption.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOption.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..8479bd365cbedcbbc4f65b47727ff0399f41558d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOption.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetOption.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/GetOption.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,EAC9D,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAC1B,QAAQ,EAAE,CAAC,GACV,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAqB9B"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOption.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOption.js
new file mode 100644
index 0000000000000000000000000000000000000000..cfee78d9654577d50ff13ce36d6c356226cd7405
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOption.js
@@ -0,0 +1,31 @@
+import { ToString } from './262';
+/**
+ * https://tc39.es/ecma402/#sec-getoption
+ * @param opts
+ * @param prop
+ * @param type
+ * @param values
+ * @param fallback
+ */
+export function GetOption(opts, prop, type, values, fallback) {
+ if (typeof opts !== 'object') {
+ throw new TypeError('Options must be an object');
+ }
+ var value = opts[prop];
+ if (value !== undefined) {
+ if (type !== 'boolean' && type !== 'string') {
+ throw new TypeError('invalid type');
+ }
+ if (type === 'boolean') {
+ value = Boolean(value);
+ }
+ if (type === 'string') {
+ value = ToString(value);
+ }
+ if (values !== undefined && !values.filter(function (val) { return val == value; }).length) {
+ throw new RangeError("".concat(value, " is not within ").concat(values.join(', ')));
+ }
+ return value;
+ }
+ return fallback;
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..96f3adb66a0752839ef318c79a75e7db49e0b137
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.d.ts
@@ -0,0 +1,7 @@
+/**
+ * https://tc39.es/ecma402/#sec-getoptionsobject
+ * @param options
+ * @returns
+ */
+export declare function GetOptionsObject(options?: T): T;
+//# sourceMappingURL=GetOptionsObject.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..c00d705fd6c76d662050ffb515b743086ca62fac
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"GetOptionsObject.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/GetOptionsObject.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAQjE"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.js
new file mode 100644
index 0000000000000000000000000000000000000000..45c7525d61526c941636eb51164240252ac9b4d3
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/GetOptionsObject.js
@@ -0,0 +1,14 @@
+/**
+ * https://tc39.es/ecma402/#sec-getoptionsobject
+ * @param options
+ * @returns
+ */
+export function GetOptionsObject(options) {
+ if (typeof options === 'undefined') {
+ return Object.create(null);
+ }
+ if (typeof options === 'object') {
+ return options;
+ }
+ throw new TypeError('Options must be an object');
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fbb951d4d507e99f8553f1f255b79412c4c537d6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.d.ts
@@ -0,0 +1,14 @@
+/**
+ * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers
+ */
+export declare const SANCTIONED_UNITS: string[];
+export declare function removeUnitNamespace(unit: string): string;
+/**
+ * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers
+ */
+export declare const SIMPLE_UNITS: string[];
+/**
+ * https://tc39.es/ecma402/#sec-issanctionedsimpleunitidentifier
+ */
+export declare function IsSanctionedSimpleUnitIdentifier(unitIdentifier: string): boolean;
+//# sourceMappingURL=IsSanctionedSimpleUnitIdentifier.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..745967e4a63d52da0a5b1e6889e03f421cad0cd5
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"IsSanctionedSimpleUnitIdentifier.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/IsSanctionedSimpleUnitIdentifier.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,gBAAgB,UA4C5B,CAAA;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,UAE/C;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,UAA4C,CAAA;AAErE;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,cAAc,EAAE,MAAM,WAEtE"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.js
new file mode 100644
index 0000000000000000000000000000000000000000..bea2db04a67d0c642006f79336ded4518f6fd273
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsSanctionedSimpleUnitIdentifier.js
@@ -0,0 +1,63 @@
+/**
+ * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers
+ */
+export var SANCTIONED_UNITS = [
+ 'angle-degree',
+ 'area-acre',
+ 'area-hectare',
+ 'concentr-percent',
+ 'digital-bit',
+ 'digital-byte',
+ 'digital-gigabit',
+ 'digital-gigabyte',
+ 'digital-kilobit',
+ 'digital-kilobyte',
+ 'digital-megabit',
+ 'digital-megabyte',
+ 'digital-petabyte',
+ 'digital-terabit',
+ 'digital-terabyte',
+ 'duration-day',
+ 'duration-hour',
+ 'duration-millisecond',
+ 'duration-minute',
+ 'duration-month',
+ 'duration-second',
+ 'duration-week',
+ 'duration-year',
+ 'length-centimeter',
+ 'length-foot',
+ 'length-inch',
+ 'length-kilometer',
+ 'length-meter',
+ 'length-mile-scandinavian',
+ 'length-mile',
+ 'length-millimeter',
+ 'length-yard',
+ 'mass-gram',
+ 'mass-kilogram',
+ 'mass-ounce',
+ 'mass-pound',
+ 'mass-stone',
+ 'temperature-celsius',
+ 'temperature-fahrenheit',
+ 'volume-fluid-ounce',
+ 'volume-gallon',
+ 'volume-liter',
+ 'volume-milliliter',
+];
+// In CLDR, the unit name always follows the form `namespace-unit` pattern.
+// For example: `digital-bit` instead of `bit`. This function removes the namespace prefix.
+export function removeUnitNamespace(unit) {
+ return unit.slice(unit.indexOf('-') + 1);
+}
+/**
+ * https://tc39.es/ecma402/#table-sanctioned-simple-unit-identifiers
+ */
+export var SIMPLE_UNITS = SANCTIONED_UNITS.map(removeUnitNamespace);
+/**
+ * https://tc39.es/ecma402/#sec-issanctionedsimpleunitidentifier
+ */
+export function IsSanctionedSimpleUnitIdentifier(unitIdentifier) {
+ return SIMPLE_UNITS.indexOf(unitIdentifier) > -1;
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3d571da9810e404bcea5a10c0b9b9f983d6ec78f
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.d.ts
@@ -0,0 +1,10 @@
+/**
+ * https://tc39.es/ecma402/#sec-isvalidtimezonename
+ * @param tz
+ * @param implDetails implementation details
+ */
+export declare function IsValidTimeZoneName(tz: string, { tzData, uppercaseLinks, }: {
+ tzData: Record;
+ uppercaseLinks: Record;
+}): boolean;
+//# sourceMappingURL=IsValidTimeZoneName.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e78470a7695b2dd18df6a0ff51a9a76167e00991
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"IsValidTimeZoneName.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/IsValidTimeZoneName.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,EACV,EACE,MAAM,EACN,cAAc,GACf,EAAE;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC,GACA,OAAO,CAYT"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.js
new file mode 100644
index 0000000000000000000000000000000000000000..60abd7f2f7b65a9deef65225794425c290154d07
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsValidTimeZoneName.js
@@ -0,0 +1,19 @@
+/**
+ * https://tc39.es/ecma402/#sec-isvalidtimezonename
+ * @param tz
+ * @param implDetails implementation details
+ */
+export function IsValidTimeZoneName(tz, _a) {
+ var tzData = _a.tzData, uppercaseLinks = _a.uppercaseLinks;
+ var uppercasedTz = tz.toUpperCase();
+ var zoneNames = new Set();
+ var linkNames = new Set();
+ Object.keys(tzData)
+ .map(function (z) { return z.toUpperCase(); })
+ .forEach(function (z) { return zoneNames.add(z); });
+ Object.keys(uppercaseLinks).forEach(function (linkName) {
+ linkNames.add(linkName.toUpperCase());
+ zoneNames.add(uppercaseLinks[linkName].toUpperCase());
+ });
+ return zoneNames.has(uppercasedTz) || linkNames.has(uppercasedTz);
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..76f4d89f10aa6032a9ff264da03fe113b3298af1
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.d.ts
@@ -0,0 +1,5 @@
+/**
+ * https://tc39.es/ecma402/#sec-iswellformedcurrencycode
+ */
+export declare function IsWellFormedCurrencyCode(currency: string): boolean;
+//# sourceMappingURL=IsWellFormedCurrencyCode.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..055e410ee176722639c8bd657e23eac2c6850d86
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"IsWellFormedCurrencyCode.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/IsWellFormedCurrencyCode.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CASlE"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.js
new file mode 100644
index 0000000000000000000000000000000000000000..7669eec38e7f6e3c9e49b28fcd9f3d9d22e40199
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedCurrencyCode.js
@@ -0,0 +1,21 @@
+/**
+ * This follows https://tc39.es/ecma402/#sec-case-sensitivity-and-case-mapping
+ * @param str string to convert
+ */
+function toUpperCase(str) {
+ return str.replace(/([a-z])/g, function (_, c) { return c.toUpperCase(); });
+}
+var NOT_A_Z_REGEX = /[^A-Z]/;
+/**
+ * https://tc39.es/ecma402/#sec-iswellformedcurrencycode
+ */
+export function IsWellFormedCurrencyCode(currency) {
+ currency = toUpperCase(currency);
+ if (currency.length !== 3) {
+ return false;
+ }
+ if (NOT_A_Z_REGEX.test(currency)) {
+ return false;
+ }
+ return true;
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c3b955171ca65a3655e83fa946c531ff04074b0c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.d.ts
@@ -0,0 +1,6 @@
+/**
+ * https://tc39.es/ecma402/#sec-iswellformedunitidentifier
+ * @param unit
+ */
+export declare function IsWellFormedUnitIdentifier(unit: string): boolean;
+//# sourceMappingURL=IsWellFormedUnitIdentifier.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..26750994c73b9ea954691efe80ac161cd4de2fc1
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"IsWellFormedUnitIdentifier.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/IsWellFormedUnitIdentifier.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,WAiBtD"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.js
new file mode 100644
index 0000000000000000000000000000000000000000..0ffe6944058d2c3c7e918a4e49e5814fee9acf48
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/IsWellFormedUnitIdentifier.js
@@ -0,0 +1,28 @@
+import { IsSanctionedSimpleUnitIdentifier } from './IsSanctionedSimpleUnitIdentifier';
+/**
+ * This follows https://tc39.es/ecma402/#sec-case-sensitivity-and-case-mapping
+ * @param str string to convert
+ */
+function toLowerCase(str) {
+ return str.replace(/([A-Z])/g, function (_, c) { return c.toLowerCase(); });
+}
+/**
+ * https://tc39.es/ecma402/#sec-iswellformedunitidentifier
+ * @param unit
+ */
+export function IsWellFormedUnitIdentifier(unit) {
+ unit = toLowerCase(unit);
+ if (IsSanctionedSimpleUnitIdentifier(unit)) {
+ return true;
+ }
+ var units = unit.split('-per-');
+ if (units.length !== 2) {
+ return false;
+ }
+ var numerator = units[0], denominator = units[1];
+ if (!IsSanctionedSimpleUnitIdentifier(numerator) ||
+ !IsSanctionedSimpleUnitIdentifier(denominator)) {
+ return false;
+ }
+ return true;
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..897decc00bc394baef6accab21eb9c1dd3230175
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.d.ts
@@ -0,0 +1,12 @@
+import { NumberFormatInternal } from '../types/number';
+/**
+ * The abstract operation ComputeExponent computes an exponent (power of ten) by which to scale x
+ * according to the number formatting settings. It handles cases such as 999 rounding up to 1000,
+ * requiring a different exponent.
+ *
+ * NOT IN SPEC: it returns [exponent, magnitude].
+ */
+export declare function ComputeExponent(numberFormat: Intl.NumberFormat, x: number, { getInternalSlots, }: {
+ getInternalSlots(nf: Intl.NumberFormat): NumberFormatInternal;
+}): [number, number];
+//# sourceMappingURL=ComputeExponent.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..0c4265bca7dbd9dffb6c900a20b43900f51c0988
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ComputeExponent.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/NumberFormat/ComputeExponent.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,oBAAoB,EAAC,MAAM,iBAAiB,CAAA;AAEpD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,CAAC,EAAE,MAAM,EACT,EACE,gBAAgB,GACjB,EAAE;IAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;CAAC,GACjE,CAAC,MAAM,EAAE,MAAM,CAAC,CA8BlB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.js
new file mode 100644
index 0000000000000000000000000000000000000000..e913cc933a4875e61a140ca683090d0618877cf4
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponent.js
@@ -0,0 +1,39 @@
+import { getMagnitude } from '../utils';
+import { ComputeExponentForMagnitude } from './ComputeExponentForMagnitude';
+import { FormatNumericToString } from './FormatNumericToString';
+/**
+ * The abstract operation ComputeExponent computes an exponent (power of ten) by which to scale x
+ * according to the number formatting settings. It handles cases such as 999 rounding up to 1000,
+ * requiring a different exponent.
+ *
+ * NOT IN SPEC: it returns [exponent, magnitude].
+ */
+export function ComputeExponent(numberFormat, x, _a) {
+ var getInternalSlots = _a.getInternalSlots;
+ if (x === 0) {
+ return [0, 0];
+ }
+ if (x < 0) {
+ x = -x;
+ }
+ var magnitude = getMagnitude(x);
+ var exponent = ComputeExponentForMagnitude(numberFormat, magnitude, {
+ getInternalSlots: getInternalSlots,
+ });
+ // Preserve more precision by doing multiplication when exponent is negative.
+ x = exponent < 0 ? x * Math.pow(10, -exponent) : x / Math.pow(10, exponent);
+ var formatNumberResult = FormatNumericToString(getInternalSlots(numberFormat), x);
+ if (formatNumberResult.roundedNumber === 0) {
+ return [exponent, magnitude];
+ }
+ var newMagnitude = getMagnitude(formatNumberResult.roundedNumber);
+ if (newMagnitude === magnitude - exponent) {
+ return [exponent, magnitude];
+ }
+ return [
+ ComputeExponentForMagnitude(numberFormat, magnitude + 1, {
+ getInternalSlots: getInternalSlots,
+ }),
+ magnitude + 1,
+ ];
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..60eedae11d8d90c2d5cba0cbf12ad4b988753c6b
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.d.ts
@@ -0,0 +1,10 @@
+import { NumberFormatInternal } from '../types/number';
+/**
+ * The abstract operation ComputeExponentForMagnitude computes an exponent by which to scale a
+ * number of the given magnitude (power of ten of the most significant digit) according to the
+ * locale and the desired notation (scientific, engineering, or compact).
+ */
+export declare function ComputeExponentForMagnitude(numberFormat: Intl.NumberFormat, magnitude: number, { getInternalSlots, }: {
+ getInternalSlots(nf: Intl.NumberFormat): NumberFormatInternal;
+}): number;
+//# sourceMappingURL=ComputeExponentForMagnitude.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..9956fa62f005ab8648974b880dc6428daf1456cb
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ComputeExponentForMagnitude.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAmB,MAAM,iBAAiB,CAAA;AAEtE;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,SAAS,EAAE,MAAM,EACjB,EACE,gBAAgB,GACjB,EAAE;IAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;CAAC,GACjE,MAAM,CAyDR"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.js
new file mode 100644
index 0000000000000000000000000000000000000000..de09eaec36d4bbaa5655ab300bda89fa9f076287
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ComputeExponentForMagnitude.js
@@ -0,0 +1,60 @@
+/**
+ * The abstract operation ComputeExponentForMagnitude computes an exponent by which to scale a
+ * number of the given magnitude (power of ten of the most significant digit) according to the
+ * locale and the desired notation (scientific, engineering, or compact).
+ */
+export function ComputeExponentForMagnitude(numberFormat, magnitude, _a) {
+ var getInternalSlots = _a.getInternalSlots;
+ var internalSlots = getInternalSlots(numberFormat);
+ var notation = internalSlots.notation, dataLocaleData = internalSlots.dataLocaleData, numberingSystem = internalSlots.numberingSystem;
+ switch (notation) {
+ case 'standard':
+ return 0;
+ case 'scientific':
+ return magnitude;
+ case 'engineering':
+ return Math.floor(magnitude / 3) * 3;
+ default: {
+ // Let exponent be an implementation- and locale-dependent (ILD) integer by which to scale a
+ // number of the given magnitude in compact notation for the current locale.
+ var compactDisplay = internalSlots.compactDisplay, style = internalSlots.style, currencyDisplay = internalSlots.currencyDisplay;
+ var thresholdMap = void 0;
+ if (style === 'currency' && currencyDisplay !== 'name') {
+ var currency = dataLocaleData.numbers.currency[numberingSystem] ||
+ dataLocaleData.numbers.currency[dataLocaleData.numbers.nu[0]];
+ thresholdMap = currency.short;
+ }
+ else {
+ var decimal = dataLocaleData.numbers.decimal[numberingSystem] ||
+ dataLocaleData.numbers.decimal[dataLocaleData.numbers.nu[0]];
+ thresholdMap = compactDisplay === 'long' ? decimal.long : decimal.short;
+ }
+ if (!thresholdMap) {
+ return 0;
+ }
+ var num = String(Math.pow(10, magnitude));
+ var thresholds = Object.keys(thresholdMap); // TODO: this can be pre-processed
+ if (num < thresholds[0]) {
+ return 0;
+ }
+ if (num > thresholds[thresholds.length - 1]) {
+ return thresholds[thresholds.length - 1].length - 1;
+ }
+ var i = thresholds.indexOf(num);
+ if (i === -1) {
+ return 0;
+ }
+ // See https://unicode.org/reports/tr35/tr35-numbers.html#Compact_Number_Formats
+ // Special handling if the pattern is precisely `0`.
+ var magnitudeKey = thresholds[i];
+ // TODO: do we need to handle plural here?
+ var compactPattern = thresholdMap[magnitudeKey].other;
+ if (compactPattern === '0') {
+ return 0;
+ }
+ // Example: in zh-TW, `10000000` maps to `0000萬`. So we need to return 8 - 4 = 4 here.
+ return (magnitudeKey.length -
+ thresholdMap[magnitudeKey].other.match(/0+/)[0].length);
+ }
+ }
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..94f14d48462dd3e1b6566debd541257e9defa22d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.d.ts
@@ -0,0 +1,7 @@
+/**
+ * https://tc39.es/ecma402/#sec-currencydigits
+ */
+export declare function CurrencyDigits(c: string, { currencyDigitsData }: {
+ currencyDigitsData: Record;
+}): number;
+//# sourceMappingURL=CurrencyDigits.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..eeaa10a81e806e06c447e05b4dc5259641d0b22c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CurrencyDigits.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/NumberFormat/CurrencyDigits.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,EACT,EAAC,kBAAkB,EAAC,EAAE;IAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAC,GACjE,MAAM,CAIR"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.js
new file mode 100644
index 0000000000000000000000000000000000000000..8689ac1be6d7ec4fc7ddaa97d525caba4d17bcc6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CurrencyDigits.js
@@ -0,0 +1,10 @@
+import { HasOwnProperty } from '../262';
+/**
+ * https://tc39.es/ecma402/#sec-currencydigits
+ */
+export function CurrencyDigits(c, _a) {
+ var currencyDigitsData = _a.currencyDigitsData;
+ return HasOwnProperty(currencyDigitsData, c)
+ ? currencyDigitsData[c]
+ : 2;
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..053b18510f657e525c5f9bbf6fc3eb003fb845aa
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.d.ts
@@ -0,0 +1,5 @@
+import { NumberFormatInternal, NumberFormatPart } from '../types/number';
+export declare function FormatNumericToParts(nf: Intl.NumberFormat, x: number, implDetails: {
+ getInternalSlots(nf: Intl.NumberFormat): NumberFormatInternal;
+}): NumberFormatPart[];
+//# sourceMappingURL=FormatNumericToParts.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..555cc6ddf4c5c1e628281641484876264ff64508
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"FormatNumericToParts.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/NumberFormat/FormatNumericToParts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,oBAAoB,EAAE,gBAAgB,EAAC,MAAM,iBAAiB,CAAA;AAEtE,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,IAAI,CAAC,YAAY,EACrB,CAAC,EAAE,MAAM,EACT,WAAW,EAAE;IACX,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;CAC9D,GACA,gBAAgB,EAAE,CAWpB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.js
new file mode 100644
index 0000000000000000000000000000000000000000..b28ae7ad1bbf8fae7611e878fa22c2324ff1e516
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToParts.js
@@ -0,0 +1,14 @@
+import { PartitionNumberPattern } from './PartitionNumberPattern';
+import { ArrayCreate } from '../262';
+export function FormatNumericToParts(nf, x, implDetails) {
+ var parts = PartitionNumberPattern(nf, x, implDetails);
+ var result = ArrayCreate(0);
+ for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {
+ var part = parts_1[_i];
+ result.push({
+ type: part.type,
+ value: part.value,
+ });
+ }
+ return result;
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..091b1c4fefce9e15db018e647541ea30f8da92a8
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.d.ts
@@ -0,0 +1,9 @@
+import { NumberFormatDigitInternalSlots } from '../types/number';
+/**
+ * https://tc39.es/ecma402/#sec-formatnumberstring
+ */
+export declare function FormatNumericToString(intlObject: Pick, x: number): {
+ roundedNumber: number;
+ formattedString: string;
+};
+//# sourceMappingURL=FormatNumericToString.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..94f089c24c6d450a428946606f442100f57b94f0
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"FormatNumericToString.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/NumberFormat/FormatNumericToString.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,8BAA8B,EAE/B,MAAM,iBAAiB,CAAA;AAGxB;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,IAAI,CACd,8BAA8B,EAC5B,cAAc,GACd,0BAA0B,GAC1B,0BAA0B,GAC1B,sBAAsB,GACtB,uBAAuB,GACvB,uBAAuB,CAC1B,EACD,CAAC,EAAE,MAAM;;;EAgDV"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.js
new file mode 100644
index 0000000000000000000000000000000000000000..27c0fa3423311973e25919f4734c11b115dcf395
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/FormatNumericToString.js
@@ -0,0 +1,41 @@
+import { SameValue } from '../262';
+import { ToRawPrecision } from './ToRawPrecision';
+import { repeat } from '../utils';
+import { ToRawFixed } from './ToRawFixed';
+/**
+ * https://tc39.es/ecma402/#sec-formatnumberstring
+ */
+export function FormatNumericToString(intlObject, x) {
+ var isNegative = x < 0 || SameValue(x, -0);
+ if (isNegative) {
+ x = -x;
+ }
+ var result;
+ var rourndingType = intlObject.roundingType;
+ switch (rourndingType) {
+ case 'significantDigits':
+ result = ToRawPrecision(x, intlObject.minimumSignificantDigits, intlObject.maximumSignificantDigits);
+ break;
+ case 'fractionDigits':
+ result = ToRawFixed(x, intlObject.minimumFractionDigits, intlObject.maximumFractionDigits);
+ break;
+ default:
+ result = ToRawPrecision(x, 1, 2);
+ if (result.integerDigitsCount > 1) {
+ result = ToRawFixed(x, 0, 0);
+ }
+ break;
+ }
+ x = result.roundedNumber;
+ var string = result.formattedString;
+ var int = result.integerDigitsCount;
+ var minInteger = intlObject.minimumIntegerDigits;
+ if (int < minInteger) {
+ var forwardZeros = repeat('0', minInteger - int);
+ string = forwardZeros + string;
+ }
+ if (isNegative) {
+ x = -x;
+ }
+ return { roundedNumber: x, formattedString: string };
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..abea59c181fc933d063a1b23fb30b9723ab60919
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.d.ts
@@ -0,0 +1,13 @@
+import { NumberFormatInternal, NumberFormatOptions, NumberFormatLocaleInternalData } from '../types/number';
+/**
+ * https://tc39.es/ecma402/#sec-initializenumberformat
+ */
+export declare function InitializeNumberFormat(nf: Intl.NumberFormat, locales: string | ReadonlyArray | undefined, opts: NumberFormatOptions | undefined, { getInternalSlots, localeData, availableLocales, numberingSystemNames, getDefaultLocale, currencyDigitsData, }: {
+ getInternalSlots(nf: Intl.NumberFormat): NumberFormatInternal;
+ localeData: Record;
+ availableLocales: Set;
+ numberingSystemNames: ReadonlyArray;
+ getDefaultLocale(): string;
+ currencyDigitsData: Record;
+}): Intl.NumberFormat;
+//# sourceMappingURL=InitializeNumberFormat.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..a23b3a1016ba1ac00c0ffa3eb23e8fe95934ddca
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"InitializeNumberFormat.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/NumberFormat/InitializeNumberFormat.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,8BAA8B,EAC/B,MAAM,iBAAiB,CAAA;AAUxB;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,IAAI,CAAC,YAAY,EACrB,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,EACnD,IAAI,EAAE,mBAAmB,GAAG,SAAS,EACrC,EACE,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,EAAE;IACD,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;IAC7D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,8BAA8B,GAAG,SAAS,CAAC,CAAA;IACtE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC7B,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3C,gBAAgB,IAAI,MAAM,CAAA;IAC1B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC3C,qBA+GF"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.js
new file mode 100644
index 0000000000000000000000000000000000000000..3441d173eb668bc139c395919fbd92d746f956cc
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/InitializeNumberFormat.js
@@ -0,0 +1,64 @@
+import { CanonicalizeLocaleList } from '../CanonicalizeLocaleList';
+import { GetOption } from '../GetOption';
+import { ResolveLocale } from '@formatjs/intl-localematcher';
+import { SetNumberFormatUnitOptions } from './SetNumberFormatUnitOptions';
+import { CurrencyDigits } from './CurrencyDigits';
+import { SetNumberFormatDigitOptions } from './SetNumberFormatDigitOptions';
+import { invariant } from '../utils';
+import { CoerceOptionsToObject } from '../CoerceOptionsToObject';
+/**
+ * https://tc39.es/ecma402/#sec-initializenumberformat
+ */
+export function InitializeNumberFormat(nf, locales, opts, _a) {
+ var getInternalSlots = _a.getInternalSlots, localeData = _a.localeData, availableLocales = _a.availableLocales, numberingSystemNames = _a.numberingSystemNames, getDefaultLocale = _a.getDefaultLocale, currencyDigitsData = _a.currencyDigitsData;
+ // @ts-ignore
+ var requestedLocales = CanonicalizeLocaleList(locales);
+ var options = CoerceOptionsToObject(opts);
+ var opt = Object.create(null);
+ var matcher = GetOption(options, 'localeMatcher', 'string', ['lookup', 'best fit'], 'best fit');
+ opt.localeMatcher = matcher;
+ var numberingSystem = GetOption(options, 'numberingSystem', 'string', undefined, undefined);
+ if (numberingSystem !== undefined &&
+ numberingSystemNames.indexOf(numberingSystem) < 0) {
+ // 8.a. If numberingSystem does not match the Unicode Locale Identifier type nonterminal,
+ // throw a RangeError exception.
+ throw RangeError("Invalid numberingSystems: ".concat(numberingSystem));
+ }
+ opt.nu = numberingSystem;
+ var r = ResolveLocale(availableLocales, requestedLocales, opt,
+ // [[RelevantExtensionKeys]] slot, which is a constant
+ ['nu'], localeData, getDefaultLocale);
+ var dataLocaleData = localeData[r.dataLocale];
+ invariant(!!dataLocaleData, "Missing locale data for ".concat(r.dataLocale));
+ var internalSlots = getInternalSlots(nf);
+ internalSlots.locale = r.locale;
+ internalSlots.dataLocale = r.dataLocale;
+ internalSlots.numberingSystem = r.nu;
+ internalSlots.dataLocaleData = dataLocaleData;
+ SetNumberFormatUnitOptions(nf, options, { getInternalSlots: getInternalSlots });
+ var style = internalSlots.style;
+ var mnfdDefault;
+ var mxfdDefault;
+ if (style === 'currency') {
+ var currency = internalSlots.currency;
+ var cDigits = CurrencyDigits(currency, { currencyDigitsData: currencyDigitsData });
+ mnfdDefault = cDigits;
+ mxfdDefault = cDigits;
+ }
+ else {
+ mnfdDefault = 0;
+ mxfdDefault = style === 'percent' ? 0 : 3;
+ }
+ var notation = GetOption(options, 'notation', 'string', ['standard', 'scientific', 'engineering', 'compact'], 'standard');
+ internalSlots.notation = notation;
+ SetNumberFormatDigitOptions(internalSlots, options, mnfdDefault, mxfdDefault, notation);
+ var compactDisplay = GetOption(options, 'compactDisplay', 'string', ['short', 'long'], 'short');
+ if (notation === 'compact') {
+ internalSlots.compactDisplay = compactDisplay;
+ }
+ var useGrouping = GetOption(options, 'useGrouping', 'boolean', undefined, true);
+ internalSlots.useGrouping = useGrouping;
+ var signDisplay = GetOption(options, 'signDisplay', 'string', ['auto', 'never', 'always', 'exceptZero'], 'auto');
+ internalSlots.signDisplay = signDisplay;
+ return nf;
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fca6056ea220fc58e13c5f20d85de99ac587a546
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.d.ts
@@ -0,0 +1,8 @@
+import { NumberFormatInternal } from '../types/number';
+/**
+ * https://tc39.es/ecma402/#sec-formatnumberstring
+ */
+export declare function PartitionNumberPattern(numberFormat: Intl.NumberFormat, x: number, { getInternalSlots, }: {
+ getInternalSlots(nf: Intl.NumberFormat): NumberFormatInternal;
+}): import("../types/number").NumberFormatPart[];
+//# sourceMappingURL=PartitionNumberPattern.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..a84fbb60fa29fb7b2a39c05d7f227ce5b4d55b64
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"PartitionNumberPattern.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/NumberFormat/PartitionNumberPattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,iBAAiB,CAAA;AAMpD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,CAAC,EAAE,MAAM,EACT,EACE,gBAAgB,GACjB,EAAE;IACD,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;CAC9D,gDAqEF"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb01237492bbda3f344df7cdc7759b9803901801
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/PartitionNumberPattern.js
@@ -0,0 +1,75 @@
+import { FormatNumericToString } from './FormatNumericToString';
+import { SameValue } from '../262';
+import { ComputeExponent } from './ComputeExponent';
+import formatToParts from './format_to_parts';
+/**
+ * https://tc39.es/ecma402/#sec-formatnumberstring
+ */
+export function PartitionNumberPattern(numberFormat, x, _a) {
+ var _b;
+ var getInternalSlots = _a.getInternalSlots;
+ var internalSlots = getInternalSlots(numberFormat);
+ var pl = internalSlots.pl, dataLocaleData = internalSlots.dataLocaleData, numberingSystem = internalSlots.numberingSystem;
+ var symbols = dataLocaleData.numbers.symbols[numberingSystem] ||
+ dataLocaleData.numbers.symbols[dataLocaleData.numbers.nu[0]];
+ var magnitude = 0;
+ var exponent = 0;
+ var n;
+ if (isNaN(x)) {
+ n = symbols.nan;
+ }
+ else if (!isFinite(x)) {
+ n = symbols.infinity;
+ }
+ else {
+ if (internalSlots.style === 'percent') {
+ x *= 100;
+ }
+ ;
+ _b = ComputeExponent(numberFormat, x, {
+ getInternalSlots: getInternalSlots,
+ }), exponent = _b[0], magnitude = _b[1];
+ // Preserve more precision by doing multiplication when exponent is negative.
+ x = exponent < 0 ? x * Math.pow(10, -exponent) : x / Math.pow(10, exponent);
+ var formatNumberResult = FormatNumericToString(internalSlots, x);
+ n = formatNumberResult.formattedString;
+ x = formatNumberResult.roundedNumber;
+ }
+ // Based on https://tc39.es/ecma402/#sec-getnumberformatpattern
+ // We need to do this before `x` is rounded.
+ var sign;
+ var signDisplay = internalSlots.signDisplay;
+ switch (signDisplay) {
+ case 'never':
+ sign = 0;
+ break;
+ case 'auto':
+ if (SameValue(x, 0) || x > 0 || isNaN(x)) {
+ sign = 0;
+ }
+ else {
+ sign = -1;
+ }
+ break;
+ case 'always':
+ if (SameValue(x, 0) || x > 0 || isNaN(x)) {
+ sign = 1;
+ }
+ else {
+ sign = -1;
+ }
+ break;
+ default:
+ // x === 0 -> x is 0 or x is -0
+ if (x === 0 || isNaN(x)) {
+ sign = 0;
+ }
+ else if (x > 0) {
+ sign = 1;
+ }
+ else {
+ sign = -1;
+ }
+ }
+ return formatToParts({ roundedNumber: x, formattedString: n, exponent: exponent, magnitude: magnitude, sign: sign }, internalSlots.dataLocaleData, pl, internalSlots);
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1b96f54f41006d4ca1461de1126674329e99c050
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.d.ts
@@ -0,0 +1,6 @@
+import { NumberFormatDigitOptions, NumberFormatNotation, NumberFormatDigitInternalSlots } from '../types/number';
+/**
+ * https://tc39.es/ecma402/#sec-setnfdigitoptions
+ */
+export declare function SetNumberFormatDigitOptions(internalSlots: NumberFormatDigitInternalSlots, opts: NumberFormatDigitOptions, mnfdDefault: number, mxfdDefault: number, notation: NumberFormatNotation): void;
+//# sourceMappingURL=SetNumberFormatDigitOptions.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..05e281e72ea738a74eddb8c27d331b6dc384d198
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"SetNumberFormatDigitOptions.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/NumberFormat/SetNumberFormatDigitOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,EAC/B,MAAM,iBAAiB,CAAA;AAIxB;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,8BAA8B,EAC7C,IAAI,EAAE,wBAAwB,EAC9B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,oBAAoB,QA4B/B"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.js
new file mode 100644
index 0000000000000000000000000000000000000000..2a4c341f25946144d989ec0374d52b02aace1535
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatDigitOptions.js
@@ -0,0 +1,36 @@
+import { GetNumberOption } from '../GetNumberOption';
+import { DefaultNumberOption } from '../DefaultNumberOption';
+/**
+ * https://tc39.es/ecma402/#sec-setnfdigitoptions
+ */
+export function SetNumberFormatDigitOptions(internalSlots, opts, mnfdDefault, mxfdDefault, notation) {
+ var mnid = GetNumberOption(opts, 'minimumIntegerDigits', 1, 21, 1);
+ var mnfd = opts.minimumFractionDigits;
+ var mxfd = opts.maximumFractionDigits;
+ var mnsd = opts.minimumSignificantDigits;
+ var mxsd = opts.maximumSignificantDigits;
+ internalSlots.minimumIntegerDigits = mnid;
+ if (mnsd !== undefined || mxsd !== undefined) {
+ internalSlots.roundingType = 'significantDigits';
+ mnsd = DefaultNumberOption(mnsd, 1, 21, 1);
+ mxsd = DefaultNumberOption(mxsd, mnsd, 21, 21);
+ internalSlots.minimumSignificantDigits = mnsd;
+ internalSlots.maximumSignificantDigits = mxsd;
+ }
+ else if (mnfd !== undefined || mxfd !== undefined) {
+ internalSlots.roundingType = 'fractionDigits';
+ mnfd = DefaultNumberOption(mnfd, 0, 20, mnfdDefault);
+ var mxfdActualDefault = Math.max(mnfd, mxfdDefault);
+ mxfd = DefaultNumberOption(mxfd, mnfd, 20, mxfdActualDefault);
+ internalSlots.minimumFractionDigits = mnfd;
+ internalSlots.maximumFractionDigits = mxfd;
+ }
+ else if (notation === 'compact') {
+ internalSlots.roundingType = 'compactRounding';
+ }
+ else {
+ internalSlots.roundingType = 'fractionDigits';
+ internalSlots.minimumFractionDigits = mnfdDefault;
+ internalSlots.maximumFractionDigits = mxfdDefault;
+ }
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a4460df9da237d58373bcdfcb39fed08d23b4936
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.d.ts
@@ -0,0 +1,8 @@
+import { NumberFormatInternal, NumberFormatOptions } from '../types/number';
+/**
+ * https://tc39.es/ecma402/#sec-setnumberformatunitoptions
+ */
+export declare function SetNumberFormatUnitOptions(nf: Intl.NumberFormat, options: NumberFormatOptions | undefined, { getInternalSlots, }: {
+ getInternalSlots(nf: Intl.NumberFormat): NumberFormatInternal;
+}): void;
+//# sourceMappingURL=SetNumberFormatUnitOptions.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..39704520a657108f795e90193ece45b338f05dde
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"SetNumberFormatUnitOptions.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/NumberFormat/SetNumberFormatUnitOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAA;AAKzE;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,IAAI,CAAC,YAAY,EACrB,OAAO,iCAA2C,EAClD,EACE,gBAAgB,GACjB,EAAE;IAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;CAAC,QA+DnE"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.js
new file mode 100644
index 0000000000000000000000000000000000000000..d23a0911d3476ff36906c5fa002e795fd24313ec
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/SetNumberFormatUnitOptions.js
@@ -0,0 +1,39 @@
+import { GetOption } from '../GetOption';
+import { IsWellFormedCurrencyCode } from '../IsWellFormedCurrencyCode';
+import { IsWellFormedUnitIdentifier } from '../IsWellFormedUnitIdentifier';
+/**
+ * https://tc39.es/ecma402/#sec-setnumberformatunitoptions
+ */
+export function SetNumberFormatUnitOptions(nf, options, _a) {
+ if (options === void 0) { options = Object.create(null); }
+ var getInternalSlots = _a.getInternalSlots;
+ var internalSlots = getInternalSlots(nf);
+ var style = GetOption(options, 'style', 'string', ['decimal', 'percent', 'currency', 'unit'], 'decimal');
+ internalSlots.style = style;
+ var currency = GetOption(options, 'currency', 'string', undefined, undefined);
+ if (currency !== undefined && !IsWellFormedCurrencyCode(currency)) {
+ throw RangeError('Malformed currency code');
+ }
+ if (style === 'currency' && currency === undefined) {
+ throw TypeError('currency cannot be undefined');
+ }
+ var currencyDisplay = GetOption(options, 'currencyDisplay', 'string', ['code', 'symbol', 'narrowSymbol', 'name'], 'symbol');
+ var currencySign = GetOption(options, 'currencySign', 'string', ['standard', 'accounting'], 'standard');
+ var unit = GetOption(options, 'unit', 'string', undefined, undefined);
+ if (unit !== undefined && !IsWellFormedUnitIdentifier(unit)) {
+ throw RangeError('Invalid unit argument for Intl.NumberFormat()');
+ }
+ if (style === 'unit' && unit === undefined) {
+ throw TypeError('unit cannot be undefined');
+ }
+ var unitDisplay = GetOption(options, 'unitDisplay', 'string', ['short', 'narrow', 'long'], 'short');
+ if (style === 'currency') {
+ internalSlots.currency = currency.toUpperCase();
+ internalSlots.currencyDisplay = currencyDisplay;
+ internalSlots.currencySign = currencySign;
+ }
+ if (style === 'unit') {
+ internalSlots.unit = unit;
+ internalSlots.unitDisplay = unitDisplay;
+ }
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..de99cbd43ae9060aa64305ad279d0d7ce112e5e9
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.d.ts
@@ -0,0 +1,10 @@
+import { RawNumberFormatResult } from '../types/number';
+/**
+ * TODO: dedup with intl-pluralrules and support BigInt
+ * https://tc39.es/ecma402/#sec-torawfixed
+ * @param x a finite non-negative Number or BigInt
+ * @param minFraction and integer between 0 and 20
+ * @param maxFraction and integer between 0 and 20
+ */
+export declare function ToRawFixed(x: number, minFraction: number, maxFraction: number): RawNumberFormatResult;
+//# sourceMappingURL=ToRawFixed.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..b79fa50470d22d7536e38f7079eda844b79d3039
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ToRawFixed.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/NumberFormat/ToRawFixed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,iBAAiB,CAAA;AAGrD;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,CAAC,EAAE,MAAM,EACT,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,qBAAqB,CAyCvB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.js
new file mode 100644
index 0000000000000000000000000000000000000000..6207b38ffdbd846f6d68cb22694c8590ad903d35
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawFixed.js
@@ -0,0 +1,51 @@
+import { repeat } from '../utils';
+/**
+ * TODO: dedup with intl-pluralrules and support BigInt
+ * https://tc39.es/ecma402/#sec-torawfixed
+ * @param x a finite non-negative Number or BigInt
+ * @param minFraction and integer between 0 and 20
+ * @param maxFraction and integer between 0 and 20
+ */
+export function ToRawFixed(x, minFraction, maxFraction) {
+ var f = maxFraction;
+ var n = Math.round(x * Math.pow(10, f));
+ var xFinal = n / Math.pow(10, f);
+ // n is a positive integer, but it is possible to be greater than 1e21.
+ // In such case we will go the slow path.
+ // See also: https://tc39.es/ecma262/#sec-numeric-types-number-tostring
+ var m;
+ if (n < 1e21) {
+ m = n.toString();
+ }
+ else {
+ m = n.toString();
+ var _a = m.split('e'), mantissa = _a[0], exponent = _a[1];
+ m = mantissa.replace('.', '');
+ m = m + repeat('0', Math.max(+exponent - m.length + 1, 0));
+ }
+ var int;
+ if (f !== 0) {
+ var k = m.length;
+ if (k <= f) {
+ var z = repeat('0', f + 1 - k);
+ m = z + m;
+ k = f + 1;
+ }
+ var a = m.slice(0, k - f);
+ var b = m.slice(k - f);
+ m = "".concat(a, ".").concat(b);
+ int = a.length;
+ }
+ else {
+ int = m.length;
+ }
+ var cut = maxFraction - minFraction;
+ while (cut > 0 && m[m.length - 1] === '0') {
+ m = m.slice(0, -1);
+ cut--;
+ }
+ if (m[m.length - 1] === '.') {
+ m = m.slice(0, -1);
+ }
+ return { formattedString: m, roundedNumber: xFinal, integerDigitsCount: int };
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..21f71153ef746dccc5f44927c732230957ef2e1c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.d.ts
@@ -0,0 +1,3 @@
+import { RawNumberFormatResult } from '../types/number';
+export declare function ToRawPrecision(x: number, minPrecision: number, maxPrecision: number): RawNumberFormatResult;
+//# sourceMappingURL=ToRawPrecision.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e3969e8de259c8249d02a604898d074b1aa55e7a
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ToRawPrecision.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/NumberFormat/ToRawPrecision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,iBAAiB,CAAA;AAGrD,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,EACT,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,qBAAqB,CA8EvB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.js
new file mode 100644
index 0000000000000000000000000000000000000000..101f1257e8589a0013cf84b12d8320a58e688e54
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/ToRawPrecision.js
@@ -0,0 +1,74 @@
+import { repeat, getMagnitude } from '../utils';
+export function ToRawPrecision(x, minPrecision, maxPrecision) {
+ var p = maxPrecision;
+ var m;
+ var e;
+ var xFinal;
+ if (x === 0) {
+ m = repeat('0', p);
+ e = 0;
+ xFinal = 0;
+ }
+ else {
+ var xToString = x.toString();
+ // If xToString is formatted as scientific notation, the number is either very small or very
+ // large. If the precision of the formatted string is lower that requested max precision, we
+ // should still infer them from the formatted string, otherwise the formatted result might have
+ // precision loss (e.g. 1e41 will not have 0 in every trailing digits).
+ var xToStringExponentIndex = xToString.indexOf('e');
+ var _a = xToString.split('e'), xToStringMantissa = _a[0], xToStringExponent = _a[1];
+ var xToStringMantissaWithoutDecimalPoint = xToStringMantissa.replace('.', '');
+ if (xToStringExponentIndex >= 0 &&
+ xToStringMantissaWithoutDecimalPoint.length <= p) {
+ e = +xToStringExponent;
+ m =
+ xToStringMantissaWithoutDecimalPoint +
+ repeat('0', p - xToStringMantissaWithoutDecimalPoint.length);
+ xFinal = x;
+ }
+ else {
+ e = getMagnitude(x);
+ var decimalPlaceOffset = e - p + 1;
+ // n is the integer containing the required precision digits. To derive the formatted string,
+ // we will adjust its decimal place in the logic below.
+ var n = Math.round(adjustDecimalPlace(x, decimalPlaceOffset));
+ // The rounding caused the change of magnitude, so we should increment `e` by 1.
+ if (adjustDecimalPlace(n, p - 1) >= 10) {
+ e = e + 1;
+ // Divide n by 10 to swallow one precision.
+ n = Math.floor(n / 10);
+ }
+ m = n.toString();
+ // Equivalent of n * 10 ** (e - p + 1)
+ xFinal = adjustDecimalPlace(n, p - 1 - e);
+ }
+ }
+ var int;
+ if (e >= p - 1) {
+ m = m + repeat('0', e - p + 1);
+ int = e + 1;
+ }
+ else if (e >= 0) {
+ m = "".concat(m.slice(0, e + 1), ".").concat(m.slice(e + 1));
+ int = e + 1;
+ }
+ else {
+ m = "0.".concat(repeat('0', -e - 1)).concat(m);
+ int = 1;
+ }
+ if (m.indexOf('.') >= 0 && maxPrecision > minPrecision) {
+ var cut = maxPrecision - minPrecision;
+ while (cut > 0 && m[m.length - 1] === '0') {
+ m = m.slice(0, -1);
+ cut--;
+ }
+ if (m[m.length - 1] === '.') {
+ m = m.slice(0, -1);
+ }
+ }
+ return { formattedString: m, roundedNumber: xFinal, integerDigitsCount: int };
+ // x / (10 ** magnitude), but try to preserve as much floating point precision as possible.
+ function adjustDecimalPlace(x, magnitude) {
+ return magnitude < 0 ? x * Math.pow(10, -magnitude) : x / Math.pow(10, magnitude);
+ }
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4d0f8e1142c3efebaf1677c9fd43d741b2c9221c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.d.ts
@@ -0,0 +1,2 @@
+export declare const digitMapping: Record>;
+//# sourceMappingURL=digit-mapping.generated.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..50933bb6e4c43789a986177158dbd8bc0bb8cbd5
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"digit-mapping.generated.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/NumberFormat/digit-mapping.generated.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAA67G,CAAC"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.js
new file mode 100644
index 0000000000000000000000000000000000000000..f574fae2337a2bbbc22258dc50128d26a904f6e7
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/digit-mapping.generated.js
@@ -0,0 +1 @@
+export var digitMapping = { "adlm": ["𞥐", "𞥑", "𞥒", "𞥓", "𞥔", "𞥕", "𞥖", "𞥗", "𞥘", "𞥙"], "ahom": ["𑜰", "𑜱", "𑜲", "𑜳", "𑜴", "𑜵", "𑜶", "𑜷", "𑜸", "𑜹"], "arab": ["٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"], "arabext": ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"], "bali": ["᭐", "᭑", "᭒", "᭓", "᭔", "᭕", "᭖", "᭗", "᭘", "᭙"], "beng": ["০", "১", "২", "৩", "৪", "৫", "৬", "৭", "৮", "৯"], "bhks": ["𑱐", "𑱑", "𑱒", "𑱓", "𑱔", "𑱕", "𑱖", "𑱗", "𑱘", "𑱙"], "brah": ["𑁦", "𑁧", "𑁨", "𑁩", "𑁪", "𑁫", "𑁬", "𑁭", "𑁮", "𑁯"], "cakm": ["𑄶", "𑄷", "𑄸", "𑄹", "𑄺", "𑄻", "𑄼", "𑄽", "𑄾", "𑄿"], "cham": ["꩐", "꩑", "꩒", "꩓", "꩔", "꩕", "꩖", "꩗", "꩘", "꩙"], "deva": ["०", "१", "२", "३", "४", "५", "६", "७", "८", "९"], "diak": ["𑥐", "𑥑", "𑥒", "𑥓", "𑥔", "𑥕", "𑥖", "𑥗", "𑥘", "𑥙"], "fullwide": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], "gong": ["𑶠", "𑶡", "𑶢", "𑶣", "𑶤", "𑶥", "𑶦", "𑶧", "𑶨", "𑶩"], "gonm": ["𑵐", "𑵑", "𑵒", "𑵓", "𑵔", "𑵕", "𑵖", "𑵗", "𑵘", "𑵙"], "gujr": ["૦", "૧", "૨", "૩", "૪", "૫", "૬", "૭", "૮", "૯"], "guru": ["੦", "੧", "੨", "੩", "੪", "੫", "੬", "੭", "੮", "੯"], "hanidec": ["〇", "一", "二", "三", "四", "五", "六", "七", "八", "九"], "hmng": ["𖭐", "𖭑", "𖭒", "𖭓", "𖭔", "𖭕", "𖭖", "𖭗", "𖭘", "𖭙"], "hmnp": ["𞅀", "𞅁", "𞅂", "𞅃", "𞅄", "𞅅", "𞅆", "𞅇", "𞅈", "𞅉"], "java": ["꧐", "꧑", "꧒", "꧓", "꧔", "꧕", "꧖", "꧗", "꧘", "꧙"], "kali": ["꤀", "꤁", "꤂", "꤃", "꤄", "꤅", "꤆", "꤇", "꤈", "꤉"], "khmr": ["០", "១", "២", "៣", "៤", "៥", "៦", "៧", "៨", "៩"], "knda": ["೦", "೧", "೨", "೩", "೪", "೫", "೬", "೭", "೮", "೯"], "lana": ["᪀", "᪁", "᪂", "᪃", "᪄", "᪅", "᪆", "᪇", "᪈", "᪉"], "lanatham": ["᪐", "᪑", "᪒", "᪓", "᪔", "᪕", "᪖", "᪗", "᪘", "᪙"], "laoo": ["໐", "໑", "໒", "໓", "໔", "໕", "໖", "໗", "໘", "໙"], "lepc": ["᪐", "᪑", "᪒", "᪓", "᪔", "᪕", "᪖", "᪗", "᪘", "᪙"], "limb": ["᥆", "᥇", "᥈", "᥉", "᥊", "᥋", "᥌", "᥍", "᥎", "᥏"], "mathbold": ["𝟎", "𝟏", "𝟐", "𝟑", "𝟒", "𝟓", "𝟔", "𝟕", "𝟖", "𝟗"], "mathdbl": ["𝟘", "𝟙", "𝟚", "𝟛", "𝟜", "𝟝", "𝟞", "𝟟", "𝟠", "𝟡"], "mathmono": ["𝟶", "𝟷", "𝟸", "𝟹", "𝟺", "𝟻", "𝟼", "𝟽", "𝟾", "𝟿"], "mathsanb": ["𝟬", "𝟭", "𝟮", "𝟯", "𝟰", "𝟱", "𝟲", "𝟳", "𝟴", "𝟵"], "mathsans": ["𝟢", "𝟣", "𝟤", "𝟥", "𝟦", "𝟧", "𝟨", "𝟩", "𝟪", "𝟫"], "mlym": ["൦", "൧", "൨", "൩", "൪", "൫", "൬", "൭", "൮", "൯"], "modi": ["𑙐", "𑙑", "𑙒", "𑙓", "𑙔", "𑙕", "𑙖", "𑙗", "𑙘", "𑙙"], "mong": ["᠐", "᠑", "᠒", "᠓", "᠔", "᠕", "᠖", "᠗", "᠘", "᠙"], "mroo": ["𖩠", "𖩡", "𖩢", "𖩣", "𖩤", "𖩥", "𖩦", "𖩧", "𖩨", "𖩩"], "mtei": ["꯰", "꯱", "꯲", "꯳", "꯴", "꯵", "꯶", "꯷", "꯸", "꯹"], "mymr": ["၀", "၁", "၂", "၃", "၄", "၅", "၆", "၇", "၈", "၉"], "mymrshan": ["႐", "႑", "႒", "႓", "႔", "႕", "႖", "႗", "႘", "႙"], "mymrtlng": ["꧰", "꧱", "꧲", "꧳", "꧴", "꧵", "꧶", "꧷", "꧸", "꧹"], "newa": ["𑑐", "𑑑", "𑑒", "𑑓", "𑑔", "𑑕", "𑑖", "𑑗", "𑑘", "𑑙"], "nkoo": ["߀", "߁", "߂", "߃", "߄", "߅", "߆", "߇", "߈", "߉"], "olck": ["᱐", "᱑", "᱒", "᱓", "᱔", "᱕", "᱖", "᱗", "᱘", "᱙"], "orya": ["୦", "୧", "୨", "୩", "୪", "୫", "୬", "୭", "୮", "୯"], "osma": ["𐒠", "𐒡", "𐒢", "𐒣", "𐒤", "𐒥", "𐒦", "𐒧", "𐒨", "𐒩"], "rohg": ["𐴰", "𐴱", "𐴲", "𐴳", "𐴴", "𐴵", "𐴶", "𐴷", "𐴸", "𐴹"], "saur": ["꣐", "꣑", "꣒", "꣓", "꣔", "꣕", "꣖", "꣗", "꣘", "꣙"], "segment": ["🯰", "🯱", "🯲", "🯳", "🯴", "🯵", "🯶", "🯷", "🯸", "🯹"], "shrd": ["𑇐", "𑇑", "𑇒", "𑇓", "𑇔", "𑇕", "𑇖", "𑇗", "𑇘", "𑇙"], "sind": ["𑋰", "𑋱", "𑋲", "𑋳", "𑋴", "𑋵", "𑋶", "𑋷", "𑋸", "𑋹"], "sinh": ["෦", "෧", "෨", "෩", "෪", "෫", "෬", "෭", "෮", "෯"], "sora": ["𑃰", "𑃱", "𑃲", "𑃳", "𑃴", "𑃵", "𑃶", "𑃷", "𑃸", "𑃹"], "sund": ["᮰", "᮱", "᮲", "᮳", "᮴", "᮵", "᮶", "᮷", "᮸", "᮹"], "takr": ["𑛀", "𑛁", "𑛂", "𑛃", "𑛄", "𑛅", "𑛆", "𑛇", "𑛈", "𑛉"], "talu": ["᧐", "᧑", "᧒", "᧓", "᧔", "᧕", "᧖", "᧗", "᧘", "᧙"], "tamldec": ["௦", "௧", "௨", "௩", "௪", "௫", "௬", "௭", "௮", "௯"], "telu": ["౦", "౧", "౨", "౩", "౪", "౫", "౬", "౭", "౮", "౯"], "thai": ["๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙"], "tibt": ["༠", "༡", "༢", "༣", "༤", "༥", "༦", "༧", "༨", "༩"], "tirh": ["𑓐", "𑓑", "𑓒", "𑓓", "𑓔", "𑓕", "𑓖", "𑓗", "𑓘", "𑓙"], "vaii": ["ᘠ", "ᘡ", "ᘢ", "ᘣ", "ᘤ", "ᘥ", "ᘦ", "ᘧ", "ᘨ", "ᘩ"], "wara": ["𑣠", "𑣡", "𑣢", "𑣣", "𑣤", "𑣥", "𑣦", "𑣧", "𑣨", "𑣩"], "wcho": ["𞋰", "𞋱", "𞋲", "𞋳", "𞋴", "𞋵", "𞋶", "𞋷", "𞋸", "𞋹"] };
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..91705dff6dd94f25f427c1962e0ce62ebcb604e6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.d.ts
@@ -0,0 +1,22 @@
+import { NumberFormatOptionsStyle, NumberFormatOptionsNotation, NumberFormatOptionsCompactDisplay, NumberFormatOptionsCurrencyDisplay, NumberFormatOptionsCurrencySign, NumberFormatOptionsUnitDisplay, NumberFormatLocaleInternalData, NumberFormatPart } from '../types/number';
+interface NumberResult {
+ formattedString: string;
+ roundedNumber: number;
+ sign: -1 | 0 | 1;
+ exponent: number;
+ magnitude: number;
+}
+export default function formatToParts(numberResult: NumberResult, data: NumberFormatLocaleInternalData, pl: Intl.PluralRules, options: {
+ numberingSystem: string;
+ useGrouping: boolean;
+ style: NumberFormatOptionsStyle;
+ notation: NumberFormatOptionsNotation;
+ compactDisplay?: NumberFormatOptionsCompactDisplay;
+ currency?: string;
+ currencyDisplay?: NumberFormatOptionsCurrencyDisplay;
+ currencySign?: NumberFormatOptionsCurrencySign;
+ unit?: string;
+ unitDisplay?: NumberFormatOptionsUnitDisplay;
+}): NumberFormatPart[];
+export {};
+//# sourceMappingURL=format_to_parts.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7b138ee86d35ced97cf3fb983540c4bbc7452a39
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"format_to_parts.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/NumberFormat/format_to_parts.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,iCAAiC,EACjC,kCAAkC,EAClC,+BAA+B,EAC/B,8BAA8B,EAC9B,8BAA8B,EAM9B,gBAAgB,EACjB,MAAM,iBAAiB,CAAA;AAexB,UAAU,YAAY;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAEhB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,8BAA8B,EACpC,EAAE,EAAE,IAAI,CAAC,WAAW,EACpB,OAAO,EAAE;IACP,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,EAAE,wBAAwB,CAAA;IAE/B,QAAQ,EAAE,2BAA2B,CAAA;IAErC,cAAc,CAAC,EAAE,iCAAiC,CAAA;IAElD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,kCAAkC,CAAA;IACpD,YAAY,CAAC,EAAE,+BAA+B,CAAA;IAE9C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,8BAA8B,CAAA;CAC7C,GACA,gBAAgB,EAAE,CAySpB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.js
new file mode 100644
index 0000000000000000000000000000000000000000..00e01f2045c2ce5626e7240c1387ffd2e99a8bf6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/format_to_parts.js
@@ -0,0 +1,421 @@
+import { ToRawFixed } from './ToRawFixed';
+import { digitMapping } from './digit-mapping.generated';
+import { S_UNICODE_REGEX } from '../regex.generated';
+// This is from: unicode-12.1.0/General_Category/Symbol/regex.js
+// IE11 does not support unicode flag, otherwise this is just /\p{S}/u.
+// /^\p{S}/u
+var CARET_S_UNICODE_REGEX = new RegExp("^".concat(S_UNICODE_REGEX.source));
+// /\p{S}$/u
+var S_DOLLAR_UNICODE_REGEX = new RegExp("".concat(S_UNICODE_REGEX.source, "$"));
+var CLDR_NUMBER_PATTERN = /[#0](?:[\.,][#0]+)*/g;
+export default function formatToParts(numberResult, data, pl, options) {
+ var sign = numberResult.sign, exponent = numberResult.exponent, magnitude = numberResult.magnitude;
+ var notation = options.notation, style = options.style, numberingSystem = options.numberingSystem;
+ var defaultNumberingSystem = data.numbers.nu[0];
+ // #region Part 1: partition and interpolate the CLDR number pattern.
+ // ----------------------------------------------------------
+ var compactNumberPattern = null;
+ if (notation === 'compact' && magnitude) {
+ compactNumberPattern = getCompactDisplayPattern(numberResult, pl, data, style, options.compactDisplay, options.currencyDisplay, numberingSystem);
+ }
+ // This is used multiple times
+ var nonNameCurrencyPart;
+ if (style === 'currency' && options.currencyDisplay !== 'name') {
+ var byCurrencyDisplay = data.currencies[options.currency];
+ if (byCurrencyDisplay) {
+ switch (options.currencyDisplay) {
+ case 'code':
+ nonNameCurrencyPart = options.currency;
+ break;
+ case 'symbol':
+ nonNameCurrencyPart = byCurrencyDisplay.symbol;
+ break;
+ default:
+ nonNameCurrencyPart = byCurrencyDisplay.narrow;
+ break;
+ }
+ }
+ else {
+ // Fallback for unknown currency
+ nonNameCurrencyPart = options.currency;
+ }
+ }
+ var numberPattern;
+ if (!compactNumberPattern) {
+ // Note: if the style is unit, or is currency and the currency display is name,
+ // its unit parts will be interpolated in part 2. So here we can fallback to decimal.
+ if (style === 'decimal' ||
+ style === 'unit' ||
+ (style === 'currency' && options.currencyDisplay === 'name')) {
+ // Shortcut for decimal
+ var decimalData = data.numbers.decimal[numberingSystem] ||
+ data.numbers.decimal[defaultNumberingSystem];
+ numberPattern = getPatternForSign(decimalData.standard, sign);
+ }
+ else if (style === 'currency') {
+ var currencyData = data.numbers.currency[numberingSystem] ||
+ data.numbers.currency[defaultNumberingSystem];
+ // We replace number pattern part with `0` for easier postprocessing.
+ numberPattern = getPatternForSign(currencyData[options.currencySign], sign);
+ }
+ else {
+ // percent
+ var percentPattern = data.numbers.percent[numberingSystem] ||
+ data.numbers.percent[defaultNumberingSystem];
+ numberPattern = getPatternForSign(percentPattern, sign);
+ }
+ }
+ else {
+ numberPattern = compactNumberPattern;
+ }
+ // Extract the decimal number pattern string. It looks like "#,##0,00", which will later be
+ // used to infer decimal group sizes.
+ var decimalNumberPattern = CLDR_NUMBER_PATTERN.exec(numberPattern)[0];
+ // Now we start to substitute patterns
+ // 1. replace strings like `0` and `#,##0.00` with `{0}`
+ // 2. unquote characters (invariant: the quoted characters does not contain the special tokens)
+ numberPattern = numberPattern
+ .replace(CLDR_NUMBER_PATTERN, '{0}')
+ .replace(/'(.)'/g, '$1');
+ // Handle currency spacing (both compact and non-compact).
+ if (style === 'currency' && options.currencyDisplay !== 'name') {
+ var currencyData = data.numbers.currency[numberingSystem] ||
+ data.numbers.currency[defaultNumberingSystem];
+ // See `currencySpacing` substitution rule in TR-35.
+ // Here we always assume the currencyMatch is "[:^S:]" and surroundingMatch is "[:digit:]".
+ //
+ // Example 1: for pattern "#,##0.00¤" with symbol "US$", we replace "¤" with the symbol,
+ // but insert an extra non-break space before the symbol, because "[:^S:]" matches "U" in
+ // "US$" and "[:digit:]" matches the latn numbering system digits.
+ //
+ // Example 2: for pattern "¤#,##0.00" with symbol "US$", there is no spacing between symbol
+ // and number, because `$` does not match "[:^S:]".
+ //
+ // Implementation note: here we do the best effort to infer the insertion.
+ // We also assume that `beforeInsertBetween` and `afterInsertBetween` will never be `;`.
+ var afterCurrency = currencyData.currencySpacing.afterInsertBetween;
+ if (afterCurrency && !S_DOLLAR_UNICODE_REGEX.test(nonNameCurrencyPart)) {
+ numberPattern = numberPattern.replace('¤{0}', "\u00A4".concat(afterCurrency, "{0}"));
+ }
+ var beforeCurrency = currencyData.currencySpacing.beforeInsertBetween;
+ if (beforeCurrency && !CARET_S_UNICODE_REGEX.test(nonNameCurrencyPart)) {
+ numberPattern = numberPattern.replace('{0}¤', "{0}".concat(beforeCurrency, "\u00A4"));
+ }
+ }
+ // The following tokens are special: `{0}`, `¤`, `%`, `-`, `+`, `{c:...}.
+ var numberPatternParts = numberPattern.split(/({c:[^}]+}|\{0\}|[¤%\-\+])/g);
+ var numberParts = [];
+ var symbols = data.numbers.symbols[numberingSystem] ||
+ data.numbers.symbols[defaultNumberingSystem];
+ for (var _i = 0, numberPatternParts_1 = numberPatternParts; _i < numberPatternParts_1.length; _i++) {
+ var part = numberPatternParts_1[_i];
+ if (!part) {
+ continue;
+ }
+ switch (part) {
+ case '{0}': {
+ // We only need to handle scientific and engineering notation here.
+ numberParts.push.apply(numberParts, paritionNumberIntoParts(symbols, numberResult, notation, exponent, numberingSystem,
+ // If compact number pattern exists, do not insert group separators.
+ !compactNumberPattern && options.useGrouping, decimalNumberPattern));
+ break;
+ }
+ case '-':
+ numberParts.push({ type: 'minusSign', value: symbols.minusSign });
+ break;
+ case '+':
+ numberParts.push({ type: 'plusSign', value: symbols.plusSign });
+ break;
+ case '%':
+ numberParts.push({ type: 'percentSign', value: symbols.percentSign });
+ break;
+ case '¤':
+ // Computed above when handling currency spacing.
+ numberParts.push({ type: 'currency', value: nonNameCurrencyPart });
+ break;
+ default:
+ if (/^\{c:/.test(part)) {
+ numberParts.push({
+ type: 'compact',
+ value: part.substring(3, part.length - 1),
+ });
+ }
+ else {
+ // literal
+ numberParts.push({ type: 'literal', value: part });
+ }
+ break;
+ }
+ }
+ // #endregion
+ // #region Part 2: interpolate unit pattern if necessary.
+ // ----------------------------------------------
+ switch (style) {
+ case 'currency': {
+ // `currencyDisplay: 'name'` has similar pattern handling as units.
+ if (options.currencyDisplay === 'name') {
+ var unitPattern = (data.numbers.currency[numberingSystem] ||
+ data.numbers.currency[defaultNumberingSystem]).unitPattern;
+ // Select plural
+ var unitName = void 0;
+ var currencyNameData = data.currencies[options.currency];
+ if (currencyNameData) {
+ unitName = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), currencyNameData.displayName);
+ }
+ else {
+ // Fallback for unknown currency
+ unitName = options.currency;
+ }
+ // Do {0} and {1} substitution
+ var unitPatternParts = unitPattern.split(/(\{[01]\})/g);
+ var result = [];
+ for (var _a = 0, unitPatternParts_1 = unitPatternParts; _a < unitPatternParts_1.length; _a++) {
+ var part = unitPatternParts_1[_a];
+ switch (part) {
+ case '{0}':
+ result.push.apply(result, numberParts);
+ break;
+ case '{1}':
+ result.push({ type: 'currency', value: unitName });
+ break;
+ default:
+ if (part) {
+ result.push({ type: 'literal', value: part });
+ }
+ break;
+ }
+ }
+ return result;
+ }
+ else {
+ return numberParts;
+ }
+ }
+ case 'unit': {
+ var unit = options.unit, unitDisplay = options.unitDisplay;
+ var unitData = data.units.simple[unit];
+ var unitPattern = void 0;
+ if (unitData) {
+ // Simple unit pattern
+ unitPattern = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), data.units.simple[unit][unitDisplay]);
+ }
+ else {
+ // See: http://unicode.org/reports/tr35/tr35-general.html#perUnitPatterns
+ // If cannot find unit in the simple pattern, it must be "per" compound pattern.
+ // Implementation note: we are not following TR-35 here because we need to format to parts!
+ var _b = unit.split('-per-'), numeratorUnit = _b[0], denominatorUnit = _b[1];
+ unitData = data.units.simple[numeratorUnit];
+ var numeratorUnitPattern = selectPlural(pl, numberResult.roundedNumber * Math.pow(10, exponent), data.units.simple[numeratorUnit][unitDisplay]);
+ var perUnitPattern = data.units.simple[denominatorUnit].perUnit[unitDisplay];
+ if (perUnitPattern) {
+ // perUnitPattern exists, combine it with numeratorUnitPattern
+ unitPattern = perUnitPattern.replace('{0}', numeratorUnitPattern);
+ }
+ else {
+ // get compoundUnit pattern (e.g. "{0} per {1}"), repalce {0} with numerator pattern and {1} with
+ // the denominator pattern in singular form.
+ var perPattern = data.units.compound.per[unitDisplay];
+ var denominatorPattern = selectPlural(pl, 1, data.units.simple[denominatorUnit][unitDisplay]);
+ unitPattern = unitPattern = perPattern
+ .replace('{0}', numeratorUnitPattern)
+ .replace('{1}', denominatorPattern.replace('{0}', ''));
+ }
+ }
+ var result = [];
+ // We need spacing around "{0}" because they are not treated as "unit" parts, but "literal".
+ for (var _c = 0, _d = unitPattern.split(/(\s*\{0\}\s*)/); _c < _d.length; _c++) {
+ var part = _d[_c];
+ var interpolateMatch = /^(\s*)\{0\}(\s*)$/.exec(part);
+ if (interpolateMatch) {
+ // Space before "{0}"
+ if (interpolateMatch[1]) {
+ result.push({ type: 'literal', value: interpolateMatch[1] });
+ }
+ // "{0}" itself
+ result.push.apply(result, numberParts);
+ // Space after "{0}"
+ if (interpolateMatch[2]) {
+ result.push({ type: 'literal', value: interpolateMatch[2] });
+ }
+ }
+ else if (part) {
+ result.push({ type: 'unit', value: part });
+ }
+ }
+ return result;
+ }
+ default:
+ return numberParts;
+ }
+ // #endregion
+}
+// A subset of https://tc39.es/ecma402/#sec-partitionnotationsubpattern
+// Plus the exponent parts handling.
+function paritionNumberIntoParts(symbols, numberResult, notation, exponent, numberingSystem, useGrouping,
+/**
+ * This is the decimal number pattern without signs or symbols.
+ * It is used to infer the group size when `useGrouping` is true.
+ *
+ * A typical value looks like "#,##0.00" (primary group size is 3).
+ * Some locales like Hindi has secondary group size of 2 (e.g. "#,##,##0.00").
+ */
+decimalNumberPattern) {
+ var result = [];
+ // eslint-disable-next-line prefer-const
+ var n = numberResult.formattedString, x = numberResult.roundedNumber;
+ if (isNaN(x)) {
+ return [{ type: 'nan', value: n }];
+ }
+ else if (!isFinite(x)) {
+ return [{ type: 'infinity', value: n }];
+ }
+ var digitReplacementTable = digitMapping[numberingSystem];
+ if (digitReplacementTable) {
+ n = n.replace(/\d/g, function (digit) { return digitReplacementTable[+digit] || digit; });
+ }
+ // TODO: Else use an implementation dependent algorithm to map n to the appropriate
+ // representation of n in the given numbering system.
+ var decimalSepIndex = n.indexOf('.');
+ var integer;
+ var fraction;
+ if (decimalSepIndex > 0) {
+ integer = n.slice(0, decimalSepIndex);
+ fraction = n.slice(decimalSepIndex + 1);
+ }
+ else {
+ integer = n;
+ }
+ // #region Grouping integer digits
+ // The weird compact and x >= 10000 check is to ensure consistency with Node.js and Chrome.
+ // Note that `de` does not have compact form for thousands, but Node.js does not insert grouping separator
+ // unless the rounded number is greater than 10000:
+ // NumberFormat('de', {notation: 'compact', compactDisplay: 'short'}).format(1234) //=> "1234"
+ // NumberFormat('de').format(1234) //=> "1.234"
+ if (useGrouping && (notation !== 'compact' || x >= 10000)) {
+ var groupSepSymbol = symbols.group;
+ var groups = [];
+ // > There may be two different grouping sizes: The primary grouping size used for the least
+ // > significant integer group, and the secondary grouping size used for more significant groups.
+ // > If a pattern contains multiple grouping separators, the interval between the last one and the
+ // > end of the integer defines the primary grouping size, and the interval between the last two
+ // > defines the secondary grouping size. All others are ignored.
+ var integerNumberPattern = decimalNumberPattern.split('.')[0];
+ var patternGroups = integerNumberPattern.split(',');
+ var primaryGroupingSize = 3;
+ var secondaryGroupingSize = 3;
+ if (patternGroups.length > 1) {
+ primaryGroupingSize = patternGroups[patternGroups.length - 1].length;
+ }
+ if (patternGroups.length > 2) {
+ secondaryGroupingSize = patternGroups[patternGroups.length - 2].length;
+ }
+ var i = integer.length - primaryGroupingSize;
+ if (i > 0) {
+ // Slice the least significant integer group
+ groups.push(integer.slice(i, i + primaryGroupingSize));
+ // Then iteratively push the more signicant groups
+ // TODO: handle surrogate pairs in some numbering system digits
+ for (i -= secondaryGroupingSize; i > 0; i -= secondaryGroupingSize) {
+ groups.push(integer.slice(i, i + secondaryGroupingSize));
+ }
+ groups.push(integer.slice(0, i + secondaryGroupingSize));
+ }
+ else {
+ groups.push(integer);
+ }
+ while (groups.length > 0) {
+ var integerGroup = groups.pop();
+ result.push({ type: 'integer', value: integerGroup });
+ if (groups.length > 0) {
+ result.push({ type: 'group', value: groupSepSymbol });
+ }
+ }
+ }
+ else {
+ result.push({ type: 'integer', value: integer });
+ }
+ // #endregion
+ if (fraction !== undefined) {
+ result.push({ type: 'decimal', value: symbols.decimal }, { type: 'fraction', value: fraction });
+ }
+ if ((notation === 'scientific' || notation === 'engineering') &&
+ isFinite(x)) {
+ result.push({ type: 'exponentSeparator', value: symbols.exponential });
+ if (exponent < 0) {
+ result.push({ type: 'exponentMinusSign', value: symbols.minusSign });
+ exponent = -exponent;
+ }
+ var exponentResult = ToRawFixed(exponent, 0, 0);
+ result.push({
+ type: 'exponentInteger',
+ value: exponentResult.formattedString,
+ });
+ }
+ return result;
+}
+function getPatternForSign(pattern, sign) {
+ if (pattern.indexOf(';') < 0) {
+ pattern = "".concat(pattern, ";-").concat(pattern);
+ }
+ var _a = pattern.split(';'), zeroPattern = _a[0], negativePattern = _a[1];
+ switch (sign) {
+ case 0:
+ return zeroPattern;
+ case -1:
+ return negativePattern;
+ default:
+ return negativePattern.indexOf('-') >= 0
+ ? negativePattern.replace(/-/g, '+')
+ : "+".concat(zeroPattern);
+ }
+}
+// Find the CLDR pattern for compact notation based on the magnitude of data and style.
+//
+// Example return value: "¤ {c:laki}000;¤{c:laki} -0" (`sw` locale):
+// - Notice the `{c:...}` token that wraps the compact literal.
+// - The consecutive zeros are normalized to single zero to match CLDR_NUMBER_PATTERN.
+//
+// Returning null means the compact display pattern cannot be found.
+function getCompactDisplayPattern(numberResult, pl, data, style, compactDisplay, currencyDisplay, numberingSystem) {
+ var _a;
+ var roundedNumber = numberResult.roundedNumber, sign = numberResult.sign, magnitude = numberResult.magnitude;
+ var magnitudeKey = String(Math.pow(10, magnitude));
+ var defaultNumberingSystem = data.numbers.nu[0];
+ var pattern;
+ if (style === 'currency' && currencyDisplay !== 'name') {
+ var byNumberingSystem = data.numbers.currency;
+ var currencyData = byNumberingSystem[numberingSystem] ||
+ byNumberingSystem[defaultNumberingSystem];
+ // NOTE: compact notation ignores currencySign!
+ var compactPluralRules = (_a = currencyData.short) === null || _a === void 0 ? void 0 : _a[magnitudeKey];
+ if (!compactPluralRules) {
+ return null;
+ }
+ pattern = selectPlural(pl, roundedNumber, compactPluralRules);
+ }
+ else {
+ var byNumberingSystem = data.numbers.decimal;
+ var byCompactDisplay = byNumberingSystem[numberingSystem] ||
+ byNumberingSystem[defaultNumberingSystem];
+ var compactPlaralRule = byCompactDisplay[compactDisplay][magnitudeKey];
+ if (!compactPlaralRule) {
+ return null;
+ }
+ pattern = selectPlural(pl, roundedNumber, compactPlaralRule);
+ }
+ // See https://unicode.org/reports/tr35/tr35-numbers.html#Compact_Number_Formats
+ // > If the value is precisely “0”, either explicit or defaulted, then the normal number format
+ // > pattern for that sort of object is supplied.
+ if (pattern === '0') {
+ return null;
+ }
+ pattern = getPatternForSign(pattern, sign)
+ // Extract compact literal from the pattern
+ .replace(/([^\s;\-\+\d¤]+)/g, '{c:$1}')
+ // We replace one or more zeros with a single zero so it matches `CLDR_NUMBER_PATTERN`.
+ .replace(/0+/, '0');
+ return pattern;
+}
+function selectPlural(pl, x, rules) {
+ return rules[pl.select(x)] || rules.other;
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1a619e2af9bd77675efebf62321eb41065393f16
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.d.ts
@@ -0,0 +1,9 @@
+/**
+ * https://tc39.es/ecma402/#sec-partitionpattern
+ * @param pattern
+ */
+export declare function PartitionPattern(pattern: string): Array<{
+ type: T;
+ value: string | undefined;
+}>;
+//# sourceMappingURL=PartitionPattern.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..30c2d1edce4d06c0690c2acdbf9b7e4252455ccd
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"PartitionPattern.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/PartitionPattern.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAC/C,OAAO,EAAE,MAAM,GACd,KAAK,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAC,CAAC,CA6B7C"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.js
new file mode 100644
index 0000000000000000000000000000000000000000..ee40cf7e2142257a72e9c24c1c7efa076418f71a
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/PartitionPattern.js
@@ -0,0 +1,35 @@
+import { invariant } from './utils';
+/**
+ * https://tc39.es/ecma402/#sec-partitionpattern
+ * @param pattern
+ */
+export function PartitionPattern(pattern) {
+ var result = [];
+ var beginIndex = pattern.indexOf('{');
+ var endIndex = 0;
+ var nextIndex = 0;
+ var length = pattern.length;
+ while (beginIndex < pattern.length && beginIndex > -1) {
+ endIndex = pattern.indexOf('}', beginIndex);
+ invariant(endIndex > beginIndex, "Invalid pattern ".concat(pattern));
+ if (beginIndex > nextIndex) {
+ result.push({
+ type: 'literal',
+ value: pattern.substring(nextIndex, beginIndex),
+ });
+ }
+ result.push({
+ type: pattern.substring(beginIndex + 1, endIndex),
+ value: undefined,
+ });
+ nextIndex = endIndex + 1;
+ beginIndex = pattern.indexOf('{', nextIndex);
+ }
+ if (nextIndex < length) {
+ result.push({
+ type: 'literal',
+ value: pattern.substring(nextIndex, length),
+ });
+ }
+ return result;
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d8980868d2216eaed23c0589b40250c73388706c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.d.ts
@@ -0,0 +1,10 @@
+/**
+ * https://tc39.es/ecma402/#sec-supportedlocales
+ * @param availableLocales
+ * @param requestedLocales
+ * @param options
+ */
+export declare function SupportedLocales(availableLocales: Set, requestedLocales: string[], options?: {
+ localeMatcher?: 'best fit' | 'lookup';
+}): string[];
+//# sourceMappingURL=SupportedLocales.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..3ad9e438255bac6ce827699f2a822fdb4e3f022e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"SupportedLocales.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/SupportedLocales.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,gBAAgB,EAAE,MAAM,EAAE,EAC1B,OAAO,CAAC,EAAE;IAAC,aAAa,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;CAAC,GAChD,MAAM,EAAE,CAgBV"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.js
new file mode 100644
index 0000000000000000000000000000000000000000..c4bf1669566b1eb7423f3c491c750b9a401c88fe
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/SupportedLocales.js
@@ -0,0 +1,20 @@
+import { ToObject } from './262';
+import { GetOption } from './GetOption';
+import { LookupSupportedLocales } from '@formatjs/intl-localematcher';
+/**
+ * https://tc39.es/ecma402/#sec-supportedlocales
+ * @param availableLocales
+ * @param requestedLocales
+ * @param options
+ */
+export function SupportedLocales(availableLocales, requestedLocales, options) {
+ var matcher = 'best fit';
+ if (options !== undefined) {
+ options = ToObject(options);
+ matcher = GetOption(options, 'localeMatcher', 'string', ['lookup', 'best fit'], 'best fit');
+ }
+ if (matcher === 'best fit') {
+ return LookupSupportedLocales(availableLocales, requestedLocales);
+ }
+ return LookupSupportedLocales(availableLocales, requestedLocales);
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/data.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/data.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..82e8baf43c45bb0f4750cb9c70c8e532ca89741a
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/data.d.ts
@@ -0,0 +1,6 @@
+declare class MissingLocaleDataError extends Error {
+ type: string;
+}
+export declare function isMissingLocaleDataError(e: Error): e is MissingLocaleDataError;
+export {};
+//# sourceMappingURL=data.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/data.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/data.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..07c83216404194e85c73df970391ddc874bb018e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/data.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/data.ts"],"names":[],"mappings":"AAAA,cAAM,sBAAuB,SAAQ,KAAK;IACjC,IAAI,SAAwB;CACpC;AAED,wBAAgB,wBAAwB,CACtC,CAAC,EAAE,KAAK,GACP,CAAC,IAAI,sBAAsB,CAE7B"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/data.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/data.js
new file mode 100644
index 0000000000000000000000000000000000000000..af5b8595b603f28e642325845f6750cb3abc39ef
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/data.js
@@ -0,0 +1,13 @@
+import { __extends } from "tslib";
+var MissingLocaleDataError = /** @class */ (function (_super) {
+ __extends(MissingLocaleDataError, _super);
+ function MissingLocaleDataError() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.type = 'MISSING_LOCALE_DATA';
+ return _this;
+ }
+ return MissingLocaleDataError;
+}(Error));
+export function isMissingLocaleDataError(e) {
+ return e.type === 'MISSING_LOCALE_DATA';
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/index.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..051620b9848f65c116324335add3721f3d397e68
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/index.d.ts
@@ -0,0 +1,37 @@
+export * from './CanonicalizeLocaleList';
+export * from './CanonicalizeTimeZoneName';
+export * from './CoerceOptionsToObject';
+export * from './GetNumberOption';
+export * from './GetOption';
+export * from './GetOptionsObject';
+export * from './IsSanctionedSimpleUnitIdentifier';
+export * from './IsValidTimeZoneName';
+export * from './IsWellFormedCurrencyCode';
+export * from './IsWellFormedUnitIdentifier';
+export * from './NumberFormat/ComputeExponent';
+export * from './NumberFormat/ComputeExponentForMagnitude';
+export * from './NumberFormat/CurrencyDigits';
+export * from './NumberFormat/FormatNumericToParts';
+export * from './NumberFormat/FormatNumericToString';
+export * from './NumberFormat/InitializeNumberFormat';
+export * from './NumberFormat/PartitionNumberPattern';
+export * from './NumberFormat/SetNumberFormatDigitOptions';
+export * from './NumberFormat/SetNumberFormatUnitOptions';
+export * from './NumberFormat/ToRawFixed';
+export * from './NumberFormat/ToRawPrecision';
+export { default as _formatToParts } from './NumberFormat/format_to_parts';
+export * from './PartitionPattern';
+export * from './SupportedLocales';
+export { getInternalSlot, getMultiInternalSlots, isLiteralPart, setInternalSlot, setMultiInternalSlots, getMagnitude, defineProperty, } from './utils';
+export type { LiteralPart } from './utils';
+export { isMissingLocaleDataError } from './data';
+export * from './types/relative-time';
+export * from './types/date-time';
+export * from './types/list';
+export * from './types/plural-rules';
+export * from './types/number';
+export * from './types/displaynames';
+export { invariant } from './utils';
+export type { LocaleData } from './types/core';
+export * from './262';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/index.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..4ba642294799b016a44ec544e144070281afd2a0
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oCAAoC,CAAA;AAClD,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,4CAA4C,CAAA;AAC1D,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qCAAqC,CAAA;AACnD,cAAc,sCAAsC,CAAA;AACpD,cAAc,uCAAuC,CAAA;AACrD,cAAc,uCAAuC,CAAA;AACrD,cAAc,4CAA4C,CAAA;AAC1D,cAAc,2CAA2C,CAAA;AACzD,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,gCAAgC,CAAA;AACxE,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,YAAY,EACZ,cAAc,GACf,MAAM,SAAS,CAAA;AAChB,YAAY,EAAC,WAAW,EAAC,MAAM,SAAS,CAAA;AAExC,OAAO,EAAC,wBAAwB,EAAC,MAAM,QAAQ,CAAA;AAC/C,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAA;AACjC,YAAY,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAC5C,cAAc,OAAO,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/index.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..bfff738a657ba87fb1b7aee51ba1aa6f69f02a4e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/index.js
@@ -0,0 +1,34 @@
+export * from './CanonicalizeLocaleList';
+export * from './CanonicalizeTimeZoneName';
+export * from './CoerceOptionsToObject';
+export * from './GetNumberOption';
+export * from './GetOption';
+export * from './GetOptionsObject';
+export * from './IsSanctionedSimpleUnitIdentifier';
+export * from './IsValidTimeZoneName';
+export * from './IsWellFormedCurrencyCode';
+export * from './IsWellFormedUnitIdentifier';
+export * from './NumberFormat/ComputeExponent';
+export * from './NumberFormat/ComputeExponentForMagnitude';
+export * from './NumberFormat/CurrencyDigits';
+export * from './NumberFormat/FormatNumericToParts';
+export * from './NumberFormat/FormatNumericToString';
+export * from './NumberFormat/InitializeNumberFormat';
+export * from './NumberFormat/PartitionNumberPattern';
+export * from './NumberFormat/SetNumberFormatDigitOptions';
+export * from './NumberFormat/SetNumberFormatUnitOptions';
+export * from './NumberFormat/ToRawFixed';
+export * from './NumberFormat/ToRawPrecision';
+export { default as _formatToParts } from './NumberFormat/format_to_parts';
+export * from './PartitionPattern';
+export * from './SupportedLocales';
+export { getInternalSlot, getMultiInternalSlots, isLiteralPart, setInternalSlot, setMultiInternalSlots, getMagnitude, defineProperty, } from './utils';
+export { isMissingLocaleDataError } from './data';
+export * from './types/relative-time';
+export * from './types/date-time';
+export * from './types/list';
+export * from './types/plural-rules';
+export * from './types/number';
+export * from './types/displaynames';
+export { invariant } from './utils';
+export * from './262';
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/regex.generated.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/regex.generated.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..88724c9730af1a197ce3b929e41b145e76e693ea
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/regex.generated.d.ts
@@ -0,0 +1,2 @@
+export declare const S_UNICODE_REGEX: RegExp;
+//# sourceMappingURL=regex.generated.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/regex.generated.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/regex.generated.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..f23331604d6e49cecfaaf2d89bab805dd8acc3ee
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/regex.generated.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"regex.generated.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/regex.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,QAAy8E,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/regex.generated.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/regex.generated.js
new file mode 100644
index 0000000000000000000000000000000000000000..691100b276780a97246fbba4bfd97cd60e7a15a4
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/regex.generated.js
@@ -0,0 +1,2 @@
+// @generated from regex-gen.ts
+export var S_UNICODE_REGEX = /[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20BF\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC1\uFDFC\uFDFD\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]/;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/core.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/core.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..09e3fc1f67b91fa774e87af7835534209f8a7c0c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/core.d.ts
@@ -0,0 +1,11 @@
+export declare type Locale = string;
+export interface LocaleData {
+ data: T;
+ locale: Locale;
+}
+export interface LookupMatcherResult {
+ locale: string;
+ extension?: string;
+ nu?: string;
+}
+//# sourceMappingURL=core.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/core.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/core.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..f395db24553c625f191ee220d9875b2d9bb86ec4
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/core.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/types/core.ts"],"names":[],"mappings":"AAAA,oBAAY,MAAM,GAAG,MAAM,CAAA;AAC3B,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAA;IACP,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/core.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/core.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb0ff5c3b541f646105198ee23ac0fc3d805023e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/core.js
@@ -0,0 +1 @@
+export {};
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/date-time.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/date-time.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..115d03487b223be9375ca805ce50353cacd86592
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/date-time.d.ts
@@ -0,0 +1,135 @@
+export declare type Formats = Pick & {
+ fractionalSecondDigits?: 0 | 1 | 2;
+ hour12?: boolean;
+ pattern: string;
+ pattern12: string;
+ skeleton: string;
+ rawPattern: string;
+ rangePatterns: Record;
+ rangePatterns12: Record;
+};
+export interface IntlDateTimeFormatInternal {
+ locale: string;
+ dataLocale: string;
+ calendar?: string;
+ dateStyle?: 'full' | 'long' | 'medium' | 'short';
+ timeStyle?: 'full' | 'long' | 'medium' | 'short';
+ weekday: 'narrow' | 'short' | 'long';
+ era: 'narrow' | 'short' | 'long';
+ year: '2-digit' | 'numeric';
+ month: '2-digit' | 'numeric' | 'narrow' | 'short' | 'long';
+ day: '2-digit' | 'numeric';
+ dayPeriod: 'narrow' | 'short' | 'long';
+ hour: '2-digit' | 'numeric';
+ minute: '2-digit' | 'numeric';
+ second: '2-digit' | 'numeric';
+ timeZoneName: 'short' | 'long';
+ fractionalSecondDigits?: 1 | 2 | 3;
+ hourCycle: string;
+ numberingSystem: string;
+ timeZone: string;
+ pattern: string;
+ format: Formats;
+ rangePatterns: Record;
+ boundFormat?: Intl.DateTimeFormat['format'];
+}
+export interface RangePatternPart {
+ source: T;
+ pattern: string;
+}
+export declare type RangePatterns = Pick & {
+ hour12?: boolean;
+ patternParts: Array;
+};
+export declare enum RangePatternType {
+ startRange = "startRange",
+ shared = "shared",
+ endRange = "endRange"
+}
+export declare type TABLE_6 = 'weekday' | 'era' | 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second' | 'fractionalSecondDigits' | 'timeZoneName';
+export declare type TABLE_2 = 'era' | 'year' | 'month' | 'day' | 'dayPeriod' | 'ampm' | 'hour' | 'minute' | 'second' | 'fractionalSecondDigits';
+export declare type TimeZoneNameData = Record;
+export interface EraData {
+ BC: string;
+ AD: string;
+}
+export interface DateTimeFormatLocaleInternalData {
+ am: string;
+ pm: string;
+ weekday: {
+ narrow: string[];
+ long: string[];
+ short: string[];
+ };
+ era: {
+ narrow: EraData;
+ long: EraData;
+ short: EraData;
+ };
+ month: {
+ narrow: string[];
+ long: string[];
+ short: string[];
+ };
+ timeZoneName: TimeZoneNameData;
+ /**
+ * So we can construct GMT+08:00
+ */
+ gmtFormat: string;
+ /**
+ * So we can construct GMT+08:00
+ */
+ hourFormat: string;
+ hourCycle: string;
+ dateFormat: {
+ full: Formats;
+ long: Formats;
+ medium: Formats;
+ short: Formats;
+ };
+ timeFormat: {
+ full: Formats;
+ long: Formats;
+ medium: Formats;
+ short: Formats;
+ };
+ dateTimeFormat: {
+ full: string;
+ long: string;
+ medium: string;
+ short: string;
+ };
+ formats: Record;
+ nu: string[];
+ hc: string[];
+ ca: string[];
+}
+export declare type IntervalFormatsData = {
+ intervalFormatFallback: string;
+} & Record>;
+export interface DateTimeFormat extends Omit {
+ resolvedOptions(): ResolvedDateTimeFormatOptions;
+ formatRange(startDate: number | Date, endDate: number | Date): string;
+ formatRangeToParts(startDate: number | Date, endDate: number | Date): IntlDateTimeFormatPart[];
+}
+export interface ResolvedDateTimeFormatOptions extends Intl.ResolvedDateTimeFormatOptions {
+ dateStyle?: 'full' | 'long' | 'medium' | 'short';
+ timeStyle?: 'full' | 'long' | 'medium' | 'short';
+ numberingSystem: string;
+}
+export declare type UnpackedZoneData = [
+ number,
+ string,
+ number,
+ boolean
+];
+export declare type IntlDateTimeFormatPartType = Intl.DateTimeFormatPartTypes | 'ampm' | 'relatedYear' | 'yearName' | 'unknown' | 'fractionalSecondDigits';
+export interface IntlDateTimeFormatPart {
+ type: IntlDateTimeFormatPartType;
+ value: string | undefined;
+ source?: RangePatternType;
+}
+//# sourceMappingURL=date-time.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/date-time.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/date-time.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..1b4514d6b7684d791260d2d4a1c475744edd1c94
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/date-time.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"date-time.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/types/date-time.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/date-time.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/date-time.js
new file mode 100644
index 0000000000000000000000000000000000000000..705497b4192aead746c9651ad2ea4bb0c53aab99
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/date-time.js
@@ -0,0 +1,6 @@
+export var RangePatternType;
+(function (RangePatternType) {
+ RangePatternType["startRange"] = "startRange";
+ RangePatternType["shared"] = "shared";
+ RangePatternType["endRange"] = "endRange";
+})(RangePatternType || (RangePatternType = {}));
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/displaynames.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/displaynames.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c79e62a206dc6f6a53ea986b0ecd0932c37cd518
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/displaynames.d.ts
@@ -0,0 +1,47 @@
+import { LocaleData } from './core';
+declare type LanguageTag = string;
+declare type RegionCode = string;
+declare type ScriptCode = string;
+declare type CurrencyCode = string;
+export interface DisplayNamesData {
+ /**
+ * Note that for style fields, `short` and `narrow` might not exist.
+ * At runtime, the fallback order will be narrow -> short -> long.
+ */
+ types: {
+ /**
+ * Maps language subtag like `zh-CN` to their display names.
+ */
+ language: {
+ narrow: Record;
+ short: Record;
+ long: Record;
+ };
+ region: {
+ narrow: Record;
+ short: Record;
+ long: Record;
+ };
+ script: {
+ narrow: Record;
+ short: Record;
+ long: Record;
+ };
+ currency: {
+ narrow: Record;
+ short: Record;
+ long: Record;
+ };
+ };
+ /**
+ * Not in spec, but we need this to display both language and region in display name.
+ * e.g. zh-Hans-SG + "{0}({1})" -> 简体中文(新加坡)
+ * Here {0} is replaced by language display name and {1} is replaced by region display name.
+ */
+ patterns: {
+ locale: string;
+ };
+}
+export declare type DisplayNamesLocaleData = LocaleData;
+export {};
+//# sourceMappingURL=displaynames.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/displaynames.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/displaynames.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..54fe02deaeeadb168e3d2a183efeb53d3c64ed87
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/displaynames.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"displaynames.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/types/displaynames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAA;AAEjC,aAAK,WAAW,GAAG,MAAM,CAAA;AACzB,aAAK,UAAU,GAAG,MAAM,CAAA;AACxB,aAAK,UAAU,GAAG,MAAM,CAAA;AACxB,aAAK,YAAY,GAAG,MAAM,CAAA;AAE1B,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,KAAK,EAAE;QACL;;WAEG;QACH,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;YACnC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;YAClC,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;SAClC,CAAA;QACD,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAClC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACjC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;SACjC,CAAA;QACD,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAClC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACjC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;SACjC,CAAA;QACD,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;YACpC,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;YACnC,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;SACnC,CAAA;KACF,CAAA;IACD;;;;OAIG;IACH,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED,oBAAY,sBAAsB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/displaynames.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/displaynames.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb0ff5c3b541f646105198ee23ac0fc3d805023e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/displaynames.js
@@ -0,0 +1 @@
+export {};
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/list.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/list.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2febca601f1c027859ff56aee9874b14c409a4b2
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/list.d.ts
@@ -0,0 +1,19 @@
+import { LocaleData } from './core';
+export declare type ListPatternLocaleData = LocaleData;
+export interface ListPatternFieldsData {
+ conjunction?: ListPatternData;
+ disjunction?: ListPatternData;
+ unit?: ListPatternData;
+}
+export interface ListPattern {
+ start: string;
+ middle: string;
+ end: string;
+ pair: string;
+}
+export interface ListPatternData {
+ long: ListPattern;
+ short?: ListPattern;
+ narrow?: ListPattern;
+}
+//# sourceMappingURL=list.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/list.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/list.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..00c89a89ec3fbba61e37e40c04d4c6a8ed170278
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/list.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/types/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAA;AAEjC,oBAAY,qBAAqB,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAA;AAErE,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,IAAI,CAAC,EAAE,eAAe,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/list.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/list.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb0ff5c3b541f646105198ee23ac0fc3d805023e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/list.js
@@ -0,0 +1 @@
+export {};
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/number.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/number.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..75e0c9eedaa5961cc16cec738d9854fbf79ac6c8
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/number.d.ts
@@ -0,0 +1,147 @@
+import { LDMLPluralRule } from './plural-rules';
+import { LocaleData } from './core';
+export declare type NumberFormatNotation = 'standard' | 'scientific' | 'engineering' | 'compact';
+export declare type NumberFormatRoundingType = 'significantDigits' | 'fractionDigits' | 'compactRounding';
+export interface NumberFormatDigitOptions {
+ minimumIntegerDigits?: number;
+ minimumSignificantDigits?: number;
+ maximumSignificantDigits?: number;
+ minimumFractionDigits?: number;
+ maximumFractionDigits?: number;
+}
+export interface NumberFormatDigitInternalSlots {
+ minimumIntegerDigits: number;
+ minimumSignificantDigits?: number;
+ maximumSignificantDigits?: number;
+ roundingType: NumberFormatRoundingType;
+ minimumFractionDigits?: number;
+ maximumFractionDigits?: number;
+ notation?: NumberFormatNotation;
+}
+export declare type RawNumberLocaleData = LocaleData;
+export interface NumberFormatLocaleInternalData {
+ units: UnitDataTable;
+ currencies: Record;
+ numbers: RawNumberData;
+ nu: string[];
+}
+export interface UnitDataTable {
+ simple: Record;
+ compound: Record;
+}
+export interface UnitData {
+ long: LDMLPluralRuleMap;
+ short: LDMLPluralRuleMap;
+ narrow: LDMLPluralRuleMap;
+ perUnit: Record<'narrow' | 'short' | 'long', string | undefined>;
+}
+export interface CompoundUnitData {
+ long: string;
+ short: string;
+ narrow: string;
+}
+export interface CurrencyData {
+ displayName: LDMLPluralRuleMap;
+ symbol: string;
+ narrow: string;
+}
+export declare type DecimalFormatNum = '1000' | '10000' | '100000' | '1000000' | '10000000' | '100000000' | '1000000000' | '10000000000' | '100000000000' | '1000000000000' | '10000000000000' | '100000000000000';
+export declare type NumberingSystem = string;
+/**
+ * We only care about insertBetween bc we assume
+ * `currencyMatch` & `surroundingMatch` are all the same
+ *
+ * @export
+ * @interface CurrencySpacingData
+ */
+export interface CurrencySpacingData {
+ beforeInsertBetween: string;
+ afterInsertBetween: string;
+}
+export interface RawCurrencyData {
+ currencySpacing: CurrencySpacingData;
+ standard: string;
+ accounting: string;
+ short?: Record>;
+ unitPattern: string;
+}
+export interface SymbolsData {
+ decimal: string;
+ group: string;
+ list: string;
+ percentSign: string;
+ plusSign: string;
+ minusSign: string;
+ exponential: string;
+ superscriptingExponent: string;
+ perMille: string;
+ infinity: string;
+ nan: string;
+ timeSeparator: string;
+}
+export interface RawNumberData {
+ nu: string[];
+ symbols: Record;
+ decimal: Record>;
+ short: Record>;
+ }>;
+ percent: Record;
+ currency: Record;
+}
+export declare type LDMLPluralRuleMap = Omit>, 'other'> & {
+ other: T;
+};
+export interface RawNumberFormatResult {
+ formattedString: string;
+ roundedNumber: number;
+ integerDigitsCount: number;
+}
+export declare type NumberFormatOptionsLocaleMatcher = 'lookup' | 'best fit';
+export declare type NumberFormatOptionsStyle = 'decimal' | 'percent' | 'currency' | 'unit';
+export declare type NumberFormatOptionsCompactDisplay = 'short' | 'long';
+export declare type NumberFormatOptionsCurrencyDisplay = 'symbol' | 'code' | 'name' | 'narrowSymbol';
+export declare type NumberFormatOptionsCurrencySign = 'standard' | 'accounting';
+export declare type NumberFormatOptionsNotation = NumberFormatNotation;
+export declare type NumberFormatOptionsSignDisplay = 'auto' | 'always' | 'never' | 'exceptZero';
+export declare type NumberFormatOptionsUnitDisplay = 'long' | 'short' | 'narrow';
+export interface NumberFormatInternal extends NumberFormatDigitInternalSlots {
+ locale: string;
+ dataLocale: string;
+ style: NumberFormatOptionsStyle;
+ currency?: string;
+ currencyDisplay: NumberFormatOptionsCurrencyDisplay;
+ unit?: string;
+ unitDisplay: NumberFormatOptionsUnitDisplay;
+ currencySign: NumberFormatOptionsCurrencySign;
+ notation: NumberFormatOptionsNotation;
+ compactDisplay: NumberFormatOptionsCompactDisplay;
+ signDisplay: NumberFormatOptionsSignDisplay;
+ useGrouping: boolean;
+ pl: Intl.PluralRules;
+ boundFormat?: Intl.NumberFormat['format'];
+ numberingSystem: string;
+ dataLocaleData: NumberFormatLocaleInternalData;
+}
+export declare type NumberFormatOptions = Omit & NumberFormatDigitOptions & {
+ localeMatcher?: NumberFormatOptionsLocaleMatcher;
+ style?: NumberFormatOptionsStyle;
+ compactDisplay?: NumberFormatOptionsCompactDisplay;
+ currencyDisplay?: NumberFormatOptionsCurrencyDisplay;
+ currencySign?: NumberFormatOptionsCurrencySign;
+ notation?: NumberFormatOptionsNotation;
+ signDisplay?: NumberFormatOptionsSignDisplay;
+ unit?: string;
+ unitDisplay?: NumberFormatOptionsUnitDisplay;
+ numberingSystem?: string;
+ trailingZeroDisplay?: 'auto' | 'stripIfInteger';
+ roundingPriority?: 'auto' | 'morePrecision' | 'lessPrecision';
+};
+export declare type ResolvedNumberFormatOptions = Intl.ResolvedNumberFormatOptions & Pick;
+export declare type NumberFormatPartTypes = Intl.NumberFormatPartTypes | 'exponentSeparator' | 'exponentMinusSign' | 'exponentInteger' | 'compact' | 'unit' | 'literal';
+export interface NumberFormatPart {
+ type: NumberFormatPartTypes;
+ value: string;
+}
+//# sourceMappingURL=number.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/number.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/number.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..1ccb33c64a89a182887dfc3a6dfc2763f1da0d2c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/number.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/types/number.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/number.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/number.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb0ff5c3b541f646105198ee23ac0fc3d805023e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/number.js
@@ -0,0 +1 @@
+export {};
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/plural-rules.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/plural-rules.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d9157960d8db94ff2fdb03a28fbc7317dc0e04bf
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/plural-rules.d.ts
@@ -0,0 +1,17 @@
+import { LocaleData } from './core';
+import { NumberFormatDigitInternalSlots } from './number';
+export declare type LDMLPluralRule = 'zero' | 'one' | 'two' | 'few' | 'many' | 'other';
+export interface PluralRulesData {
+ categories: {
+ cardinal: string[];
+ ordinal: string[];
+ };
+ fn: (val: number | string, ord?: boolean) => LDMLPluralRule;
+}
+export declare type PluralRulesLocaleData = LocaleData;
+export interface PluralRulesInternal extends NumberFormatDigitInternalSlots {
+ initializedPluralRules: boolean;
+ locale: string;
+ type: 'cardinal' | 'ordinal';
+}
+//# sourceMappingURL=plural-rules.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/plural-rules.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/plural-rules.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..24b7eedeccf6eee5d937b9f2fb0a5f14d4f2d5dc
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/plural-rules.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"plural-rules.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/types/plural-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAA;AACjC,OAAO,EAAC,8BAA8B,EAAC,MAAM,UAAU,CAAA;AACvD,oBAAY,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAA;AAC9E,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,EAAE,CAAA;QAClB,OAAO,EAAE,MAAM,EAAE,CAAA;KAClB,CAAA;IACD,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,cAAc,CAAA;CAC5D;AAED,oBAAY,qBAAqB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;AAE/D,MAAM,WAAW,mBAAoB,SAAQ,8BAA8B;IACzE,sBAAsB,EAAE,OAAO,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,UAAU,GAAG,SAAS,CAAA;CAC7B"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/plural-rules.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/plural-rules.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb0ff5c3b541f646105198ee23ac0fc3d805023e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/plural-rules.js
@@ -0,0 +1 @@
+export {};
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/relative-time.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/relative-time.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..35c07bc410732e7ea4d58bc727e3d935d7f8e986
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/relative-time.d.ts
@@ -0,0 +1,41 @@
+import { LocaleData } from './core';
+import { LDMLPluralRule } from './plural-rules';
+export interface FieldData {
+ '0'?: string;
+ '1'?: string;
+ '-1'?: string;
+ '2'?: string;
+ '-2'?: string;
+ '3'?: string;
+ '-3'?: string;
+ future: RelativeTimeData;
+ past: RelativeTimeData;
+}
+declare type RelativeTimeData = {
+ [u in LDMLPluralRule]?: string;
+};
+export declare type UnpackedLocaleFieldsData = {
+ [f in RelativeTimeField]?: FieldData;
+} & {
+ nu: Array;
+};
+export declare type LocaleFieldsData = {
+ [f in RelativeTimeField]?: FieldData;
+} & {
+ nu?: Array;
+};
+export declare type RelativeTimeField = 'second' | 'second-short' | 'second-narrow' | 'minute' | 'minute-short' | 'minute-narrow' | 'hour' | 'hour-short' | 'hour-narrow' | 'day' | 'day-short' | 'day-narrow' | 'week' | 'week-short' | 'week-narrow' | 'month' | 'month-short' | 'month-narrow' | 'quarter' | 'quarter-short' | 'quarter-narrow' | 'year' | 'year-short' | 'year-narrow';
+export declare type RelativeTimeFormatSingularUnit = Exclude;
+export declare type RelativeTimeLocaleData = LocaleData;
+export interface RelativeTimeFormatInternal {
+ numberFormat: Intl.NumberFormat;
+ pluralRules: Intl.PluralRules;
+ locale: string;
+ fields: LocaleFieldsData;
+ style: Intl.ResolvedRelativeTimeFormatOptions['style'];
+ numeric: Intl.ResolvedRelativeTimeFormatOptions['numeric'];
+ numberingSystem: string;
+ initializedRelativeTimeFormat: boolean;
+}
+export {};
+//# sourceMappingURL=relative-time.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/relative-time.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/relative-time.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..c3d3c3477c4abed79c149150eb53dcb3cddc92a2
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/relative-time.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"relative-time.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ecma402-abstract/types/relative-time.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAA;AACjC,OAAO,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAA;AAE7C,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,gBAAgB,CAAA;IACxB,IAAI,EAAE,gBAAgB,CAAA;CACvB;AAED,aAAK,gBAAgB,GAAG;KAAE,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,MAAM;CAAC,CAAA;AAExD,oBAAY,wBAAwB,GAAG;KACpC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,SAAS;CACrC,GAAG;IAAC,EAAE,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAAC,CAAA;AAE9B,oBAAY,gBAAgB,GAAG;KAC5B,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,SAAS;CACrC,GAAG;IAAC,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAAC,CAAA;AAE/B,oBAAY,iBAAiB,GACzB,QAAQ,GACR,cAAc,GACd,eAAe,GACf,QAAQ,GACR,cAAc,GACd,eAAe,GACf,MAAM,GACN,YAAY,GACZ,aAAa,GACb,KAAK,GACL,WAAW,GACX,YAAY,GACZ,MAAM,GACN,YAAY,GACZ,aAAa,GACb,OAAO,GACP,aAAa,GACb,cAAc,GACd,SAAS,GACT,eAAe,GACf,gBAAgB,GAChB,MAAM,GACN,YAAY,GACZ,aAAa,CAAA;AAEjB,oBAAY,8BAA8B,GAAG,OAAO,CAClD,IAAI,CAAC,sBAAsB,EACzB,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,GACN,OAAO,GACP,QAAQ,GACR,UAAU,GACV,OAAO,CACV,CAAA;AAED,oBAAY,sBAAsB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;AACjE,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAA;IAC/B,WAAW,EAAE,IAAI,CAAC,WAAW,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,gBAAgB,CAAA;IACxB,KAAK,EAAE,IAAI,CAAC,iCAAiC,CAAC,OAAO,CAAC,CAAA;IACtD,OAAO,EAAE,IAAI,CAAC,iCAAiC,CAAC,SAAS,CAAC,CAAA;IAC1D,eAAe,EAAE,MAAM,CAAA;IACvB,6BAA6B,EAAE,OAAO,CAAA;CACvC"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/relative-time.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/relative-time.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb0ff5c3b541f646105198ee23ac0fc3d805023e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/types/relative-time.js
@@ -0,0 +1 @@
+export {};
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/utils.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/utils.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..af53c3ef22316fc7b621a624e745ba9e74ebbaf0
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/utils.d.ts
@@ -0,0 +1,24 @@
+/**
+ * Cannot do Math.log(x) / Math.log(10) bc if IEEE floating point issue
+ * @param x number
+ */
+export declare function getMagnitude(x: number): number;
+export declare function repeat(s: string, times: number): string;
+export declare function setInternalSlot(map: WeakMap, pl: Instance, field: Field, value: NonNullable[Field]): void;
+export declare function setMultiInternalSlots(map: WeakMap, pl: Instance, props: Pick, K>): void;
+export declare function getInternalSlot(map: WeakMap, pl: Instance, field: Field): Internal[Field];
+export declare function getMultiInternalSlots(map: WeakMap, pl: Instance, ...fields: Field[]): Pick;
+export interface LiteralPart {
+ type: 'literal';
+ value: string;
+}
+export declare function isLiteralPart(patternPart: LiteralPart | {
+ type: string;
+ value?: string;
+}): patternPart is LiteralPart;
+export declare function defineProperty(target: T, name: string | symbol, { value }: {
+ value: any;
+} & ThisType): void;
+export declare const UNICODE_EXTENSION_SEQUENCE_REGEX: RegExp;
+export declare function invariant(condition: boolean, message: string, Err?: any): asserts condition;
+//# sourceMappingURL=utils.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/utils.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/utils.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..643d5064307ea12e932a84d216999574eaa7350b
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/utils.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CASvD;AAED,wBAAgB,eAAe,CAC7B,QAAQ,SAAS,MAAM,EACvB,QAAQ,SAAS,MAAM,EACvB,KAAK,SAAS,MAAM,QAAQ,EAE5B,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAOpC;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,SAAS,MAAM,EACvB,QAAQ,SAAS,MAAM,EACvB,CAAC,SAAS,MAAM,QAAQ,EAExB,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAKtC;AAED,wBAAgB,eAAe,CAC7B,QAAQ,SAAS,MAAM,EACvB,QAAQ,SAAS,MAAM,EACvB,KAAK,SAAS,MAAM,QAAQ,EAE5B,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,KAAK,GACX,QAAQ,CAAC,KAAK,CAAC,CAEjB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,SAAS,MAAM,EACvB,QAAQ,SAAS,MAAM,EACvB,KAAK,SAAS,MAAM,QAAQ,EAE5B,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChC,EAAE,EAAE,QAAQ,EACZ,GAAG,MAAM,EAAE,KAAK,EAAE,GACjB,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CASvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,aAAa,CAC3B,WAAW,EAAE,WAAW,GAAG;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,GACxD,WAAW,IAAI,WAAW,CAE5B;AAYD,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAC7C,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,EAAC,KAAK,EAAC,EAAE;IAAC,KAAK,EAAE,GAAG,CAAA;CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,QAQtC;AAED,eAAO,MAAM,gCAAgC,QAA4B,CAAA;AAEzE,wBAAgB,SAAS,CACvB,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,GAAW,GACf,OAAO,CAAC,SAAS,CAInB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/utils.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..8305797d3c21c7a8cfbbdafe515944719f80ef7d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/lib/utils.js
@@ -0,0 +1,78 @@
+/**
+ * Cannot do Math.log(x) / Math.log(10) bc if IEEE floating point issue
+ * @param x number
+ */
+export function getMagnitude(x) {
+ // Cannot count string length via Number.toString because it may use scientific notation
+ // for very small or very large numbers.
+ return Math.floor(Math.log(x) * Math.LOG10E);
+}
+export function repeat(s, times) {
+ if (typeof s.repeat === 'function') {
+ return s.repeat(times);
+ }
+ var arr = new Array(times);
+ for (var i = 0; i < arr.length; i++) {
+ arr[i] = s;
+ }
+ return arr.join('');
+}
+export function setInternalSlot(map, pl, field, value) {
+ if (!map.get(pl)) {
+ map.set(pl, Object.create(null));
+ }
+ var slots = map.get(pl);
+ slots[field] = value;
+}
+export function setMultiInternalSlots(map, pl, props) {
+ for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {
+ var k = _a[_i];
+ setInternalSlot(map, pl, k, props[k]);
+ }
+}
+export function getInternalSlot(map, pl, field) {
+ return getMultiInternalSlots(map, pl, field)[field];
+}
+export function getMultiInternalSlots(map, pl) {
+ var fields = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ fields[_i - 2] = arguments[_i];
+ }
+ var slots = map.get(pl);
+ if (!slots) {
+ throw new TypeError("".concat(pl, " InternalSlot has not been initialized"));
+ }
+ return fields.reduce(function (all, f) {
+ all[f] = slots[f];
+ return all;
+ }, Object.create(null));
+}
+export function isLiteralPart(patternPart) {
+ return patternPart.type === 'literal';
+}
+/*
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+*/
+export function defineProperty(target, name, _a) {
+ var value = _a.value;
+ Object.defineProperty(target, name, {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: value,
+ });
+}
+export var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;
+export function invariant(condition, message, Err) {
+ if (Err === void 0) { Err = Error; }
+ if (!condition) {
+ throw new Err(message);
+ }
+}
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/package.json b/app/frontend/node_modules/@formatjs/ecma402-abstract/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a22186447084a701c11056ee15adf69724fae26e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "@formatjs/ecma402-abstract",
+ "version": "1.11.4",
+ "description": "A collection of implementation for ECMAScript abstract operations",
+ "keywords": [
+ "intl",
+ "i18n",
+ "relative",
+ "javascript",
+ "es",
+ "abstract",
+ "ecma402",
+ "ecma262",
+ "format"
+ ],
+ "dependencies": {
+ "@formatjs/intl-localematcher": "0.2.25",
+ "tslib": "^2.1.0"
+ },
+ "author": "Long Ho \^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20BF\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC1\uFDFC\uFDFD\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]/;
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/core.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/core.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..09e3fc1f67b91fa774e87af7835534209f8a7c0c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/core.d.ts
@@ -0,0 +1,11 @@
+export declare type Locale = string;
+export interface LocaleData {
+ data: T;
+ locale: Locale;
+}
+export interface LookupMatcherResult {
+ locale: string;
+ extension?: string;
+ nu?: string;
+}
+//# sourceMappingURL=core.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/core.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/core.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..aacdc84b3ee25a7e3fabbd45b9a6384534be0a98
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/core.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/types/core.ts"],"names":[],"mappings":"AAAA,oBAAY,MAAM,GAAG,MAAM,CAAA;AAC3B,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAA;IACP,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/core.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/core.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8ad2e549bdc6801e0d1c80b0308d4b9bd4985ce
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/core.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/date-time.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/date-time.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..115d03487b223be9375ca805ce50353cacd86592
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/date-time.d.ts
@@ -0,0 +1,135 @@
+export declare type Formats = Pick & {
+ fractionalSecondDigits?: 0 | 1 | 2;
+ hour12?: boolean;
+ pattern: string;
+ pattern12: string;
+ skeleton: string;
+ rawPattern: string;
+ rangePatterns: Record;
+ rangePatterns12: Record;
+};
+export interface IntlDateTimeFormatInternal {
+ locale: string;
+ dataLocale: string;
+ calendar?: string;
+ dateStyle?: 'full' | 'long' | 'medium' | 'short';
+ timeStyle?: 'full' | 'long' | 'medium' | 'short';
+ weekday: 'narrow' | 'short' | 'long';
+ era: 'narrow' | 'short' | 'long';
+ year: '2-digit' | 'numeric';
+ month: '2-digit' | 'numeric' | 'narrow' | 'short' | 'long';
+ day: '2-digit' | 'numeric';
+ dayPeriod: 'narrow' | 'short' | 'long';
+ hour: '2-digit' | 'numeric';
+ minute: '2-digit' | 'numeric';
+ second: '2-digit' | 'numeric';
+ timeZoneName: 'short' | 'long';
+ fractionalSecondDigits?: 1 | 2 | 3;
+ hourCycle: string;
+ numberingSystem: string;
+ timeZone: string;
+ pattern: string;
+ format: Formats;
+ rangePatterns: Record;
+ boundFormat?: Intl.DateTimeFormat['format'];
+}
+export interface RangePatternPart {
+ source: T;
+ pattern: string;
+}
+export declare type RangePatterns = Pick & {
+ hour12?: boolean;
+ patternParts: Array;
+};
+export declare enum RangePatternType {
+ startRange = "startRange",
+ shared = "shared",
+ endRange = "endRange"
+}
+export declare type TABLE_6 = 'weekday' | 'era' | 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second' | 'fractionalSecondDigits' | 'timeZoneName';
+export declare type TABLE_2 = 'era' | 'year' | 'month' | 'day' | 'dayPeriod' | 'ampm' | 'hour' | 'minute' | 'second' | 'fractionalSecondDigits';
+export declare type TimeZoneNameData = Record;
+export interface EraData {
+ BC: string;
+ AD: string;
+}
+export interface DateTimeFormatLocaleInternalData {
+ am: string;
+ pm: string;
+ weekday: {
+ narrow: string[];
+ long: string[];
+ short: string[];
+ };
+ era: {
+ narrow: EraData;
+ long: EraData;
+ short: EraData;
+ };
+ month: {
+ narrow: string[];
+ long: string[];
+ short: string[];
+ };
+ timeZoneName: TimeZoneNameData;
+ /**
+ * So we can construct GMT+08:00
+ */
+ gmtFormat: string;
+ /**
+ * So we can construct GMT+08:00
+ */
+ hourFormat: string;
+ hourCycle: string;
+ dateFormat: {
+ full: Formats;
+ long: Formats;
+ medium: Formats;
+ short: Formats;
+ };
+ timeFormat: {
+ full: Formats;
+ long: Formats;
+ medium: Formats;
+ short: Formats;
+ };
+ dateTimeFormat: {
+ full: string;
+ long: string;
+ medium: string;
+ short: string;
+ };
+ formats: Record;
+ nu: string[];
+ hc: string[];
+ ca: string[];
+}
+export declare type IntervalFormatsData = {
+ intervalFormatFallback: string;
+} & Record>;
+export interface DateTimeFormat extends Omit {
+ resolvedOptions(): ResolvedDateTimeFormatOptions;
+ formatRange(startDate: number | Date, endDate: number | Date): string;
+ formatRangeToParts(startDate: number | Date, endDate: number | Date): IntlDateTimeFormatPart[];
+}
+export interface ResolvedDateTimeFormatOptions extends Intl.ResolvedDateTimeFormatOptions {
+ dateStyle?: 'full' | 'long' | 'medium' | 'short';
+ timeStyle?: 'full' | 'long' | 'medium' | 'short';
+ numberingSystem: string;
+}
+export declare type UnpackedZoneData = [
+ number,
+ string,
+ number,
+ boolean
+];
+export declare type IntlDateTimeFormatPartType = Intl.DateTimeFormatPartTypes | 'ampm' | 'relatedYear' | 'yearName' | 'unknown' | 'fractionalSecondDigits';
+export interface IntlDateTimeFormatPart {
+ type: IntlDateTimeFormatPartType;
+ value: string | undefined;
+ source?: RangePatternType;
+}
+//# sourceMappingURL=date-time.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/date-time.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/date-time.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..bf76423504c581847857b1f656686b2fc2fcee2a
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/date-time.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"date-time.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/types/date-time.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/date-time.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/date-time.js
new file mode 100644
index 0000000000000000000000000000000000000000..204a5f14522006a3b86db95abbfac41d4b58da7d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/date-time.js
@@ -0,0 +1,9 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.RangePatternType = void 0;
+var RangePatternType;
+(function (RangePatternType) {
+ RangePatternType["startRange"] = "startRange";
+ RangePatternType["shared"] = "shared";
+ RangePatternType["endRange"] = "endRange";
+})(RangePatternType = exports.RangePatternType || (exports.RangePatternType = {}));
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/displaynames.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/displaynames.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c79e62a206dc6f6a53ea986b0ecd0932c37cd518
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/displaynames.d.ts
@@ -0,0 +1,47 @@
+import { LocaleData } from './core';
+declare type LanguageTag = string;
+declare type RegionCode = string;
+declare type ScriptCode = string;
+declare type CurrencyCode = string;
+export interface DisplayNamesData {
+ /**
+ * Note that for style fields, `short` and `narrow` might not exist.
+ * At runtime, the fallback order will be narrow -> short -> long.
+ */
+ types: {
+ /**
+ * Maps language subtag like `zh-CN` to their display names.
+ */
+ language: {
+ narrow: Record;
+ short: Record;
+ long: Record;
+ };
+ region: {
+ narrow: Record;
+ short: Record;
+ long: Record;
+ };
+ script: {
+ narrow: Record;
+ short: Record;
+ long: Record;
+ };
+ currency: {
+ narrow: Record;
+ short: Record;
+ long: Record;
+ };
+ };
+ /**
+ * Not in spec, but we need this to display both language and region in display name.
+ * e.g. zh-Hans-SG + "{0}({1})" -> 简体中文(新加坡)
+ * Here {0} is replaced by language display name and {1} is replaced by region display name.
+ */
+ patterns: {
+ locale: string;
+ };
+}
+export declare type DisplayNamesLocaleData = LocaleData;
+export {};
+//# sourceMappingURL=displaynames.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/displaynames.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/displaynames.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..c12bccad79d9cda5ce4976c4ab86cb23e75dd8a2
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/displaynames.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"displaynames.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/types/displaynames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAA;AAEjC,aAAK,WAAW,GAAG,MAAM,CAAA;AACzB,aAAK,UAAU,GAAG,MAAM,CAAA;AACxB,aAAK,UAAU,GAAG,MAAM,CAAA;AACxB,aAAK,YAAY,GAAG,MAAM,CAAA;AAE1B,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,KAAK,EAAE;QACL;;WAEG;QACH,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;YACnC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;YAClC,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;SAClC,CAAA;QACD,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAClC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACjC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;SACjC,CAAA;QACD,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAClC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACjC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;SACjC,CAAA;QACD,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;YACpC,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;YACnC,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;SACnC,CAAA;KACF,CAAA;IACD;;;;OAIG;IACH,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED,oBAAY,sBAAsB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/displaynames.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/displaynames.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8ad2e549bdc6801e0d1c80b0308d4b9bd4985ce
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/displaynames.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/list.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/list.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2febca601f1c027859ff56aee9874b14c409a4b2
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/list.d.ts
@@ -0,0 +1,19 @@
+import { LocaleData } from './core';
+export declare type ListPatternLocaleData = LocaleData;
+export interface ListPatternFieldsData {
+ conjunction?: ListPatternData;
+ disjunction?: ListPatternData;
+ unit?: ListPatternData;
+}
+export interface ListPattern {
+ start: string;
+ middle: string;
+ end: string;
+ pair: string;
+}
+export interface ListPatternData {
+ long: ListPattern;
+ short?: ListPattern;
+ narrow?: ListPattern;
+}
+//# sourceMappingURL=list.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/list.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/list.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..5732911fd9ef9add43a4baaaa1b146349360f4d2
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/list.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/types/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAA;AAEjC,oBAAY,qBAAqB,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAA;AAErE,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,IAAI,CAAC,EAAE,eAAe,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/list.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/list.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8ad2e549bdc6801e0d1c80b0308d4b9bd4985ce
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/list.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/number.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/number.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..75e0c9eedaa5961cc16cec738d9854fbf79ac6c8
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/number.d.ts
@@ -0,0 +1,147 @@
+import { LDMLPluralRule } from './plural-rules';
+import { LocaleData } from './core';
+export declare type NumberFormatNotation = 'standard' | 'scientific' | 'engineering' | 'compact';
+export declare type NumberFormatRoundingType = 'significantDigits' | 'fractionDigits' | 'compactRounding';
+export interface NumberFormatDigitOptions {
+ minimumIntegerDigits?: number;
+ minimumSignificantDigits?: number;
+ maximumSignificantDigits?: number;
+ minimumFractionDigits?: number;
+ maximumFractionDigits?: number;
+}
+export interface NumberFormatDigitInternalSlots {
+ minimumIntegerDigits: number;
+ minimumSignificantDigits?: number;
+ maximumSignificantDigits?: number;
+ roundingType: NumberFormatRoundingType;
+ minimumFractionDigits?: number;
+ maximumFractionDigits?: number;
+ notation?: NumberFormatNotation;
+}
+export declare type RawNumberLocaleData = LocaleData;
+export interface NumberFormatLocaleInternalData {
+ units: UnitDataTable;
+ currencies: Record;
+ numbers: RawNumberData;
+ nu: string[];
+}
+export interface UnitDataTable {
+ simple: Record;
+ compound: Record;
+}
+export interface UnitData {
+ long: LDMLPluralRuleMap;
+ short: LDMLPluralRuleMap;
+ narrow: LDMLPluralRuleMap;
+ perUnit: Record<'narrow' | 'short' | 'long', string | undefined>;
+}
+export interface CompoundUnitData {
+ long: string;
+ short: string;
+ narrow: string;
+}
+export interface CurrencyData {
+ displayName: LDMLPluralRuleMap;
+ symbol: string;
+ narrow: string;
+}
+export declare type DecimalFormatNum = '1000' | '10000' | '100000' | '1000000' | '10000000' | '100000000' | '1000000000' | '10000000000' | '100000000000' | '1000000000000' | '10000000000000' | '100000000000000';
+export declare type NumberingSystem = string;
+/**
+ * We only care about insertBetween bc we assume
+ * `currencyMatch` & `surroundingMatch` are all the same
+ *
+ * @export
+ * @interface CurrencySpacingData
+ */
+export interface CurrencySpacingData {
+ beforeInsertBetween: string;
+ afterInsertBetween: string;
+}
+export interface RawCurrencyData {
+ currencySpacing: CurrencySpacingData;
+ standard: string;
+ accounting: string;
+ short?: Record>;
+ unitPattern: string;
+}
+export interface SymbolsData {
+ decimal: string;
+ group: string;
+ list: string;
+ percentSign: string;
+ plusSign: string;
+ minusSign: string;
+ exponential: string;
+ superscriptingExponent: string;
+ perMille: string;
+ infinity: string;
+ nan: string;
+ timeSeparator: string;
+}
+export interface RawNumberData {
+ nu: string[];
+ symbols: Record;
+ decimal: Record>;
+ short: Record>;
+ }>;
+ percent: Record;
+ currency: Record;
+}
+export declare type LDMLPluralRuleMap = Omit>, 'other'> & {
+ other: T;
+};
+export interface RawNumberFormatResult {
+ formattedString: string;
+ roundedNumber: number;
+ integerDigitsCount: number;
+}
+export declare type NumberFormatOptionsLocaleMatcher = 'lookup' | 'best fit';
+export declare type NumberFormatOptionsStyle = 'decimal' | 'percent' | 'currency' | 'unit';
+export declare type NumberFormatOptionsCompactDisplay = 'short' | 'long';
+export declare type NumberFormatOptionsCurrencyDisplay = 'symbol' | 'code' | 'name' | 'narrowSymbol';
+export declare type NumberFormatOptionsCurrencySign = 'standard' | 'accounting';
+export declare type NumberFormatOptionsNotation = NumberFormatNotation;
+export declare type NumberFormatOptionsSignDisplay = 'auto' | 'always' | 'never' | 'exceptZero';
+export declare type NumberFormatOptionsUnitDisplay = 'long' | 'short' | 'narrow';
+export interface NumberFormatInternal extends NumberFormatDigitInternalSlots {
+ locale: string;
+ dataLocale: string;
+ style: NumberFormatOptionsStyle;
+ currency?: string;
+ currencyDisplay: NumberFormatOptionsCurrencyDisplay;
+ unit?: string;
+ unitDisplay: NumberFormatOptionsUnitDisplay;
+ currencySign: NumberFormatOptionsCurrencySign;
+ notation: NumberFormatOptionsNotation;
+ compactDisplay: NumberFormatOptionsCompactDisplay;
+ signDisplay: NumberFormatOptionsSignDisplay;
+ useGrouping: boolean;
+ pl: Intl.PluralRules;
+ boundFormat?: Intl.NumberFormat['format'];
+ numberingSystem: string;
+ dataLocaleData: NumberFormatLocaleInternalData;
+}
+export declare type NumberFormatOptions = Omit & NumberFormatDigitOptions & {
+ localeMatcher?: NumberFormatOptionsLocaleMatcher;
+ style?: NumberFormatOptionsStyle;
+ compactDisplay?: NumberFormatOptionsCompactDisplay;
+ currencyDisplay?: NumberFormatOptionsCurrencyDisplay;
+ currencySign?: NumberFormatOptionsCurrencySign;
+ notation?: NumberFormatOptionsNotation;
+ signDisplay?: NumberFormatOptionsSignDisplay;
+ unit?: string;
+ unitDisplay?: NumberFormatOptionsUnitDisplay;
+ numberingSystem?: string;
+ trailingZeroDisplay?: 'auto' | 'stripIfInteger';
+ roundingPriority?: 'auto' | 'morePrecision' | 'lessPrecision';
+};
+export declare type ResolvedNumberFormatOptions = Intl.ResolvedNumberFormatOptions & Pick;
+export declare type NumberFormatPartTypes = Intl.NumberFormatPartTypes | 'exponentSeparator' | 'exponentMinusSign' | 'exponentInteger' | 'compact' | 'unit' | 'literal';
+export interface NumberFormatPart {
+ type: NumberFormatPartTypes;
+ value: string;
+}
+//# sourceMappingURL=number.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/number.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/number.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..6a6699b10eecc07b4fcc94c559e142aa58fdaf3d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/number.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/types/number.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/number.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/number.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8ad2e549bdc6801e0d1c80b0308d4b9bd4985ce
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/number.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/plural-rules.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/plural-rules.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d9157960d8db94ff2fdb03a28fbc7317dc0e04bf
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/plural-rules.d.ts
@@ -0,0 +1,17 @@
+import { LocaleData } from './core';
+import { NumberFormatDigitInternalSlots } from './number';
+export declare type LDMLPluralRule = 'zero' | 'one' | 'two' | 'few' | 'many' | 'other';
+export interface PluralRulesData {
+ categories: {
+ cardinal: string[];
+ ordinal: string[];
+ };
+ fn: (val: number | string, ord?: boolean) => LDMLPluralRule;
+}
+export declare type PluralRulesLocaleData = LocaleData;
+export interface PluralRulesInternal extends NumberFormatDigitInternalSlots {
+ initializedPluralRules: boolean;
+ locale: string;
+ type: 'cardinal' | 'ordinal';
+}
+//# sourceMappingURL=plural-rules.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/plural-rules.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/plural-rules.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..61efc498ed87e67709600b4dfe37cebb37fcfbe5
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/plural-rules.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"plural-rules.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/types/plural-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAA;AACjC,OAAO,EAAC,8BAA8B,EAAC,MAAM,UAAU,CAAA;AACvD,oBAAY,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAA;AAC9E,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,EAAE,CAAA;QAClB,OAAO,EAAE,MAAM,EAAE,CAAA;KAClB,CAAA;IACD,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,cAAc,CAAA;CAC5D;AAED,oBAAY,qBAAqB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;AAE/D,MAAM,WAAW,mBAAoB,SAAQ,8BAA8B;IACzE,sBAAsB,EAAE,OAAO,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,UAAU,GAAG,SAAS,CAAA;CAC7B"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/plural-rules.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/plural-rules.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8ad2e549bdc6801e0d1c80b0308d4b9bd4985ce
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/plural-rules.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/relative-time.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/relative-time.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..35c07bc410732e7ea4d58bc727e3d935d7f8e986
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/relative-time.d.ts
@@ -0,0 +1,41 @@
+import { LocaleData } from './core';
+import { LDMLPluralRule } from './plural-rules';
+export interface FieldData {
+ '0'?: string;
+ '1'?: string;
+ '-1'?: string;
+ '2'?: string;
+ '-2'?: string;
+ '3'?: string;
+ '-3'?: string;
+ future: RelativeTimeData;
+ past: RelativeTimeData;
+}
+declare type RelativeTimeData = {
+ [u in LDMLPluralRule]?: string;
+};
+export declare type UnpackedLocaleFieldsData = {
+ [f in RelativeTimeField]?: FieldData;
+} & {
+ nu: Array;
+};
+export declare type LocaleFieldsData = {
+ [f in RelativeTimeField]?: FieldData;
+} & {
+ nu?: Array;
+};
+export declare type RelativeTimeField = 'second' | 'second-short' | 'second-narrow' | 'minute' | 'minute-short' | 'minute-narrow' | 'hour' | 'hour-short' | 'hour-narrow' | 'day' | 'day-short' | 'day-narrow' | 'week' | 'week-short' | 'week-narrow' | 'month' | 'month-short' | 'month-narrow' | 'quarter' | 'quarter-short' | 'quarter-narrow' | 'year' | 'year-short' | 'year-narrow';
+export declare type RelativeTimeFormatSingularUnit = Exclude;
+export declare type RelativeTimeLocaleData = LocaleData;
+export interface RelativeTimeFormatInternal {
+ numberFormat: Intl.NumberFormat;
+ pluralRules: Intl.PluralRules;
+ locale: string;
+ fields: LocaleFieldsData;
+ style: Intl.ResolvedRelativeTimeFormatOptions['style'];
+ numeric: Intl.ResolvedRelativeTimeFormatOptions['numeric'];
+ numberingSystem: string;
+ initializedRelativeTimeFormat: boolean;
+}
+export {};
+//# sourceMappingURL=relative-time.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/relative-time.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/relative-time.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e41c05ef6b1c1de7669dc1a66418a1449ff2683e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/relative-time.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"relative-time.d.ts","sourceRoot":"","sources":["../../../../../../packages/ecma402-abstract/types/relative-time.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAA;AACjC,OAAO,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAA;AAE7C,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,gBAAgB,CAAA;IACxB,IAAI,EAAE,gBAAgB,CAAA;CACvB;AAED,aAAK,gBAAgB,GAAG;KAAE,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,MAAM;CAAC,CAAA;AAExD,oBAAY,wBAAwB,GAAG;KACpC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,SAAS;CACrC,GAAG;IAAC,EAAE,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAAC,CAAA;AAE9B,oBAAY,gBAAgB,GAAG;KAC5B,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,SAAS;CACrC,GAAG;IAAC,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAAC,CAAA;AAE/B,oBAAY,iBAAiB,GACzB,QAAQ,GACR,cAAc,GACd,eAAe,GACf,QAAQ,GACR,cAAc,GACd,eAAe,GACf,MAAM,GACN,YAAY,GACZ,aAAa,GACb,KAAK,GACL,WAAW,GACX,YAAY,GACZ,MAAM,GACN,YAAY,GACZ,aAAa,GACb,OAAO,GACP,aAAa,GACb,cAAc,GACd,SAAS,GACT,eAAe,GACf,gBAAgB,GAChB,MAAM,GACN,YAAY,GACZ,aAAa,CAAA;AAEjB,oBAAY,8BAA8B,GAAG,OAAO,CAClD,IAAI,CAAC,sBAAsB,EACzB,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,GACN,OAAO,GACP,QAAQ,GACR,UAAU,GACV,OAAO,CACV,CAAA;AAED,oBAAY,sBAAsB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;AACjE,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAA;IAC/B,WAAW,EAAE,IAAI,CAAC,WAAW,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,gBAAgB,CAAA;IACxB,KAAK,EAAE,IAAI,CAAC,iCAAiC,CAAC,OAAO,CAAC,CAAA;IACtD,OAAO,EAAE,IAAI,CAAC,iCAAiC,CAAC,SAAS,CAAC,CAAA;IAC1D,eAAe,EAAE,MAAM,CAAA;IACvB,6BAA6B,EAAE,OAAO,CAAA;CACvC"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/types/relative-time.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/relative-time.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8ad2e549bdc6801e0d1c80b0308d4b9bd4985ce
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/types/relative-time.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/utils.d.ts b/app/frontend/node_modules/@formatjs/ecma402-abstract/utils.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..af53c3ef22316fc7b621a624e745ba9e74ebbaf0
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/utils.d.ts
@@ -0,0 +1,24 @@
+/**
+ * Cannot do Math.log(x) / Math.log(10) bc if IEEE floating point issue
+ * @param x number
+ */
+export declare function getMagnitude(x: number): number;
+export declare function repeat(s: string, times: number): string;
+export declare function setInternalSlot(map: WeakMap, pl: Instance, field: Field, value: NonNullable[Field]): void;
+export declare function setMultiInternalSlots(map: WeakMap, pl: Instance, props: Pick, K>): void;
+export declare function getInternalSlot(map: WeakMap, pl: Instance, field: Field): Internal[Field];
+export declare function getMultiInternalSlots(map: WeakMap, pl: Instance, ...fields: Field[]): Pick;
+export interface LiteralPart {
+ type: 'literal';
+ value: string;
+}
+export declare function isLiteralPart(patternPart: LiteralPart | {
+ type: string;
+ value?: string;
+}): patternPart is LiteralPart;
+export declare function defineProperty(target: T, name: string | symbol, { value }: {
+ value: any;
+} & ThisType): void;
+export declare const UNICODE_EXTENSION_SEQUENCE_REGEX: RegExp;
+export declare function invariant(condition: boolean, message: string, Err?: any): asserts condition;
+//# sourceMappingURL=utils.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/utils.d.ts.map b/app/frontend/node_modules/@formatjs/ecma402-abstract/utils.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7969a4974b9e48e158034d7e5d31ffabd2afdfb7
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/utils.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../packages/ecma402-abstract/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CASvD;AAED,wBAAgB,eAAe,CAC7B,QAAQ,SAAS,MAAM,EACvB,QAAQ,SAAS,MAAM,EACvB,KAAK,SAAS,MAAM,QAAQ,EAE5B,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAOpC;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,SAAS,MAAM,EACvB,QAAQ,SAAS,MAAM,EACvB,CAAC,SAAS,MAAM,QAAQ,EAExB,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAKtC;AAED,wBAAgB,eAAe,CAC7B,QAAQ,SAAS,MAAM,EACvB,QAAQ,SAAS,MAAM,EACvB,KAAK,SAAS,MAAM,QAAQ,EAE5B,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,KAAK,GACX,QAAQ,CAAC,KAAK,CAAC,CAEjB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,SAAS,MAAM,EACvB,QAAQ,SAAS,MAAM,EACvB,KAAK,SAAS,MAAM,QAAQ,EAE5B,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChC,EAAE,EAAE,QAAQ,EACZ,GAAG,MAAM,EAAE,KAAK,EAAE,GACjB,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CASvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,aAAa,CAC3B,WAAW,EAAE,WAAW,GAAG;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,GACxD,WAAW,IAAI,WAAW,CAE5B;AAYD,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAC7C,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,EAAC,KAAK,EAAC,EAAE;IAAC,KAAK,EAAE,GAAG,CAAA;CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,QAQtC;AAED,eAAO,MAAM,gCAAgC,QAA4B,CAAA;AAEzE,wBAAgB,SAAS,CACvB,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,GAAW,GACf,OAAO,CAAC,SAAS,CAInB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/ecma402-abstract/utils.js b/app/frontend/node_modules/@formatjs/ecma402-abstract/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..60ec4c12e020bf98c0874b7b8c507e68d6447c16
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/ecma402-abstract/utils.js
@@ -0,0 +1,90 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.invariant = exports.UNICODE_EXTENSION_SEQUENCE_REGEX = exports.defineProperty = exports.isLiteralPart = exports.getMultiInternalSlots = exports.getInternalSlot = exports.setMultiInternalSlots = exports.setInternalSlot = exports.repeat = exports.getMagnitude = void 0;
+/**
+ * Cannot do Math.log(x) / Math.log(10) bc if IEEE floating point issue
+ * @param x number
+ */
+function getMagnitude(x) {
+ // Cannot count string length via Number.toString because it may use scientific notation
+ // for very small or very large numbers.
+ return Math.floor(Math.log(x) * Math.LOG10E);
+}
+exports.getMagnitude = getMagnitude;
+function repeat(s, times) {
+ if (typeof s.repeat === 'function') {
+ return s.repeat(times);
+ }
+ var arr = new Array(times);
+ for (var i = 0; i < arr.length; i++) {
+ arr[i] = s;
+ }
+ return arr.join('');
+}
+exports.repeat = repeat;
+function setInternalSlot(map, pl, field, value) {
+ if (!map.get(pl)) {
+ map.set(pl, Object.create(null));
+ }
+ var slots = map.get(pl);
+ slots[field] = value;
+}
+exports.setInternalSlot = setInternalSlot;
+function setMultiInternalSlots(map, pl, props) {
+ for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {
+ var k = _a[_i];
+ setInternalSlot(map, pl, k, props[k]);
+ }
+}
+exports.setMultiInternalSlots = setMultiInternalSlots;
+function getInternalSlot(map, pl, field) {
+ return getMultiInternalSlots(map, pl, field)[field];
+}
+exports.getInternalSlot = getInternalSlot;
+function getMultiInternalSlots(map, pl) {
+ var fields = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ fields[_i - 2] = arguments[_i];
+ }
+ var slots = map.get(pl);
+ if (!slots) {
+ throw new TypeError("".concat(pl, " InternalSlot has not been initialized"));
+ }
+ return fields.reduce(function (all, f) {
+ all[f] = slots[f];
+ return all;
+ }, Object.create(null));
+}
+exports.getMultiInternalSlots = getMultiInternalSlots;
+function isLiteralPart(patternPart) {
+ return patternPart.type === 'literal';
+}
+exports.isLiteralPart = isLiteralPart;
+/*
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+*/
+function defineProperty(target, name, _a) {
+ var value = _a.value;
+ Object.defineProperty(target, name, {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: value,
+ });
+}
+exports.defineProperty = defineProperty;
+exports.UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;
+function invariant(condition, message, Err) {
+ if (Err === void 0) { Err = Error; }
+ if (!condition) {
+ throw new Err(message);
+ }
+}
+exports.invariant = invariant;
diff --git a/app/frontend/node_modules/@formatjs/fast-memoize/LICENSE.md b/app/frontend/node_modules/@formatjs/fast-memoize/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..0320eebafa71377cef72eabddb673e850d6d4517
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/fast-memoize/LICENSE.md
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) 2021 FormatJS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/app/frontend/node_modules/@formatjs/fast-memoize/README.md b/app/frontend/node_modules/@formatjs/fast-memoize/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..39428621fef5ca51bac319978822ae363a6890df
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/fast-memoize/README.md
@@ -0,0 +1,3 @@
+# @formatjs/fast-memoize
+
+This is just a fork of `fast-memoize`.
diff --git a/app/frontend/node_modules/@formatjs/fast-memoize/index.d.ts b/app/frontend/node_modules/@formatjs/fast-memoize/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cefee41a3907244e2bed9ca0439d91a5f50e5723
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/fast-memoize/index.d.ts
@@ -0,0 +1,33 @@
+declare type Func = (...args: any[]) => any;
+export interface Cache {
+ create: CacheCreateFunc;
+}
+interface CacheCreateFunc {
+ (): DefaultCache;
+}
+interface DefaultCache {
+ get(key: K): V;
+ set(key: K, value: V): void;
+}
+export declare type Serializer = (args: any[]) => string;
+export interface Options {
+ cache?: Cache>;
+ serializer?: Serializer;
+ strategy?: MemoizeFunc;
+}
+export interface ResolvedOptions {
+ cache: Cache>;
+ serializer: Serializer;
+}
+export interface MemoizeFunc {
+ (fn: F, options?: Options): F;
+}
+export default function memoize(fn: F, options?: Options): F | ((arg: any) => any);
+export declare type StrategyFn = (this: unknown, fn: F, cache: DefaultCache>, serializer: Serializer, arg: any) => any;
+export interface Strategies {
+ variadic: MemoizeFunc;
+ monadic: MemoizeFunc;
+}
+export declare const strategies: Strategies;
+export {};
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/fast-memoize/index.d.ts.map b/app/frontend/node_modules/@formatjs/fast-memoize/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..64109e186bda8ccc7fcaa9a312857203b4b7a795
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/fast-memoize/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/fast-memoize/index.ts"],"names":[],"mappings":"AAIA,aAAK,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;AAEnC,MAAM,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;IACzB,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CAC9B;AAED,UAAU,eAAe,CAAC,CAAC,EAAE,CAAC;IAC5B,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CACvB;AAED,UAAU,YAAY,CAAC,CAAC,EAAE,CAAC;IACzB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IACd,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;CAC5B;AAED,oBAAY,UAAU,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAA;AAEhD,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,IAAI;IACrC,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,IAAI;IAC7C,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACnC,UAAU,EAAE,UAAU,CAAA;CACvB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,IAAI;IACzC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;CACjC;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,2BAa1E;AAYD,oBAAY,UAAU,GAAG,CAAC,CAAC,SAAS,IAAI,EACtC,IAAI,EAAE,OAAO,EACb,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAC1C,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,GAAG,KACL,GAAG,CAAA;AA4HR,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,IAAI;IACxC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;IACxB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;CACxB;AAED,eAAO,MAAM,UAAU,EAAE,UAAU,CAAC,IAAI,CAGvC,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/fast-memoize/index.js b/app/frontend/node_modules/@formatjs/fast-memoize/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..a47ccfdbd34ee6c8e4e3032f291c1a55300133fe
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/fast-memoize/index.js
@@ -0,0 +1,82 @@
+"use strict";
+//
+// Main
+//
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.strategies = void 0;
+function memoize(fn, options) {
+ var cache = options && options.cache ? options.cache : cacheDefault;
+ var serializer = options && options.serializer ? options.serializer : serializerDefault;
+ var strategy = options && options.strategy ? options.strategy : strategyDefault;
+ return strategy(fn, {
+ cache: cache,
+ serializer: serializer,
+ });
+}
+exports.default = memoize;
+//
+// Strategy
+//
+function isPrimitive(value) {
+ return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === "string" 'unsafe' primitive for our needs
+}
+function monadic(fn, cache, serializer, arg) {
+ var cacheKey = isPrimitive(arg) ? arg : serializer(arg);
+ var computedValue = cache.get(cacheKey);
+ if (typeof computedValue === 'undefined') {
+ computedValue = fn.call(this, arg);
+ cache.set(cacheKey, computedValue);
+ }
+ return computedValue;
+}
+function variadic(fn, cache, serializer) {
+ var args = Array.prototype.slice.call(arguments, 3);
+ var cacheKey = serializer(args);
+ var computedValue = cache.get(cacheKey);
+ if (typeof computedValue === 'undefined') {
+ computedValue = fn.apply(this, args);
+ cache.set(cacheKey, computedValue);
+ }
+ return computedValue;
+}
+function assemble(fn, context, strategy, cache, serialize) {
+ return strategy.bind(context, fn, cache, serialize);
+}
+function strategyDefault(fn, options) {
+ var strategy = fn.length === 1 ? monadic : variadic;
+ return assemble(fn, this, strategy, options.cache.create(), options.serializer);
+}
+function strategyVariadic(fn, options) {
+ return assemble(fn, this, variadic, options.cache.create(), options.serializer);
+}
+function strategyMonadic(fn, options) {
+ return assemble(fn, this, monadic, options.cache.create(), options.serializer);
+}
+//
+// Serializer
+//
+var serializerDefault = function () {
+ return JSON.stringify(arguments);
+};
+//
+// Cache
+//
+function ObjectWithoutPrototypeCache() {
+ this.cache = Object.create(null);
+}
+ObjectWithoutPrototypeCache.prototype.get = function (key) {
+ return this.cache[key];
+};
+ObjectWithoutPrototypeCache.prototype.set = function (key, value) {
+ this.cache[key] = value;
+};
+var cacheDefault = {
+ create: function create() {
+ // @ts-ignore
+ return new ObjectWithoutPrototypeCache();
+ },
+};
+exports.strategies = {
+ variadic: strategyVariadic,
+ monadic: strategyMonadic,
+};
diff --git a/app/frontend/node_modules/@formatjs/fast-memoize/lib/index.d.ts b/app/frontend/node_modules/@formatjs/fast-memoize/lib/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cefee41a3907244e2bed9ca0439d91a5f50e5723
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/fast-memoize/lib/index.d.ts
@@ -0,0 +1,33 @@
+declare type Func = (...args: any[]) => any;
+export interface Cache {
+ create: CacheCreateFunc;
+}
+interface CacheCreateFunc {
+ (): DefaultCache;
+}
+interface DefaultCache {
+ get(key: K): V;
+ set(key: K, value: V): void;
+}
+export declare type Serializer = (args: any[]) => string;
+export interface Options {
+ cache?: Cache>;
+ serializer?: Serializer;
+ strategy?: MemoizeFunc;
+}
+export interface ResolvedOptions {
+ cache: Cache>;
+ serializer: Serializer;
+}
+export interface MemoizeFunc {
+ (fn: F, options?: Options): F;
+}
+export default function memoize(fn: F, options?: Options): F | ((arg: any) => any);
+export declare type StrategyFn = (this: unknown, fn: F, cache: DefaultCache>, serializer: Serializer, arg: any) => any;
+export interface Strategies {
+ variadic: MemoizeFunc;
+ monadic: MemoizeFunc;
+}
+export declare const strategies: Strategies;
+export {};
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/fast-memoize/lib/index.d.ts.map b/app/frontend/node_modules/@formatjs/fast-memoize/lib/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..54dde7d345f884c01f1c7fe019d4e982cc15bd17
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/fast-memoize/lib/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/fast-memoize/index.ts"],"names":[],"mappings":"AAIA,aAAK,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;AAEnC,MAAM,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;IACzB,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CAC9B;AAED,UAAU,eAAe,CAAC,CAAC,EAAE,CAAC;IAC5B,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CACvB;AAED,UAAU,YAAY,CAAC,CAAC,EAAE,CAAC;IACzB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IACd,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;CAC5B;AAED,oBAAY,UAAU,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAA;AAEhD,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,IAAI;IACrC,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,IAAI;IAC7C,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACnC,UAAU,EAAE,UAAU,CAAA;CACvB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,IAAI;IACzC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;CACjC;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,2BAa1E;AAYD,oBAAY,UAAU,GAAG,CAAC,CAAC,SAAS,IAAI,EACtC,IAAI,EAAE,OAAO,EACb,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAC1C,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,GAAG,KACL,GAAG,CAAA;AA4HR,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,IAAI;IACxC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;IACxB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;CACxB;AAED,eAAO,MAAM,UAAU,EAAE,UAAU,CAAC,IAAI,CAGvC,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/fast-memoize/lib/index.js b/app/frontend/node_modules/@formatjs/fast-memoize/lib/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..27af8ec25606683edaa81927821a3936674efdb2
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/fast-memoize/lib/index.js
@@ -0,0 +1,78 @@
+//
+// Main
+//
+export default function memoize(fn, options) {
+ var cache = options && options.cache ? options.cache : cacheDefault;
+ var serializer = options && options.serializer ? options.serializer : serializerDefault;
+ var strategy = options && options.strategy ? options.strategy : strategyDefault;
+ return strategy(fn, {
+ cache: cache,
+ serializer: serializer,
+ });
+}
+//
+// Strategy
+//
+function isPrimitive(value) {
+ return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === "string" 'unsafe' primitive for our needs
+}
+function monadic(fn, cache, serializer, arg) {
+ var cacheKey = isPrimitive(arg) ? arg : serializer(arg);
+ var computedValue = cache.get(cacheKey);
+ if (typeof computedValue === 'undefined') {
+ computedValue = fn.call(this, arg);
+ cache.set(cacheKey, computedValue);
+ }
+ return computedValue;
+}
+function variadic(fn, cache, serializer) {
+ var args = Array.prototype.slice.call(arguments, 3);
+ var cacheKey = serializer(args);
+ var computedValue = cache.get(cacheKey);
+ if (typeof computedValue === 'undefined') {
+ computedValue = fn.apply(this, args);
+ cache.set(cacheKey, computedValue);
+ }
+ return computedValue;
+}
+function assemble(fn, context, strategy, cache, serialize) {
+ return strategy.bind(context, fn, cache, serialize);
+}
+function strategyDefault(fn, options) {
+ var strategy = fn.length === 1 ? monadic : variadic;
+ return assemble(fn, this, strategy, options.cache.create(), options.serializer);
+}
+function strategyVariadic(fn, options) {
+ return assemble(fn, this, variadic, options.cache.create(), options.serializer);
+}
+function strategyMonadic(fn, options) {
+ return assemble(fn, this, monadic, options.cache.create(), options.serializer);
+}
+//
+// Serializer
+//
+var serializerDefault = function () {
+ return JSON.stringify(arguments);
+};
+//
+// Cache
+//
+function ObjectWithoutPrototypeCache() {
+ this.cache = Object.create(null);
+}
+ObjectWithoutPrototypeCache.prototype.get = function (key) {
+ return this.cache[key];
+};
+ObjectWithoutPrototypeCache.prototype.set = function (key, value) {
+ this.cache[key] = value;
+};
+var cacheDefault = {
+ create: function create() {
+ // @ts-ignore
+ return new ObjectWithoutPrototypeCache();
+ },
+};
+export var strategies = {
+ variadic: strategyVariadic,
+ monadic: strategyMonadic,
+};
diff --git a/app/frontend/node_modules/@formatjs/fast-memoize/package.json b/app/frontend/node_modules/@formatjs/fast-memoize/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..886d9cf1dbd31c64d5dcc50f953c999440fd7014
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/fast-memoize/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "@formatjs/fast-memoize",
+ "version": "1.2.1",
+ "description": "fork of fast-memoize and support esm",
+ "main": "index.js",
+ "module": "lib/index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/formatjs/formatjs.git"
+ },
+ "keywords": [
+ "intl",
+ "fast-memoize",
+ "memoize",
+ "i18n"
+ ],
+ "author": "Long Ho ",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/formatjs/formatjs/issues"
+ },
+ "homepage": "https://github.com/formatjs/formatjs#readme",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+}
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/LICENSE.md b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..0320eebafa71377cef72eabddb673e850d6d4517
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/LICENSE.md
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) 2021 FormatJS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/README.md b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5624d88ef817ca3d3eaef579a666cba994992946
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/README.md
@@ -0,0 +1,25 @@
+# MessageFormat Parser
+
+Hand-written ICU MessageFormat parser with compatible output as
+[`intl-messageformat-parser`](https://www.npmjs.com/package/intl-messageformat-parser)
+but 6 - 10 times as fast.
+
+```
+$ node benchmark
+complex_msg AST length 10861
+normal_msg AST length 1665
+simple_msg AST length 364
+string_msg AST length 131
+
+== Baseline ==
+complex_msg x 4,884 ops/sec ±0.97% (91 runs sampled)
+normal_msg x 40,113 ops/sec ±1.08% (92 runs sampled)
+simple_msg x 200,401 ops/sec ±1.12% (91 runs sampled)
+string_msg x 241,103 ops/sec ±0.84% (92 runs sampled)
+
+== This package ==
+complex_msg x 31,590 ops/sec ±0.80% (88 runs sampled)
+normal_msg x 278,703 ops/sec ±0.83% (95 runs sampled)
+simple_msg x 2,038,061 ops/sec ±0.90% (96 runs sampled)
+string_msg x 2,392,794 ops/sec ±0.67% (96 runs sampled)
+```
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/date-time-pattern-generator.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/date-time-pattern-generator.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..410d94c83c00755b6a4ba5ace992319930732261
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/date-time-pattern-generator.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Returns the best matching date time pattern if a date time skeleton
+ * pattern is provided with a locale. Follows the Unicode specification:
+ * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns
+ * @param skeleton date time skeleton pattern that possibly includes j, J or C
+ * @param locale
+ */
+export declare function getBestPattern(skeleton: string, locale: Intl.Locale): string;
+//# sourceMappingURL=date-time-pattern-generator.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/date-time-pattern-generator.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/date-time-pattern-generator.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..57de0c112a84dabbe999d89b29de3fd9810747ef
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/date-time-pattern-generator.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"date-time-pattern-generator.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/date-time-pattern-generator.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,UAsCnE"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/date-time-pattern-generator.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/date-time-pattern-generator.js
new file mode 100644
index 0000000000000000000000000000000000000000..8fe2d18db6f618f7e3874527ec65456ea4a86e12
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/date-time-pattern-generator.js
@@ -0,0 +1,87 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getBestPattern = void 0;
+var time_data_generated_1 = require("./time-data.generated");
+/**
+ * Returns the best matching date time pattern if a date time skeleton
+ * pattern is provided with a locale. Follows the Unicode specification:
+ * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns
+ * @param skeleton date time skeleton pattern that possibly includes j, J or C
+ * @param locale
+ */
+function getBestPattern(skeleton, locale) {
+ var skeletonCopy = '';
+ for (var patternPos = 0; patternPos < skeleton.length; patternPos++) {
+ var patternChar = skeleton.charAt(patternPos);
+ if (patternChar === 'j') {
+ var extraLength = 0;
+ while (patternPos + 1 < skeleton.length &&
+ skeleton.charAt(patternPos + 1) === patternChar) {
+ extraLength++;
+ patternPos++;
+ }
+ var hourLen = 1 + (extraLength & 1);
+ var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);
+ var dayPeriodChar = 'a';
+ var hourChar = getDefaultHourSymbolFromLocale(locale);
+ if (hourChar == 'H' || hourChar == 'k') {
+ dayPeriodLen = 0;
+ }
+ while (dayPeriodLen-- > 0) {
+ skeletonCopy += dayPeriodChar;
+ }
+ while (hourLen-- > 0) {
+ skeletonCopy = hourChar + skeletonCopy;
+ }
+ }
+ else if (patternChar === 'J') {
+ skeletonCopy += 'H';
+ }
+ else {
+ skeletonCopy += patternChar;
+ }
+ }
+ return skeletonCopy;
+}
+exports.getBestPattern = getBestPattern;
+/**
+ * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)
+ * of the given `locale` to the corresponding time pattern.
+ * @param locale
+ */
+function getDefaultHourSymbolFromLocale(locale) {
+ var hourCycle = locale.hourCycle;
+ if (hourCycle === undefined &&
+ // @ts-ignore hourCycle(s) is not identified yet
+ locale.hourCycles &&
+ // @ts-ignore
+ locale.hourCycles.length) {
+ // @ts-ignore
+ hourCycle = locale.hourCycles[0];
+ }
+ if (hourCycle) {
+ switch (hourCycle) {
+ case 'h24':
+ return 'k';
+ case 'h23':
+ return 'H';
+ case 'h12':
+ return 'h';
+ case 'h11':
+ return 'K';
+ default:
+ throw new Error('Invalid hourCycle');
+ }
+ }
+ // TODO: Once hourCycle is fully supported remove the following with data generation
+ var languageTag = locale.language;
+ var regionTag;
+ if (languageTag !== 'root') {
+ regionTag = locale.maximize().region;
+ }
+ var hourCycles = time_data_generated_1.timeData[regionTag || ''] ||
+ time_data_generated_1.timeData[languageTag || ''] ||
+ time_data_generated_1.timeData["".concat(languageTag, "-001")] ||
+ time_data_generated_1.timeData['001'];
+ return hourCycles[0];
+}
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/error.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/error.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d99d5ddf876f205bc82feb3038891e67d406c763
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/error.d.ts
@@ -0,0 +1,69 @@
+import { Location } from './types';
+export interface ParserError {
+ kind: ErrorKind;
+ message: string;
+ location: Location;
+}
+export declare enum ErrorKind {
+ /** Argument is unclosed (e.g. `{0`) */
+ EXPECT_ARGUMENT_CLOSING_BRACE = 1,
+ /** Argument is empty (e.g. `{}`). */
+ EMPTY_ARGUMENT = 2,
+ /** Argument is malformed (e.g. `{foo!}``) */
+ MALFORMED_ARGUMENT = 3,
+ /** Expect an argument type (e.g. `{foo,}`) */
+ EXPECT_ARGUMENT_TYPE = 4,
+ /** Unsupported argument type (e.g. `{foo,foo}`) */
+ INVALID_ARGUMENT_TYPE = 5,
+ /** Expect an argument style (e.g. `{foo, number, }`) */
+ EXPECT_ARGUMENT_STYLE = 6,
+ /** The number skeleton is invalid. */
+ INVALID_NUMBER_SKELETON = 7,
+ /** The date time skeleton is invalid. */
+ INVALID_DATE_TIME_SKELETON = 8,
+ /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */
+ EXPECT_NUMBER_SKELETON = 9,
+ /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */
+ EXPECT_DATE_TIME_SKELETON = 10,
+ /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */
+ UNCLOSED_QUOTE_IN_ARGUMENT_STYLE = 11,
+ /** Missing select argument options (e.g. `{foo, select}`) */
+ EXPECT_SELECT_ARGUMENT_OPTIONS = 12,
+ /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */
+ EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE = 13,
+ /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */
+ INVALID_PLURAL_ARGUMENT_OFFSET_VALUE = 14,
+ /** Expecting a selector in `select` argument (e.g `{foo, select}`) */
+ EXPECT_SELECT_ARGUMENT_SELECTOR = 15,
+ /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */
+ EXPECT_PLURAL_ARGUMENT_SELECTOR = 16,
+ /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */
+ EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT = 17,
+ /**
+ * Expecting a message fragment after the `plural` or `selectordinal` selector
+ * (e.g. `{foo, plural, one}`)
+ */
+ EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT = 18,
+ /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */
+ INVALID_PLURAL_ARGUMENT_SELECTOR = 19,
+ /**
+ * Duplicate selectors in `plural` or `selectordinal` argument.
+ * (e.g. {foo, plural, one {#} one {#}})
+ */
+ DUPLICATE_PLURAL_ARGUMENT_SELECTOR = 20,
+ /** Duplicate selectors in `select` argument.
+ * (e.g. {foo, select, apple {apple} apple {apple}})
+ */
+ DUPLICATE_SELECT_ARGUMENT_SELECTOR = 21,
+ /** Plural or select argument option must have `other` clause. */
+ MISSING_OTHER_CLAUSE = 22,
+ /** The tag is malformed. (e.g. `foo) */
+ INVALID_TAG = 23,
+ /** The tag name is invalid. (e.g. `<123>foo123>`) */
+ INVALID_TAG_NAME = 25,
+ /** The closing tag does not match the opening tag. (e.g. `foo`) */
+ UNMATCHED_CLOSING_TAG = 26,
+ /** The opening tag has unmatched closing tag. (e.g. `foo`) */
+ UNCLOSED_TAG = 27
+}
+//# sourceMappingURL=error.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/error.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/error.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..0d3b61793c17040afdfc1d724747b6053b3beef2
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/error.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAA;AAEhC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,oBAAY,SAAS;IACnB,uCAAuC;IACvC,6BAA6B,IAAI;IACjC,qCAAqC;IACrC,cAAc,IAAI;IAClB,6CAA6C;IAC7C,kBAAkB,IAAI;IACtB,8CAA8C;IAC9C,oBAAoB,IAAI;IACxB,mDAAmD;IACnD,qBAAqB,IAAI;IACzB,wDAAwD;IACxD,qBAAqB,IAAI;IACzB,sCAAsC;IACtC,uBAAuB,IAAI;IAC3B,yCAAyC;IACzC,0BAA0B,IAAI;IAC9B,6EAA6E;IAC7E,sBAAsB,IAAI;IAC1B,8EAA8E;IAC9E,yBAAyB,KAAK;IAC9B,+EAA+E;IAC/E,gCAAgC,KAAK;IACrC,6DAA6D;IAC7D,8BAA8B,KAAK;IAEnC,sGAAsG;IACtG,mCAAmC,KAAK;IACxC,+FAA+F;IAC/F,oCAAoC,KAAK;IAEzC,sEAAsE;IACtE,+BAA+B,KAAK;IACpC,yFAAyF;IACzF,+BAA+B,KAAK;IAEpC,6FAA6F;IAC7F,wCAAwC,KAAK;IAC7C;;;OAGG;IACH,wCAAwC,KAAK;IAE7C,0FAA0F;IAC1F,gCAAgC,KAAK;IAErC;;;OAGG;IACH,kCAAkC,KAAK;IACvC;;OAEG;IACH,kCAAkC,KAAK;IAEvC,iEAAiE;IACjE,oBAAoB,KAAK;IAEzB,uDAAuD;IACvD,WAAW,KAAK;IAChB,uDAAuD;IACvD,gBAAgB,KAAK;IACrB,kFAAkF;IAClF,qBAAqB,KAAK;IAC1B,oEAAoE;IACpE,YAAY,KAAK;CAClB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/error.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/error.js
new file mode 100644
index 0000000000000000000000000000000000000000..d09336e50dc5d95452ef47a8fc42b7412a122d2d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/error.js
@@ -0,0 +1,66 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ErrorKind = void 0;
+var ErrorKind;
+(function (ErrorKind) {
+ /** Argument is unclosed (e.g. `{0`) */
+ ErrorKind[ErrorKind["EXPECT_ARGUMENT_CLOSING_BRACE"] = 1] = "EXPECT_ARGUMENT_CLOSING_BRACE";
+ /** Argument is empty (e.g. `{}`). */
+ ErrorKind[ErrorKind["EMPTY_ARGUMENT"] = 2] = "EMPTY_ARGUMENT";
+ /** Argument is malformed (e.g. `{foo!}``) */
+ ErrorKind[ErrorKind["MALFORMED_ARGUMENT"] = 3] = "MALFORMED_ARGUMENT";
+ /** Expect an argument type (e.g. `{foo,}`) */
+ ErrorKind[ErrorKind["EXPECT_ARGUMENT_TYPE"] = 4] = "EXPECT_ARGUMENT_TYPE";
+ /** Unsupported argument type (e.g. `{foo,foo}`) */
+ ErrorKind[ErrorKind["INVALID_ARGUMENT_TYPE"] = 5] = "INVALID_ARGUMENT_TYPE";
+ /** Expect an argument style (e.g. `{foo, number, }`) */
+ ErrorKind[ErrorKind["EXPECT_ARGUMENT_STYLE"] = 6] = "EXPECT_ARGUMENT_STYLE";
+ /** The number skeleton is invalid. */
+ ErrorKind[ErrorKind["INVALID_NUMBER_SKELETON"] = 7] = "INVALID_NUMBER_SKELETON";
+ /** The date time skeleton is invalid. */
+ ErrorKind[ErrorKind["INVALID_DATE_TIME_SKELETON"] = 8] = "INVALID_DATE_TIME_SKELETON";
+ /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */
+ ErrorKind[ErrorKind["EXPECT_NUMBER_SKELETON"] = 9] = "EXPECT_NUMBER_SKELETON";
+ /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */
+ ErrorKind[ErrorKind["EXPECT_DATE_TIME_SKELETON"] = 10] = "EXPECT_DATE_TIME_SKELETON";
+ /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */
+ ErrorKind[ErrorKind["UNCLOSED_QUOTE_IN_ARGUMENT_STYLE"] = 11] = "UNCLOSED_QUOTE_IN_ARGUMENT_STYLE";
+ /** Missing select argument options (e.g. `{foo, select}`) */
+ ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_OPTIONS"] = 12] = "EXPECT_SELECT_ARGUMENT_OPTIONS";
+ /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */
+ ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE"] = 13] = "EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE";
+ /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */
+ ErrorKind[ErrorKind["INVALID_PLURAL_ARGUMENT_OFFSET_VALUE"] = 14] = "INVALID_PLURAL_ARGUMENT_OFFSET_VALUE";
+ /** Expecting a selector in `select` argument (e.g `{foo, select}`) */
+ ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_SELECTOR"] = 15] = "EXPECT_SELECT_ARGUMENT_SELECTOR";
+ /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */
+ ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_SELECTOR"] = 16] = "EXPECT_PLURAL_ARGUMENT_SELECTOR";
+ /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */
+ ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT"] = 17] = "EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT";
+ /**
+ * Expecting a message fragment after the `plural` or `selectordinal` selector
+ * (e.g. `{foo, plural, one}`)
+ */
+ ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT"] = 18] = "EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT";
+ /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */
+ ErrorKind[ErrorKind["INVALID_PLURAL_ARGUMENT_SELECTOR"] = 19] = "INVALID_PLURAL_ARGUMENT_SELECTOR";
+ /**
+ * Duplicate selectors in `plural` or `selectordinal` argument.
+ * (e.g. {foo, plural, one {#} one {#}})
+ */
+ ErrorKind[ErrorKind["DUPLICATE_PLURAL_ARGUMENT_SELECTOR"] = 20] = "DUPLICATE_PLURAL_ARGUMENT_SELECTOR";
+ /** Duplicate selectors in `select` argument.
+ * (e.g. {foo, select, apple {apple} apple {apple}})
+ */
+ ErrorKind[ErrorKind["DUPLICATE_SELECT_ARGUMENT_SELECTOR"] = 21] = "DUPLICATE_SELECT_ARGUMENT_SELECTOR";
+ /** Plural or select argument option must have `other` clause. */
+ ErrorKind[ErrorKind["MISSING_OTHER_CLAUSE"] = 22] = "MISSING_OTHER_CLAUSE";
+ /** The tag is malformed. (e.g. `foo) */
+ ErrorKind[ErrorKind["INVALID_TAG"] = 23] = "INVALID_TAG";
+ /** The tag name is invalid. (e.g. `<123>foo123>`) */
+ ErrorKind[ErrorKind["INVALID_TAG_NAME"] = 25] = "INVALID_TAG_NAME";
+ /** The closing tag does not match the opening tag. (e.g. `foo`) */
+ ErrorKind[ErrorKind["UNMATCHED_CLOSING_TAG"] = 26] = "UNMATCHED_CLOSING_TAG";
+ /** The opening tag has unmatched closing tag. (e.g. `foo`) */
+ ErrorKind[ErrorKind["UNCLOSED_TAG"] = 27] = "UNCLOSED_TAG";
+})(ErrorKind = exports.ErrorKind || (exports.ErrorKind = {}));
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/index.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..465f92432152353bbbb669f0d13026424aecfd18
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/index.d.ts
@@ -0,0 +1,5 @@
+import { ParserOptions } from './parser';
+import { MessageFormatElement } from './types';
+export declare function parse(message: string, opts?: ParserOptions): MessageFormatElement[];
+export * from './types';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/index.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..1327ab68b57c2a08cc615ad1cac368a3724ddd58
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,aAAa,EAAC,MAAM,UAAU,CAAA;AAC9C,OAAO,EASL,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAuBhB,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,0BAoB9D;AACD,cAAc,SAAS,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/index.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..709846d5f6bb38d82a443b771928a97c11f4f0ba
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/index.js
@@ -0,0 +1,47 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parse = void 0;
+var tslib_1 = require("tslib");
+var error_1 = require("./error");
+var parser_1 = require("./parser");
+var types_1 = require("./types");
+function pruneLocation(els) {
+ els.forEach(function (el) {
+ delete el.location;
+ if ((0, types_1.isSelectElement)(el) || (0, types_1.isPluralElement)(el)) {
+ for (var k in el.options) {
+ delete el.options[k].location;
+ pruneLocation(el.options[k].value);
+ }
+ }
+ else if ((0, types_1.isNumberElement)(el) && (0, types_1.isNumberSkeleton)(el.style)) {
+ delete el.style.location;
+ }
+ else if (((0, types_1.isDateElement)(el) || (0, types_1.isTimeElement)(el)) &&
+ (0, types_1.isDateTimeSkeleton)(el.style)) {
+ delete el.style.location;
+ }
+ else if ((0, types_1.isTagElement)(el)) {
+ pruneLocation(el.children);
+ }
+ });
+}
+function parse(message, opts) {
+ if (opts === void 0) { opts = {}; }
+ opts = (0, tslib_1.__assign)({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);
+ var result = new parser_1.Parser(message, opts).parse();
+ if (result.err) {
+ var error = SyntaxError(error_1.ErrorKind[result.err.kind]);
+ // @ts-expect-error Assign to error object
+ error.location = result.err.location;
+ // @ts-expect-error Assign to error object
+ error.originalMessage = result.err.message;
+ throw error;
+ }
+ if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {
+ pruneLocation(result.val);
+ }
+ return result.val;
+}
+exports.parse = parse;
+(0, tslib_1.__exportStar)(require("./types"), exports);
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..410d94c83c00755b6a4ba5ace992319930732261
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Returns the best matching date time pattern if a date time skeleton
+ * pattern is provided with a locale. Follows the Unicode specification:
+ * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns
+ * @param skeleton date time skeleton pattern that possibly includes j, J or C
+ * @param locale
+ */
+export declare function getBestPattern(skeleton: string, locale: Intl.Locale): string;
+//# sourceMappingURL=date-time-pattern-generator.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..f7e62af28bd485f0551a9a3b7ad86080e56b5427
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"date-time-pattern-generator.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/date-time-pattern-generator.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,UAsCnE"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js
new file mode 100644
index 0000000000000000000000000000000000000000..b91cb61bef857677bc9cd802bd2dda6b2edfea3b
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js
@@ -0,0 +1,83 @@
+import { timeData } from './time-data.generated';
+/**
+ * Returns the best matching date time pattern if a date time skeleton
+ * pattern is provided with a locale. Follows the Unicode specification:
+ * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns
+ * @param skeleton date time skeleton pattern that possibly includes j, J or C
+ * @param locale
+ */
+export function getBestPattern(skeleton, locale) {
+ var skeletonCopy = '';
+ for (var patternPos = 0; patternPos < skeleton.length; patternPos++) {
+ var patternChar = skeleton.charAt(patternPos);
+ if (patternChar === 'j') {
+ var extraLength = 0;
+ while (patternPos + 1 < skeleton.length &&
+ skeleton.charAt(patternPos + 1) === patternChar) {
+ extraLength++;
+ patternPos++;
+ }
+ var hourLen = 1 + (extraLength & 1);
+ var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);
+ var dayPeriodChar = 'a';
+ var hourChar = getDefaultHourSymbolFromLocale(locale);
+ if (hourChar == 'H' || hourChar == 'k') {
+ dayPeriodLen = 0;
+ }
+ while (dayPeriodLen-- > 0) {
+ skeletonCopy += dayPeriodChar;
+ }
+ while (hourLen-- > 0) {
+ skeletonCopy = hourChar + skeletonCopy;
+ }
+ }
+ else if (patternChar === 'J') {
+ skeletonCopy += 'H';
+ }
+ else {
+ skeletonCopy += patternChar;
+ }
+ }
+ return skeletonCopy;
+}
+/**
+ * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)
+ * of the given `locale` to the corresponding time pattern.
+ * @param locale
+ */
+function getDefaultHourSymbolFromLocale(locale) {
+ var hourCycle = locale.hourCycle;
+ if (hourCycle === undefined &&
+ // @ts-ignore hourCycle(s) is not identified yet
+ locale.hourCycles &&
+ // @ts-ignore
+ locale.hourCycles.length) {
+ // @ts-ignore
+ hourCycle = locale.hourCycles[0];
+ }
+ if (hourCycle) {
+ switch (hourCycle) {
+ case 'h24':
+ return 'k';
+ case 'h23':
+ return 'H';
+ case 'h12':
+ return 'h';
+ case 'h11':
+ return 'K';
+ default:
+ throw new Error('Invalid hourCycle');
+ }
+ }
+ // TODO: Once hourCycle is fully supported remove the following with data generation
+ var languageTag = locale.language;
+ var regionTag;
+ if (languageTag !== 'root') {
+ regionTag = locale.maximize().region;
+ }
+ var hourCycles = timeData[regionTag || ''] ||
+ timeData[languageTag || ''] ||
+ timeData["".concat(languageTag, "-001")] ||
+ timeData['001'];
+ return hourCycles[0];
+}
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/error.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/error.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d99d5ddf876f205bc82feb3038891e67d406c763
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/error.d.ts
@@ -0,0 +1,69 @@
+import { Location } from './types';
+export interface ParserError {
+ kind: ErrorKind;
+ message: string;
+ location: Location;
+}
+export declare enum ErrorKind {
+ /** Argument is unclosed (e.g. `{0`) */
+ EXPECT_ARGUMENT_CLOSING_BRACE = 1,
+ /** Argument is empty (e.g. `{}`). */
+ EMPTY_ARGUMENT = 2,
+ /** Argument is malformed (e.g. `{foo!}``) */
+ MALFORMED_ARGUMENT = 3,
+ /** Expect an argument type (e.g. `{foo,}`) */
+ EXPECT_ARGUMENT_TYPE = 4,
+ /** Unsupported argument type (e.g. `{foo,foo}`) */
+ INVALID_ARGUMENT_TYPE = 5,
+ /** Expect an argument style (e.g. `{foo, number, }`) */
+ EXPECT_ARGUMENT_STYLE = 6,
+ /** The number skeleton is invalid. */
+ INVALID_NUMBER_SKELETON = 7,
+ /** The date time skeleton is invalid. */
+ INVALID_DATE_TIME_SKELETON = 8,
+ /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */
+ EXPECT_NUMBER_SKELETON = 9,
+ /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */
+ EXPECT_DATE_TIME_SKELETON = 10,
+ /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */
+ UNCLOSED_QUOTE_IN_ARGUMENT_STYLE = 11,
+ /** Missing select argument options (e.g. `{foo, select}`) */
+ EXPECT_SELECT_ARGUMENT_OPTIONS = 12,
+ /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */
+ EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE = 13,
+ /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */
+ INVALID_PLURAL_ARGUMENT_OFFSET_VALUE = 14,
+ /** Expecting a selector in `select` argument (e.g `{foo, select}`) */
+ EXPECT_SELECT_ARGUMENT_SELECTOR = 15,
+ /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */
+ EXPECT_PLURAL_ARGUMENT_SELECTOR = 16,
+ /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */
+ EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT = 17,
+ /**
+ * Expecting a message fragment after the `plural` or `selectordinal` selector
+ * (e.g. `{foo, plural, one}`)
+ */
+ EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT = 18,
+ /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */
+ INVALID_PLURAL_ARGUMENT_SELECTOR = 19,
+ /**
+ * Duplicate selectors in `plural` or `selectordinal` argument.
+ * (e.g. {foo, plural, one {#} one {#}})
+ */
+ DUPLICATE_PLURAL_ARGUMENT_SELECTOR = 20,
+ /** Duplicate selectors in `select` argument.
+ * (e.g. {foo, select, apple {apple} apple {apple}})
+ */
+ DUPLICATE_SELECT_ARGUMENT_SELECTOR = 21,
+ /** Plural or select argument option must have `other` clause. */
+ MISSING_OTHER_CLAUSE = 22,
+ /** The tag is malformed. (e.g. `foo) */
+ INVALID_TAG = 23,
+ /** The tag name is invalid. (e.g. `<123>foo123>`) */
+ INVALID_TAG_NAME = 25,
+ /** The closing tag does not match the opening tag. (e.g. `foo`) */
+ UNMATCHED_CLOSING_TAG = 26,
+ /** The opening tag has unmatched closing tag. (e.g. `foo`) */
+ UNCLOSED_TAG = 27
+}
+//# sourceMappingURL=error.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/error.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/error.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..c1c551a1168fb7f28552f03baf33e36bbe87f99b
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/error.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAA;AAEhC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,oBAAY,SAAS;IACnB,uCAAuC;IACvC,6BAA6B,IAAI;IACjC,qCAAqC;IACrC,cAAc,IAAI;IAClB,6CAA6C;IAC7C,kBAAkB,IAAI;IACtB,8CAA8C;IAC9C,oBAAoB,IAAI;IACxB,mDAAmD;IACnD,qBAAqB,IAAI;IACzB,wDAAwD;IACxD,qBAAqB,IAAI;IACzB,sCAAsC;IACtC,uBAAuB,IAAI;IAC3B,yCAAyC;IACzC,0BAA0B,IAAI;IAC9B,6EAA6E;IAC7E,sBAAsB,IAAI;IAC1B,8EAA8E;IAC9E,yBAAyB,KAAK;IAC9B,+EAA+E;IAC/E,gCAAgC,KAAK;IACrC,6DAA6D;IAC7D,8BAA8B,KAAK;IAEnC,sGAAsG;IACtG,mCAAmC,KAAK;IACxC,+FAA+F;IAC/F,oCAAoC,KAAK;IAEzC,sEAAsE;IACtE,+BAA+B,KAAK;IACpC,yFAAyF;IACzF,+BAA+B,KAAK;IAEpC,6FAA6F;IAC7F,wCAAwC,KAAK;IAC7C;;;OAGG;IACH,wCAAwC,KAAK;IAE7C,0FAA0F;IAC1F,gCAAgC,KAAK;IAErC;;;OAGG;IACH,kCAAkC,KAAK;IACvC;;OAEG;IACH,kCAAkC,KAAK;IAEvC,iEAAiE;IACjE,oBAAoB,KAAK;IAEzB,uDAAuD;IACvD,WAAW,KAAK;IAChB,uDAAuD;IACvD,gBAAgB,KAAK;IACrB,kFAAkF;IAClF,qBAAqB,KAAK;IAC1B,oEAAoE;IACpE,YAAY,KAAK;CAClB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/error.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/error.js
new file mode 100644
index 0000000000000000000000000000000000000000..a22b368c1c7b327d03eb1707df4ab1045f5a9705
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/error.js
@@ -0,0 +1,63 @@
+export var ErrorKind;
+(function (ErrorKind) {
+ /** Argument is unclosed (e.g. `{0`) */
+ ErrorKind[ErrorKind["EXPECT_ARGUMENT_CLOSING_BRACE"] = 1] = "EXPECT_ARGUMENT_CLOSING_BRACE";
+ /** Argument is empty (e.g. `{}`). */
+ ErrorKind[ErrorKind["EMPTY_ARGUMENT"] = 2] = "EMPTY_ARGUMENT";
+ /** Argument is malformed (e.g. `{foo!}``) */
+ ErrorKind[ErrorKind["MALFORMED_ARGUMENT"] = 3] = "MALFORMED_ARGUMENT";
+ /** Expect an argument type (e.g. `{foo,}`) */
+ ErrorKind[ErrorKind["EXPECT_ARGUMENT_TYPE"] = 4] = "EXPECT_ARGUMENT_TYPE";
+ /** Unsupported argument type (e.g. `{foo,foo}`) */
+ ErrorKind[ErrorKind["INVALID_ARGUMENT_TYPE"] = 5] = "INVALID_ARGUMENT_TYPE";
+ /** Expect an argument style (e.g. `{foo, number, }`) */
+ ErrorKind[ErrorKind["EXPECT_ARGUMENT_STYLE"] = 6] = "EXPECT_ARGUMENT_STYLE";
+ /** The number skeleton is invalid. */
+ ErrorKind[ErrorKind["INVALID_NUMBER_SKELETON"] = 7] = "INVALID_NUMBER_SKELETON";
+ /** The date time skeleton is invalid. */
+ ErrorKind[ErrorKind["INVALID_DATE_TIME_SKELETON"] = 8] = "INVALID_DATE_TIME_SKELETON";
+ /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */
+ ErrorKind[ErrorKind["EXPECT_NUMBER_SKELETON"] = 9] = "EXPECT_NUMBER_SKELETON";
+ /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */
+ ErrorKind[ErrorKind["EXPECT_DATE_TIME_SKELETON"] = 10] = "EXPECT_DATE_TIME_SKELETON";
+ /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */
+ ErrorKind[ErrorKind["UNCLOSED_QUOTE_IN_ARGUMENT_STYLE"] = 11] = "UNCLOSED_QUOTE_IN_ARGUMENT_STYLE";
+ /** Missing select argument options (e.g. `{foo, select}`) */
+ ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_OPTIONS"] = 12] = "EXPECT_SELECT_ARGUMENT_OPTIONS";
+ /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */
+ ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE"] = 13] = "EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE";
+ /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */
+ ErrorKind[ErrorKind["INVALID_PLURAL_ARGUMENT_OFFSET_VALUE"] = 14] = "INVALID_PLURAL_ARGUMENT_OFFSET_VALUE";
+ /** Expecting a selector in `select` argument (e.g `{foo, select}`) */
+ ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_SELECTOR"] = 15] = "EXPECT_SELECT_ARGUMENT_SELECTOR";
+ /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */
+ ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_SELECTOR"] = 16] = "EXPECT_PLURAL_ARGUMENT_SELECTOR";
+ /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */
+ ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT"] = 17] = "EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT";
+ /**
+ * Expecting a message fragment after the `plural` or `selectordinal` selector
+ * (e.g. `{foo, plural, one}`)
+ */
+ ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT"] = 18] = "EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT";
+ /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */
+ ErrorKind[ErrorKind["INVALID_PLURAL_ARGUMENT_SELECTOR"] = 19] = "INVALID_PLURAL_ARGUMENT_SELECTOR";
+ /**
+ * Duplicate selectors in `plural` or `selectordinal` argument.
+ * (e.g. {foo, plural, one {#} one {#}})
+ */
+ ErrorKind[ErrorKind["DUPLICATE_PLURAL_ARGUMENT_SELECTOR"] = 20] = "DUPLICATE_PLURAL_ARGUMENT_SELECTOR";
+ /** Duplicate selectors in `select` argument.
+ * (e.g. {foo, select, apple {apple} apple {apple}})
+ */
+ ErrorKind[ErrorKind["DUPLICATE_SELECT_ARGUMENT_SELECTOR"] = 21] = "DUPLICATE_SELECT_ARGUMENT_SELECTOR";
+ /** Plural or select argument option must have `other` clause. */
+ ErrorKind[ErrorKind["MISSING_OTHER_CLAUSE"] = 22] = "MISSING_OTHER_CLAUSE";
+ /** The tag is malformed. (e.g. `foo) */
+ ErrorKind[ErrorKind["INVALID_TAG"] = 23] = "INVALID_TAG";
+ /** The tag name is invalid. (e.g. `<123>foo123>`) */
+ ErrorKind[ErrorKind["INVALID_TAG_NAME"] = 25] = "INVALID_TAG_NAME";
+ /** The closing tag does not match the opening tag. (e.g. `foo`) */
+ ErrorKind[ErrorKind["UNMATCHED_CLOSING_TAG"] = 26] = "UNMATCHED_CLOSING_TAG";
+ /** The opening tag has unmatched closing tag. (e.g. `foo`) */
+ ErrorKind[ErrorKind["UNCLOSED_TAG"] = 27] = "UNCLOSED_TAG";
+})(ErrorKind || (ErrorKind = {}));
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/index.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..465f92432152353bbbb669f0d13026424aecfd18
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/index.d.ts
@@ -0,0 +1,5 @@
+import { ParserOptions } from './parser';
+import { MessageFormatElement } from './types';
+export declare function parse(message: string, opts?: ParserOptions): MessageFormatElement[];
+export * from './types';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/index.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..d314f17022dd21d3e6fb897a5cc22655972ab693
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,aAAa,EAAC,MAAM,UAAU,CAAA;AAC9C,OAAO,EASL,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAuBhB,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,0BAoB9D;AACD,cAAc,SAAS,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/index.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..21464a43d99b1c5ab5e86ee0a83672370e5d0290
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/index.js
@@ -0,0 +1,43 @@
+import { __assign } from "tslib";
+import { ErrorKind } from './error';
+import { Parser } from './parser';
+import { isDateElement, isDateTimeSkeleton, isNumberElement, isNumberSkeleton, isPluralElement, isSelectElement, isTagElement, isTimeElement, } from './types';
+function pruneLocation(els) {
+ els.forEach(function (el) {
+ delete el.location;
+ if (isSelectElement(el) || isPluralElement(el)) {
+ for (var k in el.options) {
+ delete el.options[k].location;
+ pruneLocation(el.options[k].value);
+ }
+ }
+ else if (isNumberElement(el) && isNumberSkeleton(el.style)) {
+ delete el.style.location;
+ }
+ else if ((isDateElement(el) || isTimeElement(el)) &&
+ isDateTimeSkeleton(el.style)) {
+ delete el.style.location;
+ }
+ else if (isTagElement(el)) {
+ pruneLocation(el.children);
+ }
+ });
+}
+export function parse(message, opts) {
+ if (opts === void 0) { opts = {}; }
+ opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);
+ var result = new Parser(message, opts).parse();
+ if (result.err) {
+ var error = SyntaxError(ErrorKind[result.err.kind]);
+ // @ts-expect-error Assign to error object
+ error.location = result.err.location;
+ // @ts-expect-error Assign to error object
+ error.originalMessage = result.err.message;
+ throw error;
+ }
+ if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {
+ pruneLocation(result.val);
+ }
+ return result.val;
+}
+export * from './types';
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/manipulator.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/manipulator.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..68f2dae9c735e4660e9f4f3bbb274a66ceb5eeeb
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/manipulator.d.ts
@@ -0,0 +1,14 @@
+import { MessageFormatElement } from './types';
+/**
+ * Hoist all selectors to the beginning of the AST & flatten the
+ * resulting options. E.g:
+ * "I have {count, plural, one{a dog} other{many dogs}}"
+ * becomes "{count, plural, one{I have a dog} other{I have many dogs}}".
+ * If there are multiple selectors, the order of which one is hoisted 1st
+ * is non-deterministic.
+ * The goal is to provide as many full sentences as possible since fragmented
+ * sentences are not translator-friendly
+ * @param ast AST
+ */
+export declare function hoistSelectors(ast: MessageFormatElement[]): MessageFormatElement[];
+//# sourceMappingURL=manipulator.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/manipulator.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/manipulator.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..f9b858f02a22cfda09d2ef14f2ca5a43f15a8904
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/manipulator.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"manipulator.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/manipulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,oBAAoB,EAErB,MAAM,SAAS,CAAA;AAkBhB;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,oBAAoB,EAAE,GAC1B,oBAAoB,EAAE,CAyBxB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/manipulator.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/manipulator.js
new file mode 100644
index 0000000000000000000000000000000000000000..76b296620e539ca7811a124f9c9dad2ffb2c707c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/manipulator.js
@@ -0,0 +1,52 @@
+import { __spreadArray } from "tslib";
+import { isPluralElement, isSelectElement, } from './types';
+function cloneDeep(obj) {
+ if (Array.isArray(obj)) {
+ // @ts-expect-error meh
+ return __spreadArray([], obj.map(cloneDeep), true);
+ }
+ if (typeof obj === 'object') {
+ // @ts-expect-error meh
+ return Object.keys(obj).reduce(function (cloned, k) {
+ // @ts-expect-error meh
+ cloned[k] = cloneDeep(obj[k]);
+ return cloned;
+ }, {});
+ }
+ return obj;
+}
+/**
+ * Hoist all selectors to the beginning of the AST & flatten the
+ * resulting options. E.g:
+ * "I have {count, plural, one{a dog} other{many dogs}}"
+ * becomes "{count, plural, one{I have a dog} other{I have many dogs}}".
+ * If there are multiple selectors, the order of which one is hoisted 1st
+ * is non-deterministic.
+ * The goal is to provide as many full sentences as possible since fragmented
+ * sentences are not translator-friendly
+ * @param ast AST
+ */
+export function hoistSelectors(ast) {
+ var _loop_1 = function (i) {
+ var el = ast[i];
+ if (isPluralElement(el) || isSelectElement(el)) {
+ // pull this out of the ast and move it to the top
+ var cloned = cloneDeep(el);
+ var options_1 = cloned.options;
+ cloned.options = Object.keys(options_1).reduce(function (all, k) {
+ var newValue = hoistSelectors(__spreadArray(__spreadArray(__spreadArray([], ast.slice(0, i), true), options_1[k].value, true), ast.slice(i + 1), true));
+ all[k] = {
+ value: newValue,
+ };
+ return all;
+ }, {});
+ return { value: [cloned] };
+ }
+ };
+ for (var i = 0; i < ast.length; i++) {
+ var state_1 = _loop_1(i);
+ if (typeof state_1 === "object")
+ return state_1.value;
+ }
+ return ast;
+}
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/no-parser.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/no-parser.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..66fce3657a0103137a6e11ab329a226d6e5a1d44
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/no-parser.d.ts
@@ -0,0 +1,3 @@
+export declare function parse(): void;
+export * from './types';
+//# sourceMappingURL=no-parser.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/no-parser.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/no-parser.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..6b48a6146dce333c0abd47814f0327f03ef8d87c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/no-parser.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-parser.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/no-parser.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,SAIpB;AACD,cAAc,SAAS,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/no-parser.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/no-parser.js
new file mode 100644
index 0000000000000000000000000000000000000000..ebb1135f2ee0a333d521df9c65436ed52fc53425
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/no-parser.js
@@ -0,0 +1,4 @@
+export function parse() {
+ throw new Error("You're trying to format an uncompiled message with react-intl without parser, please import from 'react-int' instead");
+}
+export * from './types';
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/parser.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/parser.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..641853fa5b2ade229fde0a86ec105c0b3bc8cb1b
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/parser.d.ts
@@ -0,0 +1,145 @@
+import { ParserError } from './error';
+import { MessageFormatElement } from './types';
+export interface Position {
+ /** Offset in terms of UTF-16 *code unit*. */
+ offset: number;
+ line: number;
+ /** Column offset in terms of unicode *code point*. */
+ column: number;
+}
+export interface ParserOptions {
+ /**
+ * Whether to treat HTML/XML tags as string literal
+ * instead of parsing them as tag token.
+ * When this is false we only allow simple tags without
+ * any attributes
+ */
+ ignoreTag?: boolean;
+ /**
+ * Should `select`, `selectordinal`, and `plural` arguments always include
+ * the `other` case clause.
+ */
+ requiresOtherClause?: boolean;
+ /**
+ * Whether to parse number/datetime skeleton
+ * into Intl.NumberFormatOptions and Intl.DateTimeFormatOptions, respectively.
+ */
+ shouldParseSkeletons?: boolean;
+ /**
+ * Capture location info in AST
+ * Default is false
+ */
+ captureLocation?: boolean;
+ locale?: Intl.Locale;
+}
+export declare type Result = {
+ val: T;
+ err: null;
+} | {
+ val: null;
+ err: E;
+};
+export declare class Parser {
+ private message;
+ private position;
+ private locale?;
+ private ignoreTag;
+ private requiresOtherClause;
+ private shouldParseSkeletons?;
+ constructor(message: string, options?: ParserOptions);
+ parse(): Result;
+ private parseMessage;
+ /**
+ * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the
+ * [custom element name][] except that a dash is NOT always mandatory and uppercase letters
+ * are accepted:
+ *
+ * ```
+ * tag ::= "<" tagName (whitespace)* "/>" | "<" tagName (whitespace)* ">" message "" tagName (whitespace)* ">"
+ * tagName ::= [a-z] (PENChar)*
+ * PENChar ::=
+ * "-" | "." | [0-9] | "_" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |
+ * [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |
+ * [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
+ * ```
+ *
+ * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name
+ * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do
+ * since other tag-based engines like React allow it
+ */
+ private parseTag;
+ /**
+ * This method assumes that the caller has peeked ahead for the first tag character.
+ */
+ private parseTagName;
+ private parseLiteral;
+ tryParseLeftAngleBracket(): string | null;
+ /**
+ * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes
+ * a character that requires quoting (that is, "only where needed"), and works the same in
+ * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.
+ */
+ private tryParseQuote;
+ private tryParseUnquoted;
+ private parseArgument;
+ /**
+ * Advance the parser until the end of the identifier, if it is currently on
+ * an identifier character. Return an empty string otherwise.
+ */
+ private parseIdentifierIfPossible;
+ private parseArgumentOptions;
+ private tryParseArgumentClose;
+ /**
+ * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659
+ */
+ private parseSimpleArgStyleIfPossible;
+ private parseNumberSkeletonFromString;
+ /**
+ * @param nesting_level The current nesting level of messages.
+ * This can be positive when parsing message fragment in select or plural argument options.
+ * @param parent_arg_type The parent argument's type.
+ * @param parsed_first_identifier If provided, this is the first identifier-like selector of
+ * the argument. It is a by-product of a previous parsing attempt.
+ * @param expecting_close_tag If true, this message is directly or indirectly nested inside
+ * between a pair of opening and closing tags. The nested message will not parse beyond
+ * the closing tag boundary.
+ */
+ private tryParsePluralOrSelectOptions;
+ private tryParseDecimalInteger;
+ private offset;
+ private isEOF;
+ private clonePosition;
+ /**
+ * Return the code point at the current position of the parser.
+ * Throws if the index is out of bound.
+ */
+ private char;
+ private error;
+ /** Bump the parser to the next UTF-16 code unit. */
+ private bump;
+ /**
+ * If the substring starting at the current position of the parser has
+ * the given prefix, then bump the parser to the character immediately
+ * following the prefix and return true. Otherwise, don't bump the parser
+ * and return false.
+ */
+ private bumpIf;
+ /**
+ * Bump the parser until the pattern character is found and return `true`.
+ * Otherwise bump to the end of the file and return `false`.
+ */
+ private bumpUntil;
+ /**
+ * Bump the parser to the target offset.
+ * If target offset is beyond the end of the input, bump the parser to the end of the input.
+ */
+ private bumpTo;
+ /** advance the parser through all whitespace to the next non-whitespace code unit. */
+ private bumpSpace;
+ /**
+ * Peek at the *next* Unicode codepoint in the input without advancing the parser.
+ * If the input has been exhausted, then this returns null.
+ */
+ private peek;
+}
+//# sourceMappingURL=parser.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/parser.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/parser.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..bd796799efcf27358e9256f2793f3c2eeea944a3
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/parser.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAC,MAAM,SAAS,CAAA;AAC9C,OAAO,EAIL,oBAAoB,EAMrB,MAAM,SAAS,CAAA;AAiBhB,MAAM,WAAW,QAAQ;IACvB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;CACrB;AAED,oBAAY,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI;IAAC,GAAG,EAAE,CAAC,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAC,GAAG;IAAC,GAAG,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,CAAC,CAAA;CAAC,CAAA;AA+KpE,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAa;IAE5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,oBAAoB,CAAC,CAAS;gBAE1B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;IASxD,KAAK,IAAI,MAAM,CAAC,oBAAoB,EAAE,EAAE,WAAW,CAAC;IAOpD,OAAO,CAAC,YAAY;IA6DpB;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,QAAQ;IAkFhB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,YAAY;IAuCpB,wBAAwB,IAAI,MAAM,GAAG,IAAI;IAczC;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAsDrB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,aAAa;IAsFrB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,oBAAoB;IAyO5B,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAiDrC,OAAO,CAAC,6BAA6B;IAwBrC;;;;;;;;;OASG;IACH,OAAO,CAAC,6BAA6B;IA6GrC,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,KAAK;IAcb,oDAAoD;IACpD,OAAO,CAAC,IAAI;IAgBZ;;;;;OAKG;IACH,OAAO,CAAC,MAAM;IAUd;;;OAGG;IACH,OAAO,CAAC,SAAS;IAYjB;;;OAGG;IACH,OAAO,CAAC,MAAM;IA0Bd,sFAAsF;IACtF,OAAO,CAAC,SAAS;IAMjB;;;OAGG;IACH,OAAO,CAAC,IAAI;CASb"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/parser.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/parser.js
new file mode 100644
index 0000000000000000000000000000000000000000..d72671a20b0002dcb0da03dcc50712a55c2572e0
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/parser.js
@@ -0,0 +1,1276 @@
+var _a;
+import { __assign } from "tslib";
+import { ErrorKind } from './error';
+import { SKELETON_TYPE, TYPE, } from './types';
+import { SPACE_SEPARATOR_REGEX } from './regex.generated';
+import { parseNumberSkeleton, parseNumberSkeletonFromString, parseDateTimeSkeleton, } from '@formatjs/icu-skeleton-parser';
+import { getBestPattern } from './date-time-pattern-generator';
+var SPACE_SEPARATOR_START_REGEX = new RegExp("^".concat(SPACE_SEPARATOR_REGEX.source, "*"));
+var SPACE_SEPARATOR_END_REGEX = new RegExp("".concat(SPACE_SEPARATOR_REGEX.source, "*$"));
+function createLocation(start, end) {
+ return { start: start, end: end };
+}
+// #region Ponyfills
+// Consolidate these variables up top for easier toggling during debugging
+var hasNativeStartsWith = !!String.prototype.startsWith;
+var hasNativeFromCodePoint = !!String.fromCodePoint;
+var hasNativeFromEntries = !!Object.fromEntries;
+var hasNativeCodePointAt = !!String.prototype.codePointAt;
+var hasTrimStart = !!String.prototype.trimStart;
+var hasTrimEnd = !!String.prototype.trimEnd;
+var hasNativeIsSafeInteger = !!Number.isSafeInteger;
+var isSafeInteger = hasNativeIsSafeInteger
+ ? Number.isSafeInteger
+ : function (n) {
+ return (typeof n === 'number' &&
+ isFinite(n) &&
+ Math.floor(n) === n &&
+ Math.abs(n) <= 0x1fffffffffffff);
+ };
+// IE11 does not support y and u.
+var REGEX_SUPPORTS_U_AND_Y = true;
+try {
+ var re = RE('([^\\p{White_Space}\\p{Pattern_Syntax}]*)', 'yu');
+ /**
+ * legacy Edge or Xbox One browser
+ * Unicode flag support: supported
+ * Pattern_Syntax support: not supported
+ * See https://github.com/formatjs/formatjs/issues/2822
+ */
+ REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a';
+}
+catch (_) {
+ REGEX_SUPPORTS_U_AND_Y = false;
+}
+var startsWith = hasNativeStartsWith
+ ? // Native
+ function startsWith(s, search, position) {
+ return s.startsWith(search, position);
+ }
+ : // For IE11
+ function startsWith(s, search, position) {
+ return s.slice(position, position + search.length) === search;
+ };
+var fromCodePoint = hasNativeFromCodePoint
+ ? String.fromCodePoint
+ : // IE11
+ function fromCodePoint() {
+ var codePoints = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ codePoints[_i] = arguments[_i];
+ }
+ var elements = '';
+ var length = codePoints.length;
+ var i = 0;
+ var code;
+ while (length > i) {
+ code = codePoints[i++];
+ if (code > 0x10ffff)
+ throw RangeError(code + ' is not a valid code point');
+ elements +=
+ code < 0x10000
+ ? String.fromCharCode(code)
+ : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00);
+ }
+ return elements;
+ };
+var fromEntries =
+// native
+hasNativeFromEntries
+ ? Object.fromEntries
+ : // Ponyfill
+ function fromEntries(entries) {
+ var obj = {};
+ for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
+ var _a = entries_1[_i], k = _a[0], v = _a[1];
+ obj[k] = v;
+ }
+ return obj;
+ };
+var codePointAt = hasNativeCodePointAt
+ ? // Native
+ function codePointAt(s, index) {
+ return s.codePointAt(index);
+ }
+ : // IE 11
+ function codePointAt(s, index) {
+ var size = s.length;
+ if (index < 0 || index >= size) {
+ return undefined;
+ }
+ var first = s.charCodeAt(index);
+ var second;
+ return first < 0xd800 ||
+ first > 0xdbff ||
+ index + 1 === size ||
+ (second = s.charCodeAt(index + 1)) < 0xdc00 ||
+ second > 0xdfff
+ ? first
+ : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;
+ };
+var trimStart = hasTrimStart
+ ? // Native
+ function trimStart(s) {
+ return s.trimStart();
+ }
+ : // Ponyfill
+ function trimStart(s) {
+ return s.replace(SPACE_SEPARATOR_START_REGEX, '');
+ };
+var trimEnd = hasTrimEnd
+ ? // Native
+ function trimEnd(s) {
+ return s.trimEnd();
+ }
+ : // Ponyfill
+ function trimEnd(s) {
+ return s.replace(SPACE_SEPARATOR_END_REGEX, '');
+ };
+// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11.
+function RE(s, flag) {
+ return new RegExp(s, flag);
+}
+// #endregion
+var matchIdentifierAtIndex;
+if (REGEX_SUPPORTS_U_AND_Y) {
+ // Native
+ var IDENTIFIER_PREFIX_RE_1 = RE('([^\\p{White_Space}\\p{Pattern_Syntax}]*)', 'yu');
+ matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {
+ var _a;
+ IDENTIFIER_PREFIX_RE_1.lastIndex = index;
+ var match = IDENTIFIER_PREFIX_RE_1.exec(s);
+ return (_a = match[1]) !== null && _a !== void 0 ? _a : '';
+ };
+}
+else {
+ // IE11
+ matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {
+ var match = [];
+ while (true) {
+ var c = codePointAt(s, index);
+ if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) {
+ break;
+ }
+ match.push(c);
+ index += c >= 0x10000 ? 2 : 1;
+ }
+ return fromCodePoint.apply(void 0, match);
+ };
+}
+var Parser = /** @class */ (function () {
+ function Parser(message, options) {
+ if (options === void 0) { options = {}; }
+ this.message = message;
+ this.position = { offset: 0, line: 1, column: 1 };
+ this.ignoreTag = !!options.ignoreTag;
+ this.locale = options.locale;
+ this.requiresOtherClause = !!options.requiresOtherClause;
+ this.shouldParseSkeletons = !!options.shouldParseSkeletons;
+ }
+ Parser.prototype.parse = function () {
+ if (this.offset() !== 0) {
+ throw Error('parser can only be used once');
+ }
+ return this.parseMessage(0, '', false);
+ };
+ Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) {
+ var elements = [];
+ while (!this.isEOF()) {
+ var char = this.char();
+ if (char === 123 /* `{` */) {
+ var result = this.parseArgument(nestingLevel, expectingCloseTag);
+ if (result.err) {
+ return result;
+ }
+ elements.push(result.val);
+ }
+ else if (char === 125 /* `}` */ && nestingLevel > 0) {
+ break;
+ }
+ else if (char === 35 /* `#` */ &&
+ (parentArgType === 'plural' || parentArgType === 'selectordinal')) {
+ var position = this.clonePosition();
+ this.bump();
+ elements.push({
+ type: TYPE.pound,
+ location: createLocation(position, this.clonePosition()),
+ });
+ }
+ else if (char === 60 /* `<` */ &&
+ !this.ignoreTag &&
+ this.peek() === 47 // char code for '/'
+ ) {
+ if (expectingCloseTag) {
+ break;
+ }
+ else {
+ return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));
+ }
+ }
+ else if (char === 60 /* `<` */ &&
+ !this.ignoreTag &&
+ _isAlpha(this.peek() || 0)) {
+ var result = this.parseTag(nestingLevel, parentArgType);
+ if (result.err) {
+ return result;
+ }
+ elements.push(result.val);
+ }
+ else {
+ var result = this.parseLiteral(nestingLevel, parentArgType);
+ if (result.err) {
+ return result;
+ }
+ elements.push(result.val);
+ }
+ }
+ return { val: elements, err: null };
+ };
+ /**
+ * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the
+ * [custom element name][] except that a dash is NOT always mandatory and uppercase letters
+ * are accepted:
+ *
+ * ```
+ * tag ::= "<" tagName (whitespace)* "/>" | "<" tagName (whitespace)* ">" message "" tagName (whitespace)* ">"
+ * tagName ::= [a-z] (PENChar)*
+ * PENChar ::=
+ * "-" | "." | [0-9] | "_" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |
+ * [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |
+ * [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
+ * ```
+ *
+ * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name
+ * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do
+ * since other tag-based engines like React allow it
+ */
+ Parser.prototype.parseTag = function (nestingLevel, parentArgType) {
+ var startPosition = this.clonePosition();
+ this.bump(); // `<`
+ var tagName = this.parseTagName();
+ this.bumpSpace();
+ if (this.bumpIf('/>')) {
+ // Self closing tag
+ return {
+ val: {
+ type: TYPE.literal,
+ value: "<".concat(tagName, "/>"),
+ location: createLocation(startPosition, this.clonePosition()),
+ },
+ err: null,
+ };
+ }
+ else if (this.bumpIf('>')) {
+ var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);
+ if (childrenResult.err) {
+ return childrenResult;
+ }
+ var children = childrenResult.val;
+ // Expecting a close tag
+ var endTagStartPosition = this.clonePosition();
+ if (this.bumpIf('')) {
+ if (this.isEOF() || !_isAlpha(this.char())) {
+ return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));
+ }
+ var closingTagNameStartPosition = this.clonePosition();
+ var closingTagName = this.parseTagName();
+ if (tagName !== closingTagName) {
+ return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(closingTagNameStartPosition, this.clonePosition()));
+ }
+ this.bumpSpace();
+ if (!this.bumpIf('>')) {
+ return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));
+ }
+ return {
+ val: {
+ type: TYPE.tag,
+ value: tagName,
+ children: children,
+ location: createLocation(startPosition, this.clonePosition()),
+ },
+ err: null,
+ };
+ }
+ else {
+ return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));
+ }
+ }
+ else {
+ return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));
+ }
+ };
+ /**
+ * This method assumes that the caller has peeked ahead for the first tag character.
+ */
+ Parser.prototype.parseTagName = function () {
+ var startOffset = this.offset();
+ this.bump(); // the first tag name character
+ while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {
+ this.bump();
+ }
+ return this.message.slice(startOffset, this.offset());
+ };
+ Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) {
+ var start = this.clonePosition();
+ var value = '';
+ while (true) {
+ var parseQuoteResult = this.tryParseQuote(parentArgType);
+ if (parseQuoteResult) {
+ value += parseQuoteResult;
+ continue;
+ }
+ var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);
+ if (parseUnquotedResult) {
+ value += parseUnquotedResult;
+ continue;
+ }
+ var parseLeftAngleResult = this.tryParseLeftAngleBracket();
+ if (parseLeftAngleResult) {
+ value += parseLeftAngleResult;
+ continue;
+ }
+ break;
+ }
+ var location = createLocation(start, this.clonePosition());
+ return {
+ val: { type: TYPE.literal, value: value, location: location },
+ err: null,
+ };
+ };
+ Parser.prototype.tryParseLeftAngleBracket = function () {
+ if (!this.isEOF() &&
+ this.char() === 60 /* `<` */ &&
+ (this.ignoreTag ||
+ // If at the opening tag or closing tag position, bail.
+ !_isAlphaOrSlash(this.peek() || 0))) {
+ this.bump(); // `<`
+ return '<';
+ }
+ return null;
+ };
+ /**
+ * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes
+ * a character that requires quoting (that is, "only where needed"), and works the same in
+ * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.
+ */
+ Parser.prototype.tryParseQuote = function (parentArgType) {
+ if (this.isEOF() || this.char() !== 39 /* `'` */) {
+ return null;
+ }
+ // Parse escaped char following the apostrophe, or early return if there is no escaped char.
+ // Check if is valid escaped character
+ switch (this.peek()) {
+ case 39 /* `'` */:
+ // double quote, should return as a single quote.
+ this.bump();
+ this.bump();
+ return "'";
+ // '{', '<', '>', '}'
+ case 123:
+ case 60:
+ case 62:
+ case 125:
+ break;
+ case 35: // '#'
+ if (parentArgType === 'plural' || parentArgType === 'selectordinal') {
+ break;
+ }
+ return null;
+ default:
+ return null;
+ }
+ this.bump(); // apostrophe
+ var codePoints = [this.char()]; // escaped char
+ this.bump();
+ // read chars until the optional closing apostrophe is found
+ while (!this.isEOF()) {
+ var ch = this.char();
+ if (ch === 39 /* `'` */) {
+ if (this.peek() === 39 /* `'` */) {
+ codePoints.push(39);
+ // Bump one more time because we need to skip 2 characters.
+ this.bump();
+ }
+ else {
+ // Optional closing apostrophe.
+ this.bump();
+ break;
+ }
+ }
+ else {
+ codePoints.push(ch);
+ }
+ this.bump();
+ }
+ return fromCodePoint.apply(void 0, codePoints);
+ };
+ Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) {
+ if (this.isEOF()) {
+ return null;
+ }
+ var ch = this.char();
+ if (ch === 60 /* `<` */ ||
+ ch === 123 /* `{` */ ||
+ (ch === 35 /* `#` */ &&
+ (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||
+ (ch === 125 /* `}` */ && nestingLevel > 0)) {
+ return null;
+ }
+ else {
+ this.bump();
+ return fromCodePoint(ch);
+ }
+ };
+ Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) {
+ var openingBracePosition = this.clonePosition();
+ this.bump(); // `{`
+ this.bumpSpace();
+ if (this.isEOF()) {
+ return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ if (this.char() === 125 /* `}` */) {
+ this.bump();
+ return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ // argument name
+ var value = this.parseIdentifierIfPossible().value;
+ if (!value) {
+ return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ this.bumpSpace();
+ if (this.isEOF()) {
+ return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ switch (this.char()) {
+ // Simple argument: `{name}`
+ case 125 /* `}` */: {
+ this.bump(); // `}`
+ return {
+ val: {
+ type: TYPE.argument,
+ // value does not include the opening and closing braces.
+ value: value,
+ location: createLocation(openingBracePosition, this.clonePosition()),
+ },
+ err: null,
+ };
+ }
+ // Argument with options: `{name, format, ...}`
+ case 44 /* `,` */: {
+ this.bump(); // `,`
+ this.bumpSpace();
+ if (this.isEOF()) {
+ return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);
+ }
+ default:
+ return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ };
+ /**
+ * Advance the parser until the end of the identifier, if it is currently on
+ * an identifier character. Return an empty string otherwise.
+ */
+ Parser.prototype.parseIdentifierIfPossible = function () {
+ var startingPosition = this.clonePosition();
+ var startOffset = this.offset();
+ var value = matchIdentifierAtIndex(this.message, startOffset);
+ var endOffset = startOffset + value.length;
+ this.bumpTo(endOffset);
+ var endPosition = this.clonePosition();
+ var location = createLocation(startingPosition, endPosition);
+ return { value: value, location: location };
+ };
+ Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) {
+ var _a;
+ // Parse this range:
+ // {name, type, style}
+ // ^---^
+ var typeStartPosition = this.clonePosition();
+ var argType = this.parseIdentifierIfPossible().value;
+ var typeEndPosition = this.clonePosition();
+ switch (argType) {
+ case '':
+ // Expecting a style string number, date, time, plural, selectordinal, or select.
+ return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));
+ case 'number':
+ case 'date':
+ case 'time': {
+ // Parse this range:
+ // {name, number, style}
+ // ^-------^
+ this.bumpSpace();
+ var styleAndLocation = null;
+ if (this.bumpIf(',')) {
+ this.bumpSpace();
+ var styleStartPosition = this.clonePosition();
+ var result = this.parseSimpleArgStyleIfPossible();
+ if (result.err) {
+ return result;
+ }
+ var style = trimEnd(result.val);
+ if (style.length === 0) {
+ return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));
+ }
+ var styleLocation = createLocation(styleStartPosition, this.clonePosition());
+ styleAndLocation = { style: style, styleLocation: styleLocation };
+ }
+ var argCloseResult = this.tryParseArgumentClose(openingBracePosition);
+ if (argCloseResult.err) {
+ return argCloseResult;
+ }
+ var location_1 = createLocation(openingBracePosition, this.clonePosition());
+ // Extract style or skeleton
+ if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) {
+ // Skeleton starts with `::`.
+ var skeleton = trimStart(styleAndLocation.style.slice(2));
+ if (argType === 'number') {
+ var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);
+ if (result.err) {
+ return result;
+ }
+ return {
+ val: { type: TYPE.number, value: value, location: location_1, style: result.val },
+ err: null,
+ };
+ }
+ else {
+ if (skeleton.length === 0) {
+ return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1);
+ }
+ var dateTimePattern = skeleton;
+ // Get "best match" pattern only if locale is passed, if not, let it
+ // pass as-is where `parseDateTimeSkeleton()` will throw an error
+ // for unsupported patterns.
+ if (this.locale) {
+ dateTimePattern = getBestPattern(skeleton, this.locale);
+ }
+ var style = {
+ type: SKELETON_TYPE.dateTime,
+ pattern: dateTimePattern,
+ location: styleAndLocation.styleLocation,
+ parsedOptions: this.shouldParseSkeletons
+ ? parseDateTimeSkeleton(dateTimePattern)
+ : {},
+ };
+ var type = argType === 'date' ? TYPE.date : TYPE.time;
+ return {
+ val: { type: type, value: value, location: location_1, style: style },
+ err: null,
+ };
+ }
+ }
+ // Regular style or no style.
+ return {
+ val: {
+ type: argType === 'number'
+ ? TYPE.number
+ : argType === 'date'
+ ? TYPE.date
+ : TYPE.time,
+ value: value,
+ location: location_1,
+ style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null,
+ },
+ err: null,
+ };
+ }
+ case 'plural':
+ case 'selectordinal':
+ case 'select': {
+ // Parse this range:
+ // {name, plural, options}
+ // ^---------^
+ var typeEndPosition_1 = this.clonePosition();
+ this.bumpSpace();
+ if (!this.bumpIf(',')) {
+ return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1)));
+ }
+ this.bumpSpace();
+ // Parse offset:
+ // {name, plural, offset:1, options}
+ // ^-----^
+ //
+ // or the first option:
+ //
+ // {name, plural, one {...} other {...}}
+ // ^--^
+ var identifierAndLocation = this.parseIdentifierIfPossible();
+ var pluralOffset = 0;
+ if (argType !== 'select' && identifierAndLocation.value === 'offset') {
+ if (!this.bumpIf(':')) {
+ return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));
+ }
+ this.bumpSpace();
+ var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);
+ if (result.err) {
+ return result;
+ }
+ // Parse another identifier for option parsing
+ this.bumpSpace();
+ identifierAndLocation = this.parseIdentifierIfPossible();
+ pluralOffset = result.val;
+ }
+ var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);
+ if (optionsResult.err) {
+ return optionsResult;
+ }
+ var argCloseResult = this.tryParseArgumentClose(openingBracePosition);
+ if (argCloseResult.err) {
+ return argCloseResult;
+ }
+ var location_2 = createLocation(openingBracePosition, this.clonePosition());
+ if (argType === 'select') {
+ return {
+ val: {
+ type: TYPE.select,
+ value: value,
+ options: fromEntries(optionsResult.val),
+ location: location_2,
+ },
+ err: null,
+ };
+ }
+ else {
+ return {
+ val: {
+ type: TYPE.plural,
+ value: value,
+ options: fromEntries(optionsResult.val),
+ offset: pluralOffset,
+ pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',
+ location: location_2,
+ },
+ err: null,
+ };
+ }
+ }
+ default:
+ return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));
+ }
+ };
+ Parser.prototype.tryParseArgumentClose = function (openingBracePosition) {
+ // Parse: {value, number, ::currency/GBP }
+ //
+ if (this.isEOF() || this.char() !== 125 /* `}` */) {
+ return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ this.bump(); // `}`
+ return { val: true, err: null };
+ };
+ /**
+ * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659
+ */
+ Parser.prototype.parseSimpleArgStyleIfPossible = function () {
+ var nestedBraces = 0;
+ var startPosition = this.clonePosition();
+ while (!this.isEOF()) {
+ var ch = this.char();
+ switch (ch) {
+ case 39 /* `'` */: {
+ // Treat apostrophe as quoting but include it in the style part.
+ // Find the end of the quoted literal text.
+ this.bump();
+ var apostrophePosition = this.clonePosition();
+ if (!this.bumpUntil("'")) {
+ return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));
+ }
+ this.bump();
+ break;
+ }
+ case 123 /* `{` */: {
+ nestedBraces += 1;
+ this.bump();
+ break;
+ }
+ case 125 /* `}` */: {
+ if (nestedBraces > 0) {
+ nestedBraces -= 1;
+ }
+ else {
+ return {
+ val: this.message.slice(startPosition.offset, this.offset()),
+ err: null,
+ };
+ }
+ break;
+ }
+ default:
+ this.bump();
+ break;
+ }
+ }
+ return {
+ val: this.message.slice(startPosition.offset, this.offset()),
+ err: null,
+ };
+ };
+ Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) {
+ var tokens = [];
+ try {
+ tokens = parseNumberSkeletonFromString(skeleton);
+ }
+ catch (e) {
+ return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);
+ }
+ return {
+ val: {
+ type: SKELETON_TYPE.number,
+ tokens: tokens,
+ location: location,
+ parsedOptions: this.shouldParseSkeletons
+ ? parseNumberSkeleton(tokens)
+ : {},
+ },
+ err: null,
+ };
+ };
+ /**
+ * @param nesting_level The current nesting level of messages.
+ * This can be positive when parsing message fragment in select or plural argument options.
+ * @param parent_arg_type The parent argument's type.
+ * @param parsed_first_identifier If provided, this is the first identifier-like selector of
+ * the argument. It is a by-product of a previous parsing attempt.
+ * @param expecting_close_tag If true, this message is directly or indirectly nested inside
+ * between a pair of opening and closing tags. The nested message will not parse beyond
+ * the closing tag boundary.
+ */
+ Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {
+ var _a;
+ var hasOtherClause = false;
+ var options = [];
+ var parsedSelectors = new Set();
+ var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location;
+ // Parse:
+ // one {one apple}
+ // ^--^
+ while (true) {
+ if (selector.length === 0) {
+ var startPosition = this.clonePosition();
+ if (parentArgType !== 'select' && this.bumpIf('=')) {
+ // Try parse `={number}` selector
+ var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);
+ if (result.err) {
+ return result;
+ }
+ selectorLocation = createLocation(startPosition, this.clonePosition());
+ selector = this.message.slice(startPosition.offset, this.offset());
+ }
+ else {
+ break;
+ }
+ }
+ // Duplicate selector clauses
+ if (parsedSelectors.has(selector)) {
+ return this.error(parentArgType === 'select'
+ ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR
+ : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);
+ }
+ if (selector === 'other') {
+ hasOtherClause = true;
+ }
+ // Parse:
+ // one {one apple}
+ // ^----------^
+ this.bumpSpace();
+ var openingBracePosition = this.clonePosition();
+ if (!this.bumpIf('{')) {
+ return this.error(parentArgType === 'select'
+ ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT
+ : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));
+ }
+ var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);
+ if (fragmentResult.err) {
+ return fragmentResult;
+ }
+ var argCloseResult = this.tryParseArgumentClose(openingBracePosition);
+ if (argCloseResult.err) {
+ return argCloseResult;
+ }
+ options.push([
+ selector,
+ {
+ value: fragmentResult.val,
+ location: createLocation(openingBracePosition, this.clonePosition()),
+ },
+ ]);
+ // Keep track of the existing selectors
+ parsedSelectors.add(selector);
+ // Prep next selector clause.
+ this.bumpSpace();
+ (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location);
+ }
+ if (options.length === 0) {
+ return this.error(parentArgType === 'select'
+ ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR
+ : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));
+ }
+ if (this.requiresOtherClause && !hasOtherClause) {
+ return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));
+ }
+ return { val: options, err: null };
+ };
+ Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) {
+ var sign = 1;
+ var startingPosition = this.clonePosition();
+ if (this.bumpIf('+')) {
+ }
+ else if (this.bumpIf('-')) {
+ sign = -1;
+ }
+ var hasDigits = false;
+ var decimal = 0;
+ while (!this.isEOF()) {
+ var ch = this.char();
+ if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {
+ hasDigits = true;
+ decimal = decimal * 10 + (ch - 48);
+ this.bump();
+ }
+ else {
+ break;
+ }
+ }
+ var location = createLocation(startingPosition, this.clonePosition());
+ if (!hasDigits) {
+ return this.error(expectNumberError, location);
+ }
+ decimal *= sign;
+ if (!isSafeInteger(decimal)) {
+ return this.error(invalidNumberError, location);
+ }
+ return { val: decimal, err: null };
+ };
+ Parser.prototype.offset = function () {
+ return this.position.offset;
+ };
+ Parser.prototype.isEOF = function () {
+ return this.offset() === this.message.length;
+ };
+ Parser.prototype.clonePosition = function () {
+ // This is much faster than `Object.assign` or spread.
+ return {
+ offset: this.position.offset,
+ line: this.position.line,
+ column: this.position.column,
+ };
+ };
+ /**
+ * Return the code point at the current position of the parser.
+ * Throws if the index is out of bound.
+ */
+ Parser.prototype.char = function () {
+ var offset = this.position.offset;
+ if (offset >= this.message.length) {
+ throw Error('out of bound');
+ }
+ var code = codePointAt(this.message, offset);
+ if (code === undefined) {
+ throw Error("Offset ".concat(offset, " is at invalid UTF-16 code unit boundary"));
+ }
+ return code;
+ };
+ Parser.prototype.error = function (kind, location) {
+ return {
+ val: null,
+ err: {
+ kind: kind,
+ message: this.message,
+ location: location,
+ },
+ };
+ };
+ /** Bump the parser to the next UTF-16 code unit. */
+ Parser.prototype.bump = function () {
+ if (this.isEOF()) {
+ return;
+ }
+ var code = this.char();
+ if (code === 10 /* '\n' */) {
+ this.position.line += 1;
+ this.position.column = 1;
+ this.position.offset += 1;
+ }
+ else {
+ this.position.column += 1;
+ // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.
+ this.position.offset += code < 0x10000 ? 1 : 2;
+ }
+ };
+ /**
+ * If the substring starting at the current position of the parser has
+ * the given prefix, then bump the parser to the character immediately
+ * following the prefix and return true. Otherwise, don't bump the parser
+ * and return false.
+ */
+ Parser.prototype.bumpIf = function (prefix) {
+ if (startsWith(this.message, prefix, this.offset())) {
+ for (var i = 0; i < prefix.length; i++) {
+ this.bump();
+ }
+ return true;
+ }
+ return false;
+ };
+ /**
+ * Bump the parser until the pattern character is found and return `true`.
+ * Otherwise bump to the end of the file and return `false`.
+ */
+ Parser.prototype.bumpUntil = function (pattern) {
+ var currentOffset = this.offset();
+ var index = this.message.indexOf(pattern, currentOffset);
+ if (index >= 0) {
+ this.bumpTo(index);
+ return true;
+ }
+ else {
+ this.bumpTo(this.message.length);
+ return false;
+ }
+ };
+ /**
+ * Bump the parser to the target offset.
+ * If target offset is beyond the end of the input, bump the parser to the end of the input.
+ */
+ Parser.prototype.bumpTo = function (targetOffset) {
+ if (this.offset() > targetOffset) {
+ throw Error("targetOffset ".concat(targetOffset, " must be greater than or equal to the current offset ").concat(this.offset()));
+ }
+ targetOffset = Math.min(targetOffset, this.message.length);
+ while (true) {
+ var offset = this.offset();
+ if (offset === targetOffset) {
+ break;
+ }
+ if (offset > targetOffset) {
+ throw Error("targetOffset ".concat(targetOffset, " is at invalid UTF-16 code unit boundary"));
+ }
+ this.bump();
+ if (this.isEOF()) {
+ break;
+ }
+ }
+ };
+ /** advance the parser through all whitespace to the next non-whitespace code unit. */
+ Parser.prototype.bumpSpace = function () {
+ while (!this.isEOF() && _isWhiteSpace(this.char())) {
+ this.bump();
+ }
+ };
+ /**
+ * Peek at the *next* Unicode codepoint in the input without advancing the parser.
+ * If the input has been exhausted, then this returns null.
+ */
+ Parser.prototype.peek = function () {
+ if (this.isEOF()) {
+ return null;
+ }
+ var code = this.char();
+ var offset = this.offset();
+ var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1));
+ return nextCode !== null && nextCode !== void 0 ? nextCode : null;
+ };
+ return Parser;
+}());
+export { Parser };
+/**
+ * This check if codepoint is alphabet (lower & uppercase)
+ * @param codepoint
+ * @returns
+ */
+function _isAlpha(codepoint) {
+ return ((codepoint >= 97 && codepoint <= 122) ||
+ (codepoint >= 65 && codepoint <= 90));
+}
+function _isAlphaOrSlash(codepoint) {
+ return _isAlpha(codepoint) || codepoint === 47; /* '/' */
+}
+/** See `parseTag` function docs. */
+function _isPotentialElementNameChar(c) {
+ return (c === 45 /* '-' */ ||
+ c === 46 /* '.' */ ||
+ (c >= 48 && c <= 57) /* 0..9 */ ||
+ c === 95 /* '_' */ ||
+ (c >= 97 && c <= 122) /** a..z */ ||
+ (c >= 65 && c <= 90) /* A..Z */ ||
+ c == 0xb7 ||
+ (c >= 0xc0 && c <= 0xd6) ||
+ (c >= 0xd8 && c <= 0xf6) ||
+ (c >= 0xf8 && c <= 0x37d) ||
+ (c >= 0x37f && c <= 0x1fff) ||
+ (c >= 0x200c && c <= 0x200d) ||
+ (c >= 0x203f && c <= 0x2040) ||
+ (c >= 0x2070 && c <= 0x218f) ||
+ (c >= 0x2c00 && c <= 0x2fef) ||
+ (c >= 0x3001 && c <= 0xd7ff) ||
+ (c >= 0xf900 && c <= 0xfdcf) ||
+ (c >= 0xfdf0 && c <= 0xfffd) ||
+ (c >= 0x10000 && c <= 0xeffff));
+}
+/**
+ * Code point equivalent of regex `\p{White_Space}`.
+ * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt
+ */
+function _isWhiteSpace(c) {
+ return ((c >= 0x0009 && c <= 0x000d) ||
+ c === 0x0020 ||
+ c === 0x0085 ||
+ (c >= 0x200e && c <= 0x200f) ||
+ c === 0x2028 ||
+ c === 0x2029);
+}
+/**
+ * Code point equivalent of regex `\p{Pattern_Syntax}`.
+ * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt
+ */
+function _isPatternSyntax(c) {
+ return ((c >= 0x0021 && c <= 0x0023) ||
+ c === 0x0024 ||
+ (c >= 0x0025 && c <= 0x0027) ||
+ c === 0x0028 ||
+ c === 0x0029 ||
+ c === 0x002a ||
+ c === 0x002b ||
+ c === 0x002c ||
+ c === 0x002d ||
+ (c >= 0x002e && c <= 0x002f) ||
+ (c >= 0x003a && c <= 0x003b) ||
+ (c >= 0x003c && c <= 0x003e) ||
+ (c >= 0x003f && c <= 0x0040) ||
+ c === 0x005b ||
+ c === 0x005c ||
+ c === 0x005d ||
+ c === 0x005e ||
+ c === 0x0060 ||
+ c === 0x007b ||
+ c === 0x007c ||
+ c === 0x007d ||
+ c === 0x007e ||
+ c === 0x00a1 ||
+ (c >= 0x00a2 && c <= 0x00a5) ||
+ c === 0x00a6 ||
+ c === 0x00a7 ||
+ c === 0x00a9 ||
+ c === 0x00ab ||
+ c === 0x00ac ||
+ c === 0x00ae ||
+ c === 0x00b0 ||
+ c === 0x00b1 ||
+ c === 0x00b6 ||
+ c === 0x00bb ||
+ c === 0x00bf ||
+ c === 0x00d7 ||
+ c === 0x00f7 ||
+ (c >= 0x2010 && c <= 0x2015) ||
+ (c >= 0x2016 && c <= 0x2017) ||
+ c === 0x2018 ||
+ c === 0x2019 ||
+ c === 0x201a ||
+ (c >= 0x201b && c <= 0x201c) ||
+ c === 0x201d ||
+ c === 0x201e ||
+ c === 0x201f ||
+ (c >= 0x2020 && c <= 0x2027) ||
+ (c >= 0x2030 && c <= 0x2038) ||
+ c === 0x2039 ||
+ c === 0x203a ||
+ (c >= 0x203b && c <= 0x203e) ||
+ (c >= 0x2041 && c <= 0x2043) ||
+ c === 0x2044 ||
+ c === 0x2045 ||
+ c === 0x2046 ||
+ (c >= 0x2047 && c <= 0x2051) ||
+ c === 0x2052 ||
+ c === 0x2053 ||
+ (c >= 0x2055 && c <= 0x205e) ||
+ (c >= 0x2190 && c <= 0x2194) ||
+ (c >= 0x2195 && c <= 0x2199) ||
+ (c >= 0x219a && c <= 0x219b) ||
+ (c >= 0x219c && c <= 0x219f) ||
+ c === 0x21a0 ||
+ (c >= 0x21a1 && c <= 0x21a2) ||
+ c === 0x21a3 ||
+ (c >= 0x21a4 && c <= 0x21a5) ||
+ c === 0x21a6 ||
+ (c >= 0x21a7 && c <= 0x21ad) ||
+ c === 0x21ae ||
+ (c >= 0x21af && c <= 0x21cd) ||
+ (c >= 0x21ce && c <= 0x21cf) ||
+ (c >= 0x21d0 && c <= 0x21d1) ||
+ c === 0x21d2 ||
+ c === 0x21d3 ||
+ c === 0x21d4 ||
+ (c >= 0x21d5 && c <= 0x21f3) ||
+ (c >= 0x21f4 && c <= 0x22ff) ||
+ (c >= 0x2300 && c <= 0x2307) ||
+ c === 0x2308 ||
+ c === 0x2309 ||
+ c === 0x230a ||
+ c === 0x230b ||
+ (c >= 0x230c && c <= 0x231f) ||
+ (c >= 0x2320 && c <= 0x2321) ||
+ (c >= 0x2322 && c <= 0x2328) ||
+ c === 0x2329 ||
+ c === 0x232a ||
+ (c >= 0x232b && c <= 0x237b) ||
+ c === 0x237c ||
+ (c >= 0x237d && c <= 0x239a) ||
+ (c >= 0x239b && c <= 0x23b3) ||
+ (c >= 0x23b4 && c <= 0x23db) ||
+ (c >= 0x23dc && c <= 0x23e1) ||
+ (c >= 0x23e2 && c <= 0x2426) ||
+ (c >= 0x2427 && c <= 0x243f) ||
+ (c >= 0x2440 && c <= 0x244a) ||
+ (c >= 0x244b && c <= 0x245f) ||
+ (c >= 0x2500 && c <= 0x25b6) ||
+ c === 0x25b7 ||
+ (c >= 0x25b8 && c <= 0x25c0) ||
+ c === 0x25c1 ||
+ (c >= 0x25c2 && c <= 0x25f7) ||
+ (c >= 0x25f8 && c <= 0x25ff) ||
+ (c >= 0x2600 && c <= 0x266e) ||
+ c === 0x266f ||
+ (c >= 0x2670 && c <= 0x2767) ||
+ c === 0x2768 ||
+ c === 0x2769 ||
+ c === 0x276a ||
+ c === 0x276b ||
+ c === 0x276c ||
+ c === 0x276d ||
+ c === 0x276e ||
+ c === 0x276f ||
+ c === 0x2770 ||
+ c === 0x2771 ||
+ c === 0x2772 ||
+ c === 0x2773 ||
+ c === 0x2774 ||
+ c === 0x2775 ||
+ (c >= 0x2794 && c <= 0x27bf) ||
+ (c >= 0x27c0 && c <= 0x27c4) ||
+ c === 0x27c5 ||
+ c === 0x27c6 ||
+ (c >= 0x27c7 && c <= 0x27e5) ||
+ c === 0x27e6 ||
+ c === 0x27e7 ||
+ c === 0x27e8 ||
+ c === 0x27e9 ||
+ c === 0x27ea ||
+ c === 0x27eb ||
+ c === 0x27ec ||
+ c === 0x27ed ||
+ c === 0x27ee ||
+ c === 0x27ef ||
+ (c >= 0x27f0 && c <= 0x27ff) ||
+ (c >= 0x2800 && c <= 0x28ff) ||
+ (c >= 0x2900 && c <= 0x2982) ||
+ c === 0x2983 ||
+ c === 0x2984 ||
+ c === 0x2985 ||
+ c === 0x2986 ||
+ c === 0x2987 ||
+ c === 0x2988 ||
+ c === 0x2989 ||
+ c === 0x298a ||
+ c === 0x298b ||
+ c === 0x298c ||
+ c === 0x298d ||
+ c === 0x298e ||
+ c === 0x298f ||
+ c === 0x2990 ||
+ c === 0x2991 ||
+ c === 0x2992 ||
+ c === 0x2993 ||
+ c === 0x2994 ||
+ c === 0x2995 ||
+ c === 0x2996 ||
+ c === 0x2997 ||
+ c === 0x2998 ||
+ (c >= 0x2999 && c <= 0x29d7) ||
+ c === 0x29d8 ||
+ c === 0x29d9 ||
+ c === 0x29da ||
+ c === 0x29db ||
+ (c >= 0x29dc && c <= 0x29fb) ||
+ c === 0x29fc ||
+ c === 0x29fd ||
+ (c >= 0x29fe && c <= 0x2aff) ||
+ (c >= 0x2b00 && c <= 0x2b2f) ||
+ (c >= 0x2b30 && c <= 0x2b44) ||
+ (c >= 0x2b45 && c <= 0x2b46) ||
+ (c >= 0x2b47 && c <= 0x2b4c) ||
+ (c >= 0x2b4d && c <= 0x2b73) ||
+ (c >= 0x2b74 && c <= 0x2b75) ||
+ (c >= 0x2b76 && c <= 0x2b95) ||
+ c === 0x2b96 ||
+ (c >= 0x2b97 && c <= 0x2bff) ||
+ (c >= 0x2e00 && c <= 0x2e01) ||
+ c === 0x2e02 ||
+ c === 0x2e03 ||
+ c === 0x2e04 ||
+ c === 0x2e05 ||
+ (c >= 0x2e06 && c <= 0x2e08) ||
+ c === 0x2e09 ||
+ c === 0x2e0a ||
+ c === 0x2e0b ||
+ c === 0x2e0c ||
+ c === 0x2e0d ||
+ (c >= 0x2e0e && c <= 0x2e16) ||
+ c === 0x2e17 ||
+ (c >= 0x2e18 && c <= 0x2e19) ||
+ c === 0x2e1a ||
+ c === 0x2e1b ||
+ c === 0x2e1c ||
+ c === 0x2e1d ||
+ (c >= 0x2e1e && c <= 0x2e1f) ||
+ c === 0x2e20 ||
+ c === 0x2e21 ||
+ c === 0x2e22 ||
+ c === 0x2e23 ||
+ c === 0x2e24 ||
+ c === 0x2e25 ||
+ c === 0x2e26 ||
+ c === 0x2e27 ||
+ c === 0x2e28 ||
+ c === 0x2e29 ||
+ (c >= 0x2e2a && c <= 0x2e2e) ||
+ c === 0x2e2f ||
+ (c >= 0x2e30 && c <= 0x2e39) ||
+ (c >= 0x2e3a && c <= 0x2e3b) ||
+ (c >= 0x2e3c && c <= 0x2e3f) ||
+ c === 0x2e40 ||
+ c === 0x2e41 ||
+ c === 0x2e42 ||
+ (c >= 0x2e43 && c <= 0x2e4f) ||
+ (c >= 0x2e50 && c <= 0x2e51) ||
+ c === 0x2e52 ||
+ (c >= 0x2e53 && c <= 0x2e7f) ||
+ (c >= 0x3001 && c <= 0x3003) ||
+ c === 0x3008 ||
+ c === 0x3009 ||
+ c === 0x300a ||
+ c === 0x300b ||
+ c === 0x300c ||
+ c === 0x300d ||
+ c === 0x300e ||
+ c === 0x300f ||
+ c === 0x3010 ||
+ c === 0x3011 ||
+ (c >= 0x3012 && c <= 0x3013) ||
+ c === 0x3014 ||
+ c === 0x3015 ||
+ c === 0x3016 ||
+ c === 0x3017 ||
+ c === 0x3018 ||
+ c === 0x3019 ||
+ c === 0x301a ||
+ c === 0x301b ||
+ c === 0x301c ||
+ c === 0x301d ||
+ (c >= 0x301e && c <= 0x301f) ||
+ c === 0x3020 ||
+ c === 0x3030 ||
+ c === 0xfd3e ||
+ c === 0xfd3f ||
+ (c >= 0xfe45 && c <= 0xfe46));
+}
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/printer.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/printer.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a16465c59902095f461174e4a5bdf09108872598
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/printer.d.ts
@@ -0,0 +1,5 @@
+import { MessageFormatElement, DateTimeSkeleton } from './types';
+export declare function printAST(ast: MessageFormatElement[]): string;
+export declare function doPrintAST(ast: MessageFormatElement[], isInPlural: boolean): string;
+export declare function printDateTimeSkeleton(style: DateTimeSkeleton): string;
+//# sourceMappingURL=printer.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/printer.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/printer.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..9803b7764c7463e01749bfaa620ffe72d89687c4
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/printer.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"printer.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/printer.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EAoBpB,gBAAgB,EAEjB,MAAM,SAAS,CAAA;AAEhB,wBAAgB,QAAQ,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAE5D;AAED,wBAAgB,UAAU,CACxB,GAAG,EAAE,oBAAoB,EAAE,EAC3B,UAAU,EAAE,OAAO,GAClB,MAAM,CA8BR;AA4CD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAErE"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/printer.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/printer.js
new file mode 100644
index 0000000000000000000000000000000000000000..5800b5e98df5512825f7fc58f0a7fac98f459d40
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/printer.js
@@ -0,0 +1,91 @@
+import { __spreadArray } from "tslib";
+import { isLiteralElement, isTagElement, isSelectElement, isArgumentElement, isDateElement, isTimeElement, isNumberElement, isPluralElement, TYPE, SKELETON_TYPE, isPoundElement, } from './types';
+export function printAST(ast) {
+ return doPrintAST(ast, false);
+}
+export function doPrintAST(ast, isInPlural) {
+ var printedNodes = ast.map(function (el) {
+ if (isLiteralElement(el)) {
+ return printLiteralElement(el, isInPlural);
+ }
+ if (isArgumentElement(el)) {
+ return printArgumentElement(el);
+ }
+ if (isDateElement(el) || isTimeElement(el) || isNumberElement(el)) {
+ return printSimpleFormatElement(el);
+ }
+ if (isPluralElement(el)) {
+ return printPluralElement(el);
+ }
+ if (isSelectElement(el)) {
+ return printSelectElement(el);
+ }
+ if (isPoundElement(el)) {
+ return '#';
+ }
+ if (isTagElement(el)) {
+ return printTagElement(el);
+ }
+ });
+ return printedNodes.join('');
+}
+function printTagElement(el) {
+ return "<".concat(el.value, ">").concat(printAST(el.children), "").concat(el.value, ">");
+}
+function printEscapedMessage(message) {
+ return message.replace(/([{}](?:.*[{}])?)/su, "'$1'");
+}
+function printLiteralElement(_a, isInPlural) {
+ var value = _a.value;
+ var escaped = printEscapedMessage(value);
+ return isInPlural ? escaped.replace('#', "'#'") : escaped;
+}
+function printArgumentElement(_a) {
+ var value = _a.value;
+ return "{".concat(value, "}");
+}
+function printSimpleFormatElement(el) {
+ return "{".concat(el.value, ", ").concat(TYPE[el.type]).concat(el.style ? ", ".concat(printArgumentStyle(el.style)) : '', "}");
+}
+function printNumberSkeletonToken(token) {
+ var stem = token.stem, options = token.options;
+ return options.length === 0
+ ? stem
+ : "".concat(stem).concat(options.map(function (o) { return "/".concat(o); }).join(''));
+}
+function printArgumentStyle(style) {
+ if (typeof style === 'string') {
+ return printEscapedMessage(style);
+ }
+ else if (style.type === SKELETON_TYPE.dateTime) {
+ return "::".concat(printDateTimeSkeleton(style));
+ }
+ else {
+ return "::".concat(style.tokens.map(printNumberSkeletonToken).join(' '));
+ }
+}
+export function printDateTimeSkeleton(style) {
+ return style.pattern;
+}
+function printSelectElement(el) {
+ var msg = [
+ el.value,
+ 'select',
+ Object.keys(el.options)
+ .map(function (id) { return "".concat(id, "{").concat(doPrintAST(el.options[id].value, false), "}"); })
+ .join(' '),
+ ].join(',');
+ return "{".concat(msg, "}");
+}
+function printPluralElement(el) {
+ var type = el.pluralType === 'cardinal' ? 'plural' : 'selectordinal';
+ var msg = [
+ el.value,
+ type,
+ __spreadArray([
+ el.offset ? "offset:".concat(el.offset) : ''
+ ], Object.keys(el.options).map(function (id) { return "".concat(id, "{").concat(doPrintAST(el.options[id].value, true), "}"); }), true).filter(Boolean)
+ .join(' '),
+ ].join(',');
+ return "{".concat(msg, "}");
+}
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f172f3dc4a08dbc5eb382fef0020fd543200b973
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.d.ts
@@ -0,0 +1,3 @@
+export declare const SPACE_SEPARATOR_REGEX: RegExp;
+export declare const WHITE_SPACE_REGEX: RegExp;
+//# sourceMappingURL=regex.generated.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..14f96f20b77932eeade0c22ea9aba34588720384
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"regex.generated.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/regex.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,qBAAqB,QAAiD,CAAA;AACnF,eAAO,MAAM,iBAAiB,QAAyC,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js
new file mode 100644
index 0000000000000000000000000000000000000000..d7f1481125644ecc0a8c1ea7aaa52111b3241748
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js
@@ -0,0 +1,3 @@
+// @generated from regex-gen.ts
+export var SPACE_SEPARATOR_REGEX = /[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/;
+export var WHITE_SPACE_REGEX = /[\t-\r \x85\u200E\u200F\u2028\u2029]/;
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..121101c2a3dccb93da986505a3554bc7e3fa1fef
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.d.ts
@@ -0,0 +1,2 @@
+export declare const timeData: Record;
+//# sourceMappingURL=time-data.generated.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..4e0703f1f1e8ebc93b1a9cf1171d3df67a6a524d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"time-data.generated.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/time-data.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAwzC7C,CAAC"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js
new file mode 100644
index 0000000000000000000000000000000000000000..3e7be2553203f11269035dff6a4e0496fda9fcbb
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js
@@ -0,0 +1,1339 @@
+// @generated from time-data-gen.ts
+// prettier-ignore
+export var timeData = {
+ "AX": [
+ "H"
+ ],
+ "BQ": [
+ "H"
+ ],
+ "CP": [
+ "H"
+ ],
+ "CZ": [
+ "H"
+ ],
+ "DK": [
+ "H"
+ ],
+ "FI": [
+ "H"
+ ],
+ "ID": [
+ "H"
+ ],
+ "IS": [
+ "H"
+ ],
+ "ML": [
+ "H"
+ ],
+ "NE": [
+ "H"
+ ],
+ "RU": [
+ "H"
+ ],
+ "SE": [
+ "H"
+ ],
+ "SJ": [
+ "H"
+ ],
+ "SK": [
+ "H"
+ ],
+ "AS": [
+ "h",
+ "H"
+ ],
+ "BT": [
+ "h",
+ "H"
+ ],
+ "DJ": [
+ "h",
+ "H"
+ ],
+ "ER": [
+ "h",
+ "H"
+ ],
+ "GH": [
+ "h",
+ "H"
+ ],
+ "IN": [
+ "h",
+ "H"
+ ],
+ "LS": [
+ "h",
+ "H"
+ ],
+ "PG": [
+ "h",
+ "H"
+ ],
+ "PW": [
+ "h",
+ "H"
+ ],
+ "SO": [
+ "h",
+ "H"
+ ],
+ "TO": [
+ "h",
+ "H"
+ ],
+ "VU": [
+ "h",
+ "H"
+ ],
+ "WS": [
+ "h",
+ "H"
+ ],
+ "001": [
+ "H",
+ "h"
+ ],
+ "AL": [
+ "h",
+ "H",
+ "hB"
+ ],
+ "TD": [
+ "h",
+ "H",
+ "hB"
+ ],
+ "ca-ES": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "CF": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "CM": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "fr-CA": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "gl-ES": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "it-CH": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "it-IT": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "LU": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "NP": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "PF": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "SC": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "SM": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "SN": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "TF": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "VA": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "CY": [
+ "h",
+ "H",
+ "hb",
+ "hB"
+ ],
+ "GR": [
+ "h",
+ "H",
+ "hb",
+ "hB"
+ ],
+ "CO": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "DO": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "KP": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "KR": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "NA": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "PA": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "PR": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "VE": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "AC": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "AI": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "BW": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "BZ": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "CC": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "CK": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "CX": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "DG": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "FK": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "GB": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "GG": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "GI": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "IE": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "IM": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "IO": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "JE": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "LT": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "MK": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "MN": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "MS": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "NF": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "NG": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "NR": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "NU": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "PN": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "SH": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "SX": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "TA": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "ZA": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "af-ZA": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "AR": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "CL": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "CR": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "CU": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "EA": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "es-BO": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "es-BR": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "es-EC": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "es-ES": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "es-GQ": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "es-PE": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "GT": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "HN": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "IC": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "KG": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "KM": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "LK": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "MA": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "MX": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "NI": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "PY": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "SV": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "UY": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "JP": [
+ "H",
+ "h",
+ "K"
+ ],
+ "AD": [
+ "H",
+ "hB"
+ ],
+ "AM": [
+ "H",
+ "hB"
+ ],
+ "AO": [
+ "H",
+ "hB"
+ ],
+ "AT": [
+ "H",
+ "hB"
+ ],
+ "AW": [
+ "H",
+ "hB"
+ ],
+ "BE": [
+ "H",
+ "hB"
+ ],
+ "BF": [
+ "H",
+ "hB"
+ ],
+ "BJ": [
+ "H",
+ "hB"
+ ],
+ "BL": [
+ "H",
+ "hB"
+ ],
+ "BR": [
+ "H",
+ "hB"
+ ],
+ "CG": [
+ "H",
+ "hB"
+ ],
+ "CI": [
+ "H",
+ "hB"
+ ],
+ "CV": [
+ "H",
+ "hB"
+ ],
+ "DE": [
+ "H",
+ "hB"
+ ],
+ "EE": [
+ "H",
+ "hB"
+ ],
+ "FR": [
+ "H",
+ "hB"
+ ],
+ "GA": [
+ "H",
+ "hB"
+ ],
+ "GF": [
+ "H",
+ "hB"
+ ],
+ "GN": [
+ "H",
+ "hB"
+ ],
+ "GP": [
+ "H",
+ "hB"
+ ],
+ "GW": [
+ "H",
+ "hB"
+ ],
+ "HR": [
+ "H",
+ "hB"
+ ],
+ "IL": [
+ "H",
+ "hB"
+ ],
+ "IT": [
+ "H",
+ "hB"
+ ],
+ "KZ": [
+ "H",
+ "hB"
+ ],
+ "MC": [
+ "H",
+ "hB"
+ ],
+ "MD": [
+ "H",
+ "hB"
+ ],
+ "MF": [
+ "H",
+ "hB"
+ ],
+ "MQ": [
+ "H",
+ "hB"
+ ],
+ "MZ": [
+ "H",
+ "hB"
+ ],
+ "NC": [
+ "H",
+ "hB"
+ ],
+ "NL": [
+ "H",
+ "hB"
+ ],
+ "PM": [
+ "H",
+ "hB"
+ ],
+ "PT": [
+ "H",
+ "hB"
+ ],
+ "RE": [
+ "H",
+ "hB"
+ ],
+ "RO": [
+ "H",
+ "hB"
+ ],
+ "SI": [
+ "H",
+ "hB"
+ ],
+ "SR": [
+ "H",
+ "hB"
+ ],
+ "ST": [
+ "H",
+ "hB"
+ ],
+ "TG": [
+ "H",
+ "hB"
+ ],
+ "TR": [
+ "H",
+ "hB"
+ ],
+ "WF": [
+ "H",
+ "hB"
+ ],
+ "YT": [
+ "H",
+ "hB"
+ ],
+ "BD": [
+ "h",
+ "hB",
+ "H"
+ ],
+ "PK": [
+ "h",
+ "hB",
+ "H"
+ ],
+ "AZ": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "BA": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "BG": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "CH": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "GE": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "LI": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "ME": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "RS": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "UA": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "UZ": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "XK": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "AG": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "AU": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "BB": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "BM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "BS": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "CA": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "DM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "en-001": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "FJ": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "FM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "GD": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "GM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "GU": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "GY": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "JM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "KI": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "KN": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "KY": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "LC": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "LR": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "MH": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "MP": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "MW": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "NZ": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "SB": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "SG": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "SL": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "SS": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "SZ": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "TC": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "TT": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "UM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "US": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "VC": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "VG": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "VI": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "ZM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "BO": [
+ "H",
+ "hB",
+ "h",
+ "hb"
+ ],
+ "EC": [
+ "H",
+ "hB",
+ "h",
+ "hb"
+ ],
+ "ES": [
+ "H",
+ "hB",
+ "h",
+ "hb"
+ ],
+ "GQ": [
+ "H",
+ "hB",
+ "h",
+ "hb"
+ ],
+ "PE": [
+ "H",
+ "hB",
+ "h",
+ "hb"
+ ],
+ "AE": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "ar-001": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "BH": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "DZ": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "EG": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "EH": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "HK": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "IQ": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "JO": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "KW": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "LB": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "LY": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "MO": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "MR": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "OM": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "PH": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "PS": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "QA": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "SA": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "SD": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "SY": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "TN": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "YE": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "AF": [
+ "H",
+ "hb",
+ "hB",
+ "h"
+ ],
+ "LA": [
+ "H",
+ "hb",
+ "hB",
+ "h"
+ ],
+ "CN": [
+ "H",
+ "hB",
+ "hb",
+ "h"
+ ],
+ "LV": [
+ "H",
+ "hB",
+ "hb",
+ "h"
+ ],
+ "TL": [
+ "H",
+ "hB",
+ "hb",
+ "h"
+ ],
+ "zu-ZA": [
+ "H",
+ "hB",
+ "hb",
+ "h"
+ ],
+ "CD": [
+ "hB",
+ "H"
+ ],
+ "IR": [
+ "hB",
+ "H"
+ ],
+ "hi-IN": [
+ "hB",
+ "h",
+ "H"
+ ],
+ "kn-IN": [
+ "hB",
+ "h",
+ "H"
+ ],
+ "ml-IN": [
+ "hB",
+ "h",
+ "H"
+ ],
+ "te-IN": [
+ "hB",
+ "h",
+ "H"
+ ],
+ "KH": [
+ "hB",
+ "h",
+ "H",
+ "hb"
+ ],
+ "ta-IN": [
+ "hB",
+ "h",
+ "hb",
+ "H"
+ ],
+ "BN": [
+ "hb",
+ "hB",
+ "h",
+ "H"
+ ],
+ "MY": [
+ "hb",
+ "hB",
+ "h",
+ "H"
+ ],
+ "ET": [
+ "hB",
+ "hb",
+ "h",
+ "H"
+ ],
+ "gu-IN": [
+ "hB",
+ "hb",
+ "h",
+ "H"
+ ],
+ "mr-IN": [
+ "hB",
+ "hb",
+ "h",
+ "H"
+ ],
+ "pa-IN": [
+ "hB",
+ "hb",
+ "h",
+ "H"
+ ],
+ "TW": [
+ "hB",
+ "hb",
+ "h",
+ "H"
+ ],
+ "KE": [
+ "hB",
+ "hb",
+ "H",
+ "h"
+ ],
+ "MM": [
+ "hB",
+ "hb",
+ "H",
+ "h"
+ ],
+ "TZ": [
+ "hB",
+ "hb",
+ "H",
+ "h"
+ ],
+ "UG": [
+ "hB",
+ "hb",
+ "H",
+ "h"
+ ]
+};
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/types.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ed22a9e1ec8f96c04c8efb35342611cd33d754f9
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/types.d.ts
@@ -0,0 +1,129 @@
+import type { NumberFormatOptions } from '@formatjs/ecma402-abstract';
+import { NumberSkeletonToken } from '@formatjs/icu-skeleton-parser';
+export interface ExtendedNumberFormatOptions extends NumberFormatOptions {
+ scale?: number;
+}
+export declare enum TYPE {
+ /**
+ * Raw text
+ */
+ literal = 0,
+ /**
+ * Variable w/o any format, e.g `var` in `this is a {var}`
+ */
+ argument = 1,
+ /**
+ * Variable w/ number format
+ */
+ number = 2,
+ /**
+ * Variable w/ date format
+ */
+ date = 3,
+ /**
+ * Variable w/ time format
+ */
+ time = 4,
+ /**
+ * Variable w/ select format
+ */
+ select = 5,
+ /**
+ * Variable w/ plural format
+ */
+ plural = 6,
+ /**
+ * Only possible within plural argument.
+ * This is the `#` symbol that will be substituted with the count.
+ */
+ pound = 7,
+ /**
+ * XML-like tag
+ */
+ tag = 8
+}
+export declare enum SKELETON_TYPE {
+ number = 0,
+ dateTime = 1
+}
+export interface LocationDetails {
+ offset: number;
+ line: number;
+ column: number;
+}
+export interface Location {
+ start: LocationDetails;
+ end: LocationDetails;
+}
+export interface BaseElement {
+ type: T;
+ value: string;
+ location?: Location;
+}
+export declare type LiteralElement = BaseElement;
+export declare type ArgumentElement = BaseElement;
+export interface TagElement {
+ type: TYPE.tag;
+ value: string;
+ children: MessageFormatElement[];
+ location?: Location;
+}
+export interface SimpleFormatElement extends BaseElement {
+ style?: string | S | null;
+}
+export declare type NumberElement = SimpleFormatElement;
+export declare type DateElement = SimpleFormatElement;
+export declare type TimeElement = SimpleFormatElement;
+export interface SelectOption {
+ id: string;
+ value: MessageFormatElement[];
+ location?: Location;
+}
+export declare type ValidPluralRule = 'zero' | 'one' | 'two' | 'few' | 'many' | 'other' | string;
+export interface PluralOrSelectOption {
+ value: MessageFormatElement[];
+ location?: Location;
+}
+export interface SelectElement extends BaseElement {
+ options: Record;
+}
+export interface PluralElement extends BaseElement {
+ options: Record;
+ offset: number;
+ pluralType: Intl.PluralRulesOptions['type'];
+}
+export interface PoundElement {
+ type: TYPE.pound;
+ location?: Location;
+}
+export declare type MessageFormatElement = ArgumentElement | DateElement | LiteralElement | NumberElement | PluralElement | PoundElement | SelectElement | TagElement | TimeElement;
+export interface NumberSkeleton {
+ type: SKELETON_TYPE.number;
+ tokens: NumberSkeletonToken[];
+ location?: Location;
+ parsedOptions: ExtendedNumberFormatOptions;
+}
+export interface DateTimeSkeleton {
+ type: SKELETON_TYPE.dateTime;
+ pattern: string;
+ location?: Location;
+ parsedOptions: Intl.DateTimeFormatOptions;
+}
+export declare type Skeleton = NumberSkeleton | DateTimeSkeleton;
+/**
+ * Type Guards
+ */
+export declare function isLiteralElement(el: MessageFormatElement): el is LiteralElement;
+export declare function isArgumentElement(el: MessageFormatElement): el is ArgumentElement;
+export declare function isNumberElement(el: MessageFormatElement): el is NumberElement;
+export declare function isDateElement(el: MessageFormatElement): el is DateElement;
+export declare function isTimeElement(el: MessageFormatElement): el is TimeElement;
+export declare function isSelectElement(el: MessageFormatElement): el is SelectElement;
+export declare function isPluralElement(el: MessageFormatElement): el is PluralElement;
+export declare function isPoundElement(el: MessageFormatElement): el is PoundElement;
+export declare function isTagElement(el: MessageFormatElement): el is TagElement;
+export declare function isNumberSkeleton(el: NumberElement['style'] | Skeleton): el is NumberSkeleton;
+export declare function isDateTimeSkeleton(el?: DateElement['style'] | TimeElement['style'] | Skeleton): el is DateTimeSkeleton;
+export declare function createLiteralElement(value: string): LiteralElement;
+export declare function createNumberElement(value: string, style?: string | null): NumberElement;
+//# sourceMappingURL=types.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/types.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/types.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..a0c9d478758a2e25f9c28651c5305bd579292872
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/types.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/types.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/types.js
new file mode 100644
index 0000000000000000000000000000000000000000..302f1cccc809bd46d418d0673bf8c102241aa349
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/lib/types.js
@@ -0,0 +1,94 @@
+export var TYPE;
+(function (TYPE) {
+ /**
+ * Raw text
+ */
+ TYPE[TYPE["literal"] = 0] = "literal";
+ /**
+ * Variable w/o any format, e.g `var` in `this is a {var}`
+ */
+ TYPE[TYPE["argument"] = 1] = "argument";
+ /**
+ * Variable w/ number format
+ */
+ TYPE[TYPE["number"] = 2] = "number";
+ /**
+ * Variable w/ date format
+ */
+ TYPE[TYPE["date"] = 3] = "date";
+ /**
+ * Variable w/ time format
+ */
+ TYPE[TYPE["time"] = 4] = "time";
+ /**
+ * Variable w/ select format
+ */
+ TYPE[TYPE["select"] = 5] = "select";
+ /**
+ * Variable w/ plural format
+ */
+ TYPE[TYPE["plural"] = 6] = "plural";
+ /**
+ * Only possible within plural argument.
+ * This is the `#` symbol that will be substituted with the count.
+ */
+ TYPE[TYPE["pound"] = 7] = "pound";
+ /**
+ * XML-like tag
+ */
+ TYPE[TYPE["tag"] = 8] = "tag";
+})(TYPE || (TYPE = {}));
+export var SKELETON_TYPE;
+(function (SKELETON_TYPE) {
+ SKELETON_TYPE[SKELETON_TYPE["number"] = 0] = "number";
+ SKELETON_TYPE[SKELETON_TYPE["dateTime"] = 1] = "dateTime";
+})(SKELETON_TYPE || (SKELETON_TYPE = {}));
+/**
+ * Type Guards
+ */
+export function isLiteralElement(el) {
+ return el.type === TYPE.literal;
+}
+export function isArgumentElement(el) {
+ return el.type === TYPE.argument;
+}
+export function isNumberElement(el) {
+ return el.type === TYPE.number;
+}
+export function isDateElement(el) {
+ return el.type === TYPE.date;
+}
+export function isTimeElement(el) {
+ return el.type === TYPE.time;
+}
+export function isSelectElement(el) {
+ return el.type === TYPE.select;
+}
+export function isPluralElement(el) {
+ return el.type === TYPE.plural;
+}
+export function isPoundElement(el) {
+ return el.type === TYPE.pound;
+}
+export function isTagElement(el) {
+ return el.type === TYPE.tag;
+}
+export function isNumberSkeleton(el) {
+ return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);
+}
+export function isDateTimeSkeleton(el) {
+ return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);
+}
+export function createLiteralElement(value) {
+ return {
+ type: TYPE.literal,
+ value: value,
+ };
+}
+export function createNumberElement(value, style) {
+ return {
+ type: TYPE.number,
+ value: value,
+ style: style,
+ };
+}
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/manipulator.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/manipulator.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..68f2dae9c735e4660e9f4f3bbb274a66ceb5eeeb
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/manipulator.d.ts
@@ -0,0 +1,14 @@
+import { MessageFormatElement } from './types';
+/**
+ * Hoist all selectors to the beginning of the AST & flatten the
+ * resulting options. E.g:
+ * "I have {count, plural, one{a dog} other{many dogs}}"
+ * becomes "{count, plural, one{I have a dog} other{I have many dogs}}".
+ * If there are multiple selectors, the order of which one is hoisted 1st
+ * is non-deterministic.
+ * The goal is to provide as many full sentences as possible since fragmented
+ * sentences are not translator-friendly
+ * @param ast AST
+ */
+export declare function hoistSelectors(ast: MessageFormatElement[]): MessageFormatElement[];
+//# sourceMappingURL=manipulator.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/manipulator.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/manipulator.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..d9d1f78dd6b7c3b05d8aee57d0a3a7bedaaa2814
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/manipulator.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"manipulator.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/manipulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,oBAAoB,EAErB,MAAM,SAAS,CAAA;AAkBhB;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,oBAAoB,EAAE,GAC1B,oBAAoB,EAAE,CAyBxB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/manipulator.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/manipulator.js
new file mode 100644
index 0000000000000000000000000000000000000000..51cccbbe54cd35fece39badd50a8523985a7d2dc
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/manipulator.js
@@ -0,0 +1,56 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.hoistSelectors = void 0;
+var tslib_1 = require("tslib");
+var types_1 = require("./types");
+function cloneDeep(obj) {
+ if (Array.isArray(obj)) {
+ // @ts-expect-error meh
+ return (0, tslib_1.__spreadArray)([], obj.map(cloneDeep), true);
+ }
+ if (typeof obj === 'object') {
+ // @ts-expect-error meh
+ return Object.keys(obj).reduce(function (cloned, k) {
+ // @ts-expect-error meh
+ cloned[k] = cloneDeep(obj[k]);
+ return cloned;
+ }, {});
+ }
+ return obj;
+}
+/**
+ * Hoist all selectors to the beginning of the AST & flatten the
+ * resulting options. E.g:
+ * "I have {count, plural, one{a dog} other{many dogs}}"
+ * becomes "{count, plural, one{I have a dog} other{I have many dogs}}".
+ * If there are multiple selectors, the order of which one is hoisted 1st
+ * is non-deterministic.
+ * The goal is to provide as many full sentences as possible since fragmented
+ * sentences are not translator-friendly
+ * @param ast AST
+ */
+function hoistSelectors(ast) {
+ var _loop_1 = function (i) {
+ var el = ast[i];
+ if ((0, types_1.isPluralElement)(el) || (0, types_1.isSelectElement)(el)) {
+ // pull this out of the ast and move it to the top
+ var cloned = cloneDeep(el);
+ var options_1 = cloned.options;
+ cloned.options = Object.keys(options_1).reduce(function (all, k) {
+ var newValue = hoistSelectors((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], ast.slice(0, i), true), options_1[k].value, true), ast.slice(i + 1), true));
+ all[k] = {
+ value: newValue,
+ };
+ return all;
+ }, {});
+ return { value: [cloned] };
+ }
+ };
+ for (var i = 0; i < ast.length; i++) {
+ var state_1 = _loop_1(i);
+ if (typeof state_1 === "object")
+ return state_1.value;
+ }
+ return ast;
+}
+exports.hoistSelectors = hoistSelectors;
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/no-parser.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/no-parser.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..66fce3657a0103137a6e11ab329a226d6e5a1d44
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/no-parser.d.ts
@@ -0,0 +1,3 @@
+export declare function parse(): void;
+export * from './types';
+//# sourceMappingURL=no-parser.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/no-parser.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/no-parser.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..def8f0314f9f4e007287dedae538085183d7544e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/no-parser.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"no-parser.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/no-parser.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,SAIpB;AACD,cAAc,SAAS,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/no-parser.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/no-parser.js
new file mode 100644
index 0000000000000000000000000000000000000000..0475fba390e59160828d19a30a9e6c071311fefd
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/no-parser.js
@@ -0,0 +1,9 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parse = void 0;
+var tslib_1 = require("tslib");
+function parse() {
+ throw new Error("You're trying to format an uncompiled message with react-intl without parser, please import from 'react-int' instead");
+}
+exports.parse = parse;
+(0, tslib_1.__exportStar)(require("./types"), exports);
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/package.json b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..fd5b88b1cdd67908cbbf52598d05dbfdd3a17f71
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "@formatjs/icu-messageformat-parser",
+ "version": "2.1.0",
+ "main": "index.js",
+ "module": "lib/index.js",
+ "types": "index.d.ts",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/formatjs/formatjs.git",
+ "directory": "packages/icu-messageformat-parser"
+ },
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.11.4",
+ "@formatjs/icu-skeleton-parser": "1.3.6",
+ "tslib": "^2.1.0"
+ }
+}
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/parser.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/parser.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..641853fa5b2ade229fde0a86ec105c0b3bc8cb1b
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/parser.d.ts
@@ -0,0 +1,145 @@
+import { ParserError } from './error';
+import { MessageFormatElement } from './types';
+export interface Position {
+ /** Offset in terms of UTF-16 *code unit*. */
+ offset: number;
+ line: number;
+ /** Column offset in terms of unicode *code point*. */
+ column: number;
+}
+export interface ParserOptions {
+ /**
+ * Whether to treat HTML/XML tags as string literal
+ * instead of parsing them as tag token.
+ * When this is false we only allow simple tags without
+ * any attributes
+ */
+ ignoreTag?: boolean;
+ /**
+ * Should `select`, `selectordinal`, and `plural` arguments always include
+ * the `other` case clause.
+ */
+ requiresOtherClause?: boolean;
+ /**
+ * Whether to parse number/datetime skeleton
+ * into Intl.NumberFormatOptions and Intl.DateTimeFormatOptions, respectively.
+ */
+ shouldParseSkeletons?: boolean;
+ /**
+ * Capture location info in AST
+ * Default is false
+ */
+ captureLocation?: boolean;
+ locale?: Intl.Locale;
+}
+export declare type Result = {
+ val: T;
+ err: null;
+} | {
+ val: null;
+ err: E;
+};
+export declare class Parser {
+ private message;
+ private position;
+ private locale?;
+ private ignoreTag;
+ private requiresOtherClause;
+ private shouldParseSkeletons?;
+ constructor(message: string, options?: ParserOptions);
+ parse(): Result;
+ private parseMessage;
+ /**
+ * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the
+ * [custom element name][] except that a dash is NOT always mandatory and uppercase letters
+ * are accepted:
+ *
+ * ```
+ * tag ::= "<" tagName (whitespace)* "/>" | "<" tagName (whitespace)* ">" message "" tagName (whitespace)* ">"
+ * tagName ::= [a-z] (PENChar)*
+ * PENChar ::=
+ * "-" | "." | [0-9] | "_" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |
+ * [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |
+ * [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
+ * ```
+ *
+ * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name
+ * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do
+ * since other tag-based engines like React allow it
+ */
+ private parseTag;
+ /**
+ * This method assumes that the caller has peeked ahead for the first tag character.
+ */
+ private parseTagName;
+ private parseLiteral;
+ tryParseLeftAngleBracket(): string | null;
+ /**
+ * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes
+ * a character that requires quoting (that is, "only where needed"), and works the same in
+ * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.
+ */
+ private tryParseQuote;
+ private tryParseUnquoted;
+ private parseArgument;
+ /**
+ * Advance the parser until the end of the identifier, if it is currently on
+ * an identifier character. Return an empty string otherwise.
+ */
+ private parseIdentifierIfPossible;
+ private parseArgumentOptions;
+ private tryParseArgumentClose;
+ /**
+ * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659
+ */
+ private parseSimpleArgStyleIfPossible;
+ private parseNumberSkeletonFromString;
+ /**
+ * @param nesting_level The current nesting level of messages.
+ * This can be positive when parsing message fragment in select or plural argument options.
+ * @param parent_arg_type The parent argument's type.
+ * @param parsed_first_identifier If provided, this is the first identifier-like selector of
+ * the argument. It is a by-product of a previous parsing attempt.
+ * @param expecting_close_tag If true, this message is directly or indirectly nested inside
+ * between a pair of opening and closing tags. The nested message will not parse beyond
+ * the closing tag boundary.
+ */
+ private tryParsePluralOrSelectOptions;
+ private tryParseDecimalInteger;
+ private offset;
+ private isEOF;
+ private clonePosition;
+ /**
+ * Return the code point at the current position of the parser.
+ * Throws if the index is out of bound.
+ */
+ private char;
+ private error;
+ /** Bump the parser to the next UTF-16 code unit. */
+ private bump;
+ /**
+ * If the substring starting at the current position of the parser has
+ * the given prefix, then bump the parser to the character immediately
+ * following the prefix and return true. Otherwise, don't bump the parser
+ * and return false.
+ */
+ private bumpIf;
+ /**
+ * Bump the parser until the pattern character is found and return `true`.
+ * Otherwise bump to the end of the file and return `false`.
+ */
+ private bumpUntil;
+ /**
+ * Bump the parser to the target offset.
+ * If target offset is beyond the end of the input, bump the parser to the end of the input.
+ */
+ private bumpTo;
+ /** advance the parser through all whitespace to the next non-whitespace code unit. */
+ private bumpSpace;
+ /**
+ * Peek at the *next* Unicode codepoint in the input without advancing the parser.
+ * If the input has been exhausted, then this returns null.
+ */
+ private peek;
+}
+//# sourceMappingURL=parser.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/parser.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/parser.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..b6a7ce8945202a40d520fc7eb50761c000d70a60
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/parser.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAC,MAAM,SAAS,CAAA;AAC9C,OAAO,EAIL,oBAAoB,EAMrB,MAAM,SAAS,CAAA;AAiBhB,MAAM,WAAW,QAAQ;IACvB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;CACrB;AAED,oBAAY,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI;IAAC,GAAG,EAAE,CAAC,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAC,GAAG;IAAC,GAAG,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,CAAC,CAAA;CAAC,CAAA;AA+KpE,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAa;IAE5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,oBAAoB,CAAC,CAAS;gBAE1B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;IASxD,KAAK,IAAI,MAAM,CAAC,oBAAoB,EAAE,EAAE,WAAW,CAAC;IAOpD,OAAO,CAAC,YAAY;IA6DpB;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,QAAQ;IAkFhB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,YAAY;IAuCpB,wBAAwB,IAAI,MAAM,GAAG,IAAI;IAczC;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAsDrB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,aAAa;IAsFrB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,oBAAoB;IAyO5B,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAiDrC,OAAO,CAAC,6BAA6B;IAwBrC;;;;;;;;;OASG;IACH,OAAO,CAAC,6BAA6B;IA6GrC,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,KAAK;IAcb,oDAAoD;IACpD,OAAO,CAAC,IAAI;IAgBZ;;;;;OAKG;IACH,OAAO,CAAC,MAAM;IAUd;;;OAGG;IACH,OAAO,CAAC,SAAS;IAYjB;;;OAGG;IACH,OAAO,CAAC,MAAM;IA0Bd,sFAAsF;IACtF,OAAO,CAAC,SAAS;IAMjB;;;OAGG;IACH,OAAO,CAAC,IAAI;CASb"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/parser.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/parser.js
new file mode 100644
index 0000000000000000000000000000000000000000..3973ac0525bdda4668dce981943804d958949ada
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/parser.js
@@ -0,0 +1,1279 @@
+"use strict";
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Parser = void 0;
+var tslib_1 = require("tslib");
+var error_1 = require("./error");
+var types_1 = require("./types");
+var regex_generated_1 = require("./regex.generated");
+var icu_skeleton_parser_1 = require("@formatjs/icu-skeleton-parser");
+var date_time_pattern_generator_1 = require("./date-time-pattern-generator");
+var SPACE_SEPARATOR_START_REGEX = new RegExp("^".concat(regex_generated_1.SPACE_SEPARATOR_REGEX.source, "*"));
+var SPACE_SEPARATOR_END_REGEX = new RegExp("".concat(regex_generated_1.SPACE_SEPARATOR_REGEX.source, "*$"));
+function createLocation(start, end) {
+ return { start: start, end: end };
+}
+// #region Ponyfills
+// Consolidate these variables up top for easier toggling during debugging
+var hasNativeStartsWith = !!String.prototype.startsWith;
+var hasNativeFromCodePoint = !!String.fromCodePoint;
+var hasNativeFromEntries = !!Object.fromEntries;
+var hasNativeCodePointAt = !!String.prototype.codePointAt;
+var hasTrimStart = !!String.prototype.trimStart;
+var hasTrimEnd = !!String.prototype.trimEnd;
+var hasNativeIsSafeInteger = !!Number.isSafeInteger;
+var isSafeInteger = hasNativeIsSafeInteger
+ ? Number.isSafeInteger
+ : function (n) {
+ return (typeof n === 'number' &&
+ isFinite(n) &&
+ Math.floor(n) === n &&
+ Math.abs(n) <= 0x1fffffffffffff);
+ };
+// IE11 does not support y and u.
+var REGEX_SUPPORTS_U_AND_Y = true;
+try {
+ var re = RE('([^\\p{White_Space}\\p{Pattern_Syntax}]*)', 'yu');
+ /**
+ * legacy Edge or Xbox One browser
+ * Unicode flag support: supported
+ * Pattern_Syntax support: not supported
+ * See https://github.com/formatjs/formatjs/issues/2822
+ */
+ REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a';
+}
+catch (_) {
+ REGEX_SUPPORTS_U_AND_Y = false;
+}
+var startsWith = hasNativeStartsWith
+ ? // Native
+ function startsWith(s, search, position) {
+ return s.startsWith(search, position);
+ }
+ : // For IE11
+ function startsWith(s, search, position) {
+ return s.slice(position, position + search.length) === search;
+ };
+var fromCodePoint = hasNativeFromCodePoint
+ ? String.fromCodePoint
+ : // IE11
+ function fromCodePoint() {
+ var codePoints = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ codePoints[_i] = arguments[_i];
+ }
+ var elements = '';
+ var length = codePoints.length;
+ var i = 0;
+ var code;
+ while (length > i) {
+ code = codePoints[i++];
+ if (code > 0x10ffff)
+ throw RangeError(code + ' is not a valid code point');
+ elements +=
+ code < 0x10000
+ ? String.fromCharCode(code)
+ : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00);
+ }
+ return elements;
+ };
+var fromEntries =
+// native
+hasNativeFromEntries
+ ? Object.fromEntries
+ : // Ponyfill
+ function fromEntries(entries) {
+ var obj = {};
+ for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
+ var _a = entries_1[_i], k = _a[0], v = _a[1];
+ obj[k] = v;
+ }
+ return obj;
+ };
+var codePointAt = hasNativeCodePointAt
+ ? // Native
+ function codePointAt(s, index) {
+ return s.codePointAt(index);
+ }
+ : // IE 11
+ function codePointAt(s, index) {
+ var size = s.length;
+ if (index < 0 || index >= size) {
+ return undefined;
+ }
+ var first = s.charCodeAt(index);
+ var second;
+ return first < 0xd800 ||
+ first > 0xdbff ||
+ index + 1 === size ||
+ (second = s.charCodeAt(index + 1)) < 0xdc00 ||
+ second > 0xdfff
+ ? first
+ : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;
+ };
+var trimStart = hasTrimStart
+ ? // Native
+ function trimStart(s) {
+ return s.trimStart();
+ }
+ : // Ponyfill
+ function trimStart(s) {
+ return s.replace(SPACE_SEPARATOR_START_REGEX, '');
+ };
+var trimEnd = hasTrimEnd
+ ? // Native
+ function trimEnd(s) {
+ return s.trimEnd();
+ }
+ : // Ponyfill
+ function trimEnd(s) {
+ return s.replace(SPACE_SEPARATOR_END_REGEX, '');
+ };
+// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11.
+function RE(s, flag) {
+ return new RegExp(s, flag);
+}
+// #endregion
+var matchIdentifierAtIndex;
+if (REGEX_SUPPORTS_U_AND_Y) {
+ // Native
+ var IDENTIFIER_PREFIX_RE_1 = RE('([^\\p{White_Space}\\p{Pattern_Syntax}]*)', 'yu');
+ matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {
+ var _a;
+ IDENTIFIER_PREFIX_RE_1.lastIndex = index;
+ var match = IDENTIFIER_PREFIX_RE_1.exec(s);
+ return (_a = match[1]) !== null && _a !== void 0 ? _a : '';
+ };
+}
+else {
+ // IE11
+ matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {
+ var match = [];
+ while (true) {
+ var c = codePointAt(s, index);
+ if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) {
+ break;
+ }
+ match.push(c);
+ index += c >= 0x10000 ? 2 : 1;
+ }
+ return fromCodePoint.apply(void 0, match);
+ };
+}
+var Parser = /** @class */ (function () {
+ function Parser(message, options) {
+ if (options === void 0) { options = {}; }
+ this.message = message;
+ this.position = { offset: 0, line: 1, column: 1 };
+ this.ignoreTag = !!options.ignoreTag;
+ this.locale = options.locale;
+ this.requiresOtherClause = !!options.requiresOtherClause;
+ this.shouldParseSkeletons = !!options.shouldParseSkeletons;
+ }
+ Parser.prototype.parse = function () {
+ if (this.offset() !== 0) {
+ throw Error('parser can only be used once');
+ }
+ return this.parseMessage(0, '', false);
+ };
+ Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) {
+ var elements = [];
+ while (!this.isEOF()) {
+ var char = this.char();
+ if (char === 123 /* `{` */) {
+ var result = this.parseArgument(nestingLevel, expectingCloseTag);
+ if (result.err) {
+ return result;
+ }
+ elements.push(result.val);
+ }
+ else if (char === 125 /* `}` */ && nestingLevel > 0) {
+ break;
+ }
+ else if (char === 35 /* `#` */ &&
+ (parentArgType === 'plural' || parentArgType === 'selectordinal')) {
+ var position = this.clonePosition();
+ this.bump();
+ elements.push({
+ type: types_1.TYPE.pound,
+ location: createLocation(position, this.clonePosition()),
+ });
+ }
+ else if (char === 60 /* `<` */ &&
+ !this.ignoreTag &&
+ this.peek() === 47 // char code for '/'
+ ) {
+ if (expectingCloseTag) {
+ break;
+ }
+ else {
+ return this.error(error_1.ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));
+ }
+ }
+ else if (char === 60 /* `<` */ &&
+ !this.ignoreTag &&
+ _isAlpha(this.peek() || 0)) {
+ var result = this.parseTag(nestingLevel, parentArgType);
+ if (result.err) {
+ return result;
+ }
+ elements.push(result.val);
+ }
+ else {
+ var result = this.parseLiteral(nestingLevel, parentArgType);
+ if (result.err) {
+ return result;
+ }
+ elements.push(result.val);
+ }
+ }
+ return { val: elements, err: null };
+ };
+ /**
+ * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the
+ * [custom element name][] except that a dash is NOT always mandatory and uppercase letters
+ * are accepted:
+ *
+ * ```
+ * tag ::= "<" tagName (whitespace)* "/>" | "<" tagName (whitespace)* ">" message "" tagName (whitespace)* ">"
+ * tagName ::= [a-z] (PENChar)*
+ * PENChar ::=
+ * "-" | "." | [0-9] | "_" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |
+ * [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |
+ * [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
+ * ```
+ *
+ * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name
+ * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do
+ * since other tag-based engines like React allow it
+ */
+ Parser.prototype.parseTag = function (nestingLevel, parentArgType) {
+ var startPosition = this.clonePosition();
+ this.bump(); // `<`
+ var tagName = this.parseTagName();
+ this.bumpSpace();
+ if (this.bumpIf('/>')) {
+ // Self closing tag
+ return {
+ val: {
+ type: types_1.TYPE.literal,
+ value: "<".concat(tagName, "/>"),
+ location: createLocation(startPosition, this.clonePosition()),
+ },
+ err: null,
+ };
+ }
+ else if (this.bumpIf('>')) {
+ var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);
+ if (childrenResult.err) {
+ return childrenResult;
+ }
+ var children = childrenResult.val;
+ // Expecting a close tag
+ var endTagStartPosition = this.clonePosition();
+ if (this.bumpIf('')) {
+ if (this.isEOF() || !_isAlpha(this.char())) {
+ return this.error(error_1.ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));
+ }
+ var closingTagNameStartPosition = this.clonePosition();
+ var closingTagName = this.parseTagName();
+ if (tagName !== closingTagName) {
+ return this.error(error_1.ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(closingTagNameStartPosition, this.clonePosition()));
+ }
+ this.bumpSpace();
+ if (!this.bumpIf('>')) {
+ return this.error(error_1.ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));
+ }
+ return {
+ val: {
+ type: types_1.TYPE.tag,
+ value: tagName,
+ children: children,
+ location: createLocation(startPosition, this.clonePosition()),
+ },
+ err: null,
+ };
+ }
+ else {
+ return this.error(error_1.ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));
+ }
+ }
+ else {
+ return this.error(error_1.ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));
+ }
+ };
+ /**
+ * This method assumes that the caller has peeked ahead for the first tag character.
+ */
+ Parser.prototype.parseTagName = function () {
+ var startOffset = this.offset();
+ this.bump(); // the first tag name character
+ while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {
+ this.bump();
+ }
+ return this.message.slice(startOffset, this.offset());
+ };
+ Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) {
+ var start = this.clonePosition();
+ var value = '';
+ while (true) {
+ var parseQuoteResult = this.tryParseQuote(parentArgType);
+ if (parseQuoteResult) {
+ value += parseQuoteResult;
+ continue;
+ }
+ var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);
+ if (parseUnquotedResult) {
+ value += parseUnquotedResult;
+ continue;
+ }
+ var parseLeftAngleResult = this.tryParseLeftAngleBracket();
+ if (parseLeftAngleResult) {
+ value += parseLeftAngleResult;
+ continue;
+ }
+ break;
+ }
+ var location = createLocation(start, this.clonePosition());
+ return {
+ val: { type: types_1.TYPE.literal, value: value, location: location },
+ err: null,
+ };
+ };
+ Parser.prototype.tryParseLeftAngleBracket = function () {
+ if (!this.isEOF() &&
+ this.char() === 60 /* `<` */ &&
+ (this.ignoreTag ||
+ // If at the opening tag or closing tag position, bail.
+ !_isAlphaOrSlash(this.peek() || 0))) {
+ this.bump(); // `<`
+ return '<';
+ }
+ return null;
+ };
+ /**
+ * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes
+ * a character that requires quoting (that is, "only where needed"), and works the same in
+ * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.
+ */
+ Parser.prototype.tryParseQuote = function (parentArgType) {
+ if (this.isEOF() || this.char() !== 39 /* `'` */) {
+ return null;
+ }
+ // Parse escaped char following the apostrophe, or early return if there is no escaped char.
+ // Check if is valid escaped character
+ switch (this.peek()) {
+ case 39 /* `'` */:
+ // double quote, should return as a single quote.
+ this.bump();
+ this.bump();
+ return "'";
+ // '{', '<', '>', '}'
+ case 123:
+ case 60:
+ case 62:
+ case 125:
+ break;
+ case 35: // '#'
+ if (parentArgType === 'plural' || parentArgType === 'selectordinal') {
+ break;
+ }
+ return null;
+ default:
+ return null;
+ }
+ this.bump(); // apostrophe
+ var codePoints = [this.char()]; // escaped char
+ this.bump();
+ // read chars until the optional closing apostrophe is found
+ while (!this.isEOF()) {
+ var ch = this.char();
+ if (ch === 39 /* `'` */) {
+ if (this.peek() === 39 /* `'` */) {
+ codePoints.push(39);
+ // Bump one more time because we need to skip 2 characters.
+ this.bump();
+ }
+ else {
+ // Optional closing apostrophe.
+ this.bump();
+ break;
+ }
+ }
+ else {
+ codePoints.push(ch);
+ }
+ this.bump();
+ }
+ return fromCodePoint.apply(void 0, codePoints);
+ };
+ Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) {
+ if (this.isEOF()) {
+ return null;
+ }
+ var ch = this.char();
+ if (ch === 60 /* `<` */ ||
+ ch === 123 /* `{` */ ||
+ (ch === 35 /* `#` */ &&
+ (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||
+ (ch === 125 /* `}` */ && nestingLevel > 0)) {
+ return null;
+ }
+ else {
+ this.bump();
+ return fromCodePoint(ch);
+ }
+ };
+ Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) {
+ var openingBracePosition = this.clonePosition();
+ this.bump(); // `{`
+ this.bumpSpace();
+ if (this.isEOF()) {
+ return this.error(error_1.ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ if (this.char() === 125 /* `}` */) {
+ this.bump();
+ return this.error(error_1.ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ // argument name
+ var value = this.parseIdentifierIfPossible().value;
+ if (!value) {
+ return this.error(error_1.ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ this.bumpSpace();
+ if (this.isEOF()) {
+ return this.error(error_1.ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ switch (this.char()) {
+ // Simple argument: `{name}`
+ case 125 /* `}` */: {
+ this.bump(); // `}`
+ return {
+ val: {
+ type: types_1.TYPE.argument,
+ // value does not include the opening and closing braces.
+ value: value,
+ location: createLocation(openingBracePosition, this.clonePosition()),
+ },
+ err: null,
+ };
+ }
+ // Argument with options: `{name, format, ...}`
+ case 44 /* `,` */: {
+ this.bump(); // `,`
+ this.bumpSpace();
+ if (this.isEOF()) {
+ return this.error(error_1.ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);
+ }
+ default:
+ return this.error(error_1.ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ };
+ /**
+ * Advance the parser until the end of the identifier, if it is currently on
+ * an identifier character. Return an empty string otherwise.
+ */
+ Parser.prototype.parseIdentifierIfPossible = function () {
+ var startingPosition = this.clonePosition();
+ var startOffset = this.offset();
+ var value = matchIdentifierAtIndex(this.message, startOffset);
+ var endOffset = startOffset + value.length;
+ this.bumpTo(endOffset);
+ var endPosition = this.clonePosition();
+ var location = createLocation(startingPosition, endPosition);
+ return { value: value, location: location };
+ };
+ Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) {
+ var _a;
+ // Parse this range:
+ // {name, type, style}
+ // ^---^
+ var typeStartPosition = this.clonePosition();
+ var argType = this.parseIdentifierIfPossible().value;
+ var typeEndPosition = this.clonePosition();
+ switch (argType) {
+ case '':
+ // Expecting a style string number, date, time, plural, selectordinal, or select.
+ return this.error(error_1.ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));
+ case 'number':
+ case 'date':
+ case 'time': {
+ // Parse this range:
+ // {name, number, style}
+ // ^-------^
+ this.bumpSpace();
+ var styleAndLocation = null;
+ if (this.bumpIf(',')) {
+ this.bumpSpace();
+ var styleStartPosition = this.clonePosition();
+ var result = this.parseSimpleArgStyleIfPossible();
+ if (result.err) {
+ return result;
+ }
+ var style = trimEnd(result.val);
+ if (style.length === 0) {
+ return this.error(error_1.ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));
+ }
+ var styleLocation = createLocation(styleStartPosition, this.clonePosition());
+ styleAndLocation = { style: style, styleLocation: styleLocation };
+ }
+ var argCloseResult = this.tryParseArgumentClose(openingBracePosition);
+ if (argCloseResult.err) {
+ return argCloseResult;
+ }
+ var location_1 = createLocation(openingBracePosition, this.clonePosition());
+ // Extract style or skeleton
+ if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) {
+ // Skeleton starts with `::`.
+ var skeleton = trimStart(styleAndLocation.style.slice(2));
+ if (argType === 'number') {
+ var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);
+ if (result.err) {
+ return result;
+ }
+ return {
+ val: { type: types_1.TYPE.number, value: value, location: location_1, style: result.val },
+ err: null,
+ };
+ }
+ else {
+ if (skeleton.length === 0) {
+ return this.error(error_1.ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1);
+ }
+ var dateTimePattern = skeleton;
+ // Get "best match" pattern only if locale is passed, if not, let it
+ // pass as-is where `parseDateTimeSkeleton()` will throw an error
+ // for unsupported patterns.
+ if (this.locale) {
+ dateTimePattern = (0, date_time_pattern_generator_1.getBestPattern)(skeleton, this.locale);
+ }
+ var style = {
+ type: types_1.SKELETON_TYPE.dateTime,
+ pattern: dateTimePattern,
+ location: styleAndLocation.styleLocation,
+ parsedOptions: this.shouldParseSkeletons
+ ? (0, icu_skeleton_parser_1.parseDateTimeSkeleton)(dateTimePattern)
+ : {},
+ };
+ var type = argType === 'date' ? types_1.TYPE.date : types_1.TYPE.time;
+ return {
+ val: { type: type, value: value, location: location_1, style: style },
+ err: null,
+ };
+ }
+ }
+ // Regular style or no style.
+ return {
+ val: {
+ type: argType === 'number'
+ ? types_1.TYPE.number
+ : argType === 'date'
+ ? types_1.TYPE.date
+ : types_1.TYPE.time,
+ value: value,
+ location: location_1,
+ style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null,
+ },
+ err: null,
+ };
+ }
+ case 'plural':
+ case 'selectordinal':
+ case 'select': {
+ // Parse this range:
+ // {name, plural, options}
+ // ^---------^
+ var typeEndPosition_1 = this.clonePosition();
+ this.bumpSpace();
+ if (!this.bumpIf(',')) {
+ return this.error(error_1.ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, (0, tslib_1.__assign)({}, typeEndPosition_1)));
+ }
+ this.bumpSpace();
+ // Parse offset:
+ // {name, plural, offset:1, options}
+ // ^-----^
+ //
+ // or the first option:
+ //
+ // {name, plural, one {...} other {...}}
+ // ^--^
+ var identifierAndLocation = this.parseIdentifierIfPossible();
+ var pluralOffset = 0;
+ if (argType !== 'select' && identifierAndLocation.value === 'offset') {
+ if (!this.bumpIf(':')) {
+ return this.error(error_1.ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));
+ }
+ this.bumpSpace();
+ var result = this.tryParseDecimalInteger(error_1.ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, error_1.ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);
+ if (result.err) {
+ return result;
+ }
+ // Parse another identifier for option parsing
+ this.bumpSpace();
+ identifierAndLocation = this.parseIdentifierIfPossible();
+ pluralOffset = result.val;
+ }
+ var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);
+ if (optionsResult.err) {
+ return optionsResult;
+ }
+ var argCloseResult = this.tryParseArgumentClose(openingBracePosition);
+ if (argCloseResult.err) {
+ return argCloseResult;
+ }
+ var location_2 = createLocation(openingBracePosition, this.clonePosition());
+ if (argType === 'select') {
+ return {
+ val: {
+ type: types_1.TYPE.select,
+ value: value,
+ options: fromEntries(optionsResult.val),
+ location: location_2,
+ },
+ err: null,
+ };
+ }
+ else {
+ return {
+ val: {
+ type: types_1.TYPE.plural,
+ value: value,
+ options: fromEntries(optionsResult.val),
+ offset: pluralOffset,
+ pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',
+ location: location_2,
+ },
+ err: null,
+ };
+ }
+ }
+ default:
+ return this.error(error_1.ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));
+ }
+ };
+ Parser.prototype.tryParseArgumentClose = function (openingBracePosition) {
+ // Parse: {value, number, ::currency/GBP }
+ //
+ if (this.isEOF() || this.char() !== 125 /* `}` */) {
+ return this.error(error_1.ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));
+ }
+ this.bump(); // `}`
+ return { val: true, err: null };
+ };
+ /**
+ * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659
+ */
+ Parser.prototype.parseSimpleArgStyleIfPossible = function () {
+ var nestedBraces = 0;
+ var startPosition = this.clonePosition();
+ while (!this.isEOF()) {
+ var ch = this.char();
+ switch (ch) {
+ case 39 /* `'` */: {
+ // Treat apostrophe as quoting but include it in the style part.
+ // Find the end of the quoted literal text.
+ this.bump();
+ var apostrophePosition = this.clonePosition();
+ if (!this.bumpUntil("'")) {
+ return this.error(error_1.ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));
+ }
+ this.bump();
+ break;
+ }
+ case 123 /* `{` */: {
+ nestedBraces += 1;
+ this.bump();
+ break;
+ }
+ case 125 /* `}` */: {
+ if (nestedBraces > 0) {
+ nestedBraces -= 1;
+ }
+ else {
+ return {
+ val: this.message.slice(startPosition.offset, this.offset()),
+ err: null,
+ };
+ }
+ break;
+ }
+ default:
+ this.bump();
+ break;
+ }
+ }
+ return {
+ val: this.message.slice(startPosition.offset, this.offset()),
+ err: null,
+ };
+ };
+ Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) {
+ var tokens = [];
+ try {
+ tokens = (0, icu_skeleton_parser_1.parseNumberSkeletonFromString)(skeleton);
+ }
+ catch (e) {
+ return this.error(error_1.ErrorKind.INVALID_NUMBER_SKELETON, location);
+ }
+ return {
+ val: {
+ type: types_1.SKELETON_TYPE.number,
+ tokens: tokens,
+ location: location,
+ parsedOptions: this.shouldParseSkeletons
+ ? (0, icu_skeleton_parser_1.parseNumberSkeleton)(tokens)
+ : {},
+ },
+ err: null,
+ };
+ };
+ /**
+ * @param nesting_level The current nesting level of messages.
+ * This can be positive when parsing message fragment in select or plural argument options.
+ * @param parent_arg_type The parent argument's type.
+ * @param parsed_first_identifier If provided, this is the first identifier-like selector of
+ * the argument. It is a by-product of a previous parsing attempt.
+ * @param expecting_close_tag If true, this message is directly or indirectly nested inside
+ * between a pair of opening and closing tags. The nested message will not parse beyond
+ * the closing tag boundary.
+ */
+ Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {
+ var _a;
+ var hasOtherClause = false;
+ var options = [];
+ var parsedSelectors = new Set();
+ var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location;
+ // Parse:
+ // one {one apple}
+ // ^--^
+ while (true) {
+ if (selector.length === 0) {
+ var startPosition = this.clonePosition();
+ if (parentArgType !== 'select' && this.bumpIf('=')) {
+ // Try parse `={number}` selector
+ var result = this.tryParseDecimalInteger(error_1.ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, error_1.ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);
+ if (result.err) {
+ return result;
+ }
+ selectorLocation = createLocation(startPosition, this.clonePosition());
+ selector = this.message.slice(startPosition.offset, this.offset());
+ }
+ else {
+ break;
+ }
+ }
+ // Duplicate selector clauses
+ if (parsedSelectors.has(selector)) {
+ return this.error(parentArgType === 'select'
+ ? error_1.ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR
+ : error_1.ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);
+ }
+ if (selector === 'other') {
+ hasOtherClause = true;
+ }
+ // Parse:
+ // one {one apple}
+ // ^----------^
+ this.bumpSpace();
+ var openingBracePosition = this.clonePosition();
+ if (!this.bumpIf('{')) {
+ return this.error(parentArgType === 'select'
+ ? error_1.ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT
+ : error_1.ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));
+ }
+ var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);
+ if (fragmentResult.err) {
+ return fragmentResult;
+ }
+ var argCloseResult = this.tryParseArgumentClose(openingBracePosition);
+ if (argCloseResult.err) {
+ return argCloseResult;
+ }
+ options.push([
+ selector,
+ {
+ value: fragmentResult.val,
+ location: createLocation(openingBracePosition, this.clonePosition()),
+ },
+ ]);
+ // Keep track of the existing selectors
+ parsedSelectors.add(selector);
+ // Prep next selector clause.
+ this.bumpSpace();
+ (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location);
+ }
+ if (options.length === 0) {
+ return this.error(parentArgType === 'select'
+ ? error_1.ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR
+ : error_1.ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));
+ }
+ if (this.requiresOtherClause && !hasOtherClause) {
+ return this.error(error_1.ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));
+ }
+ return { val: options, err: null };
+ };
+ Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) {
+ var sign = 1;
+ var startingPosition = this.clonePosition();
+ if (this.bumpIf('+')) {
+ }
+ else if (this.bumpIf('-')) {
+ sign = -1;
+ }
+ var hasDigits = false;
+ var decimal = 0;
+ while (!this.isEOF()) {
+ var ch = this.char();
+ if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {
+ hasDigits = true;
+ decimal = decimal * 10 + (ch - 48);
+ this.bump();
+ }
+ else {
+ break;
+ }
+ }
+ var location = createLocation(startingPosition, this.clonePosition());
+ if (!hasDigits) {
+ return this.error(expectNumberError, location);
+ }
+ decimal *= sign;
+ if (!isSafeInteger(decimal)) {
+ return this.error(invalidNumberError, location);
+ }
+ return { val: decimal, err: null };
+ };
+ Parser.prototype.offset = function () {
+ return this.position.offset;
+ };
+ Parser.prototype.isEOF = function () {
+ return this.offset() === this.message.length;
+ };
+ Parser.prototype.clonePosition = function () {
+ // This is much faster than `Object.assign` or spread.
+ return {
+ offset: this.position.offset,
+ line: this.position.line,
+ column: this.position.column,
+ };
+ };
+ /**
+ * Return the code point at the current position of the parser.
+ * Throws if the index is out of bound.
+ */
+ Parser.prototype.char = function () {
+ var offset = this.position.offset;
+ if (offset >= this.message.length) {
+ throw Error('out of bound');
+ }
+ var code = codePointAt(this.message, offset);
+ if (code === undefined) {
+ throw Error("Offset ".concat(offset, " is at invalid UTF-16 code unit boundary"));
+ }
+ return code;
+ };
+ Parser.prototype.error = function (kind, location) {
+ return {
+ val: null,
+ err: {
+ kind: kind,
+ message: this.message,
+ location: location,
+ },
+ };
+ };
+ /** Bump the parser to the next UTF-16 code unit. */
+ Parser.prototype.bump = function () {
+ if (this.isEOF()) {
+ return;
+ }
+ var code = this.char();
+ if (code === 10 /* '\n' */) {
+ this.position.line += 1;
+ this.position.column = 1;
+ this.position.offset += 1;
+ }
+ else {
+ this.position.column += 1;
+ // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.
+ this.position.offset += code < 0x10000 ? 1 : 2;
+ }
+ };
+ /**
+ * If the substring starting at the current position of the parser has
+ * the given prefix, then bump the parser to the character immediately
+ * following the prefix and return true. Otherwise, don't bump the parser
+ * and return false.
+ */
+ Parser.prototype.bumpIf = function (prefix) {
+ if (startsWith(this.message, prefix, this.offset())) {
+ for (var i = 0; i < prefix.length; i++) {
+ this.bump();
+ }
+ return true;
+ }
+ return false;
+ };
+ /**
+ * Bump the parser until the pattern character is found and return `true`.
+ * Otherwise bump to the end of the file and return `false`.
+ */
+ Parser.prototype.bumpUntil = function (pattern) {
+ var currentOffset = this.offset();
+ var index = this.message.indexOf(pattern, currentOffset);
+ if (index >= 0) {
+ this.bumpTo(index);
+ return true;
+ }
+ else {
+ this.bumpTo(this.message.length);
+ return false;
+ }
+ };
+ /**
+ * Bump the parser to the target offset.
+ * If target offset is beyond the end of the input, bump the parser to the end of the input.
+ */
+ Parser.prototype.bumpTo = function (targetOffset) {
+ if (this.offset() > targetOffset) {
+ throw Error("targetOffset ".concat(targetOffset, " must be greater than or equal to the current offset ").concat(this.offset()));
+ }
+ targetOffset = Math.min(targetOffset, this.message.length);
+ while (true) {
+ var offset = this.offset();
+ if (offset === targetOffset) {
+ break;
+ }
+ if (offset > targetOffset) {
+ throw Error("targetOffset ".concat(targetOffset, " is at invalid UTF-16 code unit boundary"));
+ }
+ this.bump();
+ if (this.isEOF()) {
+ break;
+ }
+ }
+ };
+ /** advance the parser through all whitespace to the next non-whitespace code unit. */
+ Parser.prototype.bumpSpace = function () {
+ while (!this.isEOF() && _isWhiteSpace(this.char())) {
+ this.bump();
+ }
+ };
+ /**
+ * Peek at the *next* Unicode codepoint in the input without advancing the parser.
+ * If the input has been exhausted, then this returns null.
+ */
+ Parser.prototype.peek = function () {
+ if (this.isEOF()) {
+ return null;
+ }
+ var code = this.char();
+ var offset = this.offset();
+ var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1));
+ return nextCode !== null && nextCode !== void 0 ? nextCode : null;
+ };
+ return Parser;
+}());
+exports.Parser = Parser;
+/**
+ * This check if codepoint is alphabet (lower & uppercase)
+ * @param codepoint
+ * @returns
+ */
+function _isAlpha(codepoint) {
+ return ((codepoint >= 97 && codepoint <= 122) ||
+ (codepoint >= 65 && codepoint <= 90));
+}
+function _isAlphaOrSlash(codepoint) {
+ return _isAlpha(codepoint) || codepoint === 47; /* '/' */
+}
+/** See `parseTag` function docs. */
+function _isPotentialElementNameChar(c) {
+ return (c === 45 /* '-' */ ||
+ c === 46 /* '.' */ ||
+ (c >= 48 && c <= 57) /* 0..9 */ ||
+ c === 95 /* '_' */ ||
+ (c >= 97 && c <= 122) /** a..z */ ||
+ (c >= 65 && c <= 90) /* A..Z */ ||
+ c == 0xb7 ||
+ (c >= 0xc0 && c <= 0xd6) ||
+ (c >= 0xd8 && c <= 0xf6) ||
+ (c >= 0xf8 && c <= 0x37d) ||
+ (c >= 0x37f && c <= 0x1fff) ||
+ (c >= 0x200c && c <= 0x200d) ||
+ (c >= 0x203f && c <= 0x2040) ||
+ (c >= 0x2070 && c <= 0x218f) ||
+ (c >= 0x2c00 && c <= 0x2fef) ||
+ (c >= 0x3001 && c <= 0xd7ff) ||
+ (c >= 0xf900 && c <= 0xfdcf) ||
+ (c >= 0xfdf0 && c <= 0xfffd) ||
+ (c >= 0x10000 && c <= 0xeffff));
+}
+/**
+ * Code point equivalent of regex `\p{White_Space}`.
+ * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt
+ */
+function _isWhiteSpace(c) {
+ return ((c >= 0x0009 && c <= 0x000d) ||
+ c === 0x0020 ||
+ c === 0x0085 ||
+ (c >= 0x200e && c <= 0x200f) ||
+ c === 0x2028 ||
+ c === 0x2029);
+}
+/**
+ * Code point equivalent of regex `\p{Pattern_Syntax}`.
+ * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt
+ */
+function _isPatternSyntax(c) {
+ return ((c >= 0x0021 && c <= 0x0023) ||
+ c === 0x0024 ||
+ (c >= 0x0025 && c <= 0x0027) ||
+ c === 0x0028 ||
+ c === 0x0029 ||
+ c === 0x002a ||
+ c === 0x002b ||
+ c === 0x002c ||
+ c === 0x002d ||
+ (c >= 0x002e && c <= 0x002f) ||
+ (c >= 0x003a && c <= 0x003b) ||
+ (c >= 0x003c && c <= 0x003e) ||
+ (c >= 0x003f && c <= 0x0040) ||
+ c === 0x005b ||
+ c === 0x005c ||
+ c === 0x005d ||
+ c === 0x005e ||
+ c === 0x0060 ||
+ c === 0x007b ||
+ c === 0x007c ||
+ c === 0x007d ||
+ c === 0x007e ||
+ c === 0x00a1 ||
+ (c >= 0x00a2 && c <= 0x00a5) ||
+ c === 0x00a6 ||
+ c === 0x00a7 ||
+ c === 0x00a9 ||
+ c === 0x00ab ||
+ c === 0x00ac ||
+ c === 0x00ae ||
+ c === 0x00b0 ||
+ c === 0x00b1 ||
+ c === 0x00b6 ||
+ c === 0x00bb ||
+ c === 0x00bf ||
+ c === 0x00d7 ||
+ c === 0x00f7 ||
+ (c >= 0x2010 && c <= 0x2015) ||
+ (c >= 0x2016 && c <= 0x2017) ||
+ c === 0x2018 ||
+ c === 0x2019 ||
+ c === 0x201a ||
+ (c >= 0x201b && c <= 0x201c) ||
+ c === 0x201d ||
+ c === 0x201e ||
+ c === 0x201f ||
+ (c >= 0x2020 && c <= 0x2027) ||
+ (c >= 0x2030 && c <= 0x2038) ||
+ c === 0x2039 ||
+ c === 0x203a ||
+ (c >= 0x203b && c <= 0x203e) ||
+ (c >= 0x2041 && c <= 0x2043) ||
+ c === 0x2044 ||
+ c === 0x2045 ||
+ c === 0x2046 ||
+ (c >= 0x2047 && c <= 0x2051) ||
+ c === 0x2052 ||
+ c === 0x2053 ||
+ (c >= 0x2055 && c <= 0x205e) ||
+ (c >= 0x2190 && c <= 0x2194) ||
+ (c >= 0x2195 && c <= 0x2199) ||
+ (c >= 0x219a && c <= 0x219b) ||
+ (c >= 0x219c && c <= 0x219f) ||
+ c === 0x21a0 ||
+ (c >= 0x21a1 && c <= 0x21a2) ||
+ c === 0x21a3 ||
+ (c >= 0x21a4 && c <= 0x21a5) ||
+ c === 0x21a6 ||
+ (c >= 0x21a7 && c <= 0x21ad) ||
+ c === 0x21ae ||
+ (c >= 0x21af && c <= 0x21cd) ||
+ (c >= 0x21ce && c <= 0x21cf) ||
+ (c >= 0x21d0 && c <= 0x21d1) ||
+ c === 0x21d2 ||
+ c === 0x21d3 ||
+ c === 0x21d4 ||
+ (c >= 0x21d5 && c <= 0x21f3) ||
+ (c >= 0x21f4 && c <= 0x22ff) ||
+ (c >= 0x2300 && c <= 0x2307) ||
+ c === 0x2308 ||
+ c === 0x2309 ||
+ c === 0x230a ||
+ c === 0x230b ||
+ (c >= 0x230c && c <= 0x231f) ||
+ (c >= 0x2320 && c <= 0x2321) ||
+ (c >= 0x2322 && c <= 0x2328) ||
+ c === 0x2329 ||
+ c === 0x232a ||
+ (c >= 0x232b && c <= 0x237b) ||
+ c === 0x237c ||
+ (c >= 0x237d && c <= 0x239a) ||
+ (c >= 0x239b && c <= 0x23b3) ||
+ (c >= 0x23b4 && c <= 0x23db) ||
+ (c >= 0x23dc && c <= 0x23e1) ||
+ (c >= 0x23e2 && c <= 0x2426) ||
+ (c >= 0x2427 && c <= 0x243f) ||
+ (c >= 0x2440 && c <= 0x244a) ||
+ (c >= 0x244b && c <= 0x245f) ||
+ (c >= 0x2500 && c <= 0x25b6) ||
+ c === 0x25b7 ||
+ (c >= 0x25b8 && c <= 0x25c0) ||
+ c === 0x25c1 ||
+ (c >= 0x25c2 && c <= 0x25f7) ||
+ (c >= 0x25f8 && c <= 0x25ff) ||
+ (c >= 0x2600 && c <= 0x266e) ||
+ c === 0x266f ||
+ (c >= 0x2670 && c <= 0x2767) ||
+ c === 0x2768 ||
+ c === 0x2769 ||
+ c === 0x276a ||
+ c === 0x276b ||
+ c === 0x276c ||
+ c === 0x276d ||
+ c === 0x276e ||
+ c === 0x276f ||
+ c === 0x2770 ||
+ c === 0x2771 ||
+ c === 0x2772 ||
+ c === 0x2773 ||
+ c === 0x2774 ||
+ c === 0x2775 ||
+ (c >= 0x2794 && c <= 0x27bf) ||
+ (c >= 0x27c0 && c <= 0x27c4) ||
+ c === 0x27c5 ||
+ c === 0x27c6 ||
+ (c >= 0x27c7 && c <= 0x27e5) ||
+ c === 0x27e6 ||
+ c === 0x27e7 ||
+ c === 0x27e8 ||
+ c === 0x27e9 ||
+ c === 0x27ea ||
+ c === 0x27eb ||
+ c === 0x27ec ||
+ c === 0x27ed ||
+ c === 0x27ee ||
+ c === 0x27ef ||
+ (c >= 0x27f0 && c <= 0x27ff) ||
+ (c >= 0x2800 && c <= 0x28ff) ||
+ (c >= 0x2900 && c <= 0x2982) ||
+ c === 0x2983 ||
+ c === 0x2984 ||
+ c === 0x2985 ||
+ c === 0x2986 ||
+ c === 0x2987 ||
+ c === 0x2988 ||
+ c === 0x2989 ||
+ c === 0x298a ||
+ c === 0x298b ||
+ c === 0x298c ||
+ c === 0x298d ||
+ c === 0x298e ||
+ c === 0x298f ||
+ c === 0x2990 ||
+ c === 0x2991 ||
+ c === 0x2992 ||
+ c === 0x2993 ||
+ c === 0x2994 ||
+ c === 0x2995 ||
+ c === 0x2996 ||
+ c === 0x2997 ||
+ c === 0x2998 ||
+ (c >= 0x2999 && c <= 0x29d7) ||
+ c === 0x29d8 ||
+ c === 0x29d9 ||
+ c === 0x29da ||
+ c === 0x29db ||
+ (c >= 0x29dc && c <= 0x29fb) ||
+ c === 0x29fc ||
+ c === 0x29fd ||
+ (c >= 0x29fe && c <= 0x2aff) ||
+ (c >= 0x2b00 && c <= 0x2b2f) ||
+ (c >= 0x2b30 && c <= 0x2b44) ||
+ (c >= 0x2b45 && c <= 0x2b46) ||
+ (c >= 0x2b47 && c <= 0x2b4c) ||
+ (c >= 0x2b4d && c <= 0x2b73) ||
+ (c >= 0x2b74 && c <= 0x2b75) ||
+ (c >= 0x2b76 && c <= 0x2b95) ||
+ c === 0x2b96 ||
+ (c >= 0x2b97 && c <= 0x2bff) ||
+ (c >= 0x2e00 && c <= 0x2e01) ||
+ c === 0x2e02 ||
+ c === 0x2e03 ||
+ c === 0x2e04 ||
+ c === 0x2e05 ||
+ (c >= 0x2e06 && c <= 0x2e08) ||
+ c === 0x2e09 ||
+ c === 0x2e0a ||
+ c === 0x2e0b ||
+ c === 0x2e0c ||
+ c === 0x2e0d ||
+ (c >= 0x2e0e && c <= 0x2e16) ||
+ c === 0x2e17 ||
+ (c >= 0x2e18 && c <= 0x2e19) ||
+ c === 0x2e1a ||
+ c === 0x2e1b ||
+ c === 0x2e1c ||
+ c === 0x2e1d ||
+ (c >= 0x2e1e && c <= 0x2e1f) ||
+ c === 0x2e20 ||
+ c === 0x2e21 ||
+ c === 0x2e22 ||
+ c === 0x2e23 ||
+ c === 0x2e24 ||
+ c === 0x2e25 ||
+ c === 0x2e26 ||
+ c === 0x2e27 ||
+ c === 0x2e28 ||
+ c === 0x2e29 ||
+ (c >= 0x2e2a && c <= 0x2e2e) ||
+ c === 0x2e2f ||
+ (c >= 0x2e30 && c <= 0x2e39) ||
+ (c >= 0x2e3a && c <= 0x2e3b) ||
+ (c >= 0x2e3c && c <= 0x2e3f) ||
+ c === 0x2e40 ||
+ c === 0x2e41 ||
+ c === 0x2e42 ||
+ (c >= 0x2e43 && c <= 0x2e4f) ||
+ (c >= 0x2e50 && c <= 0x2e51) ||
+ c === 0x2e52 ||
+ (c >= 0x2e53 && c <= 0x2e7f) ||
+ (c >= 0x3001 && c <= 0x3003) ||
+ c === 0x3008 ||
+ c === 0x3009 ||
+ c === 0x300a ||
+ c === 0x300b ||
+ c === 0x300c ||
+ c === 0x300d ||
+ c === 0x300e ||
+ c === 0x300f ||
+ c === 0x3010 ||
+ c === 0x3011 ||
+ (c >= 0x3012 && c <= 0x3013) ||
+ c === 0x3014 ||
+ c === 0x3015 ||
+ c === 0x3016 ||
+ c === 0x3017 ||
+ c === 0x3018 ||
+ c === 0x3019 ||
+ c === 0x301a ||
+ c === 0x301b ||
+ c === 0x301c ||
+ c === 0x301d ||
+ (c >= 0x301e && c <= 0x301f) ||
+ c === 0x3020 ||
+ c === 0x3030 ||
+ c === 0xfd3e ||
+ c === 0xfd3f ||
+ (c >= 0xfe45 && c <= 0xfe46));
+}
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/printer.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/printer.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a16465c59902095f461174e4a5bdf09108872598
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/printer.d.ts
@@ -0,0 +1,5 @@
+import { MessageFormatElement, DateTimeSkeleton } from './types';
+export declare function printAST(ast: MessageFormatElement[]): string;
+export declare function doPrintAST(ast: MessageFormatElement[], isInPlural: boolean): string;
+export declare function printDateTimeSkeleton(style: DateTimeSkeleton): string;
+//# sourceMappingURL=printer.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/printer.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/printer.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..c90e599ec8797ff9cd98f36fbf2d0b7bff1cfa0c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/printer.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"printer.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/printer.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EAoBpB,gBAAgB,EAEjB,MAAM,SAAS,CAAA;AAEhB,wBAAgB,QAAQ,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAE5D;AAED,wBAAgB,UAAU,CACxB,GAAG,EAAE,oBAAoB,EAAE,EAC3B,UAAU,EAAE,OAAO,GAClB,MAAM,CA8BR;AA4CD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAErE"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/printer.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/printer.js
new file mode 100644
index 0000000000000000000000000000000000000000..8974b6feef3ac04c7764478639853a88bb1e8e9e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/printer.js
@@ -0,0 +1,97 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.printDateTimeSkeleton = exports.doPrintAST = exports.printAST = void 0;
+var tslib_1 = require("tslib");
+var types_1 = require("./types");
+function printAST(ast) {
+ return doPrintAST(ast, false);
+}
+exports.printAST = printAST;
+function doPrintAST(ast, isInPlural) {
+ var printedNodes = ast.map(function (el) {
+ if ((0, types_1.isLiteralElement)(el)) {
+ return printLiteralElement(el, isInPlural);
+ }
+ if ((0, types_1.isArgumentElement)(el)) {
+ return printArgumentElement(el);
+ }
+ if ((0, types_1.isDateElement)(el) || (0, types_1.isTimeElement)(el) || (0, types_1.isNumberElement)(el)) {
+ return printSimpleFormatElement(el);
+ }
+ if ((0, types_1.isPluralElement)(el)) {
+ return printPluralElement(el);
+ }
+ if ((0, types_1.isSelectElement)(el)) {
+ return printSelectElement(el);
+ }
+ if ((0, types_1.isPoundElement)(el)) {
+ return '#';
+ }
+ if ((0, types_1.isTagElement)(el)) {
+ return printTagElement(el);
+ }
+ });
+ return printedNodes.join('');
+}
+exports.doPrintAST = doPrintAST;
+function printTagElement(el) {
+ return "<".concat(el.value, ">").concat(printAST(el.children), "").concat(el.value, ">");
+}
+function printEscapedMessage(message) {
+ return message.replace(/([{}](?:.*[{}])?)/su, "'$1'");
+}
+function printLiteralElement(_a, isInPlural) {
+ var value = _a.value;
+ var escaped = printEscapedMessage(value);
+ return isInPlural ? escaped.replace('#', "'#'") : escaped;
+}
+function printArgumentElement(_a) {
+ var value = _a.value;
+ return "{".concat(value, "}");
+}
+function printSimpleFormatElement(el) {
+ return "{".concat(el.value, ", ").concat(types_1.TYPE[el.type]).concat(el.style ? ", ".concat(printArgumentStyle(el.style)) : '', "}");
+}
+function printNumberSkeletonToken(token) {
+ var stem = token.stem, options = token.options;
+ return options.length === 0
+ ? stem
+ : "".concat(stem).concat(options.map(function (o) { return "/".concat(o); }).join(''));
+}
+function printArgumentStyle(style) {
+ if (typeof style === 'string') {
+ return printEscapedMessage(style);
+ }
+ else if (style.type === types_1.SKELETON_TYPE.dateTime) {
+ return "::".concat(printDateTimeSkeleton(style));
+ }
+ else {
+ return "::".concat(style.tokens.map(printNumberSkeletonToken).join(' '));
+ }
+}
+function printDateTimeSkeleton(style) {
+ return style.pattern;
+}
+exports.printDateTimeSkeleton = printDateTimeSkeleton;
+function printSelectElement(el) {
+ var msg = [
+ el.value,
+ 'select',
+ Object.keys(el.options)
+ .map(function (id) { return "".concat(id, "{").concat(doPrintAST(el.options[id].value, false), "}"); })
+ .join(' '),
+ ].join(',');
+ return "{".concat(msg, "}");
+}
+function printPluralElement(el) {
+ var type = el.pluralType === 'cardinal' ? 'plural' : 'selectordinal';
+ var msg = [
+ el.value,
+ type,
+ (0, tslib_1.__spreadArray)([
+ el.offset ? "offset:".concat(el.offset) : ''
+ ], Object.keys(el.options).map(function (id) { return "".concat(id, "{").concat(doPrintAST(el.options[id].value, true), "}"); }), true).filter(Boolean)
+ .join(' '),
+ ].join(',');
+ return "{".concat(msg, "}");
+}
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/regex.generated.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/regex.generated.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f172f3dc4a08dbc5eb382fef0020fd543200b973
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/regex.generated.d.ts
@@ -0,0 +1,3 @@
+export declare const SPACE_SEPARATOR_REGEX: RegExp;
+export declare const WHITE_SPACE_REGEX: RegExp;
+//# sourceMappingURL=regex.generated.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/regex.generated.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/regex.generated.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..12e56d1738a37465487d6ef40f311ae2ed38d98b
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/regex.generated.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"regex.generated.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/regex.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,qBAAqB,QAAiD,CAAA;AACnF,eAAO,MAAM,iBAAiB,QAAyC,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/regex.generated.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/regex.generated.js
new file mode 100644
index 0000000000000000000000000000000000000000..a46fa6b6b31faed6e11318c6a68633618bab1bda
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/regex.generated.js
@@ -0,0 +1,6 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.WHITE_SPACE_REGEX = exports.SPACE_SEPARATOR_REGEX = void 0;
+// @generated from regex-gen.ts
+exports.SPACE_SEPARATOR_REGEX = /[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/;
+exports.WHITE_SPACE_REGEX = /[\t-\r \x85\u200E\u200F\u2028\u2029]/;
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/time-data.generated.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/time-data.generated.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..121101c2a3dccb93da986505a3554bc7e3fa1fef
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/time-data.generated.d.ts
@@ -0,0 +1,2 @@
+export declare const timeData: Record;
+//# sourceMappingURL=time-data.generated.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/time-data.generated.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/time-data.generated.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..ce5b0764545fda7a72be6bf93dba8e2d9bcf2f82
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/time-data.generated.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"time-data.generated.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/time-data.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAwzC7C,CAAC"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/time-data.generated.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/time-data.generated.js
new file mode 100644
index 0000000000000000000000000000000000000000..6df613ef3c8b72ffd5c88b2c84682ad4fd718e5a
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/time-data.generated.js
@@ -0,0 +1,1342 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.timeData = void 0;
+// @generated from time-data-gen.ts
+// prettier-ignore
+exports.timeData = {
+ "AX": [
+ "H"
+ ],
+ "BQ": [
+ "H"
+ ],
+ "CP": [
+ "H"
+ ],
+ "CZ": [
+ "H"
+ ],
+ "DK": [
+ "H"
+ ],
+ "FI": [
+ "H"
+ ],
+ "ID": [
+ "H"
+ ],
+ "IS": [
+ "H"
+ ],
+ "ML": [
+ "H"
+ ],
+ "NE": [
+ "H"
+ ],
+ "RU": [
+ "H"
+ ],
+ "SE": [
+ "H"
+ ],
+ "SJ": [
+ "H"
+ ],
+ "SK": [
+ "H"
+ ],
+ "AS": [
+ "h",
+ "H"
+ ],
+ "BT": [
+ "h",
+ "H"
+ ],
+ "DJ": [
+ "h",
+ "H"
+ ],
+ "ER": [
+ "h",
+ "H"
+ ],
+ "GH": [
+ "h",
+ "H"
+ ],
+ "IN": [
+ "h",
+ "H"
+ ],
+ "LS": [
+ "h",
+ "H"
+ ],
+ "PG": [
+ "h",
+ "H"
+ ],
+ "PW": [
+ "h",
+ "H"
+ ],
+ "SO": [
+ "h",
+ "H"
+ ],
+ "TO": [
+ "h",
+ "H"
+ ],
+ "VU": [
+ "h",
+ "H"
+ ],
+ "WS": [
+ "h",
+ "H"
+ ],
+ "001": [
+ "H",
+ "h"
+ ],
+ "AL": [
+ "h",
+ "H",
+ "hB"
+ ],
+ "TD": [
+ "h",
+ "H",
+ "hB"
+ ],
+ "ca-ES": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "CF": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "CM": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "fr-CA": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "gl-ES": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "it-CH": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "it-IT": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "LU": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "NP": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "PF": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "SC": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "SM": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "SN": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "TF": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "VA": [
+ "H",
+ "h",
+ "hB"
+ ],
+ "CY": [
+ "h",
+ "H",
+ "hb",
+ "hB"
+ ],
+ "GR": [
+ "h",
+ "H",
+ "hb",
+ "hB"
+ ],
+ "CO": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "DO": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "KP": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "KR": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "NA": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "PA": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "PR": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "VE": [
+ "h",
+ "H",
+ "hB",
+ "hb"
+ ],
+ "AC": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "AI": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "BW": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "BZ": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "CC": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "CK": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "CX": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "DG": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "FK": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "GB": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "GG": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "GI": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "IE": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "IM": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "IO": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "JE": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "LT": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "MK": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "MN": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "MS": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "NF": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "NG": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "NR": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "NU": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "PN": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "SH": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "SX": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "TA": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "ZA": [
+ "H",
+ "h",
+ "hb",
+ "hB"
+ ],
+ "af-ZA": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "AR": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "CL": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "CR": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "CU": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "EA": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "es-BO": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "es-BR": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "es-EC": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "es-ES": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "es-GQ": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "es-PE": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "GT": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "HN": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "IC": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "KG": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "KM": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "LK": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "MA": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "MX": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "NI": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "PY": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "SV": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "UY": [
+ "H",
+ "h",
+ "hB",
+ "hb"
+ ],
+ "JP": [
+ "H",
+ "h",
+ "K"
+ ],
+ "AD": [
+ "H",
+ "hB"
+ ],
+ "AM": [
+ "H",
+ "hB"
+ ],
+ "AO": [
+ "H",
+ "hB"
+ ],
+ "AT": [
+ "H",
+ "hB"
+ ],
+ "AW": [
+ "H",
+ "hB"
+ ],
+ "BE": [
+ "H",
+ "hB"
+ ],
+ "BF": [
+ "H",
+ "hB"
+ ],
+ "BJ": [
+ "H",
+ "hB"
+ ],
+ "BL": [
+ "H",
+ "hB"
+ ],
+ "BR": [
+ "H",
+ "hB"
+ ],
+ "CG": [
+ "H",
+ "hB"
+ ],
+ "CI": [
+ "H",
+ "hB"
+ ],
+ "CV": [
+ "H",
+ "hB"
+ ],
+ "DE": [
+ "H",
+ "hB"
+ ],
+ "EE": [
+ "H",
+ "hB"
+ ],
+ "FR": [
+ "H",
+ "hB"
+ ],
+ "GA": [
+ "H",
+ "hB"
+ ],
+ "GF": [
+ "H",
+ "hB"
+ ],
+ "GN": [
+ "H",
+ "hB"
+ ],
+ "GP": [
+ "H",
+ "hB"
+ ],
+ "GW": [
+ "H",
+ "hB"
+ ],
+ "HR": [
+ "H",
+ "hB"
+ ],
+ "IL": [
+ "H",
+ "hB"
+ ],
+ "IT": [
+ "H",
+ "hB"
+ ],
+ "KZ": [
+ "H",
+ "hB"
+ ],
+ "MC": [
+ "H",
+ "hB"
+ ],
+ "MD": [
+ "H",
+ "hB"
+ ],
+ "MF": [
+ "H",
+ "hB"
+ ],
+ "MQ": [
+ "H",
+ "hB"
+ ],
+ "MZ": [
+ "H",
+ "hB"
+ ],
+ "NC": [
+ "H",
+ "hB"
+ ],
+ "NL": [
+ "H",
+ "hB"
+ ],
+ "PM": [
+ "H",
+ "hB"
+ ],
+ "PT": [
+ "H",
+ "hB"
+ ],
+ "RE": [
+ "H",
+ "hB"
+ ],
+ "RO": [
+ "H",
+ "hB"
+ ],
+ "SI": [
+ "H",
+ "hB"
+ ],
+ "SR": [
+ "H",
+ "hB"
+ ],
+ "ST": [
+ "H",
+ "hB"
+ ],
+ "TG": [
+ "H",
+ "hB"
+ ],
+ "TR": [
+ "H",
+ "hB"
+ ],
+ "WF": [
+ "H",
+ "hB"
+ ],
+ "YT": [
+ "H",
+ "hB"
+ ],
+ "BD": [
+ "h",
+ "hB",
+ "H"
+ ],
+ "PK": [
+ "h",
+ "hB",
+ "H"
+ ],
+ "AZ": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "BA": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "BG": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "CH": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "GE": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "LI": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "ME": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "RS": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "UA": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "UZ": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "XK": [
+ "H",
+ "hB",
+ "h"
+ ],
+ "AG": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "AU": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "BB": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "BM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "BS": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "CA": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "DM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "en-001": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "FJ": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "FM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "GD": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "GM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "GU": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "GY": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "JM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "KI": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "KN": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "KY": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "LC": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "LR": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "MH": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "MP": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "MW": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "NZ": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "SB": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "SG": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "SL": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "SS": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "SZ": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "TC": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "TT": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "UM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "US": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "VC": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "VG": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "VI": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "ZM": [
+ "h",
+ "hb",
+ "H",
+ "hB"
+ ],
+ "BO": [
+ "H",
+ "hB",
+ "h",
+ "hb"
+ ],
+ "EC": [
+ "H",
+ "hB",
+ "h",
+ "hb"
+ ],
+ "ES": [
+ "H",
+ "hB",
+ "h",
+ "hb"
+ ],
+ "GQ": [
+ "H",
+ "hB",
+ "h",
+ "hb"
+ ],
+ "PE": [
+ "H",
+ "hB",
+ "h",
+ "hb"
+ ],
+ "AE": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "ar-001": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "BH": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "DZ": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "EG": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "EH": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "HK": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "IQ": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "JO": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "KW": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "LB": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "LY": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "MO": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "MR": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "OM": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "PH": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "PS": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "QA": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "SA": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "SD": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "SY": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "TN": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "YE": [
+ "h",
+ "hB",
+ "hb",
+ "H"
+ ],
+ "AF": [
+ "H",
+ "hb",
+ "hB",
+ "h"
+ ],
+ "LA": [
+ "H",
+ "hb",
+ "hB",
+ "h"
+ ],
+ "CN": [
+ "H",
+ "hB",
+ "hb",
+ "h"
+ ],
+ "LV": [
+ "H",
+ "hB",
+ "hb",
+ "h"
+ ],
+ "TL": [
+ "H",
+ "hB",
+ "hb",
+ "h"
+ ],
+ "zu-ZA": [
+ "H",
+ "hB",
+ "hb",
+ "h"
+ ],
+ "CD": [
+ "hB",
+ "H"
+ ],
+ "IR": [
+ "hB",
+ "H"
+ ],
+ "hi-IN": [
+ "hB",
+ "h",
+ "H"
+ ],
+ "kn-IN": [
+ "hB",
+ "h",
+ "H"
+ ],
+ "ml-IN": [
+ "hB",
+ "h",
+ "H"
+ ],
+ "te-IN": [
+ "hB",
+ "h",
+ "H"
+ ],
+ "KH": [
+ "hB",
+ "h",
+ "H",
+ "hb"
+ ],
+ "ta-IN": [
+ "hB",
+ "h",
+ "hb",
+ "H"
+ ],
+ "BN": [
+ "hb",
+ "hB",
+ "h",
+ "H"
+ ],
+ "MY": [
+ "hb",
+ "hB",
+ "h",
+ "H"
+ ],
+ "ET": [
+ "hB",
+ "hb",
+ "h",
+ "H"
+ ],
+ "gu-IN": [
+ "hB",
+ "hb",
+ "h",
+ "H"
+ ],
+ "mr-IN": [
+ "hB",
+ "hb",
+ "h",
+ "H"
+ ],
+ "pa-IN": [
+ "hB",
+ "hb",
+ "h",
+ "H"
+ ],
+ "TW": [
+ "hB",
+ "hb",
+ "h",
+ "H"
+ ],
+ "KE": [
+ "hB",
+ "hb",
+ "H",
+ "h"
+ ],
+ "MM": [
+ "hB",
+ "hb",
+ "H",
+ "h"
+ ],
+ "TZ": [
+ "hB",
+ "hb",
+ "H",
+ "h"
+ ],
+ "UG": [
+ "hB",
+ "hb",
+ "H",
+ "h"
+ ]
+};
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/types.d.ts b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ed22a9e1ec8f96c04c8efb35342611cd33d754f9
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/types.d.ts
@@ -0,0 +1,129 @@
+import type { NumberFormatOptions } from '@formatjs/ecma402-abstract';
+import { NumberSkeletonToken } from '@formatjs/icu-skeleton-parser';
+export interface ExtendedNumberFormatOptions extends NumberFormatOptions {
+ scale?: number;
+}
+export declare enum TYPE {
+ /**
+ * Raw text
+ */
+ literal = 0,
+ /**
+ * Variable w/o any format, e.g `var` in `this is a {var}`
+ */
+ argument = 1,
+ /**
+ * Variable w/ number format
+ */
+ number = 2,
+ /**
+ * Variable w/ date format
+ */
+ date = 3,
+ /**
+ * Variable w/ time format
+ */
+ time = 4,
+ /**
+ * Variable w/ select format
+ */
+ select = 5,
+ /**
+ * Variable w/ plural format
+ */
+ plural = 6,
+ /**
+ * Only possible within plural argument.
+ * This is the `#` symbol that will be substituted with the count.
+ */
+ pound = 7,
+ /**
+ * XML-like tag
+ */
+ tag = 8
+}
+export declare enum SKELETON_TYPE {
+ number = 0,
+ dateTime = 1
+}
+export interface LocationDetails {
+ offset: number;
+ line: number;
+ column: number;
+}
+export interface Location {
+ start: LocationDetails;
+ end: LocationDetails;
+}
+export interface BaseElement {
+ type: T;
+ value: string;
+ location?: Location;
+}
+export declare type LiteralElement = BaseElement;
+export declare type ArgumentElement = BaseElement;
+export interface TagElement {
+ type: TYPE.tag;
+ value: string;
+ children: MessageFormatElement[];
+ location?: Location;
+}
+export interface SimpleFormatElement extends BaseElement {
+ style?: string | S | null;
+}
+export declare type NumberElement = SimpleFormatElement;
+export declare type DateElement = SimpleFormatElement;
+export declare type TimeElement = SimpleFormatElement;
+export interface SelectOption {
+ id: string;
+ value: MessageFormatElement[];
+ location?: Location;
+}
+export declare type ValidPluralRule = 'zero' | 'one' | 'two' | 'few' | 'many' | 'other' | string;
+export interface PluralOrSelectOption {
+ value: MessageFormatElement[];
+ location?: Location;
+}
+export interface SelectElement extends BaseElement {
+ options: Record;
+}
+export interface PluralElement extends BaseElement {
+ options: Record;
+ offset: number;
+ pluralType: Intl.PluralRulesOptions['type'];
+}
+export interface PoundElement {
+ type: TYPE.pound;
+ location?: Location;
+}
+export declare type MessageFormatElement = ArgumentElement | DateElement | LiteralElement | NumberElement | PluralElement | PoundElement | SelectElement | TagElement | TimeElement;
+export interface NumberSkeleton {
+ type: SKELETON_TYPE.number;
+ tokens: NumberSkeletonToken[];
+ location?: Location;
+ parsedOptions: ExtendedNumberFormatOptions;
+}
+export interface DateTimeSkeleton {
+ type: SKELETON_TYPE.dateTime;
+ pattern: string;
+ location?: Location;
+ parsedOptions: Intl.DateTimeFormatOptions;
+}
+export declare type Skeleton = NumberSkeleton | DateTimeSkeleton;
+/**
+ * Type Guards
+ */
+export declare function isLiteralElement(el: MessageFormatElement): el is LiteralElement;
+export declare function isArgumentElement(el: MessageFormatElement): el is ArgumentElement;
+export declare function isNumberElement(el: MessageFormatElement): el is NumberElement;
+export declare function isDateElement(el: MessageFormatElement): el is DateElement;
+export declare function isTimeElement(el: MessageFormatElement): el is TimeElement;
+export declare function isSelectElement(el: MessageFormatElement): el is SelectElement;
+export declare function isPluralElement(el: MessageFormatElement): el is PluralElement;
+export declare function isPoundElement(el: MessageFormatElement): el is PoundElement;
+export declare function isTagElement(el: MessageFormatElement): el is TagElement;
+export declare function isNumberSkeleton(el: NumberElement['style'] | Skeleton): el is NumberSkeleton;
+export declare function isDateTimeSkeleton(el?: DateElement['style'] | TimeElement['style'] | Skeleton): el is DateTimeSkeleton;
+export declare function createLiteralElement(value: string): LiteralElement;
+export declare function createNumberElement(value: string, style?: string | null): NumberElement;
+//# sourceMappingURL=types.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/types.d.ts.map b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/types.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7aa1cfa7ce294e6551480043999955d6902b5de6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/types.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-messageformat-parser/types.js b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/types.js
new file mode 100644
index 0000000000000000000000000000000000000000..e638e6ee7c147735fab127755300d6c03742efb0
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-messageformat-parser/types.js
@@ -0,0 +1,110 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createNumberElement = exports.createLiteralElement = exports.isDateTimeSkeleton = exports.isNumberSkeleton = exports.isTagElement = exports.isPoundElement = exports.isPluralElement = exports.isSelectElement = exports.isTimeElement = exports.isDateElement = exports.isNumberElement = exports.isArgumentElement = exports.isLiteralElement = exports.SKELETON_TYPE = exports.TYPE = void 0;
+var TYPE;
+(function (TYPE) {
+ /**
+ * Raw text
+ */
+ TYPE[TYPE["literal"] = 0] = "literal";
+ /**
+ * Variable w/o any format, e.g `var` in `this is a {var}`
+ */
+ TYPE[TYPE["argument"] = 1] = "argument";
+ /**
+ * Variable w/ number format
+ */
+ TYPE[TYPE["number"] = 2] = "number";
+ /**
+ * Variable w/ date format
+ */
+ TYPE[TYPE["date"] = 3] = "date";
+ /**
+ * Variable w/ time format
+ */
+ TYPE[TYPE["time"] = 4] = "time";
+ /**
+ * Variable w/ select format
+ */
+ TYPE[TYPE["select"] = 5] = "select";
+ /**
+ * Variable w/ plural format
+ */
+ TYPE[TYPE["plural"] = 6] = "plural";
+ /**
+ * Only possible within plural argument.
+ * This is the `#` symbol that will be substituted with the count.
+ */
+ TYPE[TYPE["pound"] = 7] = "pound";
+ /**
+ * XML-like tag
+ */
+ TYPE[TYPE["tag"] = 8] = "tag";
+})(TYPE = exports.TYPE || (exports.TYPE = {}));
+var SKELETON_TYPE;
+(function (SKELETON_TYPE) {
+ SKELETON_TYPE[SKELETON_TYPE["number"] = 0] = "number";
+ SKELETON_TYPE[SKELETON_TYPE["dateTime"] = 1] = "dateTime";
+})(SKELETON_TYPE = exports.SKELETON_TYPE || (exports.SKELETON_TYPE = {}));
+/**
+ * Type Guards
+ */
+function isLiteralElement(el) {
+ return el.type === TYPE.literal;
+}
+exports.isLiteralElement = isLiteralElement;
+function isArgumentElement(el) {
+ return el.type === TYPE.argument;
+}
+exports.isArgumentElement = isArgumentElement;
+function isNumberElement(el) {
+ return el.type === TYPE.number;
+}
+exports.isNumberElement = isNumberElement;
+function isDateElement(el) {
+ return el.type === TYPE.date;
+}
+exports.isDateElement = isDateElement;
+function isTimeElement(el) {
+ return el.type === TYPE.time;
+}
+exports.isTimeElement = isTimeElement;
+function isSelectElement(el) {
+ return el.type === TYPE.select;
+}
+exports.isSelectElement = isSelectElement;
+function isPluralElement(el) {
+ return el.type === TYPE.plural;
+}
+exports.isPluralElement = isPluralElement;
+function isPoundElement(el) {
+ return el.type === TYPE.pound;
+}
+exports.isPoundElement = isPoundElement;
+function isTagElement(el) {
+ return el.type === TYPE.tag;
+}
+exports.isTagElement = isTagElement;
+function isNumberSkeleton(el) {
+ return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);
+}
+exports.isNumberSkeleton = isNumberSkeleton;
+function isDateTimeSkeleton(el) {
+ return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);
+}
+exports.isDateTimeSkeleton = isDateTimeSkeleton;
+function createLiteralElement(value) {
+ return {
+ type: TYPE.literal,
+ value: value,
+ };
+}
+exports.createLiteralElement = createLiteralElement;
+function createNumberElement(value, style) {
+ return {
+ type: TYPE.number,
+ value: value,
+ style: style,
+ };
+}
+exports.createNumberElement = createNumberElement;
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/LICENSE.md b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..0320eebafa71377cef72eabddb673e850d6d4517
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/LICENSE.md
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) 2021 FormatJS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/README.md b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f50682f5e593ec542df54c098049df6c39294d2a
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/README.md
@@ -0,0 +1 @@
+# icu-skeleton-parser
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/date-time.d.ts b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/date-time.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6bdc0b286711b08b0ad0cc4202c0af778b4e590f
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/date-time.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Parse Date time skeleton into Intl.DateTimeFormatOptions
+ * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
+ * @public
+ * @param skeleton skeleton string
+ */
+export declare function parseDateTimeSkeleton(skeleton: string): Intl.DateTimeFormatOptions;
+//# sourceMappingURL=date-time.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/date-time.d.ts.map b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/date-time.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..4d8e9e8636220c966facd84887f72e5b8e434008
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/date-time.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"date-time.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-skeleton-parser/date-time.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,GACf,IAAI,CAAC,qBAAqB,CA+H5B"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/date-time.js b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/date-time.js
new file mode 100644
index 0000000000000000000000000000000000000000..3415098ca1af4cebc2d49c46261225b0012afcf1
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/date-time.js
@@ -0,0 +1,125 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parseDateTimeSkeleton = void 0;
+/**
+ * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
+ * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js
+ * with some tweaks
+ */
+var DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;
+/**
+ * Parse Date time skeleton into Intl.DateTimeFormatOptions
+ * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
+ * @public
+ * @param skeleton skeleton string
+ */
+function parseDateTimeSkeleton(skeleton) {
+ var result = {};
+ skeleton.replace(DATE_TIME_REGEX, function (match) {
+ var len = match.length;
+ switch (match[0]) {
+ // Era
+ case 'G':
+ result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';
+ break;
+ // Year
+ case 'y':
+ result.year = len === 2 ? '2-digit' : 'numeric';
+ break;
+ case 'Y':
+ case 'u':
+ case 'U':
+ case 'r':
+ throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');
+ // Quarter
+ case 'q':
+ case 'Q':
+ throw new RangeError('`q/Q` (quarter) patterns are not supported');
+ // Month
+ case 'M':
+ case 'L':
+ result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];
+ break;
+ // Week
+ case 'w':
+ case 'W':
+ throw new RangeError('`w/W` (week) patterns are not supported');
+ case 'd':
+ result.day = ['numeric', '2-digit'][len - 1];
+ break;
+ case 'D':
+ case 'F':
+ case 'g':
+ throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');
+ // Weekday
+ case 'E':
+ result.weekday = len === 4 ? 'short' : len === 5 ? 'narrow' : 'short';
+ break;
+ case 'e':
+ if (len < 4) {
+ throw new RangeError('`e..eee` (weekday) patterns are not supported');
+ }
+ result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];
+ break;
+ case 'c':
+ if (len < 4) {
+ throw new RangeError('`c..ccc` (weekday) patterns are not supported');
+ }
+ result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];
+ break;
+ // Period
+ case 'a': // AM, PM
+ result.hour12 = true;
+ break;
+ case 'b': // am, pm, noon, midnight
+ case 'B': // flexible day periods
+ throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');
+ // Hour
+ case 'h':
+ result.hourCycle = 'h12';
+ result.hour = ['numeric', '2-digit'][len - 1];
+ break;
+ case 'H':
+ result.hourCycle = 'h23';
+ result.hour = ['numeric', '2-digit'][len - 1];
+ break;
+ case 'K':
+ result.hourCycle = 'h11';
+ result.hour = ['numeric', '2-digit'][len - 1];
+ break;
+ case 'k':
+ result.hourCycle = 'h24';
+ result.hour = ['numeric', '2-digit'][len - 1];
+ break;
+ case 'j':
+ case 'J':
+ case 'C':
+ throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');
+ // Minute
+ case 'm':
+ result.minute = ['numeric', '2-digit'][len - 1];
+ break;
+ // Second
+ case 's':
+ result.second = ['numeric', '2-digit'][len - 1];
+ break;
+ case 'S':
+ case 'A':
+ throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');
+ // Zone
+ case 'z': // 1..3, 4: specific non-location format
+ result.timeZoneName = len < 4 ? 'short' : 'long';
+ break;
+ case 'Z': // 1..3, 4, 5: The ISO8601 varios formats
+ case 'O': // 1, 4: miliseconds in day short, long
+ case 'v': // 1, 4: generic non-location format
+ case 'V': // 1, 2, 3, 4: time zone ID or city
+ case 'X': // 1, 2, 3, 4: The ISO8601 varios formats
+ case 'x': // 1, 2, 3, 4: The ISO8601 varios formats
+ throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');
+ }
+ return '';
+ });
+ return result;
+}
+exports.parseDateTimeSkeleton = parseDateTimeSkeleton;
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/index.d.ts b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9ea9d0a572b5c62a2afbdeb35a17ca7e91d87082
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/index.d.ts
@@ -0,0 +1,3 @@
+export * from './date-time';
+export * from './number';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/index.d.ts.map b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e53cfe578468d5761df52235103ecde55c9f1caa
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-skeleton-parser/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/index.js b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..de4e4df468c7848091dbb2a0cb098bd1e38ab5b5
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/index.js
@@ -0,0 +1,5 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = require("tslib");
+(0, tslib_1.__exportStar)(require("./date-time"), exports);
+(0, tslib_1.__exportStar)(require("./number"), exports);
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.d.ts b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6bdc0b286711b08b0ad0cc4202c0af778b4e590f
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Parse Date time skeleton into Intl.DateTimeFormatOptions
+ * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
+ * @public
+ * @param skeleton skeleton string
+ */
+export declare function parseDateTimeSkeleton(skeleton: string): Intl.DateTimeFormatOptions;
+//# sourceMappingURL=date-time.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.d.ts.map b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..daab50e0598622b7133e1a9ca41cc9580c0dc705
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"date-time.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-skeleton-parser/date-time.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,GACf,IAAI,CAAC,qBAAqB,CA+H5B"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js
new file mode 100644
index 0000000000000000000000000000000000000000..92c82580f6d91611d8f3f28d760cc96f38dc777c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js
@@ -0,0 +1,121 @@
+/**
+ * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
+ * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js
+ * with some tweaks
+ */
+var DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;
+/**
+ * Parse Date time skeleton into Intl.DateTimeFormatOptions
+ * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
+ * @public
+ * @param skeleton skeleton string
+ */
+export function parseDateTimeSkeleton(skeleton) {
+ var result = {};
+ skeleton.replace(DATE_TIME_REGEX, function (match) {
+ var len = match.length;
+ switch (match[0]) {
+ // Era
+ case 'G':
+ result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';
+ break;
+ // Year
+ case 'y':
+ result.year = len === 2 ? '2-digit' : 'numeric';
+ break;
+ case 'Y':
+ case 'u':
+ case 'U':
+ case 'r':
+ throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');
+ // Quarter
+ case 'q':
+ case 'Q':
+ throw new RangeError('`q/Q` (quarter) patterns are not supported');
+ // Month
+ case 'M':
+ case 'L':
+ result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];
+ break;
+ // Week
+ case 'w':
+ case 'W':
+ throw new RangeError('`w/W` (week) patterns are not supported');
+ case 'd':
+ result.day = ['numeric', '2-digit'][len - 1];
+ break;
+ case 'D':
+ case 'F':
+ case 'g':
+ throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');
+ // Weekday
+ case 'E':
+ result.weekday = len === 4 ? 'short' : len === 5 ? 'narrow' : 'short';
+ break;
+ case 'e':
+ if (len < 4) {
+ throw new RangeError('`e..eee` (weekday) patterns are not supported');
+ }
+ result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];
+ break;
+ case 'c':
+ if (len < 4) {
+ throw new RangeError('`c..ccc` (weekday) patterns are not supported');
+ }
+ result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];
+ break;
+ // Period
+ case 'a': // AM, PM
+ result.hour12 = true;
+ break;
+ case 'b': // am, pm, noon, midnight
+ case 'B': // flexible day periods
+ throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');
+ // Hour
+ case 'h':
+ result.hourCycle = 'h12';
+ result.hour = ['numeric', '2-digit'][len - 1];
+ break;
+ case 'H':
+ result.hourCycle = 'h23';
+ result.hour = ['numeric', '2-digit'][len - 1];
+ break;
+ case 'K':
+ result.hourCycle = 'h11';
+ result.hour = ['numeric', '2-digit'][len - 1];
+ break;
+ case 'k':
+ result.hourCycle = 'h24';
+ result.hour = ['numeric', '2-digit'][len - 1];
+ break;
+ case 'j':
+ case 'J':
+ case 'C':
+ throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');
+ // Minute
+ case 'm':
+ result.minute = ['numeric', '2-digit'][len - 1];
+ break;
+ // Second
+ case 's':
+ result.second = ['numeric', '2-digit'][len - 1];
+ break;
+ case 'S':
+ case 'A':
+ throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');
+ // Zone
+ case 'z': // 1..3, 4: specific non-location format
+ result.timeZoneName = len < 4 ? 'short' : 'long';
+ break;
+ case 'Z': // 1..3, 4, 5: The ISO8601 varios formats
+ case 'O': // 1, 4: miliseconds in day short, long
+ case 'v': // 1, 4: generic non-location format
+ case 'V': // 1, 2, 3, 4: time zone ID or city
+ case 'X': // 1, 2, 3, 4: The ISO8601 varios formats
+ case 'x': // 1, 2, 3, 4: The ISO8601 varios formats
+ throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');
+ }
+ return '';
+ });
+ return result;
+}
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/index.d.ts b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9ea9d0a572b5c62a2afbdeb35a17ca7e91d87082
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/index.d.ts
@@ -0,0 +1,3 @@
+export * from './date-time';
+export * from './number';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/index.d.ts.map b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/index.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..3dd1d8d10c1d3a29d31d18ae03417e5f23917922
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-skeleton-parser/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/index.js b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..6de91f5c6e73562cbc3e084f2612c81a8101b27c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/index.js
@@ -0,0 +1,2 @@
+export * from './date-time';
+export * from './number';
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/number.d.ts b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/number.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..45e2641f3ebb47970b51fb8319b64f8b6df7f5b0
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/number.d.ts
@@ -0,0 +1,14 @@
+import { NumberFormatOptions } from '@formatjs/ecma402-abstract';
+export interface ExtendedNumberFormatOptions extends NumberFormatOptions {
+ scale?: number;
+}
+export interface NumberSkeletonToken {
+ stem: string;
+ options: string[];
+}
+export declare function parseNumberSkeletonFromString(skeleton: string): NumberSkeletonToken[];
+/**
+ * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options
+ */
+export declare function parseNumberSkeleton(tokens: NumberSkeletonToken[]): ExtendedNumberFormatOptions;
+//# sourceMappingURL=number.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/number.d.ts.map b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/number.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..adf11d7814fcd89beba2e9ec222b0838151f3679
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/number.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-skeleton-parser/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,4BAA4B,CAAA;AAG9D,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AACD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,GACf,mBAAmB,EAAE,CA0BvB;AAiID;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,EAAE,GAC5B,2BAA2B,CAuL7B"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/number.js b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/number.js
new file mode 100644
index 0000000000000000000000000000000000000000..2eba7eb6c305bf91ce780d2701d4b91f49d2feab
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/number.js
@@ -0,0 +1,295 @@
+import { __assign } from "tslib";
+import { WHITE_SPACE_REGEX } from './regex.generated';
+export function parseNumberSkeletonFromString(skeleton) {
+ if (skeleton.length === 0) {
+ throw new Error('Number skeleton cannot be empty');
+ }
+ // Parse the skeleton
+ var stringTokens = skeleton
+ .split(WHITE_SPACE_REGEX)
+ .filter(function (x) { return x.length > 0; });
+ var tokens = [];
+ for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) {
+ var stringToken = stringTokens_1[_i];
+ var stemAndOptions = stringToken.split('/');
+ if (stemAndOptions.length === 0) {
+ throw new Error('Invalid number skeleton');
+ }
+ var stem = stemAndOptions[0], options = stemAndOptions.slice(1);
+ for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {
+ var option = options_1[_a];
+ if (option.length === 0) {
+ throw new Error('Invalid number skeleton');
+ }
+ }
+ tokens.push({ stem: stem, options: options });
+ }
+ return tokens;
+}
+function icuUnitToEcma(unit) {
+ return unit.replace(/^(.*?)-/, '');
+}
+var FRACTION_PRECISION_REGEX = /^\.(?:(0+)(\*)?|(#+)|(0+)(#+))$/g;
+var SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\+|#+)?[rs]?$/g;
+var INTEGER_WIDTH_REGEX = /(\*)(0+)|(#+)(0+)|(0+)/g;
+var CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;
+function parseSignificantPrecision(str) {
+ var result = {};
+ if (str[str.length - 1] === 'r') {
+ result.roundingPriority = 'morePrecision';
+ }
+ else if (str[str.length - 1] === 's') {
+ result.roundingPriority = 'lessPrecision';
+ }
+ str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {
+ // @@@ case
+ if (typeof g2 !== 'string') {
+ result.minimumSignificantDigits = g1.length;
+ result.maximumSignificantDigits = g1.length;
+ }
+ // @@@+ case
+ else if (g2 === '+') {
+ result.minimumSignificantDigits = g1.length;
+ }
+ // .### case
+ else if (g1[0] === '#') {
+ result.maximumSignificantDigits = g1.length;
+ }
+ // .@@## or .@@@ case
+ else {
+ result.minimumSignificantDigits = g1.length;
+ result.maximumSignificantDigits =
+ g1.length + (typeof g2 === 'string' ? g2.length : 0);
+ }
+ return '';
+ });
+ return result;
+}
+function parseSign(str) {
+ switch (str) {
+ case 'sign-auto':
+ return {
+ signDisplay: 'auto',
+ };
+ case 'sign-accounting':
+ case '()':
+ return {
+ currencySign: 'accounting',
+ };
+ case 'sign-always':
+ case '+!':
+ return {
+ signDisplay: 'always',
+ };
+ case 'sign-accounting-always':
+ case '()!':
+ return {
+ signDisplay: 'always',
+ currencySign: 'accounting',
+ };
+ case 'sign-except-zero':
+ case '+?':
+ return {
+ signDisplay: 'exceptZero',
+ };
+ case 'sign-accounting-except-zero':
+ case '()?':
+ return {
+ signDisplay: 'exceptZero',
+ currencySign: 'accounting',
+ };
+ case 'sign-never':
+ case '+_':
+ return {
+ signDisplay: 'never',
+ };
+ }
+}
+function parseConciseScientificAndEngineeringStem(stem) {
+ // Engineering
+ var result;
+ if (stem[0] === 'E' && stem[1] === 'E') {
+ result = {
+ notation: 'engineering',
+ };
+ stem = stem.slice(2);
+ }
+ else if (stem[0] === 'E') {
+ result = {
+ notation: 'scientific',
+ };
+ stem = stem.slice(1);
+ }
+ if (result) {
+ var signDisplay = stem.slice(0, 2);
+ if (signDisplay === '+!') {
+ result.signDisplay = 'always';
+ stem = stem.slice(2);
+ }
+ else if (signDisplay === '+?') {
+ result.signDisplay = 'exceptZero';
+ stem = stem.slice(2);
+ }
+ if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {
+ throw new Error('Malformed concise eng/scientific notation');
+ }
+ result.minimumIntegerDigits = stem.length;
+ }
+ return result;
+}
+function parseNotationOptions(opt) {
+ var result = {};
+ var signOpts = parseSign(opt);
+ if (signOpts) {
+ return signOpts;
+ }
+ return result;
+}
+/**
+ * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options
+ */
+export function parseNumberSkeleton(tokens) {
+ var result = {};
+ for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {
+ var token = tokens_1[_i];
+ switch (token.stem) {
+ case 'percent':
+ case '%':
+ result.style = 'percent';
+ continue;
+ case '%x100':
+ result.style = 'percent';
+ result.scale = 100;
+ continue;
+ case 'currency':
+ result.style = 'currency';
+ result.currency = token.options[0];
+ continue;
+ case 'group-off':
+ case ',_':
+ result.useGrouping = false;
+ continue;
+ case 'precision-integer':
+ case '.':
+ result.maximumFractionDigits = 0;
+ continue;
+ case 'measure-unit':
+ case 'unit':
+ result.style = 'unit';
+ result.unit = icuUnitToEcma(token.options[0]);
+ continue;
+ case 'compact-short':
+ case 'K':
+ result.notation = 'compact';
+ result.compactDisplay = 'short';
+ continue;
+ case 'compact-long':
+ case 'KK':
+ result.notation = 'compact';
+ result.compactDisplay = 'long';
+ continue;
+ case 'scientific':
+ result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));
+ continue;
+ case 'engineering':
+ result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));
+ continue;
+ case 'notation-simple':
+ result.notation = 'standard';
+ continue;
+ // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h
+ case 'unit-width-narrow':
+ result.currencyDisplay = 'narrowSymbol';
+ result.unitDisplay = 'narrow';
+ continue;
+ case 'unit-width-short':
+ result.currencyDisplay = 'code';
+ result.unitDisplay = 'short';
+ continue;
+ case 'unit-width-full-name':
+ result.currencyDisplay = 'name';
+ result.unitDisplay = 'long';
+ continue;
+ case 'unit-width-iso-code':
+ result.currencyDisplay = 'symbol';
+ continue;
+ case 'scale':
+ result.scale = parseFloat(token.options[0]);
+ continue;
+ // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width
+ case 'integer-width':
+ if (token.options.length > 1) {
+ throw new RangeError('integer-width stems only accept a single optional option');
+ }
+ token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {
+ if (g1) {
+ result.minimumIntegerDigits = g2.length;
+ }
+ else if (g3 && g4) {
+ throw new Error('We currently do not support maximum integer digits');
+ }
+ else if (g5) {
+ throw new Error('We currently do not support exact integer digits');
+ }
+ return '';
+ });
+ continue;
+ }
+ // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width
+ if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {
+ result.minimumIntegerDigits = token.stem.length;
+ continue;
+ }
+ if (FRACTION_PRECISION_REGEX.test(token.stem)) {
+ // Precision
+ // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision
+ // precision-integer case
+ if (token.options.length > 1) {
+ throw new RangeError('Fraction-precision stems only accept a single optional option');
+ }
+ token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {
+ // .000* case (before ICU67 it was .000+)
+ if (g2 === '*') {
+ result.minimumFractionDigits = g1.length;
+ }
+ // .### case
+ else if (g3 && g3[0] === '#') {
+ result.maximumFractionDigits = g3.length;
+ }
+ // .00## case
+ else if (g4 && g5) {
+ result.minimumFractionDigits = g4.length;
+ result.maximumFractionDigits = g4.length + g5.length;
+ }
+ else {
+ result.minimumFractionDigits = g1.length;
+ result.maximumFractionDigits = g1.length;
+ }
+ return '';
+ });
+ var opt = token.options[0];
+ // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display
+ if (opt === 'w') {
+ result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' });
+ }
+ else if (opt) {
+ result = __assign(__assign({}, result), parseSignificantPrecision(opt));
+ }
+ continue;
+ }
+ // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision
+ if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {
+ result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));
+ continue;
+ }
+ var signOpts = parseSign(token.stem);
+ if (signOpts) {
+ result = __assign(__assign({}, result), signOpts);
+ }
+ var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);
+ if (conciseScientificAndEngineeringOpts) {
+ result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);
+ }
+ }
+ return result;
+}
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.d.ts b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cf9e90e08ec19fcb4e9d1c58d869126b004714a6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.d.ts
@@ -0,0 +1,2 @@
+export declare const WHITE_SPACE_REGEX: RegExp;
+//# sourceMappingURL=regex.generated.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.d.ts.map b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e33020d3db0e0a79683419232d2f601231af8b83
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"regex.generated.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-skeleton-parser/regex.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,iBAAiB,QAA0C,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js
new file mode 100644
index 0000000000000000000000000000000000000000..2774598cf4ae09a12bff0cac6a53ac480a614b51
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js
@@ -0,0 +1,2 @@
+// @generated from regex-gen.ts
+export var WHITE_SPACE_REGEX = /[\t-\r \x85\u200E\u200F\u2028\u2029]/i;
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/number.d.ts b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/number.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..45e2641f3ebb47970b51fb8319b64f8b6df7f5b0
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/number.d.ts
@@ -0,0 +1,14 @@
+import { NumberFormatOptions } from '@formatjs/ecma402-abstract';
+export interface ExtendedNumberFormatOptions extends NumberFormatOptions {
+ scale?: number;
+}
+export interface NumberSkeletonToken {
+ stem: string;
+ options: string[];
+}
+export declare function parseNumberSkeletonFromString(skeleton: string): NumberSkeletonToken[];
+/**
+ * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options
+ */
+export declare function parseNumberSkeleton(tokens: NumberSkeletonToken[]): ExtendedNumberFormatOptions;
+//# sourceMappingURL=number.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/number.d.ts.map b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/number.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..5469f9056cb0d3073a638a764489b764f46670f2
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/number.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-skeleton-parser/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,4BAA4B,CAAA;AAG9D,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AACD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,GACf,mBAAmB,EAAE,CA0BvB;AAiID;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,EAAE,GAC5B,2BAA2B,CAuL7B"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/number.js b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/number.js
new file mode 100644
index 0000000000000000000000000000000000000000..310f72c71fae30482035405e64b587c3dd904d6e
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/number.js
@@ -0,0 +1,300 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parseNumberSkeleton = exports.parseNumberSkeletonFromString = void 0;
+var tslib_1 = require("tslib");
+var regex_generated_1 = require("./regex.generated");
+function parseNumberSkeletonFromString(skeleton) {
+ if (skeleton.length === 0) {
+ throw new Error('Number skeleton cannot be empty');
+ }
+ // Parse the skeleton
+ var stringTokens = skeleton
+ .split(regex_generated_1.WHITE_SPACE_REGEX)
+ .filter(function (x) { return x.length > 0; });
+ var tokens = [];
+ for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) {
+ var stringToken = stringTokens_1[_i];
+ var stemAndOptions = stringToken.split('/');
+ if (stemAndOptions.length === 0) {
+ throw new Error('Invalid number skeleton');
+ }
+ var stem = stemAndOptions[0], options = stemAndOptions.slice(1);
+ for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {
+ var option = options_1[_a];
+ if (option.length === 0) {
+ throw new Error('Invalid number skeleton');
+ }
+ }
+ tokens.push({ stem: stem, options: options });
+ }
+ return tokens;
+}
+exports.parseNumberSkeletonFromString = parseNumberSkeletonFromString;
+function icuUnitToEcma(unit) {
+ return unit.replace(/^(.*?)-/, '');
+}
+var FRACTION_PRECISION_REGEX = /^\.(?:(0+)(\*)?|(#+)|(0+)(#+))$/g;
+var SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\+|#+)?[rs]?$/g;
+var INTEGER_WIDTH_REGEX = /(\*)(0+)|(#+)(0+)|(0+)/g;
+var CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;
+function parseSignificantPrecision(str) {
+ var result = {};
+ if (str[str.length - 1] === 'r') {
+ result.roundingPriority = 'morePrecision';
+ }
+ else if (str[str.length - 1] === 's') {
+ result.roundingPriority = 'lessPrecision';
+ }
+ str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {
+ // @@@ case
+ if (typeof g2 !== 'string') {
+ result.minimumSignificantDigits = g1.length;
+ result.maximumSignificantDigits = g1.length;
+ }
+ // @@@+ case
+ else if (g2 === '+') {
+ result.minimumSignificantDigits = g1.length;
+ }
+ // .### case
+ else if (g1[0] === '#') {
+ result.maximumSignificantDigits = g1.length;
+ }
+ // .@@## or .@@@ case
+ else {
+ result.minimumSignificantDigits = g1.length;
+ result.maximumSignificantDigits =
+ g1.length + (typeof g2 === 'string' ? g2.length : 0);
+ }
+ return '';
+ });
+ return result;
+}
+function parseSign(str) {
+ switch (str) {
+ case 'sign-auto':
+ return {
+ signDisplay: 'auto',
+ };
+ case 'sign-accounting':
+ case '()':
+ return {
+ currencySign: 'accounting',
+ };
+ case 'sign-always':
+ case '+!':
+ return {
+ signDisplay: 'always',
+ };
+ case 'sign-accounting-always':
+ case '()!':
+ return {
+ signDisplay: 'always',
+ currencySign: 'accounting',
+ };
+ case 'sign-except-zero':
+ case '+?':
+ return {
+ signDisplay: 'exceptZero',
+ };
+ case 'sign-accounting-except-zero':
+ case '()?':
+ return {
+ signDisplay: 'exceptZero',
+ currencySign: 'accounting',
+ };
+ case 'sign-never':
+ case '+_':
+ return {
+ signDisplay: 'never',
+ };
+ }
+}
+function parseConciseScientificAndEngineeringStem(stem) {
+ // Engineering
+ var result;
+ if (stem[0] === 'E' && stem[1] === 'E') {
+ result = {
+ notation: 'engineering',
+ };
+ stem = stem.slice(2);
+ }
+ else if (stem[0] === 'E') {
+ result = {
+ notation: 'scientific',
+ };
+ stem = stem.slice(1);
+ }
+ if (result) {
+ var signDisplay = stem.slice(0, 2);
+ if (signDisplay === '+!') {
+ result.signDisplay = 'always';
+ stem = stem.slice(2);
+ }
+ else if (signDisplay === '+?') {
+ result.signDisplay = 'exceptZero';
+ stem = stem.slice(2);
+ }
+ if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {
+ throw new Error('Malformed concise eng/scientific notation');
+ }
+ result.minimumIntegerDigits = stem.length;
+ }
+ return result;
+}
+function parseNotationOptions(opt) {
+ var result = {};
+ var signOpts = parseSign(opt);
+ if (signOpts) {
+ return signOpts;
+ }
+ return result;
+}
+/**
+ * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options
+ */
+function parseNumberSkeleton(tokens) {
+ var result = {};
+ for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {
+ var token = tokens_1[_i];
+ switch (token.stem) {
+ case 'percent':
+ case '%':
+ result.style = 'percent';
+ continue;
+ case '%x100':
+ result.style = 'percent';
+ result.scale = 100;
+ continue;
+ case 'currency':
+ result.style = 'currency';
+ result.currency = token.options[0];
+ continue;
+ case 'group-off':
+ case ',_':
+ result.useGrouping = false;
+ continue;
+ case 'precision-integer':
+ case '.':
+ result.maximumFractionDigits = 0;
+ continue;
+ case 'measure-unit':
+ case 'unit':
+ result.style = 'unit';
+ result.unit = icuUnitToEcma(token.options[0]);
+ continue;
+ case 'compact-short':
+ case 'K':
+ result.notation = 'compact';
+ result.compactDisplay = 'short';
+ continue;
+ case 'compact-long':
+ case 'KK':
+ result.notation = 'compact';
+ result.compactDisplay = 'long';
+ continue;
+ case 'scientific':
+ result = (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, all), parseNotationOptions(opt))); }, {}));
+ continue;
+ case 'engineering':
+ result = (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, all), parseNotationOptions(opt))); }, {}));
+ continue;
+ case 'notation-simple':
+ result.notation = 'standard';
+ continue;
+ // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h
+ case 'unit-width-narrow':
+ result.currencyDisplay = 'narrowSymbol';
+ result.unitDisplay = 'narrow';
+ continue;
+ case 'unit-width-short':
+ result.currencyDisplay = 'code';
+ result.unitDisplay = 'short';
+ continue;
+ case 'unit-width-full-name':
+ result.currencyDisplay = 'name';
+ result.unitDisplay = 'long';
+ continue;
+ case 'unit-width-iso-code':
+ result.currencyDisplay = 'symbol';
+ continue;
+ case 'scale':
+ result.scale = parseFloat(token.options[0]);
+ continue;
+ // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width
+ case 'integer-width':
+ if (token.options.length > 1) {
+ throw new RangeError('integer-width stems only accept a single optional option');
+ }
+ token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {
+ if (g1) {
+ result.minimumIntegerDigits = g2.length;
+ }
+ else if (g3 && g4) {
+ throw new Error('We currently do not support maximum integer digits');
+ }
+ else if (g5) {
+ throw new Error('We currently do not support exact integer digits');
+ }
+ return '';
+ });
+ continue;
+ }
+ // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width
+ if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {
+ result.minimumIntegerDigits = token.stem.length;
+ continue;
+ }
+ if (FRACTION_PRECISION_REGEX.test(token.stem)) {
+ // Precision
+ // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision
+ // precision-integer case
+ if (token.options.length > 1) {
+ throw new RangeError('Fraction-precision stems only accept a single optional option');
+ }
+ token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {
+ // .000* case (before ICU67 it was .000+)
+ if (g2 === '*') {
+ result.minimumFractionDigits = g1.length;
+ }
+ // .### case
+ else if (g3 && g3[0] === '#') {
+ result.maximumFractionDigits = g3.length;
+ }
+ // .00## case
+ else if (g4 && g5) {
+ result.minimumFractionDigits = g4.length;
+ result.maximumFractionDigits = g4.length + g5.length;
+ }
+ else {
+ result.minimumFractionDigits = g1.length;
+ result.maximumFractionDigits = g1.length;
+ }
+ return '';
+ });
+ var opt = token.options[0];
+ // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display
+ if (opt === 'w') {
+ result = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, result), { trailingZeroDisplay: 'stripIfInteger' });
+ }
+ else if (opt) {
+ result = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, result), parseSignificantPrecision(opt));
+ }
+ continue;
+ }
+ // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision
+ if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {
+ result = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, result), parseSignificantPrecision(token.stem));
+ continue;
+ }
+ var signOpts = parseSign(token.stem);
+ if (signOpts) {
+ result = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, result), signOpts);
+ }
+ var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);
+ if (conciseScientificAndEngineeringOpts) {
+ result = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, result), conciseScientificAndEngineeringOpts);
+ }
+ }
+ return result;
+}
+exports.parseNumberSkeleton = parseNumberSkeleton;
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/package.json b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a0d8641ea84408d646629b7df76a86bd43992ee0
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@formatjs/icu-skeleton-parser",
+ "version": "1.3.6",
+ "main": "index.js",
+ "module": "lib/index.js",
+ "types": "index.d.ts",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/formatjs/formatjs.git",
+ "directory": "packages/icu-skeleton-parser"
+ },
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.11.4",
+ "tslib": "^2.1.0"
+ }
+}
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/regex.generated.d.ts b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/regex.generated.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cf9e90e08ec19fcb4e9d1c58d869126b004714a6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/regex.generated.d.ts
@@ -0,0 +1,2 @@
+export declare const WHITE_SPACE_REGEX: RegExp;
+//# sourceMappingURL=regex.generated.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/regex.generated.d.ts.map b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/regex.generated.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..e98ffadf3d8dfb9b8f3b543249f93d365efa0806
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/regex.generated.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"regex.generated.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-skeleton-parser/regex.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,iBAAiB,QAA0C,CAAA"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/icu-skeleton-parser/regex.generated.js b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/regex.generated.js
new file mode 100644
index 0000000000000000000000000000000000000000..d535125694a95ef98cbae08bdac2eb304685da07
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/icu-skeleton-parser/regex.generated.js
@@ -0,0 +1,5 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.WHITE_SPACE_REGEX = void 0;
+// @generated from regex-gen.ts
+exports.WHITE_SPACE_REGEX = /[\t-\r \x85\u200E\u200F\u2028\u2029]/i;
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/LICENSE.md b/app/frontend/node_modules/@formatjs/intl-localematcher/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..0320eebafa71377cef72eabddb673e850d6d4517
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/LICENSE.md
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) 2021 FormatJS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/README.md b/app/frontend/node_modules/@formatjs/intl-localematcher/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f7c9b7e9a105f6b9f54a283a02e206797ae768f6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/README.md
@@ -0,0 +1,3 @@
+# Intl LocaleMatcher
+
+We've migrated the docs to https://formatjs.io/docs/polyfills/intl-localematcher.
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestAvailableLocale.d.ts b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestAvailableLocale.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cd0cdb89f1e663edff4439bf3e24dfe79a03b182
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestAvailableLocale.d.ts
@@ -0,0 +1,7 @@
+/**
+ * https://tc39.es/ecma402/#sec-bestavailablelocale
+ * @param availableLocales
+ * @param locale
+ */
+export declare function BestAvailableLocale(availableLocales: Set, locale: string): string | undefined;
+//# sourceMappingURL=BestAvailableLocale.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestAvailableLocale.d.ts.map b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestAvailableLocale.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..7bd82639fffb019bda3e35f2bc08e55f513e7e8d
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestAvailableLocale.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"BestAvailableLocale.d.ts","sourceRoot":"","sources":["../../../../../../packages/intl-localematcher/abstract/BestAvailableLocale.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,MAAM,EAAE,MAAM,sBAgBf"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestAvailableLocale.js b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestAvailableLocale.js
new file mode 100644
index 0000000000000000000000000000000000000000..3358b028a061d991ca2e2e26ea5b5be9a09d7772
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestAvailableLocale.js
@@ -0,0 +1,25 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.BestAvailableLocale = void 0;
+/**
+ * https://tc39.es/ecma402/#sec-bestavailablelocale
+ * @param availableLocales
+ * @param locale
+ */
+function BestAvailableLocale(availableLocales, locale) {
+ var candidate = locale;
+ while (true) {
+ if (availableLocales.has(candidate)) {
+ return candidate;
+ }
+ var pos = candidate.lastIndexOf('-');
+ if (!~pos) {
+ return undefined;
+ }
+ if (pos >= 2 && candidate[pos - 2] === '-') {
+ pos -= 2;
+ }
+ candidate = candidate.slice(0, pos);
+ }
+}
+exports.BestAvailableLocale = BestAvailableLocale;
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestFitMatcher.d.ts b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestFitMatcher.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..734f2f4876242f2859d51483ee5f337c6011f455
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestFitMatcher.d.ts
@@ -0,0 +1,9 @@
+import { LookupMatcherResult } from './types';
+/**
+ * https://tc39.es/ecma402/#sec-bestfitmatcher
+ * @param availableLocales
+ * @param requestedLocales
+ * @param getDefaultLocale
+ */
+export declare function BestFitMatcher(availableLocales: Set, requestedLocales: string[], getDefaultLocale: () => string): LookupMatcherResult;
+//# sourceMappingURL=BestFitMatcher.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestFitMatcher.d.ts.map b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestFitMatcher.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..66aaf1dbcfd2db011a8fac3e26554f133ae5aee9
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestFitMatcher.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"BestFitMatcher.d.ts","sourceRoot":"","sources":["../../../../../../packages/intl-localematcher/abstract/BestFitMatcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,mBAAmB,EAAC,MAAM,SAAS,CAAA;AAG3C;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,gBAAgB,EAAE,MAAM,EAAE,EAC1B,gBAAgB,EAAE,MAAM,MAAM,GAC7B,mBAAmB,CAiErB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestFitMatcher.js b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestFitMatcher.js
new file mode 100644
index 0000000000000000000000000000000000000000..32dcbef0e24b63c53079bee10e33d260620b06b6
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/BestFitMatcher.js
@@ -0,0 +1,65 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.BestFitMatcher = void 0;
+var BestAvailableLocale_1 = require("./BestAvailableLocale");
+var utils_1 = require("./utils");
+/**
+ * https://tc39.es/ecma402/#sec-bestfitmatcher
+ * @param availableLocales
+ * @param requestedLocales
+ * @param getDefaultLocale
+ */
+function BestFitMatcher(availableLocales, requestedLocales, getDefaultLocale) {
+ var minimizedAvailableLocaleMap = {};
+ var availableLocaleMap = {};
+ var canonicalizedLocaleMap = {};
+ var minimizedAvailableLocales = new Set();
+ availableLocales.forEach(function (locale) {
+ var minimizedLocale = new Intl.Locale(locale)
+ .minimize()
+ .toString();
+ var canonicalizedLocale = Intl.getCanonicalLocales(locale)[0] || locale;
+ minimizedAvailableLocaleMap[minimizedLocale] = locale;
+ availableLocaleMap[locale] = locale;
+ canonicalizedLocaleMap[canonicalizedLocale] = locale;
+ minimizedAvailableLocales.add(minimizedLocale);
+ minimizedAvailableLocales.add(locale);
+ minimizedAvailableLocales.add(canonicalizedLocale);
+ });
+ var foundLocale;
+ for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {
+ var l = requestedLocales_1[_i];
+ if (foundLocale) {
+ break;
+ }
+ var noExtensionLocale = l.replace(utils_1.UNICODE_EXTENSION_SEQUENCE_REGEX, '');
+ if (availableLocales.has(noExtensionLocale)) {
+ foundLocale = noExtensionLocale;
+ break;
+ }
+ if (minimizedAvailableLocales.has(noExtensionLocale)) {
+ foundLocale = noExtensionLocale;
+ break;
+ }
+ var locale = new Intl.Locale(noExtensionLocale);
+ var maximizedRequestedLocale = locale.maximize().toString();
+ var minimizedRequestedLocale = locale.minimize().toString();
+ // Check minimized locale
+ if (minimizedAvailableLocales.has(minimizedRequestedLocale)) {
+ foundLocale = minimizedRequestedLocale;
+ break;
+ }
+ // Lookup algo on maximized locale
+ foundLocale = (0, BestAvailableLocale_1.BestAvailableLocale)(minimizedAvailableLocales, maximizedRequestedLocale);
+ }
+ if (!foundLocale) {
+ return { locale: getDefaultLocale() };
+ }
+ return {
+ locale: availableLocaleMap[foundLocale] ||
+ canonicalizedLocaleMap[foundLocale] ||
+ minimizedAvailableLocaleMap[foundLocale] ||
+ foundLocale,
+ };
+}
+exports.BestFitMatcher = BestFitMatcher;
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/CanonicalizeLocaleList.d.ts b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/CanonicalizeLocaleList.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b2e2872827aa19359228a1914b04e6a3eb13c4b9
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/CanonicalizeLocaleList.d.ts
@@ -0,0 +1,6 @@
+/**
+ * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist
+ * @param locales
+ */
+export declare function CanonicalizeLocaleList(locales?: string | string[]): string[];
+//# sourceMappingURL=CanonicalizeLocaleList.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/CanonicalizeLocaleList.d.ts.map b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/CanonicalizeLocaleList.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..d3233f83633e5144a9e0262e61f784027686d052
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/CanonicalizeLocaleList.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CanonicalizeLocaleList.d.ts","sourceRoot":"","sources":["../../../../../../packages/intl-localematcher/abstract/CanonicalizeLocaleList.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAG5E"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/CanonicalizeLocaleList.js b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/CanonicalizeLocaleList.js
new file mode 100644
index 0000000000000000000000000000000000000000..a9b77c072c7d5d1df6cd3c035a4416820a0e9c55
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/CanonicalizeLocaleList.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CanonicalizeLocaleList = void 0;
+/**
+ * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist
+ * @param locales
+ */
+function CanonicalizeLocaleList(locales) {
+ // TODO
+ return Intl.getCanonicalLocales(locales);
+}
+exports.CanonicalizeLocaleList = CanonicalizeLocaleList;
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupMatcher.d.ts b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupMatcher.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ff80999c16ac7f106b876627e0bd0813b98bd6d2
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupMatcher.d.ts
@@ -0,0 +1,9 @@
+import { LookupMatcherResult } from './types';
+/**
+ * https://tc39.es/ecma402/#sec-lookupmatcher
+ * @param availableLocales
+ * @param requestedLocales
+ * @param getDefaultLocale
+ */
+export declare function LookupMatcher(availableLocales: Set, requestedLocales: string[], getDefaultLocale: () => string): LookupMatcherResult;
+//# sourceMappingURL=LookupMatcher.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupMatcher.d.ts.map b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupMatcher.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..fc304ad3ec6b479643379b7834f4a2ef0009c05c
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupMatcher.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"LookupMatcher.d.ts","sourceRoot":"","sources":["../../../../../../packages/intl-localematcher/abstract/LookupMatcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,mBAAmB,EAAC,MAAM,SAAS,CAAA;AAE3C;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,gBAAgB,EAAE,MAAM,EAAE,EAC1B,gBAAgB,EAAE,MAAM,MAAM,GAC7B,mBAAmB,CAwBrB"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupMatcher.js b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupMatcher.js
new file mode 100644
index 0000000000000000000000000000000000000000..1515afad330bb80bf278fe3a931fabe66be0ee8a
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupMatcher.js
@@ -0,0 +1,29 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.LookupMatcher = void 0;
+var utils_1 = require("./utils");
+var BestAvailableLocale_1 = require("./BestAvailableLocale");
+/**
+ * https://tc39.es/ecma402/#sec-lookupmatcher
+ * @param availableLocales
+ * @param requestedLocales
+ * @param getDefaultLocale
+ */
+function LookupMatcher(availableLocales, requestedLocales, getDefaultLocale) {
+ var result = { locale: '' };
+ for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {
+ var locale = requestedLocales_1[_i];
+ var noExtensionLocale = locale.replace(utils_1.UNICODE_EXTENSION_SEQUENCE_REGEX, '');
+ var availableLocale = (0, BestAvailableLocale_1.BestAvailableLocale)(availableLocales, noExtensionLocale);
+ if (availableLocale) {
+ result.locale = availableLocale;
+ if (locale !== noExtensionLocale) {
+ result.extension = locale.slice(noExtensionLocale.length + 1, locale.length);
+ }
+ return result;
+ }
+ }
+ result.locale = getDefaultLocale();
+ return result;
+}
+exports.LookupMatcher = LookupMatcher;
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupSupportedLocales.d.ts b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupSupportedLocales.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..21f89f5abd1b7478a391d7835fa803be81eaded5
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupSupportedLocales.d.ts
@@ -0,0 +1,7 @@
+/**
+ * https://tc39.es/ecma402/#sec-lookupsupportedlocales
+ * @param availableLocales
+ * @param requestedLocales
+ */
+export declare function LookupSupportedLocales(availableLocales: Set, requestedLocales: string[]): string[];
+//# sourceMappingURL=LookupSupportedLocales.d.ts.map
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupSupportedLocales.d.ts.map b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupSupportedLocales.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..122ff2a329d47730011ff16989801d6df2351444
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupSupportedLocales.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"LookupSupportedLocales.d.ts","sourceRoot":"","sources":["../../../../../../packages/intl-localematcher/abstract/LookupSupportedLocales.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,gBAAgB,EAAE,MAAM,EAAE,YAiB3B"}
\ No newline at end of file
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupSupportedLocales.js b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupSupportedLocales.js
new file mode 100644
index 0000000000000000000000000000000000000000..bdb6fac5fa79d9c0de934a1d9913b60c6cecdbdb
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/LookupSupportedLocales.js
@@ -0,0 +1,23 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.LookupSupportedLocales = void 0;
+var utils_1 = require("./utils");
+var BestAvailableLocale_1 = require("./BestAvailableLocale");
+/**
+ * https://tc39.es/ecma402/#sec-lookupsupportedlocales
+ * @param availableLocales
+ * @param requestedLocales
+ */
+function LookupSupportedLocales(availableLocales, requestedLocales) {
+ var subset = [];
+ for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {
+ var locale = requestedLocales_1[_i];
+ var noExtensionLocale = locale.replace(utils_1.UNICODE_EXTENSION_SEQUENCE_REGEX, '');
+ var availableLocale = (0, BestAvailableLocale_1.BestAvailableLocale)(availableLocales, noExtensionLocale);
+ if (availableLocale) {
+ subset.push(availableLocale);
+ }
+ }
+ return subset;
+}
+exports.LookupSupportedLocales = LookupSupportedLocales;
diff --git a/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/ResolveLocale.d.ts b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/ResolveLocale.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d11ebce12c7c44943b4c6d501243a08a44fa9c21
--- /dev/null
+++ b/app/frontend/node_modules/@formatjs/intl-localematcher/abstract/ResolveLocale.d.ts
@@ -0,0 +1,15 @@
+export interface ResolveLocaleResult {
+ locale: string;
+ dataLocale: string;
+ [k: string]: any;
+}
+/**
+ * https://tc39.es/ecma402/#sec-resolvelocale
+ */
+export declare function ResolveLocale(availableLocales: Set, requestedLocales: string[], options: {
+ localeMatcher: string;
+ [k: string]: string;
+}, relevantExtensionKeys: K[], localeData: Record