diff --git a/.eslintrc.js b/.eslintrc.js
index a4810ddcebcc..22bb0158bc8e 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -95,7 +95,8 @@ module.exports = {
'plugin:you-dont-need-lodash-underscore/all',
'prettier',
],
- plugins: ['@typescript-eslint', 'jsdoc', 'you-dont-need-lodash-underscore', 'react-native-a11y', 'react', 'testing-library'],
+ plugins: ['@typescript-eslint', 'jsdoc', 'you-dont-need-lodash-underscore', 'react-native-a11y', 'react', 'testing-library', 'eslint-plugin-react-compiler'],
+ ignorePatterns: ['lib/**'],
parser: '@typescript-eslint/parser',
parserOptions: {
project: path.resolve(__dirname, './tsconfig.json'),
@@ -187,6 +188,7 @@ module.exports = {
touchables: ['PressableWithoutFeedback', 'PressableWithFeedback'],
},
],
+ 'react-compiler/react-compiler': 'error',
// Disallow usage of certain functions and imports
'no-restricted-syntax': [
diff --git a/.github/actions/javascript/authorChecklist/index.js b/.github/actions/javascript/authorChecklist/index.js
index 73180a458dc9..e9861f8737a6 100644
--- a/.github/actions/javascript/authorChecklist/index.js
+++ b/.github/actions/javascript/authorChecklist/index.js
@@ -17707,7 +17707,7 @@ exports["default"] = _default;
var _highlight = __nccwpck_require__(7654);
var _picocolors = _interopRequireWildcard(__nccwpck_require__(7023), true);
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
-function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
const colors = typeof process === "object" && (process.env.FORCE_COLOR === "0" || process.env.FORCE_COLOR === "false") ? (0, _picocolors.createColors)(false) : _picocolors.default;
const compose = (f, g) => v => f(g(v));
let pcWithForcedColor = undefined;
@@ -20496,20 +20496,21 @@ function TaggedTemplateExpression(node) {
this.print(node.typeParameters, node);
this.print(node.quasi, node);
}
-function TemplateElement(node, parent) {
- const isFirst = parent.quasis[0] === node;
- const isLast = parent.quasis[parent.quasis.length - 1] === node;
- const value = (isFirst ? "`" : "}") + node.value.raw + (isLast ? "`" : "${");
- this.token(value, true);
+function TemplateElement() {
+ throw new Error("TemplateElement printing is handled in TemplateLiteral");
}
function TemplateLiteral(node) {
const quasis = node.quasis;
+ let partRaw = "`";
for (let i = 0; i < quasis.length; i++) {
- this.print(quasis[i], node);
+ partRaw += quasis[i].value.raw;
if (i + 1 < quasis.length) {
+ this.token(partRaw + "${", true);
this.print(node.expressions[i], node);
+ partRaw = "}";
}
}
+ this.token(partRaw + "`", true);
}
//# sourceMappingURL=template-literals.js.map
@@ -20624,14 +20625,16 @@ function RecordExpression(node) {
const props = node.properties;
let startToken;
let endToken;
- if (this.format.recordAndTupleSyntaxType === "bar") {
- startToken = "{|";
- endToken = "|}";
- } else if (this.format.recordAndTupleSyntaxType !== "hash" && this.format.recordAndTupleSyntaxType != null) {
- throw new Error(`The "recordAndTupleSyntaxType" generator option must be "bar" or "hash" (${JSON.stringify(this.format.recordAndTupleSyntaxType)} received).`);
- } else {
- startToken = "#{";
- endToken = "}";
+ {
+ if (this.format.recordAndTupleSyntaxType === "bar") {
+ startToken = "{|";
+ endToken = "|}";
+ } else if (this.format.recordAndTupleSyntaxType !== "hash" && this.format.recordAndTupleSyntaxType != null) {
+ throw new Error(`The "recordAndTupleSyntaxType" generator option must be "bar" or "hash" (${JSON.stringify(this.format.recordAndTupleSyntaxType)} received).`);
+ } else {
+ startToken = "#{";
+ endToken = "}";
+ }
}
this.token(startToken);
if (props.length) {
@@ -20649,14 +20652,16 @@ function TupleExpression(node) {
const len = elems.length;
let startToken;
let endToken;
- if (this.format.recordAndTupleSyntaxType === "bar") {
- startToken = "[|";
- endToken = "|]";
- } else if (this.format.recordAndTupleSyntaxType === "hash") {
- startToken = "#[";
- endToken = "]";
- } else {
- throw new Error(`${this.format.recordAndTupleSyntaxType} is not a valid recordAndTuple syntax type`);
+ {
+ if (this.format.recordAndTupleSyntaxType === "bar") {
+ startToken = "[|";
+ endToken = "|]";
+ } else if (this.format.recordAndTupleSyntaxType === "hash") {
+ startToken = "#[";
+ endToken = "]";
+ } else {
+ throw new Error(`${this.format.recordAndTupleSyntaxType} is not a valid recordAndTuple syntax type`);
+ }
}
this.token(startToken);
for (let i = 0; i < elems.length; i++) {
@@ -21146,7 +21151,8 @@ function TSMappedType(node) {
nameType,
optional,
readonly,
- typeParameter
+ typeParameter,
+ typeAnnotation
} = node;
this.tokenChar(123);
this.space();
@@ -21172,9 +21178,11 @@ function TSMappedType(node) {
tokenIfPlusMinus(this, optional);
this.tokenChar(63);
}
- this.tokenChar(58);
- this.space();
- this.print(node.typeAnnotation, node);
+ if (typeAnnotation) {
+ this.tokenChar(58);
+ this.space();
+ this.print(typeAnnotation, node);
+ }
this.space();
this.tokenChar(125);
}
@@ -21454,7 +21462,6 @@ exports["default"] = generate;
var _sourceMap = __nccwpck_require__(6280);
var _printer = __nccwpck_require__(5637);
function normalizeOptions(code, opts) {
- var _opts$recordAndTupleS;
const format = {
auxiliaryCommentBefore: opts.auxiliaryCommentBefore,
auxiliaryCommentAfter: opts.auxiliaryCommentAfter,
@@ -21474,13 +21481,14 @@ function normalizeOptions(code, opts) {
wrap: true,
minimal: false
}, opts.jsescOption),
- recordAndTupleSyntaxType: (_opts$recordAndTupleS = opts.recordAndTupleSyntaxType) != null ? _opts$recordAndTupleS : "hash",
topicToken: opts.topicToken,
importAttributesKeyword: opts.importAttributesKeyword
};
{
+ var _opts$recordAndTupleS;
format.decoratorsBeforeExport = opts.decoratorsBeforeExport;
format.jsescOption.json = opts.jsonCompatibleStrings;
+ format.recordAndTupleSyntaxType = (_opts$recordAndTupleS = opts.recordAndTupleSyntaxType) != null ? _opts$recordAndTupleS : "hash";
}
if (format.minified) {
format.compact = true;
@@ -22335,7 +22343,7 @@ class Printer {
}
this._printStack.push(node);
const oldInAux = this._insideAux;
- this._insideAux = node.loc == undefined;
+ this._insideAux = node.loc == null;
this._maybeAddAuxComment(this._insideAux && !oldInAux);
const parenthesized = (_node$extra = node.extra) == null ? void 0 : _node$extra.parenthesized;
let shouldPrintParens = forceParens || parenthesized && format.retainFunctionParens && nodeType === "FunctionExpression" || needsParens(node, parent, this._printStack);
@@ -22628,7 +22636,7 @@ class Printer {
if (type === 0) {
let offset = 0;
if (i === 0) {
- if (this._buf.hasContent() && (comment.type === "CommentLine" || commentStartLine != commentEndLine)) {
+ if (this._buf.hasContent() && (comment.type === "CommentLine" || commentStartLine !== commentEndLine)) {
offset = leadingCommentNewline = 1;
}
} else {
@@ -22845,8 +22853,7 @@ const visitor = {
requeueComputedKeyAndDecorators(path);
}
};
-var _default = visitor;
-exports["default"] = _default;
+var _default = exports["default"] = visitor;
//# sourceMappingURL=index.js.map
@@ -23660,7 +23667,7 @@ var _jsTokens = __nccwpck_require__(1531);
var _helperValidatorIdentifier = __nccwpck_require__(2738);
var _picocolors = _interopRequireWildcard(__nccwpck_require__(7023), true);
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
-function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
const colors = typeof process === "object" && (process.env.FORCE_COLOR === "0" || process.env.FORCE_COLOR === "false") ? (0, _picocolors.createColors)(false) : _picocolors.default;
const compose = (f, g) => v => f(g(v));
const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]);
@@ -23687,7 +23694,7 @@ let tokenize;
if ((0, _helperValidatorIdentifier.isKeyword)(token.value) || (0, _helperValidatorIdentifier.isStrictReservedWord)(token.value, true) || sometimesKeywords.has(token.value)) {
return "keyword";
}
- if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.slice(offset - 2, offset) == "")) {
+ if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.slice(offset - 2, offset) === "")) {
return "jsxIdentifier";
}
if (token.value[0] !== token.value[0].toLowerCase()) {
@@ -23857,10 +23864,7 @@ const NodeDescriptions = {
VariableDeclarator: "variable declaration",
YieldExpression: "yield expression"
};
-const toNodeDescription = ({
- type,
- prefix
-}) => type === "UpdateExpression" ? NodeDescriptions.UpdateExpression[String(prefix)] : NodeDescriptions[type];
+const toNodeDescription = node => node.type === "UpdateExpression" ? NodeDescriptions.UpdateExpression[`${node.prefix}`] : NodeDescriptions[node.type];
var StandardErrors = {
AccessorIsGenerator: ({
kind
@@ -24071,6 +24075,7 @@ var StandardErrors = {
UnterminatedRegExp: "Unterminated regular expression.",
UnterminatedString: "Unterminated string constant.",
UnterminatedTemplate: "Unterminated template.",
+ UsingDeclarationExport: "Using declaration cannot be exported.",
UsingDeclarationHasBindingPattern: "Using declaration cannot have destructuring patterns.",
VarRedeclaration: ({
identifierName
@@ -24360,6 +24365,10 @@ var estree = superClass => class ESTreeParserMixin extends superClass {
}
return this.finishNode(node, "MethodDefinition");
}
+ nameIsConstructor(key) {
+ if (key.type === "Literal") return key.value === "constructor";
+ return super.nameIsConstructor(key);
+ }
parseClassProperty(...args) {
const propertyNode = super.parseClassProperty(...args);
{
@@ -24424,9 +24433,9 @@ var estree = superClass => class ESTreeParserMixin extends superClass {
}
}
toAssignableObjectExpressionProp(prop, isLast, isLHS) {
- if (prop.kind === "get" || prop.kind === "set") {
+ if (prop.type === "Property" && (prop.kind === "get" || prop.kind === "set")) {
this.raise(Errors.PatternHasAccessor, prop.key);
- } else if (prop.method) {
+ } else if (prop.type === "Property" && prop.method) {
this.raise(Errors.PatternHasMethod, prop.key);
} else {
super.toAssignableObjectExpressionProp(prop, isLast, isLHS);
@@ -24438,9 +24447,9 @@ var estree = superClass => class ESTreeParserMixin extends superClass {
node.type = "ImportExpression";
node.source = node.arguments[0];
if (this.hasPlugin("importAttributes") || this.hasPlugin("importAssertions")) {
- var _node$arguments$, _node$arguments$2;
- node.options = (_node$arguments$ = node.arguments[1]) != null ? _node$arguments$ : null;
- node.attributes = (_node$arguments$2 = node.arguments[1]) != null ? _node$arguments$2 : null;
+ var _ref, _ref2;
+ node.options = (_ref = node.arguments[1]) != null ? _ref : null;
+ node.attributes = (_ref2 = node.arguments[1]) != null ? _ref2 : null;
}
delete node.arguments;
delete node.callee;
@@ -24512,7 +24521,7 @@ var estree = superClass => class ESTreeParserMixin extends superClass {
return node.type === "Property" && node.kind === "init" && !node.method;
}
isObjectMethod(node) {
- return node.method || node.kind === "get" || node.kind === "set";
+ return node.type === "Property" && (node.method || node.kind === "get" || node.kind === "set");
}
finishNodeAt(node, type, endLoc) {
return toESTreeLocation(super.finishNodeAt(node, type, endLoc));
@@ -25415,7 +25424,9 @@ class CommentsParser extends BaseParser {
const {
commentsLen
} = this.state;
- if (this.comments.length != commentsLen) this.comments.length = commentsLen;
+ if (this.comments.length !== commentsLen) {
+ this.comments.length = commentsLen;
+ }
this.comments.push(comment);
this.state.commentsLen++;
}
@@ -25637,12 +25648,8 @@ class State {
get strict() {
return (this.flags & 1) > 0;
}
- set strict(value) {
- if (value) {
- this.flags |= 1;
- } else {
- this.flags &= ~1;
- }
+ set strict(v) {
+ if (v) this.flags |= 1;else this.flags &= -2;
}
init({
strictMode,
@@ -25658,112 +25665,68 @@ class State {
get maybeInArrowParameters() {
return (this.flags & 2) > 0;
}
- set maybeInArrowParameters(value) {
- if (value) {
- this.flags |= 2;
- } else {
- this.flags &= ~2;
- }
+ set maybeInArrowParameters(v) {
+ if (v) this.flags |= 2;else this.flags &= -3;
}
get inType() {
return (this.flags & 4) > 0;
}
- set inType(value) {
- if (value) {
- this.flags |= 4;
- } else {
- this.flags &= ~4;
- }
+ set inType(v) {
+ if (v) this.flags |= 4;else this.flags &= -5;
}
get noAnonFunctionType() {
return (this.flags & 8) > 0;
}
- set noAnonFunctionType(value) {
- if (value) {
- this.flags |= 8;
- } else {
- this.flags &= ~8;
- }
+ set noAnonFunctionType(v) {
+ if (v) this.flags |= 8;else this.flags &= -9;
}
get hasFlowComment() {
return (this.flags & 16) > 0;
}
- set hasFlowComment(value) {
- if (value) {
- this.flags |= 16;
- } else {
- this.flags &= ~16;
- }
+ set hasFlowComment(v) {
+ if (v) this.flags |= 16;else this.flags &= -17;
}
get isAmbientContext() {
return (this.flags & 32) > 0;
}
- set isAmbientContext(value) {
- if (value) {
- this.flags |= 32;
- } else {
- this.flags &= ~32;
- }
+ set isAmbientContext(v) {
+ if (v) this.flags |= 32;else this.flags &= -33;
}
get inAbstractClass() {
return (this.flags & 64) > 0;
}
- set inAbstractClass(value) {
- if (value) {
- this.flags |= 64;
- } else {
- this.flags &= ~64;
- }
+ set inAbstractClass(v) {
+ if (v) this.flags |= 64;else this.flags &= -65;
}
get inDisallowConditionalTypesContext() {
return (this.flags & 128) > 0;
}
- set inDisallowConditionalTypesContext(value) {
- if (value) {
- this.flags |= 128;
- } else {
- this.flags &= ~128;
- }
+ set inDisallowConditionalTypesContext(v) {
+ if (v) this.flags |= 128;else this.flags &= -129;
}
get soloAwait() {
return (this.flags & 256) > 0;
}
- set soloAwait(value) {
- if (value) {
- this.flags |= 256;
- } else {
- this.flags &= ~256;
- }
+ set soloAwait(v) {
+ if (v) this.flags |= 256;else this.flags &= -257;
}
get inFSharpPipelineDirectBody() {
return (this.flags & 512) > 0;
}
- set inFSharpPipelineDirectBody(value) {
- if (value) {
- this.flags |= 512;
- } else {
- this.flags &= ~512;
- }
+ set inFSharpPipelineDirectBody(v) {
+ if (v) this.flags |= 512;else this.flags &= -513;
}
get canStartJSXElement() {
return (this.flags & 1024) > 0;
}
- set canStartJSXElement(value) {
- if (value) {
- this.flags |= 1024;
- } else {
- this.flags &= ~1024;
- }
+ set canStartJSXElement(v) {
+ if (v) this.flags |= 1024;else this.flags &= -1025;
}
get containsEsc() {
return (this.flags & 2048) > 0;
}
- set containsEsc(value) {
- if (value) {
- this.flags |= 2048;
- } else {
- this.flags &= ~2048;
- }
+ set containsEsc(v) {
+ if (v) this.flags |= 2048;else this.flags &= -2049;
}
curPosition() {
return new Position(this.curLine, this.pos - this.lineStart, this.pos);
@@ -28589,50 +28552,56 @@ var flow = superClass => class FlowParserMixin extends superClass {
this.state.noAnonFunctionType = oldNoAnonFunctionType;
return type;
case 47:
- node.typeParameters = this.flowParseTypeParameterDeclaration();
- this.expect(10);
- tmp = this.flowParseFunctionTypeParams();
- node.params = tmp.params;
- node.rest = tmp.rest;
- node.this = tmp._this;
- this.expect(11);
- this.expect(19);
- node.returnType = this.flowParseType();
- return this.finishNode(node, "FunctionTypeAnnotation");
+ {
+ const node = this.startNode();
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ this.expect(10);
+ tmp = this.flowParseFunctionTypeParams();
+ node.params = tmp.params;
+ node.rest = tmp.rest;
+ node.this = tmp._this;
+ this.expect(11);
+ this.expect(19);
+ node.returnType = this.flowParseType();
+ return this.finishNode(node, "FunctionTypeAnnotation");
+ }
case 10:
- this.next();
- if (!this.match(11) && !this.match(21)) {
- if (tokenIsIdentifier(this.state.type) || this.match(78)) {
- const token = this.lookahead().type;
- isGroupedType = token !== 17 && token !== 14;
- } else {
- isGroupedType = true;
+ {
+ const node = this.startNode();
+ this.next();
+ if (!this.match(11) && !this.match(21)) {
+ if (tokenIsIdentifier(this.state.type) || this.match(78)) {
+ const token = this.lookahead().type;
+ isGroupedType = token !== 17 && token !== 14;
+ } else {
+ isGroupedType = true;
+ }
}
- }
- if (isGroupedType) {
- this.state.noAnonFunctionType = false;
- type = this.flowParseType();
- this.state.noAnonFunctionType = oldNoAnonFunctionType;
- if (this.state.noAnonFunctionType || !(this.match(12) || this.match(11) && this.lookahead().type === 19)) {
- this.expect(11);
- return type;
+ if (isGroupedType) {
+ this.state.noAnonFunctionType = false;
+ type = this.flowParseType();
+ this.state.noAnonFunctionType = oldNoAnonFunctionType;
+ if (this.state.noAnonFunctionType || !(this.match(12) || this.match(11) && this.lookahead().type === 19)) {
+ this.expect(11);
+ return type;
+ } else {
+ this.eat(12);
+ }
+ }
+ if (type) {
+ tmp = this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(type)]);
} else {
- this.eat(12);
+ tmp = this.flowParseFunctionTypeParams();
}
+ node.params = tmp.params;
+ node.rest = tmp.rest;
+ node.this = tmp._this;
+ this.expect(11);
+ this.expect(19);
+ node.returnType = this.flowParseType();
+ node.typeParameters = null;
+ return this.finishNode(node, "FunctionTypeAnnotation");
}
- if (type) {
- tmp = this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(type)]);
- } else {
- tmp = this.flowParseFunctionTypeParams();
- }
- node.params = tmp.params;
- node.rest = tmp.rest;
- node.this = tmp._this;
- this.expect(11);
- this.expect(19);
- node.returnType = this.flowParseType();
- node.typeParameters = null;
- return this.finishNode(node, "FunctionTypeAnnotation");
case 133:
return this.parseLiteral(this.state.value, "StringLiteralTypeAnnotation");
case 85:
@@ -28948,7 +28917,7 @@ var flow = superClass => class FlowParserMixin extends superClass {
const arrows = [];
while (stack.length !== 0) {
const node = stack.pop();
- if (node.type === "ArrowFunctionExpression") {
+ if (node.type === "ArrowFunctionExpression" && node.body.type !== "BlockStatement") {
if (node.typeParameters || !node.returnType) {
this.finishArrowValidation(node);
} else {
@@ -28985,18 +28954,18 @@ var flow = superClass => class FlowParserMixin extends superClass {
return result;
}
parseParenItem(node, startLoc) {
- node = super.parseParenItem(node, startLoc);
+ const newNode = super.parseParenItem(node, startLoc);
if (this.eat(17)) {
- node.optional = true;
+ newNode.optional = true;
this.resetEndLocation(node);
}
if (this.match(14)) {
const typeCastNode = this.startNodeAt(startLoc);
- typeCastNode.expression = node;
+ typeCastNode.expression = newNode;
typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();
return this.finishNode(typeCastNode, "TypeCastExpression");
}
- return node;
+ return newNode;
}
assertModuleNodeAllowed(node) {
if (node.type === "ImportDeclaration" && (node.importKind === "type" || node.importKind === "typeof") || node.type === "ExportNamedDeclaration" && node.exportKind === "type" || node.type === "ExportAllDeclaration" && node.exportKind === "type") {
@@ -30369,7 +30338,7 @@ var jsx = superClass => class JSXParserMixin extends superClass {
} else {
let count = 0;
let semi = false;
- while (count++ < 10 && this.state.pos < this.length && !(semi = this.codePointAtPos(this.state.pos) == 59)) {
+ while (count++ < 10 && this.state.pos < this.length && !(semi = this.codePointAtPos(this.state.pos) === 59)) {
++this.state.pos;
}
if (semi) {
@@ -30531,7 +30500,7 @@ var jsx = superClass => class JSXParserMixin extends superClass {
children.push(this.jsxParseElementAt(startLoc));
break;
case 141:
- children.push(this.parseExprAtom());
+ children.push(this.parseLiteral(this.state.value, "JSXText"));
break;
case 5:
{
@@ -30588,9 +30557,7 @@ var jsx = superClass => class JSXParserMixin extends superClass {
context[context.length - 1] = newContext;
}
parseExprAtom(refExpressionErrors) {
- if (this.match(141)) {
- return this.parseLiteral(this.state.value, "JSXText");
- } else if (this.match(142)) {
+ if (this.match(142)) {
return this.jsxParseElement();
} else if (this.match(47) && this.input.charCodeAt(this.state.pos) !== 33) {
this.replaceToken(142);
@@ -30671,14 +30638,14 @@ class TypeScriptScopeHandler extends ScopeHandler {
return new TypeScriptScope(flags);
}
enter(flags) {
- if (flags == 256) {
+ if (flags === 256) {
this.importsStack.push(new Set());
}
super.enter(flags);
}
exit() {
const flags = super.exit();
- if (flags == 256) {
+ if (flags === 256) {
this.importsStack.pop();
}
return flags;
@@ -30987,14 +30954,15 @@ class LValParser extends NodeUtils {
return this.finishNode(prop, "RestElement");
}
parseBindingProperty() {
- const prop = this.startNode();
const {
type,
startLoc
} = this.state;
if (type === 21) {
- return this.parseBindingRestProperty(prop);
- } else if (type === 138) {
+ return this.parseBindingRestProperty(this.startNode());
+ }
+ const prop = this.startNode();
+ if (type === 138) {
this.expectPlugin("destructuringPrivate", startLoc);
this.classScope.usePrivateName(this.state.value, startLoc);
prop.key = this.parsePrivateName();
@@ -32844,13 +32812,14 @@ var typescript = superClass => class TypeScriptParserMixin extends superClass {
parseExport(node, decorators) {
if (this.match(83)) {
this.next();
+ const nodeImportEquals = node;
let maybeDefaultIdentifier = null;
if (this.isContextual(130) && this.isPotentialImportPhase(false)) {
- maybeDefaultIdentifier = this.parseMaybeImportPhase(node, false);
+ maybeDefaultIdentifier = this.parseMaybeImportPhase(nodeImportEquals, false);
} else {
- node.importKind = "value";
+ nodeImportEquals.importKind = "value";
}
- return this.tsParseImportEqualsDeclaration(node, maybeDefaultIdentifier, true);
+ return this.tsParseImportEqualsDeclaration(nodeImportEquals, maybeDefaultIdentifier, true);
} else if (this.eat(29)) {
const assign = node;
assign.expression = super.parseExpression();
@@ -33022,9 +32991,9 @@ var typescript = superClass => class TypeScriptParserMixin extends superClass {
return result.node;
}
parseParenItem(node, startLoc) {
- node = super.parseParenItem(node, startLoc);
+ const newNode = super.parseParenItem(node, startLoc);
if (this.eat(17)) {
- node.optional = true;
+ newNode.optional = true;
this.resetEndLocation(node);
}
if (this.match(14)) {
@@ -33133,7 +33102,9 @@ var typescript = superClass => class TypeScriptParserMixin extends superClass {
}
declareClassPrivateMethodInScope(node, kind) {
if (node.type === "TSDeclareMethod") return;
- if (node.type === "MethodDefinition" && !node.value.body) return;
+ if (node.type === "MethodDefinition" && !hasOwnProperty.call(node.value, "body")) {
+ return;
+ }
super.declareClassPrivateMethodInScope(node, kind);
}
parseClassSuper(node) {
@@ -33332,6 +33303,7 @@ var typescript = superClass => class TypeScriptParserMixin extends superClass {
TSTypeCastExpression: true,
TSParameterProperty: "parameter",
TSNonNullExpression: "expression",
+ TSInstantiationExpression: "expression",
TSAsExpression: (binding !== 64 || !isUnparenthesizedInAssign) && ["expression", true],
TSSatisfiesExpression: (binding !== 64 || !isUnparenthesizedInAssign) && ["expression", true],
TSTypeAssertion: (binding !== 64 || !isUnparenthesizedInAssign) && ["expression", true]
@@ -33685,9 +33657,12 @@ var placeholders = superClass => class PlaceholdersParserMixin extends superClas
}
}
finishPlaceholder(node, expectedNode) {
- const isFinished = !!(node.expectedNode && node.type === "Placeholder");
- node.expectedNode = expectedNode;
- return isFinished ? node : this.finishNode(node, "Placeholder");
+ let placeholder = node;
+ if (!placeholder.expectedNode || !placeholder.type) {
+ placeholder = this.finishNode(placeholder, "Placeholder");
+ }
+ placeholder.expectedNode = expectedNode;
+ return placeholder;
}
getTokenFromCode(code) {
if (code === 37 && this.input.charCodeAt(this.state.pos + 1) === 37) {
@@ -33747,8 +33722,9 @@ var placeholders = superClass => class PlaceholdersParserMixin extends superClas
return this.finishNode(stmt, "LabeledStatement");
}
this.semicolon();
- node.name = expr.name;
- return this.finishPlaceholder(node, "Statement");
+ const stmtPlaceholder = node;
+ stmtPlaceholder.name = expr.name;
+ return this.finishPlaceholder(stmtPlaceholder, "Statement");
}
parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse) {
return this.parsePlaceholder("BlockStatement") || super.parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse);
@@ -33781,17 +33757,18 @@ var placeholders = superClass => class PlaceholdersParserMixin extends superClas
parseExport(node, decorators) {
const placeholder = this.parsePlaceholder("Identifier");
if (!placeholder) return super.parseExport(node, decorators);
+ const node2 = node;
if (!this.isContextual(98) && !this.match(12)) {
- node.specifiers = [];
- node.source = null;
- node.declaration = this.finishPlaceholder(placeholder, "Declaration");
- return this.finishNode(node, "ExportNamedDeclaration");
+ node2.specifiers = [];
+ node2.source = null;
+ node2.declaration = this.finishPlaceholder(placeholder, "Declaration");
+ return this.finishNode(node2, "ExportNamedDeclaration");
}
this.expectPlugin("exportDefaultFrom");
const specifier = this.startNode();
specifier.exported = placeholder;
- node.specifiers = [this.finishNode(specifier, "ExportDefaultSpecifier")];
- return super.parseExport(node, decorators);
+ node2.specifiers = [this.finishNode(specifier, "ExportDefaultSpecifier")];
+ return super.parseExport(node2, decorators);
}
isExportDefaultSpecifier() {
if (this.match(65)) {
@@ -33908,7 +33885,6 @@ function getPluginOption(plugins, name, option) {
}
const PIPELINE_PROPOSALS = ["minimal", "fsharp", "hack", "smart"];
const TOPIC_TOKENS = ["^^", "@@", "^", "%", "#"];
-const RECORD_AND_TUPLE_SYNTAX_TYPES = ["hash", "bar"];
function validatePlugins(plugins) {
if (hasPlugin(plugins, "decorators")) {
if (hasPlugin(plugins, "decorators-legacy")) {
@@ -33935,9 +33911,10 @@ function validatePlugins(plugins) {
const proposalList = PIPELINE_PROPOSALS.map(p => `"${p}"`).join(", ");
throw new Error(`"pipelineOperator" requires "proposal" option whose value must be one of: ${proposalList}.`);
}
- const tupleSyntaxIsHash = hasPlugin(plugins, ["recordAndTuple", {
+ const recordAndTupleConfigItem = ["recordAndTuple", {
syntaxType: "hash"
- }]);
+ }];
+ const tupleSyntaxIsHash = hasPlugin(plugins, recordAndTupleConfigItem);
if (proposal === "hack") {
if (hasPlugin(plugins, "placeholders")) {
throw new Error("Cannot combine placeholders plugin and Hack-style pipes.");
@@ -33951,10 +33928,10 @@ function validatePlugins(plugins) {
throw new Error(`"pipelineOperator" in "proposal": "hack" mode also requires a "topicToken" option whose value must be one of: ${tokenList}.`);
}
if (topicToken === "#" && tupleSyntaxIsHash) {
- throw new Error('Plugin conflict between `["pipelineOperator", { proposal: "hack", topicToken: "#" }]` and `["recordAndtuple", { syntaxType: "hash"}]`.');
+ throw new Error(`Plugin conflict between \`["pipelineOperator", { proposal: "hack", topicToken: "#" }]\` and \`${JSON.stringify(recordAndTupleConfigItem)}\`.`);
}
} else if (proposal === "smart" && tupleSyntaxIsHash) {
- throw new Error('Plugin conflict between `["pipelineOperator", { proposal: "smart" }]` and `["recordAndtuple", { syntaxType: "hash"}]`.');
+ throw new Error(`Plugin conflict between \`["pipelineOperator", { proposal: "smart" }]\` and \`${JSON.stringify(recordAndTupleConfigItem)}\`.`);
}
}
if (hasPlugin(plugins, "moduleAttributes")) {
@@ -33971,8 +33948,16 @@ function validatePlugins(plugins) {
if (hasPlugin(plugins, "importAssertions") && hasPlugin(plugins, "importAttributes")) {
throw new Error("Cannot combine importAssertions and importAttributes plugins.");
}
- if (hasPlugin(plugins, "recordAndTuple") && getPluginOption(plugins, "recordAndTuple", "syntaxType") != null && !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(getPluginOption(plugins, "recordAndTuple", "syntaxType"))) {
- throw new Error("The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: " + RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(", "));
+ if (hasPlugin(plugins, "recordAndTuple")) {
+ const syntaxType = getPluginOption(plugins, "recordAndTuple", "syntaxType");
+ if (syntaxType != null) {
+ {
+ const RECORD_AND_TUPLE_SYNTAX_TYPES = ["hash", "bar"];
+ if (!RECORD_AND_TUPLE_SYNTAX_TYPES.includes(syntaxType)) {
+ throw new Error("The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: " + RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(", "));
+ }
+ }
+ }
}
if (hasPlugin(plugins, "asyncDoExpressions") && !hasPlugin(plugins, "doExpressions")) {
const error = new Error("'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.");
@@ -35091,14 +35076,16 @@ class ExpressionParser extends LValParser {
}
parseTemplate(isTagged) {
const node = this.startNode();
- node.expressions = [];
let curElt = this.parseTemplateElement(isTagged);
- node.quasis = [curElt];
+ const quasis = [curElt];
+ const substitutions = [];
while (!curElt.tail) {
- node.expressions.push(this.parseTemplateSubstitution());
+ substitutions.push(this.parseTemplateSubstitution());
this.readTemplateContinuation();
- node.quasis.push(curElt = this.parseTemplateElement(isTagged));
+ quasis.push(curElt = this.parseTemplateElement(isTagged));
}
+ node.expressions = substitutions;
+ node.quasis = quasis;
return this.finishNode(node, "TemplateLiteral");
}
parseTemplateSubstitution() {
@@ -35135,8 +35122,10 @@ class ExpressionParser extends LValParser {
if (isRecord && !this.isObjectProperty(prop) && prop.type !== "SpreadElement") {
this.raise(Errors.InvalidRecordProperty, prop);
}
- if (prop.shorthand) {
- this.addExtra(prop, "shorthand", true);
+ {
+ if (prop.shorthand) {
+ this.addExtra(prop, "shorthand", true);
+ }
}
node.properties.push(prop);
}
@@ -35186,8 +35175,11 @@ class ExpressionParser extends LValParser {
let isGenerator = this.eat(55);
this.parsePropertyNamePrefixOperator(prop);
const containsEsc = this.state.containsEsc;
- const key = this.parsePropertyName(prop, refExpressionErrors);
+ this.parsePropertyName(prop, refExpressionErrors);
if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {
+ const {
+ key
+ } = prop;
const keyName = key.name;
if (keyName === "async" && !this.hasPrecedingLineBreak()) {
isAsync = true;
@@ -35322,7 +35314,6 @@ class ExpressionParser extends LValParser {
prop.computed = false;
}
}
- return prop.key;
}
initFunction(node, isAsync) {
node.id = null;
@@ -36645,9 +36636,9 @@ class StatementParser extends ExpressionParser {
this.raise(Errors.DeclarationMissingInitializer, this.state.lastTokEndLoc, {
kind: "destructuring"
});
- } else if (kind === "const" && !(this.match(58) || this.isContextual(102))) {
+ } else if ((kind === "const" || kind === "using" || kind === "await using") && !(this.match(58) || this.isContextual(102))) {
this.raise(Errors.DeclarationMissingInitializer, this.state.lastTokEndLoc, {
- kind: "const"
+ kind
});
}
}
@@ -36732,8 +36723,11 @@ class StatementParser extends ExpressionParser {
isClassMethod() {
return this.match(10);
}
+ nameIsConstructor(key) {
+ return key.type === "Identifier" && key.name === "constructor" || key.type === "StringLiteral" && key.value === "constructor";
+ }
isNonstaticConstructor(method) {
- return !method.computed && !method.static && (method.key.name === "constructor" || method.key.value === "constructor");
+ return !method.computed && !method.static && this.nameIsConstructor(method.key);
}
parseClassBody(hadSuperClass, oldStrict) {
this.classScope.enter();
@@ -36835,9 +36829,10 @@ class StatementParser extends ExpressionParser {
this.pushClassMethod(classBody, publicMethod, true, false, false, false);
return;
}
- const isContextual = tokenIsIdentifier(this.state.type) && !this.state.containsEsc;
- const isPrivate = this.match(138);
+ const isContextual = !this.state.containsEsc && tokenIsIdentifier(this.state.type);
const key = this.parseClassElementName(member);
+ const maybeContextualKw = isContextual ? key.name : null;
+ const isPrivate = this.isPrivateName(key);
const maybeQuestionTokenStartLoc = this.state.startLoc;
this.parsePostMemberNameModifiers(publicMember);
if (this.isClassMethod()) {
@@ -36866,7 +36861,7 @@ class StatementParser extends ExpressionParser {
} else {
this.pushClassProperty(classBody, publicProp);
}
- } else if (isContextual && key.name === "async" && !this.isLineTerminator()) {
+ } else if (maybeContextualKw === "async" && !this.isLineTerminator()) {
this.resetPreviousNodeTrailingComments(key);
const isGenerator = this.eat(55);
if (publicMember.optional) {
@@ -36884,9 +36879,9 @@ class StatementParser extends ExpressionParser {
}
this.pushClassMethod(classBody, publicMethod, isGenerator, true, false, false);
}
- } else if (isContextual && (key.name === "get" || key.name === "set") && !(this.match(55) && this.isLineTerminator())) {
+ } else if ((maybeContextualKw === "get" || maybeContextualKw === "set") && !(this.match(55) && this.isLineTerminator())) {
this.resetPreviousNodeTrailingComments(key);
- method.kind = key.name;
+ method.kind = maybeContextualKw;
const isPrivate = this.match(138);
this.parseClassElementName(publicMethod);
if (isPrivate) {
@@ -36898,7 +36893,7 @@ class StatementParser extends ExpressionParser {
this.pushClassMethod(classBody, publicMethod, false, false, false, false);
}
this.checkGetterSetterParams(publicMethod);
- } else if (isContextual && key.name === "accessor" && !this.isLineTerminator()) {
+ } else if (maybeContextualKw === "accessor" && !this.isLineTerminator()) {
this.expectPlugin("decoratorAutoAccessors");
this.resetPreviousNodeTrailingComments(key);
const isPrivate = this.match(138);
@@ -36930,7 +36925,8 @@ class StatementParser extends ExpressionParser {
member.key = key;
return key;
}
- return this.parsePropertyName(member);
+ this.parsePropertyName(member);
+ return member.key;
}
parseClassStaticBlock(classBody, member) {
var _member$decorators;
@@ -36949,7 +36945,7 @@ class StatementParser extends ExpressionParser {
}
}
pushClassProperty(classBody, prop) {
- if (!prop.computed && (prop.key.name === "constructor" || prop.key.value === "constructor")) {
+ if (!prop.computed && this.nameIsConstructor(prop.key)) {
this.raise(Errors.ConstructorClassField, prop.key);
}
classBody.body.push(this.parseClassProperty(prop));
@@ -36960,11 +36956,8 @@ class StatementParser extends ExpressionParser {
this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), 0, node.key.loc.start);
}
pushClassAccessorProperty(classBody, prop, isPrivate) {
- if (!isPrivate && !prop.computed) {
- const key = prop.key;
- if (key.name === "constructor" || key.value === "constructor") {
- this.raise(Errors.ConstructorClassField, key);
- }
+ if (!isPrivate && !prop.computed && this.nameIsConstructor(prop.key)) {
+ this.raise(Errors.ConstructorClassField, prop.key);
}
const node = this.parseClassAccessorProperty(prop);
classBody.body.push(node);
@@ -37100,7 +37093,8 @@ class StatementParser extends ExpressionParser {
}
maybeParseExportNamespaceSpecifier(node) {
if (this.isContextual(93)) {
- if (!node.specifiers) node.specifiers = [];
+ var _ref, _ref$specifiers;
+ (_ref$specifiers = (_ref = node).specifiers) != null ? _ref$specifiers : _ref.specifiers = [];
const specifier = this.startNodeAt(this.state.lastTokStartLoc);
this.next();
specifier.exported = this.parseModuleExportName();
@@ -37111,13 +37105,14 @@ class StatementParser extends ExpressionParser {
}
maybeParseExportNamedSpecifiers(node) {
if (this.match(5)) {
- if (!node.specifiers) node.specifiers = [];
- const isTypeExport = node.exportKind === "type";
- node.specifiers.push(...this.parseExportSpecifiers(isTypeExport));
- node.source = null;
- node.declaration = null;
+ const node2 = node;
+ if (!node2.specifiers) node2.specifiers = [];
+ const isTypeExport = node2.exportKind === "type";
+ node2.specifiers.push(...this.parseExportSpecifiers(isTypeExport));
+ node2.source = null;
+ node2.declaration = null;
if (this.hasPlugin("importAssertions")) {
- node.assertions = [];
+ node2.assertions = [];
}
return true;
}
@@ -37228,6 +37223,14 @@ class StatementParser extends ExpressionParser {
return true;
}
}
+ if (this.isContextual(107)) {
+ this.raise(Errors.UsingDeclarationExport, this.state.startLoc);
+ return true;
+ }
+ if (this.isContextual(96) && this.startsAwaitUsing()) {
+ this.raise(Errors.UsingDeclarationExport, this.state.startLoc);
+ return true;
+ }
return type === 74 || type === 75 || type === 68 || type === 80 || this.isLet() || this.isAsyncFunction();
}
checkExport(node, checkNames, isDefault, isFrom) {
@@ -37265,12 +37268,15 @@ class StatementParser extends ExpressionParser {
}
}
} else if (node.declaration) {
- if (node.declaration.type === "FunctionDeclaration" || node.declaration.type === "ClassDeclaration") {
- const id = node.declaration.id;
+ const decl = node.declaration;
+ if (decl.type === "FunctionDeclaration" || decl.type === "ClassDeclaration") {
+ const {
+ id
+ } = decl;
if (!id) throw new Error("Assertion failure");
this.checkDuplicateExports(node, id.name);
- } else if (node.declaration.type === "VariableDeclaration") {
- for (const declaration of node.declaration.declarations) {
+ } else if (decl.type === "VariableDeclaration") {
+ for (const declaration of decl.declarations) {
this.checkDeclaration(declaration.id);
}
}
@@ -49320,9 +49326,10 @@ exports["default"] = gatherSequenceExpressions;
var _getBindingIdentifiers = __nccwpck_require__(3331);
var _index = __nccwpck_require__(2605);
var _index2 = __nccwpck_require__(9380);
+var _productions = __nccwpck_require__(4157);
var _cloneNode = __nccwpck_require__(5823);
;
-function gatherSequenceExpressions(nodes, scope, declars) {
+function gatherSequenceExpressions(nodes, declars) {
const exprs = [];
let ensureLastUndefined = true;
for (const node of nodes) {
@@ -49349,12 +49356,12 @@ function gatherSequenceExpressions(nodes, scope, declars) {
}
ensureLastUndefined = true;
} else if ((0, _index.isIfStatement)(node)) {
- const consequent = node.consequent ? gatherSequenceExpressions([node.consequent], scope, declars) : scope.buildUndefinedNode();
- const alternate = node.alternate ? gatherSequenceExpressions([node.alternate], scope, declars) : scope.buildUndefinedNode();
+ const consequent = node.consequent ? gatherSequenceExpressions([node.consequent], declars) : (0, _productions.buildUndefinedNode)();
+ const alternate = node.alternate ? gatherSequenceExpressions([node.alternate], declars) : (0, _productions.buildUndefinedNode)();
if (!consequent || !alternate) return;
exprs.push((0, _index2.conditionalExpression)(node.test, consequent, alternate));
} else if ((0, _index.isBlockStatement)(node)) {
- const body = gatherSequenceExpressions(node.body, scope, declars);
+ const body = gatherSequenceExpressions(node.body, declars);
if (!body) return;
exprs.push(body);
} else if ((0, _index.isEmptyStatement)(node)) {
@@ -49366,7 +49373,7 @@ function gatherSequenceExpressions(nodes, scope, declars) {
}
}
if (ensureLastUndefined) {
- exprs.push(scope.buildUndefinedNode());
+ exprs.push((0, _productions.buildUndefinedNode)());
}
if (exprs.length === 1) {
return exprs[0];
@@ -49591,7 +49598,7 @@ var _gatherSequenceExpressions = __nccwpck_require__(1022);
function toSequenceExpression(nodes, scope) {
if (!(nodes != null && nodes.length)) return;
const declars = [];
- const result = (0, _gatherSequenceExpressions.default)(nodes, scope, declars);
+ const result = (0, _gatherSequenceExpressions.default)(nodes, declars);
if (!result) return;
for (const declar of declars) {
scope.push(declar);
@@ -49871,7 +49878,7 @@ defineType("CallExpression", {
validate: (0, _utils.assertNodeType)("Expression", "Super", "V8IntrinsicIdentifier")
},
arguments: {
- validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression", "SpreadElement", "JSXNamespacedName", "ArgumentPlaceholder")))
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression", "SpreadElement", "ArgumentPlaceholder")))
}
}, !process.env.BABEL_TYPES_8_BREAKING ? {
optional: {
@@ -51258,7 +51265,7 @@ defineType("OptionalCallExpression", {
validate: (0, _utils.assertNodeType)("Expression")
},
arguments: {
- validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression", "SpreadElement", "JSXNamespacedName", "ArgumentPlaceholder")))
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression", "SpreadElement", "ArgumentPlaceholder")))
},
optional: {
validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertValueType)("boolean") : (0, _utils.chain)((0, _utils.assertValueType)("boolean"), (0, _utils.assertOptionalChainStart)())
@@ -54101,10 +54108,9 @@ function getBindingIdentifiers(node, duplicates, outerOnly, newBindingsOnly) {
while (search.length) {
const id = search.shift();
if (!id) continue;
- if (newBindingsOnly && ((0, _index.isAssignmentExpression)(id) || (0, _index.isUnaryExpression)(id))) {
+ if (newBindingsOnly && ((0, _index.isAssignmentExpression)(id) || (0, _index.isUnaryExpression)(id) || (0, _index.isUpdateExpression)(id))) {
continue;
}
- const keys = getBindingIdentifiers.keys[id.type];
if ((0, _index.isIdentifier)(id)) {
if (duplicates) {
const _ids = ids[id.name] = ids[id.name] || [];
@@ -54129,6 +54135,7 @@ function getBindingIdentifiers(node, duplicates, outerOnly, newBindingsOnly) {
continue;
}
}
+ const keys = getBindingIdentifiers.keys[id.type];
if (keys) {
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
diff --git a/.github/actions/javascript/getDeployPullRequestList/getDeployPullRequestList.ts b/.github/actions/javascript/getDeployPullRequestList/getDeployPullRequestList.ts
index ecf242f00cc2..08519c40413b 100644
--- a/.github/actions/javascript/getDeployPullRequestList/getDeployPullRequestList.ts
+++ b/.github/actions/javascript/getDeployPullRequestList/getDeployPullRequestList.ts
@@ -21,7 +21,27 @@ async function run() {
status: 'completed',
event: isProductionDeploy ? 'release' : 'push',
})
- ).data.workflow_runs;
+ ).data.workflow_runs
+ // Note: we filter out cancelled runs instead of looking only for success runs
+ // because if a build fails on even one platform, then it will have the status 'failure'
+ .filter((workflowRun) => workflowRun.conclusion !== 'cancelled');
+
+ // Find the most recent deploy workflow for which at least one of the build jobs finished successfully.
+ let lastSuccessfulDeploy = completedDeploys.shift();
+ while (
+ lastSuccessfulDeploy &&
+ !(
+ await GithubUtils.octokit.actions.listJobsForWorkflowRun({
+ owner: github.context.repo.owner,
+ repo: github.context.repo.repo,
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ run_id: lastSuccessfulDeploy.id,
+ filter: 'latest',
+ })
+ ).data.jobs.some((job) => job.name.startsWith('Build and deploy') && job.conclusion === 'success')
+ ) {
+ lastSuccessfulDeploy = completedDeploys.shift();
+ }
const priorTag = completedDeploys[0].head_branch;
console.log(`Looking for PRs deployed to ${deployEnv} between ${priorTag} and ${inputTag}`);
diff --git a/.github/actions/javascript/getDeployPullRequestList/index.js b/.github/actions/javascript/getDeployPullRequestList/index.js
index 6b956f17be25..cfe512076ecd 100644
--- a/.github/actions/javascript/getDeployPullRequestList/index.js
+++ b/.github/actions/javascript/getDeployPullRequestList/index.js
@@ -11515,7 +11515,22 @@ async function run() {
workflow_id: 'platformDeploy.yml',
status: 'completed',
event: isProductionDeploy ? 'release' : 'push',
- })).data.workflow_runs;
+ })).data.workflow_runs
+ // Note: we filter out cancelled runs instead of looking only for success runs
+ // because if a build fails on even one platform, then it will have the status 'failure'
+ .filter((workflowRun) => workflowRun.conclusion !== 'cancelled');
+ // Find the most recent deploy workflow for which at least one of the build jobs finished successfully.
+ let lastSuccessfulDeploy = completedDeploys.shift();
+ while (lastSuccessfulDeploy &&
+ !(await GithubUtils_1.default.octokit.actions.listJobsForWorkflowRun({
+ owner: github.context.repo.owner,
+ repo: github.context.repo.repo,
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ run_id: lastSuccessfulDeploy.id,
+ filter: 'latest',
+ })).data.jobs.some((job) => job.name.startsWith('Build and deploy') && job.conclusion === 'success')) {
+ lastSuccessfulDeploy = completedDeploys.shift();
+ }
const priorTag = completedDeploys[0].head_branch;
console.log(`Looking for PRs deployed to ${deployEnv} between ${priorTag} and ${inputTag}`);
const prList = await GitUtils_1.default.getPullRequestsMergedBetween(priorTag ?? '', inputTag);
diff --git a/.github/workflows/e2ePerformanceTests.yml b/.github/workflows/e2ePerformanceTests.yml
index 7e7d55ac5d2e..ffce73644263 100644
--- a/.github/workflows/e2ePerformanceTests.yml
+++ b/.github/workflows/e2ePerformanceTests.yml
@@ -184,6 +184,9 @@ jobs:
- name: Copy e2e code into zip folder
run: cp tests/e2e/dist/index.js zip/testRunner.ts
+
+ - name: Copy profiler binaries into zip folder
+ run: cp -r node_modules/@perf-profiler/android/cpp-profiler/bin zip/bin
- name: Zip everything in the zip directory up
run: zip -qr App.zip ./zip
diff --git a/.prettierignore b/.prettierignore
index 2df776736b69..09de20ba30b0 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -17,3 +17,5 @@ package-lock.json
*.md
# We need to modify the import here specifically, hence we disable prettier to get rid of the sorted imports
src/libs/E2E/reactNativeLaunchingTest.ts
+# Temporary while we keep react-compiler in our repo
+lib/**
diff --git a/.prettierrc.js b/.prettierrc.js
index 3118dc378694..d981112fffae 100644
--- a/.prettierrc.js
+++ b/.prettierrc.js
@@ -6,6 +6,7 @@ module.exports = {
arrowParens: 'always',
printWidth: 190,
singleAttributePerLine: true,
+ plugins: [require.resolve('@trivago/prettier-plugin-sort-imports')],
/** `importOrder` should be defined in an alphabetical order. */
importOrder: [
'@assets/(.*)$',
diff --git a/Gemfile.lock b/Gemfile.lock
index 3780235053ad..64f4d81c9e76 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -10,8 +10,8 @@ GEM
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
- addressable (2.8.6)
- public_suffix (>= 2.0.2, < 6.0)
+ addressable (2.8.7)
+ public_suffix (>= 2.0.2, < 7.0)
algoliasearch (1.27.5)
httpclient (~> 2.8, >= 2.8.3)
json (>= 1.5.1)
@@ -20,17 +20,17 @@ GEM
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.3.0)
- aws-partitions (1.944.0)
- aws-sdk-core (3.197.0)
+ aws-partitions (1.948.0)
+ aws-sdk-core (3.199.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8)
jmespath (~> 1, >= 1.6.1)
- aws-sdk-kms (1.85.0)
- aws-sdk-core (~> 3, >= 3.197.0)
+ aws-sdk-kms (1.87.0)
+ aws-sdk-core (~> 3, >= 3.199.0)
aws-sigv4 (~> 1.1)
- aws-sdk-s3 (1.152.3)
- aws-sdk-core (~> 3, >= 3.197.0)
+ aws-sdk-s3 (1.154.0)
+ aws-sdk-core (~> 3, >= 3.199.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.8)
aws-sigv4 (1.8.0)
@@ -119,7 +119,7 @@ GEM
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.3.1)
- fastlane (2.221.0)
+ fastlane (2.221.1)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
diff --git a/android/app/build.gradle b/android/app/build.gradle
index dd19b75b1e49..c7fbf56f86e6 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -107,8 +107,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
- versionCode 1009000114
- versionName "9.0.1-14"
+ versionCode 1009000303
+ versionName "9.0.3-3"
// Supported language variants must be declared here to avoid from being removed during the compilation.
// This also helps us to not include unnecessary language variants in the APK.
resConfigs "en", "es"
@@ -190,6 +190,23 @@ android {
}
}
+afterEvaluate {
+ // As the App is building from source, we need to make sure hermesc is built before the JS bundle is created.
+ // Otherwise the release version of the app will fail to build due to missing hermesc.
+ def hermesCTask = gradle.includedBuild("react-native").task(":packages:react-native:ReactAndroid:hermes-engine:buildHermesC")
+
+ android.applicationVariants.configureEach { variant ->
+ if (variant.buildType.name == "release") {
+ def variantName = variant.name.capitalize()
+ def bundleTask = tasks.named("createBundle${variantName}JsAndAssets").getOrNull()
+
+ if (bundleTask != null) {
+ bundleTask.dependsOn(hermesCTask)
+ }
+ }
+ }
+}
+
dependencies {
// The version of react-native is set by the React Native Gradle Plugin
implementation("com.facebook.react:react-android")
diff --git a/assets/images/computer.svg b/assets/images/computer.svg
new file mode 100644
index 000000000000..9c2628245eb1
--- /dev/null
+++ b/assets/images/computer.svg
@@ -0,0 +1,216 @@
+
+
\ No newline at end of file
diff --git a/assets/images/integrationicons/netsuite-icon-square.svg b/assets/images/integrationicons/netsuite-icon-square.svg
new file mode 100644
index 000000000000..d4f19f4f44c0
--- /dev/null
+++ b/assets/images/integrationicons/netsuite-icon-square.svg
@@ -0,0 +1,57 @@
+
+
+
diff --git a/assets/images/integrationicons/sage-intacct-icon-square.svg b/assets/images/integrationicons/sage-intacct-icon-square.svg
new file mode 100644
index 000000000000..33d86259a2d1
--- /dev/null
+++ b/assets/images/integrationicons/sage-intacct-icon-square.svg
@@ -0,0 +1,23 @@
+
+
\ No newline at end of file
diff --git a/assets/images/simple-illustrations/simple-illustration__lockclosed_orange.svg b/assets/images/simple-illustrations/simple-illustration__lockclosed_orange.svg
index 91af173f0357..605aa66df086 100644
--- a/assets/images/simple-illustrations/simple-illustration__lockclosed_orange.svg
+++ b/assets/images/simple-illustrations/simple-illustration__lockclosed_orange.svg
@@ -1,52 +1 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/babel.config.js b/babel.config.js
index e04e589166f4..7010404f2a31 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -2,8 +2,12 @@ require('dotenv').config();
const IS_E2E_TESTING = process.env.E2E_TESTING === 'true';
+const ReactCompilerConfig = {
+ runtimeModule: 'react-compiler-runtime',
+};
const defaultPresets = ['@babel/preset-react', '@babel/preset-env', '@babel/preset-flow', '@babel/preset-typescript'];
-let defaultPlugins = [
+const defaultPlugins = [
+ ['babel-plugin-react-compiler', ReactCompilerConfig], // must run first!
// Adding the commonjs: true option to react-native-web plugin can cause styling conflicts
['react-native-web'],
@@ -141,5 +145,11 @@ module.exports = (api) => {
const runningIn = api.caller((args = {}) => args.name);
console.debug(' - running in: ', runningIn);
+ // don't include react-compiler in jest, because otherwise tests will fail
+ if (runningIn !== 'babel-jest') {
+ // must run first!
+ metro.plugins.unshift(['babel-plugin-react-compiler', ReactCompilerConfig]);
+ }
+
return ['metro', 'babel-jest'].includes(runningIn) ? metro : webpack;
};
diff --git a/docs/_data/_routes.yml b/docs/_data/_routes.yml
index 5fd65532c021..7f416951b58c 100644
--- a/docs/_data/_routes.yml
+++ b/docs/_data/_routes.yml
@@ -114,8 +114,8 @@ platforms:
icon: /assets/images/shield.svg
description: Configure rules, settings, and limits for your company’s spending.
- - href: expenses
- title: Expenses
+ - href: expenses-&-payments
+ title: Expenses & Payments
icon: /assets/images/money-into-wallet.svg
description: Learn more about expense tracking and submission.
diff --git a/docs/_sass/_search-bar.scss b/docs/_sass/_search-bar.scss
index e26763d98c09..c9b66d1e4b4a 100644
--- a/docs/_sass/_search-bar.scss
+++ b/docs/_sass/_search-bar.scss
@@ -179,8 +179,9 @@ label.search-label {
display: none;
}
-.gs-title {
+.gs-title * {
font-weight: bold;
+ color: var(--color-link) !important;
}
/* Change the Google Search Button icon into Expensify icon button */
diff --git a/docs/articles/expensify-classic/travel/Coming-Soon.md b/docs/articles/expensify-classic/travel/Coming-Soon.md
deleted file mode 100644
index 4d32487a14b5..000000000000
--- a/docs/articles/expensify-classic/travel/Coming-Soon.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Coming soon
-description: Coming soon
----
-
-# Coming soon
\ No newline at end of file
diff --git a/docs/articles/new-expensify/connections/Set-up-QuickBooks-Online-connection.md b/docs/articles/new-expensify/connections/Set-up-QuickBooks-Online-connection.md
index 6bc3b0896912..155512866a8f 100644
--- a/docs/articles/new-expensify/connections/Set-up-QuickBooks-Online-connection.md
+++ b/docs/articles/new-expensify/connections/Set-up-QuickBooks-Online-connection.md
@@ -46,6 +46,12 @@ Log in to QuickBooks Online and ensure all of your employees are setup as either
Enter your Intuit login details to import your settings from QuickBooks Online to Expensify.
+![The toggle location to enable accounting integrations like QuickBooks Online]({{site.url}}/assets/images/ExpensifyHelp-QBO-1.png){:width="100%"}
+
+![How to enable accounting integrations like QuickBooks Online]({{site.url}}/assets/images/ExpensifyHelp-QBO-2.png){:width="100%"}
+
+![The QuickBooks Online Connect button]({{site.url}}/assets/images/ExpensifyHelp-QBO-3.png){:width="100%"}
+
# Step 3: Configure import settings
The following steps help you determine how data will be imported from QuickBooks Online to Expensify.
diff --git a/docs/articles/new-expensify/connections/Set-up-Xero-connection.md b/docs/articles/new-expensify/connections/Set-up-Xero-connection.md
index 73bff6ad5862..47917f2dffc3 100644
--- a/docs/articles/new-expensify/connections/Set-up-Xero-connection.md
+++ b/docs/articles/new-expensify/connections/Set-up-Xero-connection.md
@@ -23,6 +23,12 @@ To set up your Xero connection, complete the 4 steps below.
Enter your Xero login details to import your settings from Xero to Expensify.
+![The toggle location to enable accounting integrations like QuickBooks Online]({{site.url}}/assets/images/ExpensifyHelp-Xero-1.png){:width="100%"}
+
+![How to enable accounting integrations like QuickBooks Online]({{site.url}}/assets/images/ExpensifyHelp-Xero-2.png){:width="100%"}
+
+![The QuickBooks Online Connect button]({{site.url}}/assets/images/ExpensifyHelp-Xero-3.png){:width="100%"}
+
# Step 2: Configure import settings
The following steps help you determine how data will be imported from Xero to Expensify.
diff --git a/docs/articles/new-expensify/expenses/Approve-and-pay-expenses.md b/docs/articles/new-expensify/expenses-&-payments/Approve-and-pay-expenses.md
similarity index 93%
rename from docs/articles/new-expensify/expenses/Approve-and-pay-expenses.md
rename to docs/articles/new-expensify/expenses-&-payments/Approve-and-pay-expenses.md
index 0cf642c76e4c..c037e8fe9cd3 100644
--- a/docs/articles/new-expensify/expenses/Approve-and-pay-expenses.md
+++ b/docs/articles/new-expensify/expenses-&-payments/Approve-and-pay-expenses.md
@@ -29,7 +29,11 @@ To approve an expense,
{% include info.html %}
Admins can modify an expense, if needed.
{% include end-info.html %}
-
+
+![The approve button in an expense]({{site.url}}/assets/images/ExpensifyHelp_ApproveExpense_1.png){:width="100%"}
+
+![The approve button when you click into the expense]({{site.url}}/assets/images/ExpensifyHelp_ApproveExpense_2.png){:width="100%"}
+
You’re now ready to pay the expense.
# Hold an expense
diff --git a/docs/articles/new-expensify/expenses/Connect-a-Business-Bank-Account.md b/docs/articles/new-expensify/expenses-&-payments/Connect-a-Business-Bank-Account.md
similarity index 100%
rename from docs/articles/new-expensify/expenses/Connect-a-Business-Bank-Account.md
rename to docs/articles/new-expensify/expenses-&-payments/Connect-a-Business-Bank-Account.md
diff --git a/docs/articles/new-expensify/expenses/Create-an-expense.md b/docs/articles/new-expensify/expenses-&-payments/Create-an-expense.md
similarity index 100%
rename from docs/articles/new-expensify/expenses/Create-an-expense.md
rename to docs/articles/new-expensify/expenses-&-payments/Create-an-expense.md
diff --git a/docs/articles/new-expensify/expenses/Distance-Requests.md b/docs/articles/new-expensify/expenses-&-payments/Distance-Requests.md
similarity index 100%
rename from docs/articles/new-expensify/expenses/Distance-Requests.md
rename to docs/articles/new-expensify/expenses-&-payments/Distance-Requests.md
diff --git a/docs/articles/new-expensify/expenses/Resolve-Errors-Adding-a-Bank-Account.md b/docs/articles/new-expensify/expenses-&-payments/Resolve-Errors-Adding-a-Bank-Account.md
similarity index 100%
rename from docs/articles/new-expensify/expenses/Resolve-Errors-Adding-a-Bank-Account.md
rename to docs/articles/new-expensify/expenses-&-payments/Resolve-Errors-Adding-a-Bank-Account.md
diff --git a/docs/articles/new-expensify/expenses/Send-an-invoice.md b/docs/articles/new-expensify/expenses-&-payments/Send-an-invoice.md
similarity index 100%
rename from docs/articles/new-expensify/expenses/Send-an-invoice.md
rename to docs/articles/new-expensify/expenses-&-payments/Send-an-invoice.md
diff --git a/docs/articles/new-expensify/expenses/Set-up-your-wallet.md b/docs/articles/new-expensify/expenses-&-payments/Set-up-your-wallet.md
similarity index 100%
rename from docs/articles/new-expensify/expenses/Set-up-your-wallet.md
rename to docs/articles/new-expensify/expenses-&-payments/Set-up-your-wallet.md
diff --git a/docs/articles/new-expensify/expenses/Split-an-expense.md b/docs/articles/new-expensify/expenses-&-payments/Split-an-expense.md
similarity index 100%
rename from docs/articles/new-expensify/expenses/Split-an-expense.md
rename to docs/articles/new-expensify/expenses-&-payments/Split-an-expense.md
diff --git a/docs/articles/new-expensify/expenses/Track-expenses.md b/docs/articles/new-expensify/expenses-&-payments/Track-expenses.md
similarity index 100%
rename from docs/articles/new-expensify/expenses/Track-expenses.md
rename to docs/articles/new-expensify/expenses-&-payments/Track-expenses.md
diff --git a/docs/articles/new-expensify/expenses/Unlock-a-Business-Bank-Account.md b/docs/articles/new-expensify/expenses-&-payments/Unlock-a-Business-Bank-Account.md
similarity index 100%
rename from docs/articles/new-expensify/expenses/Unlock-a-Business-Bank-Account.md
rename to docs/articles/new-expensify/expenses-&-payments/Unlock-a-Business-Bank-Account.md
diff --git a/docs/articles/new-expensify/expenses/Validate-a-Business-Bank-Account.md b/docs/articles/new-expensify/expenses-&-payments/Validate-a-Business-Bank-Account.md
similarity index 100%
rename from docs/articles/new-expensify/expenses/Validate-a-Business-Bank-Account.md
rename to docs/articles/new-expensify/expenses-&-payments/Validate-a-Business-Bank-Account.md
diff --git a/docs/articles/new-expensify/expensify-card/Enable-Expensify-Card-notifications.md b/docs/articles/new-expensify/expensify-card/Enable-Expensify-Card-notifications.md
new file mode 100644
index 000000000000..4bb56b1cc54c
--- /dev/null
+++ b/docs/articles/new-expensify/expensify-card/Enable-Expensify-Card-notifications.md
@@ -0,0 +1,57 @@
+---
+title: Enable Expensify Card notifications
+description: Allow notifications from Expensify
+---
+
+
+The Expensify mobile app sends you real-time notifications for spending activity on your Expensify Visa® Commercial Card, including
+- Purchase notifications, including declined payments
+- Fraudulent activity alerts
+- Requests for purchases that require a SmartScanned receipt
+
+There are two steps to enable Expensify Card notifications. You’ll first enable alerts on your workspace, then you’ll enable notifications on your device.
+
+# Step 1: Enable alerts on your workspace
+
+{% include selector.html values="desktop, mobile" %}
+
+{% include option.html value="desktop" %}
+1. From your Expensify Chat inbox, click the dropdown on the logo or avatar that is in the top left corner.
+2. Select the workspace you want to update the notification settings for.
+3. Click the workspace chat in your inbox (it will be the chat that has your workspace’s name as the chat title).
+4. Click the header at the top of the chat.
+5. Click **Settings**.
+6. Click **Notify me about new messages** and select **Immediately**.
+{% include end-option.html %}
+
+{% include option.html value="mobile" %}
+1. From your Expensify Chat inbox, tap the dropdown on the logo or avatar that is in the top left corner.
+2. Select the workspace you want to update the notification settings for.
+3. Tap the workspace chat in your inbox (it will be the chat that has your workspace’s name as the chat title).
+4. Tap the header at the top of the chat.
+5. Tap **Settings**.
+6. Tap **Notify me about new messages** and select **Immediately**.
+{% include end-option.html %}
+
+{% include end-selector.html %}
+
+# Step 2: Enable notifications on your device
+
+**iPhone**
+
+1. Go to your device settings.
+2. Find and tap **New Expensify**.
+3. Tap **Notifications** and enable notifications.
+4. Customize your alerts. Depending on your phone model, you may have extra options to customize the types of notifications you receive.
+
+**Android**
+
+1. Go to your device settings.
+2. Tap **Notifications** and select **Apps notifications**.
+3. Find and tap **New Expensify**.
+4. Enable notifications.
+5. Customize your alerts. Depending on your phone model, you may have extra options to customize the types of notifications you receive.
+
+You will now receive real-time spend notifications to your mobile device.
+
+
diff --git a/docs/assets/images/ExpensifyHelp-Invoice-1.png b/docs/assets/images/ExpensifyHelp-Invoice-1.png
new file mode 100644
index 000000000000..e4a042afef82
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp-Invoice-1.png differ
diff --git a/docs/assets/images/ExpensifyHelp-QBO-1.png b/docs/assets/images/ExpensifyHelp-QBO-1.png
index c612cb760d58..2aa80e954f1b 100644
Binary files a/docs/assets/images/ExpensifyHelp-QBO-1.png and b/docs/assets/images/ExpensifyHelp-QBO-1.png differ
diff --git a/docs/assets/images/ExpensifyHelp-QBO-2.png b/docs/assets/images/ExpensifyHelp-QBO-2.png
index 7fbc99503f2e..23419b86b6aa 100644
Binary files a/docs/assets/images/ExpensifyHelp-QBO-2.png and b/docs/assets/images/ExpensifyHelp-QBO-2.png differ
diff --git a/docs/assets/images/ExpensifyHelp-QBO-3.png b/docs/assets/images/ExpensifyHelp-QBO-3.png
index 600a5903c05f..c612cb760d58 100644
Binary files a/docs/assets/images/ExpensifyHelp-QBO-3.png and b/docs/assets/images/ExpensifyHelp-QBO-3.png differ
diff --git a/docs/assets/images/ExpensifyHelp-QBO-4.png b/docs/assets/images/ExpensifyHelp-QBO-4.png
new file mode 100644
index 000000000000..7fbc99503f2e
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp-QBO-4.png differ
diff --git a/docs/assets/images/ExpensifyHelp-QBO-5.png b/docs/assets/images/ExpensifyHelp-QBO-5.png
new file mode 100644
index 000000000000..600a5903c05f
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp-QBO-5.png differ
diff --git a/docs/assets/images/ExpensifyHelp-Xero-1.png b/docs/assets/images/ExpensifyHelp-Xero-1.png
index c612cb760d58..7a8af4c9859e 100644
Binary files a/docs/assets/images/ExpensifyHelp-Xero-1.png and b/docs/assets/images/ExpensifyHelp-Xero-1.png differ
diff --git a/docs/assets/images/ExpensifyHelp-Xero-2.png b/docs/assets/images/ExpensifyHelp-Xero-2.png
index 7fbc99503f2e..f7679d00582d 100644
Binary files a/docs/assets/images/ExpensifyHelp-Xero-2.png and b/docs/assets/images/ExpensifyHelp-Xero-2.png differ
diff --git a/docs/assets/images/ExpensifyHelp-Xero-3.png b/docs/assets/images/ExpensifyHelp-Xero-3.png
index e340a302bd89..f7f5c40b9cec 100644
Binary files a/docs/assets/images/ExpensifyHelp-Xero-3.png and b/docs/assets/images/ExpensifyHelp-Xero-3.png differ
diff --git a/docs/assets/images/ExpensifyHelp_ApproveExpense_1.png b/docs/assets/images/ExpensifyHelp_ApproveExpense_1.png
index 8a721744860f..d896fe8f214b 100644
Binary files a/docs/assets/images/ExpensifyHelp_ApproveExpense_1.png and b/docs/assets/images/ExpensifyHelp_ApproveExpense_1.png differ
diff --git a/docs/assets/images/ExpensifyHelp_ApproveExpense_2.png b/docs/assets/images/ExpensifyHelp_ApproveExpense_2.png
index 25e11f0e7624..97bbfde7afb3 100644
Binary files a/docs/assets/images/ExpensifyHelp_ApproveExpense_2.png and b/docs/assets/images/ExpensifyHelp_ApproveExpense_2.png differ
diff --git a/docs/new-expensify/hubs/expenses/index.html b/docs/new-expensify/hubs/expenses-&-payments/index.html
similarity index 100%
rename from docs/new-expensify/hubs/expenses/index.html
rename to docs/new-expensify/hubs/expenses-&-payments/index.html
diff --git a/docs/redirects.csv b/docs/redirects.csv
index b4912a629918..f2d9a797415b 100644
--- a/docs/redirects.csv
+++ b/docs/redirects.csv
@@ -201,4 +201,16 @@ https://help.expensify.com/articles/expensify-classic/workspaces/reports/Report-
https://help.expensify.com/articles/expensify-classic/workspaces/reports/Scheduled-Submit,https://help.expensify.com/articles/expensify-classic/reports/Automatically-submit-employee-reports
https://help.expensify.com/articles/new-expensify/chat/Expensify-Chat-For-Admins,https://help.expensify.com/new-expensify/hubs/chat/
https://help.expensify.com/articles/new-expensify/bank-accounts-and-payments/Connect-a-Bank-Account.html,https://help.expensify.com/articles/new-expensify/expenses/Connect-a-Business-Bank-Account
+https://help.expensify.com/articles/expensify-classic/travel/Coming-Soon,https://help.expensify.com/expensify-classic/hubs/travel/
https://help.expensify.com/articles/new-expensify/expenses/Manually-submit-reports-for-approval,https://help.expensify.com/new-expensify/hubs/expenses/
+https://help.expensify.com/articles/new-expensify/expenses/Approve-and-pay-expenses,https://help.expensify.com/articles/new-expensify/expenses-&-payments/Approve-and-pay-expenses
+https://help.expensify.com/articles/new-expensify/expenses/Connect-a-Business-Bank-Account,https://help.expensify.com/articles/new-expensify/expenses-&-payments/Connect-a-Business-Bank-Account
+https://help.expensify.com/articles/new-expensify/expenses/Create-an-expense,https://help.expensify.com/articles/new-expensify/expenses-&-payments/Create-an-expense
+https://help.expensify.com/articles/new-expensify/expenses/Distance-Requests,https://help.expensify.com/articles/new-expensify/expenses-&-payments/Distance-Requests
+https://help.expensify.com/articles/new-expensify/expenses/Resolve-Errors-Adding-a-Bank-Account,https://help.expensify.com/articles/new-expensify/expenses-&-payments/Resolve-Errors-Adding-a-Bank-Account
+https://help.expensify.com/articles/new-expensify/expenses/Send-an-invoice,https://help.expensify.com/articles/new-expensify/expenses-&-payments/Send-an-invoice
+https://help.expensify.com/articles/new-expensify/expenses/Set-up-your-wallet,https://help.expensify.com/articles/new-expensify/expenses-&-payments/Set-up-your-wallet
+https://help.expensify.com/articles/new-expensify/expenses/Split-an-expense,https://help.expensify.com/articles/new-expensify/expenses-&-payments/Split-an-expense
+https://help.expensify.com/articles/new-expensify/expenses/Track-expenses,https://help.expensify.com/articles/new-expensify/expenses-&-payments/Track-expenses
+https://help.expensify.com/articles/new-expensify/expenses/Unlock-a-Business-Bank-Account,https://help.expensify.com/articles/new-expensify/expenses-&-payments/Unlock-a-Business-Bank-Account
+https://help.expensify.com/articles/new-expensify/expenses/Validate-a-Business-Bank-Account,https://help.expensify.com/articles/new-expensify/expenses-&-payments/Validate-a-Business-Bank-Account
\ No newline at end of file
diff --git a/fastlane/Fastfile b/fastlane/Fastfile
index b7d3334c902f..af9e798d2343 100644
--- a/fastlane/Fastfile
+++ b/fastlane/Fastfile
@@ -239,35 +239,27 @@ platform :ios do
}
)
- begin
- upload_to_testflight(
- api_key_path: "./ios/ios-fastlane-json-key.json",
- distribute_external: true,
- notify_external_testers: true,
- changelog: "Thank you for beta testing New Expensify, this version includes bug fixes and improvements.",
- groups: ["Beta"],
- demo_account_required: true,
- beta_app_review_info: {
- contact_email: ENV["APPLE_CONTACT_EMAIL"],
- contact_first_name: "Andrew",
- contact_last_name: "Gable",
- contact_phone: ENV["APPLE_CONTACT_PHONE"],
- demo_account_name: ENV["APPLE_DEMO_EMAIL"],
- demo_account_password: ENV["APPLE_DEMO_PASSWORD"],
- notes: "1. In the Expensify app, enter the email 'appletest.expensify@proton.me'. This will trigger a sign-in link to be sent to 'appletest.expensify@proton.me'
- 2. Navigate to https://account.proton.me/login, log into Proton Mail using 'appletest.expensify@proton.me' as email and the password associated with 'appletest.expensify@proton.me', provided above
- 3. Once logged into Proton Mail, navigate to your inbox and locate the email triggered in step 1. The email subject should be 'Your magic sign-in link for Expensify'
- 4. Open the email and copy the 6-digit sign-in code provided within
- 5. Return to the Expensify app and enter the copied 6-digit code in the designated login field"
- }
- )
- rescue Exception => e
- if e.message.include? "Another build is in review"
- UI.important("Another build is already in external beta review. Skipping external beta review submission")
- else
- raise
- end
- end
+ upload_to_testflight(
+ api_key_path: "./ios/ios-fastlane-json-key.json",
+ distribute_external: true,
+ notify_external_testers: true,
+ changelog: "Thank you for beta testing New Expensify, this version includes bug fixes and improvements.",
+ groups: ["Beta"],
+ demo_account_required: true,
+ beta_app_review_info: {
+ contact_email: ENV["APPLE_CONTACT_EMAIL"],
+ contact_first_name: "Andrew",
+ contact_last_name: "Gable",
+ contact_phone: ENV["APPLE_CONTACT_PHONE"],
+ demo_account_name: ENV["APPLE_DEMO_EMAIL"],
+ demo_account_password: ENV["APPLE_DEMO_PASSWORD"],
+ notes: "1. In the Expensify app, enter the email 'appletest.expensify@proton.me'. This will trigger a sign-in link to be sent to 'appletest.expensify@proton.me'
+ 2. Navigate to https://account.proton.me/login, log into Proton Mail using 'appletest.expensify@proton.me' as email and the password associated with 'appletest.expensify@proton.me', provided above
+ 3. Once logged into Proton Mail, navigate to your inbox and locate the email triggered in step 1. The email subject should be 'Your magic sign-in link for Expensify'
+ 4. Open the email and copy the 6-digit sign-in code provided within
+ 5. Return to the Expensify app and enter the copied 6-digit code in the designated login field"
+ }
+ )
upload_symbols_to_crashlytics(
app_id: "1:921154746561:ios:216bd10ccc947659027c40",
diff --git a/ios/NewApp_AdHoc.mobileprovision.gpg b/ios/NewApp_AdHoc.mobileprovision.gpg
index 29d379151525..32ed6ba30059 100644
Binary files a/ios/NewApp_AdHoc.mobileprovision.gpg and b/ios/NewApp_AdHoc.mobileprovision.gpg differ
diff --git a/ios/NewApp_AdHoc_Notification_Service.mobileprovision.gpg b/ios/NewApp_AdHoc_Notification_Service.mobileprovision.gpg
index cf14d27d7d87..5712b0d86b19 100644
Binary files a/ios/NewApp_AdHoc_Notification_Service.mobileprovision.gpg and b/ios/NewApp_AdHoc_Notification_Service.mobileprovision.gpg differ
diff --git a/ios/NewExpensify/Info.plist b/ios/NewExpensify/Info.plist
index eb251dc53b1a..f400a6f43605 100644
--- a/ios/NewExpensify/Info.plist
+++ b/ios/NewExpensify/Info.plist
@@ -19,7 +19,7 @@
CFBundlePackageTypeAPPLCFBundleShortVersionString
- 9.0.1
+ 9.0.3CFBundleSignature????CFBundleURLTypes
@@ -40,7 +40,7 @@
CFBundleVersion
- 9.0.1.14
+ 9.0.3.3FullStoryOrgId
diff --git a/ios/NewExpensifyTests/Info.plist b/ios/NewExpensifyTests/Info.plist
index efc72698918f..b800b9f73118 100644
--- a/ios/NewExpensifyTests/Info.plist
+++ b/ios/NewExpensifyTests/Info.plist
@@ -15,10 +15,10 @@
CFBundlePackageTypeBNDLCFBundleShortVersionString
- 9.0.1
+ 9.0.3CFBundleSignature????CFBundleVersion
- 9.0.1.14
+ 9.0.3.3
diff --git a/ios/NotificationServiceExtension/Info.plist b/ios/NotificationServiceExtension/Info.plist
index 6a414d579761..7e562b7de1f2 100644
--- a/ios/NotificationServiceExtension/Info.plist
+++ b/ios/NotificationServiceExtension/Info.plist
@@ -11,9 +11,9 @@
CFBundleName$(PRODUCT_NAME)CFBundleShortVersionString
- 9.0.1
+ 9.0.3CFBundleVersion
- 9.0.1.14
+ 9.0.3.3NSExtensionNSExtensionPointIdentifier
diff --git a/lib/react-compiler-runtime/index.js b/lib/react-compiler-runtime/index.js
new file mode 100644
index 000000000000..54e88d2b703a
--- /dev/null
+++ b/lib/react-compiler-runtime/index.js
@@ -0,0 +1,21 @@
+// lib/react-compiler-runtime.js
+const $empty = Symbol.for("react.memo_cache_sentinel");
+const React = require('react');
+/**
+ * DANGER: this hook is NEVER meant to be called directly!
+ *
+ * Note that this is a temporary userspace implementation of this function
+ * from React 19. It is not as efficient and may invalidate more frequently
+ * than the official API. Better to upgrade to React 19 as soon as we can.
+ **/
+export function c(size) {
+ return React.useState(() => {
+ const $ = new Array(size);
+ for (let ii = 0; ii < size; ii++) {
+ $[ii] = $empty;
+ }
+ // @ts-ignore
+ $[$empty] = true;
+ return $;
+ })[0];
+}
diff --git a/lib/react-compiler-runtime/package.json b/lib/react-compiler-runtime/package.json
new file mode 100644
index 000000000000..86de67e130ce
--- /dev/null
+++ b/lib/react-compiler-runtime/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "react-compiler-runtime",
+ "version": "0.0.1",
+ "description": "Runtime for React Compiler",
+ "license": "MIT",
+ "main": "index.js",
+ "dependencies": {
+ "react": "^18.2.0"
+ }
+}
diff --git a/package-lock.json b/package-lock.json
index db6fa70d9598..07b13b5f078a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "new.expensify",
- "version": "9.0.1-14",
+ "version": "9.0.3-3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "new.expensify",
- "version": "9.0.1-14",
+ "version": "9.0.3-3",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@@ -45,11 +45,6 @@
"@react-ng/bounds-observer": "^0.2.1",
"@rnmapbox/maps": "10.1.20",
"@shopify/flash-list": "1.6.3",
- "@storybook/addon-a11y": "^8.0.6",
- "@storybook/addon-essentials": "^8.0.6",
- "@storybook/cli": "^8.0.6",
- "@storybook/react": "^8.0.6",
- "@storybook/theming": "^8.0.6",
"@ua/react-native-airship": "17.2.1",
"@vue/preload-webpack-plugin": "^2.0.0",
"awesome-phonenumber": "^5.4.0",
@@ -80,6 +75,7 @@
"react": "18.2.0",
"react-beautiful-dnd": "^13.1.1",
"react-collapse": "^5.1.0",
+ "react-compiler-runtime": "file:./lib/react-compiler-runtime",
"react-content-loader": "^7.0.0",
"react-dom": "18.1.0",
"react-error-boundary": "^4.0.11",
@@ -106,7 +102,7 @@
"react-native-linear-gradient": "^2.8.1",
"react-native-localize": "^2.2.6",
"react-native-modal": "^13.0.0",
- "react-native-onyx": "2.0.53",
+ "react-native-onyx": "2.0.54",
"react-native-pager-view": "6.2.3",
"react-native-pdf": "6.7.3",
"react-native-performance": "^5.1.0",
@@ -159,12 +155,20 @@
"@octokit/core": "4.0.4",
"@octokit/plugin-paginate-rest": "3.1.0",
"@octokit/plugin-throttling": "4.1.0",
+ "@perf-profiler/profiler": "^0.10.10",
+ "@perf-profiler/reporter": "^0.9.0",
+ "@perf-profiler/types": "^0.8.0",
"@react-native-community/eslint-config": "3.2.0",
"@react-native/babel-preset": "^0.73.21",
"@react-native/metro-config": "^0.73.5",
"@react-navigation/devtools": "^6.0.10",
+ "@storybook/addon-a11y": "^8.1.10",
+ "@storybook/addon-essentials": "^8.1.10",
"@storybook/addon-webpack5-compiler-babel": "^3.0.3",
+ "@storybook/cli": "^8.1.10",
+ "@storybook/react": "^8.1.10",
"@storybook/react-webpack5": "^8.0.6",
+ "@storybook/theming": "^8.1.10",
"@svgr/webpack": "^6.0.0",
"@testing-library/jest-native": "5.4.1",
"@testing-library/react-native": "11.5.1",
@@ -182,6 +186,7 @@
"@types/react-beautiful-dnd": "^13.1.4",
"@types/react-collapse": "^5.0.1",
"@types/react-dom": "^18.2.4",
+ "@types/react-is": "^18.3.0",
"@types/react-test-renderer": "^18.0.0",
"@types/semver": "^7.5.4",
"@types/setimmediate": "^1.0.2",
@@ -195,6 +200,7 @@
"babel-jest": "29.4.1",
"babel-loader": "^9.1.3",
"babel-plugin-module-resolver": "^5.0.0",
+ "babel-plugin-react-compiler": "^0.0.0-experimental-c23de8d-20240515",
"babel-plugin-react-native-web": "^0.18.7",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-plugin-transform-remove-console": "^6.9.4",
@@ -213,6 +219,7 @@
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-jest": "^28.6.0",
"eslint-plugin-jsdoc": "^46.2.6",
+ "eslint-plugin-react-compiler": "^0.0.0-experimental-53bb89e-20240515",
"eslint-plugin-react-native-a11y": "^3.3.0",
"eslint-plugin-storybook": "^0.8.0",
"eslint-plugin-testing-library": "^6.2.2",
@@ -229,12 +236,13 @@
"portfinder": "^1.0.28",
"prettier": "^2.8.8",
"pusher-js-mock": "^0.3.3",
+ "react-is": "^18.3.1",
"react-native-clean-project": "^4.0.0-alpha4.0",
"react-test-renderer": "18.2.0",
"reassure": "^0.10.1",
"setimmediate": "^1.0.5",
"shellcheck": "^1.1.0",
- "storybook": "^8.0.6",
+ "storybook": "^8.1.10",
"style-loader": "^2.0.0",
"time-analytics-webpack-plugin": "^0.1.17",
"ts-jest": "^29.1.2",
@@ -255,6 +263,13 @@
"npm": "10.7.0"
}
},
+ "lib/react-compiler-runtime": {
+ "version": "0.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "react": "^18.2.0"
+ }
+ },
"node_modules/@actions/core": {
"version": "1.10.0",
"dev": true,
@@ -374,6 +389,7 @@
"version": "1.4.126",
"resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz",
"integrity": "sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==",
+ "dev": true,
"dependencies": {
"default-browser-id": "3.0.0"
},
@@ -382,11 +398,11 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.24.2",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
- "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+ "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
"dependencies": {
- "@babel/highlight": "^7.24.2",
+ "@babel/highlight": "^7.24.7",
"picocolors": "^1.0.0"
},
"engines": {
@@ -394,28 +410,28 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz",
- "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz",
+ "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.24.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz",
- "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==",
+ "version": "7.24.5",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz",
+ "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.24.2",
- "@babel/generator": "^7.24.1",
+ "@babel/generator": "^7.24.5",
"@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helpers": "^7.24.1",
- "@babel/parser": "^7.24.1",
+ "@babel/helper-module-transforms": "^7.24.5",
+ "@babel/helpers": "^7.24.5",
+ "@babel/parser": "^7.24.5",
"@babel/template": "^7.24.0",
- "@babel/traverse": "^7.24.1",
- "@babel/types": "^7.24.0",
+ "@babel/traverse": "^7.24.5",
+ "@babel/types": "^7.24.5",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -431,18 +447,18 @@
}
},
"node_modules/@babel/core/node_modules/@babel/traverse": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz",
- "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==",
+ "version": "7.24.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz",
+ "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==",
"dependencies": {
- "@babel/code-frame": "^7.24.1",
- "@babel/generator": "^7.24.1",
+ "@babel/code-frame": "^7.24.2",
+ "@babel/generator": "^7.24.5",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.24.1",
- "@babel/types": "^7.24.0",
+ "@babel/helper-split-export-declaration": "^7.24.5",
+ "@babel/parser": "^7.24.5",
+ "@babel/types": "^7.24.5",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -489,11 +505,11 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz",
- "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz",
+ "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==",
"dependencies": {
- "@babel/types": "^7.24.0",
+ "@babel/types": "^7.24.7",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
@@ -516,33 +532,55 @@
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.22.5",
- "license": "MIT",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+ "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz",
- "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
+ "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
"dependencies": {
- "@babel/types": "^7.22.15"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-builder-binary-assignment-operator-visitor/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
- "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz",
+ "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==",
"dependencies": {
- "@babel/compat-data": "^7.23.5",
- "@babel/helper-validator-option": "^7.23.5",
+ "@babel/compat-data": "^7.24.7",
+ "@babel/helper-validator-option": "^7.24.7",
"browserslist": "^4.22.2",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -570,18 +608,18 @@
"license": "ISC"
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz",
- "integrity": "sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-member-expression-to-functions": "^7.23.0",
- "@babel/helper-optimise-call-expression": "^7.22.5",
- "@babel/helper-replace-supers": "^7.24.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz",
+ "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-member-expression-to-functions": "^7.24.7",
+ "@babel/helper-optimise-call-expression": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
"semver": "^6.3.1"
},
"engines": {
@@ -599,11 +637,11 @@
}
},
"node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz",
- "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz",
+ "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-annotate-as-pure": "^7.24.7",
"regexpu-core": "^5.3.1",
"semver": "^6.3.1"
},
@@ -644,64 +682,113 @@
}
},
"node_modules/@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "license": "MIT",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
+ "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-function-name": {
- "version": "7.23.0",
- "license": "MIT",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
+ "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
"dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
+ "@babel/template": "^7.24.7",
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "license": "MIT",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
+ "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.23.0",
- "license": "MIT",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz",
+ "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==",
"dependencies": {
- "@babel/types": "^7.23.0"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.24.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz",
- "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+ "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
"dependencies": {
- "@babel/types": "^7.24.0"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
- "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz",
+ "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-simple-access": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.20"
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-simple-access": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/helper-validator-identifier": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -711,31 +798,32 @@
}
},
"node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.22.5",
- "license": "MIT",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
+ "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
- "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz",
+ "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
- "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz",
+ "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-wrap-function": "^7.22.20"
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-wrap-function": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -745,13 +833,13 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz",
- "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz",
+ "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-member-expression-to-functions": "^7.23.0",
- "@babel/helper-optimise-call-expression": "^7.22.5"
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-member-expression-to-functions": "^7.24.7",
+ "@babel/helper-optimise-call-expression": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -761,95 +849,164 @@
}
},
"node_modules/@babel/helper-simple-access": {
- "version": "7.22.5",
- "license": "MIT",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+ "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-simple-access/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.22.5",
- "license": "MIT",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
+ "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-split-export-declaration": {
- "version": "7.22.6",
- "license": "MIT",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
+ "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.23.4",
- "license": "MIT",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz",
+ "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "license": "MIT",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+ "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.23.5",
- "license": "MIT",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz",
+ "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz",
- "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz",
+ "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==",
"dependencies": {
- "@babel/helper-function-name": "^7.22.5",
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.22.19"
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/template": "^7.24.7",
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-wrap-function/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz",
- "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==",
+ "version": "7.24.5",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz",
+ "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==",
"dependencies": {
"@babel/template": "^7.24.0",
- "@babel/traverse": "^7.24.1",
- "@babel/types": "^7.24.0"
+ "@babel/traverse": "^7.24.5",
+ "@babel/types": "^7.24.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers/node_modules/@babel/traverse": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz",
- "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==",
+ "version": "7.24.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz",
+ "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==",
"dependencies": {
- "@babel/code-frame": "^7.24.1",
- "@babel/generator": "^7.24.1",
+ "@babel/code-frame": "^7.24.2",
+ "@babel/generator": "^7.24.5",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.24.1",
- "@babel/types": "^7.24.0",
+ "@babel/helper-split-export-declaration": "^7.24.5",
+ "@babel/parser": "^7.24.5",
+ "@babel/types": "^7.24.5",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -858,11 +1015,11 @@
}
},
"node_modules/@babel/highlight": {
- "version": "7.24.2",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
- "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+ "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-validator-identifier": "^7.24.7",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0",
"picocolors": "^1.0.0"
@@ -872,9 +1029,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz",
- "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz",
+ "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -882,12 +1039,27 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz",
+ "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==",
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz",
- "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz",
+ "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -897,13 +1069,13 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz",
- "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
+ "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/plugin-transform-optional-chaining": "^7.24.1"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/plugin-transform-optional-chaining": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -913,12 +1085,12 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz",
- "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz",
+ "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1216,11 +1388,11 @@
}
},
"node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz",
- "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz",
+ "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1230,11 +1402,11 @@
}
},
"node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz",
- "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz",
+ "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1392,11 +1564,11 @@
}
},
"node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz",
- "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
+ "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1406,13 +1578,13 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.24.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz",
- "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz",
+ "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-remap-async-to-generator": "^7.22.20",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-remap-async-to-generator": "^7.24.7",
"@babel/plugin-syntax-async-generators": "^7.8.4"
},
"engines": {
@@ -1423,13 +1595,13 @@
}
},
"node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz",
- "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz",
+ "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==",
"dependencies": {
- "@babel/helper-module-imports": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-remap-async-to-generator": "^7.22.20"
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-remap-async-to-generator": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1439,11 +1611,11 @@
}
},
"node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz",
- "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
+ "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1453,11 +1625,11 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz",
- "integrity": "sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz",
+ "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1467,12 +1639,12 @@
}
},
"node_modules/@babel/plugin-transform-class-properties": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz",
- "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz",
+ "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1482,12 +1654,12 @@
}
},
"node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz",
- "integrity": "sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
+ "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-class-static-block": "^7.14.5"
},
"engines": {
@@ -1498,17 +1670,17 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz",
- "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-replace-supers": "^7.24.1",
- "@babel/helper-split-export-declaration": "^7.22.6",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz",
+ "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-compilation-targets": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
"globals": "^11.1.0"
},
"engines": {
@@ -1519,12 +1691,12 @@
}
},
"node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz",
- "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
+ "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/template": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/template": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1534,11 +1706,11 @@
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz",
- "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz",
+ "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1548,12 +1720,12 @@
}
},
"node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz",
- "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
+ "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1563,11 +1735,11 @@
}
},
"node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz",
- "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
+ "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1577,11 +1749,11 @@
}
},
"node_modules/@babel/plugin-transform-dynamic-import": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz",
- "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
+ "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-dynamic-import": "^7.8.3"
},
"engines": {
@@ -1592,12 +1764,12 @@
}
},
"node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz",
- "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
+ "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
"dependencies": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1607,11 +1779,11 @@
}
},
"node_modules/@babel/plugin-transform-export-namespace-from": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz",
- "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
+ "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
},
"engines": {
@@ -1637,12 +1809,12 @@
}
},
"node_modules/@babel/plugin-transform-for-of": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz",
- "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
+ "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1652,13 +1824,13 @@
}
},
"node_modules/@babel/plugin-transform-function-name": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz",
- "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz",
+ "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-compilation-targets": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1668,11 +1840,11 @@
}
},
"node_modules/@babel/plugin-transform-json-strings": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz",
- "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
+ "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-json-strings": "^7.8.3"
},
"engines": {
@@ -1683,11 +1855,11 @@
}
},
"node_modules/@babel/plugin-transform-literals": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz",
- "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz",
+ "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1697,11 +1869,11 @@
}
},
"node_modules/@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz",
- "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
+ "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
},
"engines": {
@@ -1712,11 +1884,11 @@
}
},
"node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz",
- "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
+ "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1726,12 +1898,12 @@
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz",
- "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
+ "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1741,13 +1913,13 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz",
- "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz",
+ "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==",
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-simple-access": "^7.22.5"
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-simple-access": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1757,14 +1929,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz",
- "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz",
+ "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==",
"dependencies": {
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-validator-identifier": "^7.22.20"
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-validator-identifier": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1774,12 +1946,12 @@
}
},
"node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz",
- "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
+ "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1789,11 +1961,12 @@
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.22.5",
- "license": "MIT",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
+ "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1803,11 +1976,11 @@
}
},
"node_modules/@babel/plugin-transform-new-target": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz",
- "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
+ "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1817,11 +1990,11 @@
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz",
- "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
+ "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
},
"engines": {
@@ -1832,11 +2005,11 @@
}
},
"node_modules/@babel/plugin-transform-numeric-separator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz",
- "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
+ "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
},
"engines": {
@@ -1847,14 +2020,14 @@
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz",
- "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
+ "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-compilation-targets": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.24.1"
+ "@babel/plugin-transform-parameters": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1864,12 +2037,12 @@
}
},
"node_modules/@babel/plugin-transform-object-super": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz",
- "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
+ "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-replace-supers": "^7.24.1"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1879,11 +2052,11 @@
}
},
"node_modules/@babel/plugin-transform-optional-catch-binding": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz",
- "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
+ "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
},
"engines": {
@@ -1894,12 +2067,12 @@
}
},
"node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz",
- "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz",
+ "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
},
"engines": {
@@ -1910,11 +2083,11 @@
}
},
"node_modules/@babel/plugin-transform-parameters": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz",
- "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
+ "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1924,12 +2097,12 @@
}
},
"node_modules/@babel/plugin-transform-private-methods": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz",
- "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz",
+ "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1939,13 +2112,13 @@
}
},
"node_modules/@babel/plugin-transform-private-property-in-object": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz",
- "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
+ "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-create-class-features-plugin": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
},
"engines": {
@@ -1956,11 +2129,11 @@
}
},
"node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz",
- "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
+ "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2067,11 +2240,11 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz",
- "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
+ "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"regenerator-transform": "^0.15.2"
},
"engines": {
@@ -2082,11 +2255,11 @@
}
},
"node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz",
- "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
+ "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2121,11 +2294,11 @@
}
},
"node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz",
- "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
+ "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2135,12 +2308,12 @@
}
},
"node_modules/@babel/plugin-transform-spread": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz",
- "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
+ "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2150,11 +2323,11 @@
}
},
"node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz",
- "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
+ "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2164,11 +2337,11 @@
}
},
"node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz",
- "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
+ "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2178,11 +2351,11 @@
}
},
"node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz",
- "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz",
+ "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2209,11 +2382,11 @@
}
},
"node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz",
- "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
+ "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2223,12 +2396,12 @@
}
},
"node_modules/@babel/plugin-transform-unicode-property-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz",
- "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
+ "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2238,12 +2411,12 @@
}
},
"node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz",
- "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
+ "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2253,12 +2426,12 @@
}
},
"node_modules/@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz",
- "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz",
+ "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2268,25 +2441,26 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.24.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.3.tgz",
- "integrity": "sha512-fSk430k5c2ff8536JcPvPWK4tZDwehWLGlBp0wrsBUjZVdeQV6lePbwKWZaZfK2vnh/1kQX1PzAJWsnBmVgGJA==",
- "dependencies": {
- "@babel/compat-data": "^7.24.1",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-validator-option": "^7.23.5",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz",
+ "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==",
+ "dependencies": {
+ "@babel/compat-data": "^7.24.7",
+ "@babel/helper-compilation-targets": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-validator-option": "^7.24.7",
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
"@babel/plugin-syntax-class-static-block": "^7.14.5",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.24.1",
- "@babel/plugin-syntax-import-attributes": "^7.24.1",
+ "@babel/plugin-syntax-import-assertions": "^7.24.7",
+ "@babel/plugin-syntax-import-attributes": "^7.24.7",
"@babel/plugin-syntax-import-meta": "^7.10.4",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
@@ -2298,54 +2472,54 @@
"@babel/plugin-syntax-private-property-in-object": "^7.14.5",
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.24.1",
- "@babel/plugin-transform-async-generator-functions": "^7.24.3",
- "@babel/plugin-transform-async-to-generator": "^7.24.1",
- "@babel/plugin-transform-block-scoped-functions": "^7.24.1",
- "@babel/plugin-transform-block-scoping": "^7.24.1",
- "@babel/plugin-transform-class-properties": "^7.24.1",
- "@babel/plugin-transform-class-static-block": "^7.24.1",
- "@babel/plugin-transform-classes": "^7.24.1",
- "@babel/plugin-transform-computed-properties": "^7.24.1",
- "@babel/plugin-transform-destructuring": "^7.24.1",
- "@babel/plugin-transform-dotall-regex": "^7.24.1",
- "@babel/plugin-transform-duplicate-keys": "^7.24.1",
- "@babel/plugin-transform-dynamic-import": "^7.24.1",
- "@babel/plugin-transform-exponentiation-operator": "^7.24.1",
- "@babel/plugin-transform-export-namespace-from": "^7.24.1",
- "@babel/plugin-transform-for-of": "^7.24.1",
- "@babel/plugin-transform-function-name": "^7.24.1",
- "@babel/plugin-transform-json-strings": "^7.24.1",
- "@babel/plugin-transform-literals": "^7.24.1",
- "@babel/plugin-transform-logical-assignment-operators": "^7.24.1",
- "@babel/plugin-transform-member-expression-literals": "^7.24.1",
- "@babel/plugin-transform-modules-amd": "^7.24.1",
- "@babel/plugin-transform-modules-commonjs": "^7.24.1",
- "@babel/plugin-transform-modules-systemjs": "^7.24.1",
- "@babel/plugin-transform-modules-umd": "^7.24.1",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
- "@babel/plugin-transform-new-target": "^7.24.1",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1",
- "@babel/plugin-transform-numeric-separator": "^7.24.1",
- "@babel/plugin-transform-object-rest-spread": "^7.24.1",
- "@babel/plugin-transform-object-super": "^7.24.1",
- "@babel/plugin-transform-optional-catch-binding": "^7.24.1",
- "@babel/plugin-transform-optional-chaining": "^7.24.1",
- "@babel/plugin-transform-parameters": "^7.24.1",
- "@babel/plugin-transform-private-methods": "^7.24.1",
- "@babel/plugin-transform-private-property-in-object": "^7.24.1",
- "@babel/plugin-transform-property-literals": "^7.24.1",
- "@babel/plugin-transform-regenerator": "^7.24.1",
- "@babel/plugin-transform-reserved-words": "^7.24.1",
- "@babel/plugin-transform-shorthand-properties": "^7.24.1",
- "@babel/plugin-transform-spread": "^7.24.1",
- "@babel/plugin-transform-sticky-regex": "^7.24.1",
- "@babel/plugin-transform-template-literals": "^7.24.1",
- "@babel/plugin-transform-typeof-symbol": "^7.24.1",
- "@babel/plugin-transform-unicode-escapes": "^7.24.1",
- "@babel/plugin-transform-unicode-property-regex": "^7.24.1",
- "@babel/plugin-transform-unicode-regex": "^7.24.1",
- "@babel/plugin-transform-unicode-sets-regex": "^7.24.1",
+ "@babel/plugin-transform-arrow-functions": "^7.24.7",
+ "@babel/plugin-transform-async-generator-functions": "^7.24.7",
+ "@babel/plugin-transform-async-to-generator": "^7.24.7",
+ "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
+ "@babel/plugin-transform-block-scoping": "^7.24.7",
+ "@babel/plugin-transform-class-properties": "^7.24.7",
+ "@babel/plugin-transform-class-static-block": "^7.24.7",
+ "@babel/plugin-transform-classes": "^7.24.7",
+ "@babel/plugin-transform-computed-properties": "^7.24.7",
+ "@babel/plugin-transform-destructuring": "^7.24.7",
+ "@babel/plugin-transform-dotall-regex": "^7.24.7",
+ "@babel/plugin-transform-duplicate-keys": "^7.24.7",
+ "@babel/plugin-transform-dynamic-import": "^7.24.7",
+ "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
+ "@babel/plugin-transform-export-namespace-from": "^7.24.7",
+ "@babel/plugin-transform-for-of": "^7.24.7",
+ "@babel/plugin-transform-function-name": "^7.24.7",
+ "@babel/plugin-transform-json-strings": "^7.24.7",
+ "@babel/plugin-transform-literals": "^7.24.7",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
+ "@babel/plugin-transform-member-expression-literals": "^7.24.7",
+ "@babel/plugin-transform-modules-amd": "^7.24.7",
+ "@babel/plugin-transform-modules-commonjs": "^7.24.7",
+ "@babel/plugin-transform-modules-systemjs": "^7.24.7",
+ "@babel/plugin-transform-modules-umd": "^7.24.7",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
+ "@babel/plugin-transform-new-target": "^7.24.7",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
+ "@babel/plugin-transform-numeric-separator": "^7.24.7",
+ "@babel/plugin-transform-object-rest-spread": "^7.24.7",
+ "@babel/plugin-transform-object-super": "^7.24.7",
+ "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
+ "@babel/plugin-transform-optional-chaining": "^7.24.7",
+ "@babel/plugin-transform-parameters": "^7.24.7",
+ "@babel/plugin-transform-private-methods": "^7.24.7",
+ "@babel/plugin-transform-private-property-in-object": "^7.24.7",
+ "@babel/plugin-transform-property-literals": "^7.24.7",
+ "@babel/plugin-transform-regenerator": "^7.24.7",
+ "@babel/plugin-transform-reserved-words": "^7.24.7",
+ "@babel/plugin-transform-shorthand-properties": "^7.24.7",
+ "@babel/plugin-transform-spread": "^7.24.7",
+ "@babel/plugin-transform-sticky-regex": "^7.24.7",
+ "@babel/plugin-transform-template-literals": "^7.24.7",
+ "@babel/plugin-transform-typeof-symbol": "^7.24.7",
+ "@babel/plugin-transform-unicode-escapes": "^7.24.7",
+ "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
+ "@babel/plugin-transform-unicode-regex": "^7.24.7",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
"@babel/preset-modules": "0.1.6-no-external-plugins",
"babel-plugin-polyfill-corejs2": "^0.4.10",
"babel-plugin-polyfill-corejs3": "^0.10.4",
@@ -2531,13 +2705,13 @@
"license": "MIT"
},
"node_modules/@babel/template": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
- "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
+ "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==",
"dependencies": {
- "@babel/code-frame": "^7.23.5",
- "@babel/parser": "^7.24.0",
- "@babel/types": "^7.24.0"
+ "@babel/code-frame": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2563,12 +2737,12 @@
}
},
"node_modules/@babel/types": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
- "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz",
+ "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==",
"dependencies": {
- "@babel/helper-string-parser": "^7.23.4",
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-string-parser": "^7.24.7",
+ "@babel/helper-validator-identifier": "^7.24.7",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -2578,7 +2752,8 @@
"node_modules/@base2/pretty-print-object": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz",
- "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA=="
+ "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==",
+ "dev": true
},
"node_modules/@bcoe/v8-coverage": {
"version": "0.2.3",
@@ -2777,6 +2952,7 @@
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
"integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
+ "dev": true,
"optional": true,
"engines": {
"node": ">=0.1.90"
@@ -2848,6 +3024,7 @@
},
"node_modules/@discoveryjs/json-ext": {
"version": "0.5.7",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=10.0.0"
@@ -3086,6 +3263,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz",
"integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==",
+ "dev": true,
"peerDependencies": {
"react": ">=16.8.0"
}
@@ -3110,6 +3288,7 @@
"cpu": [
"ppc64"
],
+ "dev": true,
"optional": true,
"os": [
"aix"
@@ -3125,6 +3304,7 @@
"cpu": [
"arm"
],
+ "dev": true,
"optional": true,
"os": [
"android"
@@ -3140,6 +3320,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"android"
@@ -3155,6 +3336,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"android"
@@ -3170,6 +3352,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"darwin"
@@ -3185,6 +3368,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"darwin"
@@ -3200,6 +3384,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"freebsd"
@@ -3215,6 +3400,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"freebsd"
@@ -3230,6 +3416,7 @@
"cpu": [
"arm"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
@@ -3245,6 +3432,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
@@ -3260,6 +3448,7 @@
"cpu": [
"ia32"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
@@ -3275,6 +3464,7 @@
"cpu": [
"loong64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
@@ -3290,6 +3480,7 @@
"cpu": [
"mips64el"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
@@ -3305,6 +3496,7 @@
"cpu": [
"ppc64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
@@ -3320,6 +3512,7 @@
"cpu": [
"riscv64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
@@ -3335,6 +3528,7 @@
"cpu": [
"s390x"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
@@ -3350,6 +3544,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
@@ -3365,6 +3560,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"netbsd"
@@ -3380,6 +3576,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"openbsd"
@@ -3395,6 +3592,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"sunos"
@@ -3410,6 +3608,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"win32"
@@ -3425,6 +3624,7 @@
"cpu": [
"ia32"
],
+ "dev": true,
"optional": true,
"os": [
"win32"
@@ -3440,6 +3640,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"win32"
@@ -5515,7 +5716,8 @@
"node_modules/@fal-works/esbuild-plugin-global-externals": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz",
- "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ=="
+ "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==",
+ "dev": true
},
"node_modules/@formatjs/ecma402-abstract": {
"version": "1.15.0",
@@ -5732,6 +5934,7 @@
},
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
+ "dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^5.1.2",
@@ -5747,6 +5950,7 @@
},
"node_modules/@isaacs/cliui/node_modules/ansi-regex": {
"version": "6.0.1",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
@@ -5757,6 +5961,7 @@
},
"node_modules/@isaacs/cliui/node_modules/ansi-styles": {
"version": "6.2.1",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
@@ -5767,10 +5972,12 @@
},
"node_modules/@isaacs/cliui/node_modules/emoji-regex": {
"version": "9.2.2",
+ "dev": true,
"license": "MIT"
},
"node_modules/@isaacs/cliui/node_modules/string-width": {
"version": "5.1.2",
+ "dev": true,
"license": "MIT",
"dependencies": {
"eastasianwidth": "^0.2.0",
@@ -5786,6 +5993,7 @@
},
"node_modules/@isaacs/cliui/node_modules/strip-ansi": {
"version": "7.1.0",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
@@ -5799,6 +6007,7 @@
},
"node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
"version": "8.1.0",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.1.0",
@@ -7363,6 +7572,7 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz",
"integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==",
+ "dev": true,
"dependencies": {
"@types/mdx": "^2.0.0"
},
@@ -7391,6 +7601,7 @@
"version": "3.0.9",
"resolved": "https://registry.npmjs.org/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz",
"integrity": "sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==",
+ "dev": true,
"dependencies": {
"gunzip-maybe": "^1.4.2",
"pump": "^3.0.0",
@@ -7667,8 +7878,119 @@
"react-native": ">=0.70.0 <1.0.x"
}
},
+ "node_modules/@perf-profiler/android": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/@perf-profiler/android/-/android-0.12.1.tgz",
+ "integrity": "sha512-t4E2tfj9UdJw5JjhFPLMzrsu3NkKSyiZyeIyd70HX9d3anWqNK47XuQV+qkDPMjWaoU+CTlj1SuNnIOqEkCpSA==",
+ "dev": true,
+ "dependencies": {
+ "@perf-profiler/logger": "^0.3.3",
+ "@perf-profiler/profiler": "^0.10.10",
+ "@perf-profiler/types": "^0.8.0",
+ "commander": "^12.0.0",
+ "lodash": "^4.17.21"
+ },
+ "bin": {
+ "perf-profiler-commands": "dist/src/commands.js"
+ }
+ },
+ "node_modules/@perf-profiler/android/node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@perf-profiler/ios": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@perf-profiler/ios/-/ios-0.3.2.tgz",
+ "integrity": "sha512-2jYyHXFO3xe5BdvU1Ttt+Uw2nAf10B3/mcx4FauJwSdJ+nlOAKIvxmZDvMcipCZZ63uc+HWsYndhziJZVQ7VUw==",
+ "dev": true,
+ "dependencies": {
+ "@perf-profiler/ios-instruments": "^0.3.2",
+ "@perf-profiler/logger": "^0.3.3",
+ "@perf-profiler/types": "^0.8.0"
+ }
+ },
+ "node_modules/@perf-profiler/ios-instruments": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@perf-profiler/ios-instruments/-/ios-instruments-0.3.2.tgz",
+ "integrity": "sha512-uox5arQscpRuGWfzBrTpsn6eJq0ErdjPlU0FMbN4Cv5akQC11ejKWmgV6y4FR/0YIET9uiiXMtnwyEBgUunYGQ==",
+ "dev": true,
+ "dependencies": {
+ "@perf-profiler/logger": "^0.3.3",
+ "@perf-profiler/profiler": "^0.10.10",
+ "@perf-profiler/types": "^0.8.0",
+ "commander": "^12.0.0",
+ "fast-xml-parser": "^4.2.7"
+ },
+ "bin": {
+ "flashlight-ios-poc": "dist/launchIOS.js"
+ }
+ },
+ "node_modules/@perf-profiler/ios-instruments/node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@perf-profiler/logger": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@perf-profiler/logger/-/logger-0.3.3.tgz",
+ "integrity": "sha512-iAJJ5gWhJ3zEpdMT7M2+HX0Q0UjSuCOZiEs5g8UKKPFYQjmPWwC6otHoZz6ZzRRddjiA065iD2PTytVFkpFTeQ==",
+ "dev": true,
+ "dependencies": {
+ "kleur": "^4.1.5",
+ "luxon": "^3.4.4"
+ },
+ "bin": {
+ "perf-profiler-logger": "dist/bin.js"
+ }
+ },
+ "node_modules/@perf-profiler/logger/node_modules/kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@perf-profiler/profiler": {
+ "version": "0.10.10",
+ "resolved": "https://registry.npmjs.org/@perf-profiler/profiler/-/profiler-0.10.10.tgz",
+ "integrity": "sha512-kvVC6VQ7pBdthcWEcLTua+iDj0ZkcmYYL9gXHa9Dl7jYkZI4cOeslJZ1vuGfIcC168JwAVrB8UYhgoSgss/MWQ==",
+ "dev": true,
+ "dependencies": {
+ "@perf-profiler/android": "^0.12.1",
+ "@perf-profiler/ios": "^0.3.2",
+ "@perf-profiler/types": "^0.8.0"
+ }
+ },
+ "node_modules/@perf-profiler/reporter": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@perf-profiler/reporter/-/reporter-0.9.0.tgz",
+ "integrity": "sha512-wJt6ZRVM/cL+8rv9gFYgl8ZIra0uKdesfcfvsvhmrPXtxgC0O4ZdHF9hJDMtcCiHuHb8ptVq/BmEEW84CnvRIw==",
+ "dev": true,
+ "dependencies": {
+ "@perf-profiler/types": "^0.8.0",
+ "lodash": "^4.17.21"
+ }
+ },
+ "node_modules/@perf-profiler/types": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@perf-profiler/types/-/types-0.8.0.tgz",
+ "integrity": "sha512-TFiktv00SzLjjPp1hFYYjT9O36iGIUaF6yPLd7x/UT4CuLd0YYDUj+gvX0fbXtVtV7141tTvWbXFL5HiXGx0kw==",
+ "dev": true
+ },
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
+ "dev": true,
"license": "MIT",
"optional": true,
"engines": {
@@ -7680,34 +8002,311 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@radix-ui/primitive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz",
+ "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==",
+ "dev": true
+ },
"node_modules/@radix-ui/react-compose-refs": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz",
- "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz",
+ "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==",
+ "dev": true,
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
+ "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
+ "dev": true,
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dialog": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz",
+ "integrity": "sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==",
+ "dev": true,
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.0",
+ "@radix-ui/react-focus-guards": "1.1.0",
+ "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-portal": "1.1.1",
+ "@radix-ui/react-presence": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.5.7"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dismissable-layer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz",
+ "integrity": "sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==",
+ "dev": true,
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-escape-keydown": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-focus-guards": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz",
+ "integrity": "sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==",
+ "dev": true,
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-focus-scope": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz",
+ "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==",
+ "dev": true,
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-id": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz",
+ "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==",
+ "dev": true,
+ "dependencies": {
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-portal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz",
+ "integrity": "sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==",
+ "dev": true,
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-presence": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz",
+ "integrity": "sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==",
+ "dev": true,
"dependencies": {
- "@babel/runtime": "^7.13.10"
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0"
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz",
+ "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==",
+ "dev": true,
+ "dependencies": {
+ "@radix-ui/react-slot": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
}
}
},
"node_modules/@radix-ui/react-slot": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz",
- "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz",
+ "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==",
+ "dev": true,
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-callback-ref": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
+ "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==",
+ "dev": true,
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-controllable-state": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz",
+ "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==",
+ "dev": true,
"dependencies": {
- "@babel/runtime": "^7.13.10",
- "@radix-ui/react-compose-refs": "1.0.1"
+ "@radix-ui/react-use-callback-ref": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0"
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-escape-keydown": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz",
+ "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==",
+ "dev": true,
+ "dependencies": {
+ "@radix-ui/react-use-callback-ref": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-layout-effect": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz",
+ "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==",
+ "dev": true,
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -9366,6 +9965,11 @@
"react": "*"
}
},
+ "node_modules/@react-navigation/core/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
"node_modules/@react-navigation/devtools": {
"version": "6.0.10",
"dev": true,
@@ -9567,6 +10171,18 @@
"url": "https://github.com/sindresorhus/is?sponsor=1"
}
},
+ "node_modules/@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/@sinonjs/commons": {
"version": "2.0.0",
"license": "BSD-3-Clause",
@@ -9582,11 +10198,12 @@
}
},
"node_modules/@storybook/addon-a11y": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.0.6.tgz",
- "integrity": "sha512-p84GRmEU4f9uro71et4X4elnCFReq16UC44h8neLhcZHlMLkPop5oSRslcvF7MlKrM+mJepO1tsKmBmoTaq2PQ==",
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.1.10.tgz",
+ "integrity": "sha512-Ruags4vx0ocO9FepZPCcfxksxWUgIIYsHguh/Ktestb0LoZN6Uikg9SMmXZeNrjcMrAHLHYKF/HXP0ov/rIexg==",
+ "dev": true,
"dependencies": {
- "@storybook/addon-highlight": "8.0.6",
+ "@storybook/addon-highlight": "8.1.10",
"axe-core": "^4.2.0"
},
"funding": {
@@ -9595,11 +10212,12 @@
}
},
"node_modules/@storybook/addon-actions": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.0.6.tgz",
- "integrity": "sha512-3R/d2Td6+yeR+UnyCAeZ4tuiRGSm+6gKUQP9vB1bvEFQGuFBrV+zs3eakcYegOqZu3IXuejgaB0Knq987gUL5A==",
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.1.10.tgz",
+ "integrity": "sha512-1MjncuynvkT3rJtrkWPHLo92Pfno+LUWtaHiNDt9nXYowclTN2cT4a4gNDh6eKkB9dITHxkD7/4mxjHpFUvyrA==",
+ "dev": true,
"dependencies": {
- "@storybook/core-events": "8.0.6",
+ "@storybook/core-events": "8.1.10",
"@storybook/global": "^5.0.0",
"@types/uuid": "^9.0.1",
"dequal": "^2.0.2",
@@ -9611,10 +10229,25 @@
"url": "https://opencollective.com/storybook"
}
},
+ "node_modules/@storybook/addon-actions/node_modules/@storybook/core-events": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz",
+ "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/csf": "^0.1.7",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
"node_modules/@storybook/addon-actions/node_modules/uuid": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "dev": true,
"funding": [
"https://github.com/sponsors/broofa",
"https://github.com/sponsors/ctavan"
@@ -9624,9 +10257,10 @@
}
},
"node_modules/@storybook/addon-backgrounds": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.0.6.tgz",
- "integrity": "sha512-NRTmSsJiqpXqJMVrRuQ+P1wt26ZCLjBNaMafcjgicfWeyUsdhNF63yYvyrHkMRuNmYPZm0hKvtjLhW3s9VohSA==",
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.1.10.tgz",
+ "integrity": "sha512-nX9Hmcq5U/13S2ETcjGaLqfDcaSKTNPD3RBzWUoNQuZB/bB1q4qLLncQnQfaa6uruP9k6GIFZvtXeJAs9r0POw==",
+ "dev": true,
"dependencies": {
"@storybook/global": "^5.0.0",
"memoizerific": "^1.11.3",
@@ -9638,11 +10272,13 @@
}
},
"node_modules/@storybook/addon-controls": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.0.6.tgz",
- "integrity": "sha512-bNXDhi1xl7eat1dUsKTrUgu5mkwXjfFWDjIYxrzatqDOW1+rdkNaPFduQRJ2mpCs4cYcHKAr5chEcMm6byuTnA==",
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.1.10.tgz",
+ "integrity": "sha512-98uLezKv6W/1byJL+Zri5kA1Cfi+DUBsbdjz7fFJl8xMtAGwuv9cnOueQl0ouDhqqwnZ4LWHYQsSsPPMz1Lmkg==",
+ "dev": true,
"dependencies": {
- "@storybook/blocks": "8.0.6",
+ "@storybook/blocks": "8.1.10",
+ "dequal": "^2.0.2",
"lodash": "^4.17.21",
"ts-dedent": "^2.0.0"
},
@@ -9652,23 +10288,24 @@
}
},
"node_modules/@storybook/addon-docs": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.0.6.tgz",
- "integrity": "sha512-QOlOE2XEFcUaR85YytBuf/nfKFkbIlD0Qc9CI4E65FoZPTCMhRVKAEN2CpsKI63fs/qQxM2mWkPXb6w7QXGxvg==",
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.1.10.tgz",
+ "integrity": "sha512-jzmIeCoykiHg/KLPrYEDtXO/+dcQaEOqyJHS77eTzAO2iSXJlE+yva5Uwc8apG7UxDVa4Ycc1lPwMzB5GaHsGQ==",
+ "dev": true,
"dependencies": {
- "@babel/core": "^7.12.3",
+ "@babel/core": "^7.24.4",
"@mdx-js/react": "^3.0.0",
- "@storybook/blocks": "8.0.6",
- "@storybook/client-logger": "8.0.6",
- "@storybook/components": "8.0.6",
- "@storybook/csf-plugin": "8.0.6",
- "@storybook/csf-tools": "8.0.6",
+ "@storybook/blocks": "8.1.10",
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/components": "8.1.10",
+ "@storybook/csf-plugin": "8.1.10",
+ "@storybook/csf-tools": "8.1.10",
"@storybook/global": "^5.0.0",
- "@storybook/node-logger": "8.0.6",
- "@storybook/preview-api": "8.0.6",
- "@storybook/react-dom-shim": "8.0.6",
- "@storybook/theming": "8.0.6",
- "@storybook/types": "8.0.6",
+ "@storybook/node-logger": "8.1.10",
+ "@storybook/preview-api": "8.1.10",
+ "@storybook/react-dom-shim": "8.1.10",
+ "@storybook/theming": "8.1.10",
+ "@storybook/types": "8.1.10",
"@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
"fs-extra": "^11.1.0",
"react": "^16.8.0 || ^17.0.0 || ^18.0.0",
@@ -9682,48 +10319,49 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-docs/node_modules/fs-extra": {
- "version": "11.2.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
- "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "node_modules/@storybook/addon-docs/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
},
"engines": {
- "node": ">=14.14"
+ "node": ">=6.9.0"
}
},
- "node_modules/@storybook/addon-essentials": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.0.6.tgz",
- "integrity": "sha512-L9SSsdN1EG2FZ1mNT59vwf0fpseLrzO1cWPwH6hVtp0+kci3tfropch2tEwO7Vr+YLSesJihfr4uvpI/l0jCsw==",
- "dependencies": {
- "@storybook/addon-actions": "8.0.6",
- "@storybook/addon-backgrounds": "8.0.6",
- "@storybook/addon-controls": "8.0.6",
- "@storybook/addon-docs": "8.0.6",
- "@storybook/addon-highlight": "8.0.6",
- "@storybook/addon-measure": "8.0.6",
- "@storybook/addon-outline": "8.0.6",
- "@storybook/addon-toolbars": "8.0.6",
- "@storybook/addon-viewport": "8.0.6",
- "@storybook/core-common": "8.0.6",
- "@storybook/manager-api": "8.0.6",
- "@storybook/node-logger": "8.0.6",
- "@storybook/preview-api": "8.0.6",
- "ts-dedent": "^2.0.0"
+ "node_modules/@storybook/addon-docs/node_modules/@storybook/channels": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz",
+ "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/global": "^5.0.0",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-highlight": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.0.6.tgz",
- "integrity": "sha512-CxXzzgIK5sXy2RNIkwU5JXZNq+PNGhUptRm/5M5ylcB7rk0pdwnE0TLXsMU+lzD0ji+cj61LWVLdeXQa+/whSw==",
+ "node_modules/@storybook/addon-docs/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
"dependencies": {
"@storybook/global": "^5.0.0"
},
@@ -9732,25 +10370,34 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-measure": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.0.6.tgz",
- "integrity": "sha512-2PnytDaQzCxcgykEM5Njb71Olm+Z2EFERL5X+5RhsG2EQxEqobwh1fUtXLY4aqiImdSJOrjQnkMJchzzoTRtug==",
+ "node_modules/@storybook/addon-docs/node_modules/@storybook/core-events": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz",
+ "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==",
+ "dev": true,
"dependencies": {
- "@storybook/global": "^5.0.0",
- "tiny-invariant": "^1.3.1"
+ "@storybook/csf": "^0.1.7",
+ "ts-dedent": "^2.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-outline": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.0.6.tgz",
- "integrity": "sha512-PfTIy64kV5h7F0tXrj5rlwdPFpOQiGrn01AQudSJDVWaMsbVgjruPU+cHG4i/L1mzzERzeHYd46bNENWZiQgDw==",
+ "node_modules/@storybook/addon-docs/node_modules/@storybook/csf-tools": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.10.tgz",
+ "integrity": "sha512-bm/J1jAJf1YaKhcXgOlsNN02sf8XvILXuVAvr9cFC3aFkxVoGbC2AKCss4cgXAd8EQxUNtyETkOcheB5mJ5IlA==",
+ "dev": true,
"dependencies": {
- "@storybook/global": "^5.0.0",
+ "@babel/generator": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "@babel/traverse": "^7.24.1",
+ "@babel/types": "^7.24.0",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/types": "8.1.10",
+ "fs-extra": "^11.1.0",
+ "recast": "^0.23.5",
"ts-dedent": "^2.0.0"
},
"funding": {
@@ -9758,132 +10405,62 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-toolbars": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.0.6.tgz",
- "integrity": "sha512-g4GjrMEHKOIQVwG1DKUHBAn4B8xmdqlxFlVusOrYD9FVfakgMNllN6WBc02hg/IiuzqIDxVK5BXiY9MbXnoguQ==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/addon-viewport": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.0.6.tgz",
- "integrity": "sha512-R6aGEPA5e05L/NPs6Nbj0u9L6oKmchnJ/x8Rr/Xuc+nqVgXC1rslI0BcjJuC571Bewz7mT8zJ+BjP/gs7T4lnQ==",
- "dependencies": {
- "memoizerific": "^1.11.3"
- },
+ "node_modules/@storybook/addon-docs/node_modules/@storybook/node-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.10.tgz",
+ "integrity": "sha512-djgbAROgGAvz/gr49egBxCHn1+rui57e76qa9aOMPzEBcxsGrnnKKp0uNdiNt4M7Xv6S2QHbJ2SfOlHhWmMeaA==",
+ "dev": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/addon-webpack5-compiler-babel": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@storybook/addon-webpack5-compiler-babel/-/addon-webpack5-compiler-babel-3.0.3.tgz",
- "integrity": "sha512-rVQTTw+oxJltbVKaejIWSHwVKOBJs3au21f/pYXhV0aiNgNhxEa3vr79t/j0j8ox8uJtzM8XYOb7FlkvGfHlwQ==",
+ "node_modules/@storybook/addon-docs/node_modules/@storybook/preview-api": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.10.tgz",
+ "integrity": "sha512-0Gl8WHDtp/srrA5uBYXl7YbC8kFQA7IxVmwWN7dIS7HAXu63JZ6JfxaFcfy+kCBfZSBD7spFG4J0f5JXRDYbpg==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.23.7",
- "babel-loader": "^9.1.3"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@storybook/blocks": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.0.6.tgz",
- "integrity": "sha512-ycuPJwxyngSor4YNa4kkX3rAmX+w2pXNsIo+Zs4fEdAfCvha9+GZ/3jQSdrsHxjeIm9l9guiv4Ag8QTnnllXkw==",
- "dependencies": {
- "@storybook/channels": "8.0.6",
- "@storybook/client-logger": "8.0.6",
- "@storybook/components": "8.0.6",
- "@storybook/core-events": "8.0.6",
- "@storybook/csf": "^0.1.2",
- "@storybook/docs-tools": "8.0.6",
+ "@storybook/channels": "8.1.10",
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf": "^0.1.7",
"@storybook/global": "^5.0.0",
- "@storybook/icons": "^1.2.5",
- "@storybook/manager-api": "8.0.6",
- "@storybook/preview-api": "8.0.6",
- "@storybook/theming": "8.0.6",
- "@storybook/types": "8.0.6",
- "@types/lodash": "^4.14.167",
- "color-convert": "^2.0.1",
+ "@storybook/types": "8.1.10",
+ "@types/qs": "^6.9.5",
"dequal": "^2.0.2",
"lodash": "^4.17.21",
- "markdown-to-jsx": "7.3.2",
"memoizerific": "^1.11.3",
- "polished": "^4.2.2",
- "react-colorful": "^5.1.2",
- "telejson": "^7.2.0",
- "tocbot": "^4.20.1",
+ "qs": "^6.10.0",
+ "tiny-invariant": "^1.3.1",
"ts-dedent": "^2.0.0",
"util-deprecate": "^1.0.2"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- },
- "peerDependenciesMeta": {
- "react": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@storybook/blocks/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
}
},
- "node_modules/@storybook/blocks/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/@storybook/builder-manager": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.0.6.tgz",
- "integrity": "sha512-N61Gh9FKsSYvsbdBy5qFvq1anTIuUAjh2Z+ezDMlxnfMGG77nZP9heuy1NnCaYCTFzl+lq4BsmRfXXDcKtSPRA==",
+ "node_modules/@storybook/addon-docs/node_modules/@storybook/types": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz",
+ "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==",
+ "dev": true,
"dependencies": {
- "@fal-works/esbuild-plugin-global-externals": "^2.1.2",
- "@storybook/core-common": "8.0.6",
- "@storybook/manager": "8.0.6",
- "@storybook/node-logger": "8.0.6",
- "@types/ejs": "^3.1.1",
- "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10",
- "browser-assert": "^1.2.1",
- "ejs": "^3.1.8",
- "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0",
- "esbuild-plugin-alias": "^0.2.1",
- "express": "^4.17.3",
- "fs-extra": "^11.1.0",
- "process": "^0.11.10",
- "util": "^0.12.4"
+ "@storybook/channels": "8.1.10",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/builder-manager/node_modules/fs-extra": {
+ "node_modules/@storybook/addon-docs/node_modules/fs-extra": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -9893,198 +10470,239 @@
"node": ">=14.14"
}
},
- "node_modules/@storybook/builder-manager/node_modules/util": {
- "version": "0.12.5",
- "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
- "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "node_modules/@storybook/addon-docs/node_modules/recast": {
+ "version": "0.23.9",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
+ "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==",
+ "dev": true,
"dependencies": {
- "inherits": "^2.0.3",
- "is-arguments": "^1.0.4",
- "is-generator-function": "^1.0.7",
- "is-typed-array": "^1.1.3",
- "which-typed-array": "^1.1.2"
+ "ast-types": "^0.16.1",
+ "esprima": "~4.0.0",
+ "source-map": "~0.6.1",
+ "tiny-invariant": "^1.3.3",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
}
},
- "node_modules/@storybook/builder-webpack5": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.0.6.tgz",
- "integrity": "sha512-xhGmjDufD4nhOC9D10A78V73gw5foGWXACs0Trz76PdrSymwHdaTIZ4y4lMJMdp7qkqhO4o2K9kHweO4YPbajg==",
+ "node_modules/@storybook/addon-essentials": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.1.10.tgz",
+ "integrity": "sha512-xgAXdl/MaKWmwqJJpw4z1YaD1V/r74VHHLqY3Z4YaU9DmlApkCa+FmZSS9QVAf7g6JNUcD1Dbtw5j62uNn+YyA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/addon-actions": "8.1.10",
+ "@storybook/addon-backgrounds": "8.1.10",
+ "@storybook/addon-controls": "8.1.10",
+ "@storybook/addon-docs": "8.1.10",
+ "@storybook/addon-highlight": "8.1.10",
+ "@storybook/addon-measure": "8.1.10",
+ "@storybook/addon-outline": "8.1.10",
+ "@storybook/addon-toolbars": "8.1.10",
+ "@storybook/addon-viewport": "8.1.10",
+ "@storybook/core-common": "8.1.10",
+ "@storybook/manager-api": "8.1.10",
+ "@storybook/node-logger": "8.1.10",
+ "@storybook/preview-api": "8.1.10",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/@storybook/channels": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz",
+ "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==",
"dev": true,
"dependencies": {
- "@storybook/channels": "8.0.6",
- "@storybook/client-logger": "8.0.6",
- "@storybook/core-common": "8.0.6",
- "@storybook/core-events": "8.0.6",
- "@storybook/core-webpack": "8.0.6",
- "@storybook/node-logger": "8.0.6",
- "@storybook/preview": "8.0.6",
- "@storybook/preview-api": "8.0.6",
- "@types/node": "^18.0.0",
- "@types/semver": "^7.3.4",
- "browser-assert": "^1.2.1",
- "case-sensitive-paths-webpack-plugin": "^2.4.0",
- "cjs-module-lexer": "^1.2.3",
- "constants-browserify": "^1.0.0",
- "css-loader": "^6.7.1",
- "es-module-lexer": "^1.4.1",
- "express": "^4.17.3",
- "fork-ts-checker-webpack-plugin": "^8.0.0",
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/global": "^5.0.0",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/global": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/@storybook/core-common": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.10.tgz",
+ "integrity": "sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf-tools": "8.1.10",
+ "@storybook/node-logger": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "@yarnpkg/fslib": "2.10.3",
+ "@yarnpkg/libzip": "2.3.0",
+ "chalk": "^4.1.0",
+ "cross-spawn": "^7.0.3",
+ "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0",
+ "esbuild-register": "^3.5.0",
+ "execa": "^5.0.0",
+ "file-system-cache": "2.3.0",
+ "find-cache-dir": "^3.0.0",
+ "find-up": "^5.0.0",
"fs-extra": "^11.1.0",
- "html-webpack-plugin": "^5.5.0",
- "magic-string": "^0.30.5",
- "path-browserify": "^1.0.1",
- "process": "^0.11.10",
+ "glob": "^10.0.0",
+ "handlebars": "^4.7.7",
+ "lazy-universal-dotenv": "^4.0.0",
+ "node-fetch": "^2.0.0",
+ "picomatch": "^2.3.0",
+ "pkg-dir": "^5.0.0",
+ "prettier-fallback": "npm:prettier@^3",
+ "pretty-hrtime": "^1.0.3",
+ "resolve-from": "^5.0.0",
"semver": "^7.3.7",
- "style-loader": "^3.3.1",
- "terser-webpack-plugin": "^5.3.1",
+ "tempy": "^3.1.0",
+ "tiny-invariant": "^1.3.1",
"ts-dedent": "^2.0.0",
- "url": "^0.11.0",
- "util": "^0.12.4",
- "util-deprecate": "^1.0.2",
- "webpack": "5",
- "webpack-dev-middleware": "^6.1.1",
- "webpack-hot-middleware": "^2.25.1",
- "webpack-virtual-modules": "^0.5.0"
+ "util": "^0.12.4"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
},
+ "peerDependencies": {
+ "prettier": "^2 || ^3"
+ },
"peerDependenciesMeta": {
- "typescript": {
+ "prettier": {
"optional": true
}
}
},
- "node_modules/@storybook/builder-webpack5/node_modules/@types/node": {
- "version": "18.19.30",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.30.tgz",
- "integrity": "sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==",
+ "node_modules/@storybook/addon-essentials/node_modules/@storybook/core-events": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz",
+ "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==",
"dev": true,
"dependencies": {
- "undici-types": "~5.26.4"
+ "@storybook/csf": "^0.1.7",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/builder-webpack5/node_modules/fs-extra": {
- "version": "11.2.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
- "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "node_modules/@storybook/addon-essentials/node_modules/@storybook/csf-tools": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.10.tgz",
+ "integrity": "sha512-bm/J1jAJf1YaKhcXgOlsNN02sf8XvILXuVAvr9cFC3aFkxVoGbC2AKCss4cgXAd8EQxUNtyETkOcheB5mJ5IlA==",
"dev": true,
"dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "@babel/generator": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "@babel/traverse": "^7.24.1",
+ "@babel/types": "^7.24.0",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/types": "8.1.10",
+ "fs-extra": "^11.1.0",
+ "recast": "^0.23.5",
+ "ts-dedent": "^2.0.0"
},
- "engines": {
- "node": ">=14.14"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/builder-webpack5/node_modules/path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
- "dev": true
- },
- "node_modules/@storybook/builder-webpack5/node_modules/style-loader": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz",
- "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==",
+ "node_modules/@storybook/addon-essentials/node_modules/@storybook/node-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.10.tgz",
+ "integrity": "sha512-djgbAROgGAvz/gr49egBxCHn1+rui57e76qa9aOMPzEBcxsGrnnKKp0uNdiNt4M7Xv6S2QHbJ2SfOlHhWmMeaA==",
"dev": true,
- "engines": {
- "node": ">= 12.13.0"
- },
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.0.0"
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/builder-webpack5/node_modules/util": {
- "version": "0.12.5",
- "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
- "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "node_modules/@storybook/addon-essentials/node_modules/@storybook/preview-api": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.10.tgz",
+ "integrity": "sha512-0Gl8WHDtp/srrA5uBYXl7YbC8kFQA7IxVmwWN7dIS7HAXu63JZ6JfxaFcfy+kCBfZSBD7spFG4J0f5JXRDYbpg==",
"dev": true,
"dependencies": {
- "inherits": "^2.0.3",
- "is-arguments": "^1.0.4",
- "is-generator-function": "^1.0.7",
- "is-typed-array": "^1.1.3",
- "which-typed-array": "^1.1.2"
- }
- },
- "node_modules/@storybook/channels": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.0.6.tgz",
- "integrity": "sha512-IbNvjxeyQKiMpb+gSpQ7yYsFqb8BM/KYgfypJM3yJV6iU/NFeevrC/DA6/R+8xWFyPc70unRNLv8fPvxhcIu8Q==",
- "dependencies": {
- "@storybook/client-logger": "8.0.6",
- "@storybook/core-events": "8.0.6",
+ "@storybook/channels": "8.1.10",
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf": "^0.1.7",
"@storybook/global": "^5.0.0",
- "telejson": "^7.2.0",
- "tiny-invariant": "^1.3.1"
+ "@storybook/types": "8.1.10",
+ "@types/qs": "^6.9.5",
+ "dequal": "^2.0.2",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/cli": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.0.6.tgz",
- "integrity": "sha512-gAnl9soQUu1BtB4sANaqaaeTZAt/ThBSwCdzSLut5p21fP4ovi3FeP7hcDCJbyJZ/AvnD4k6leDrqRQxMVPr0A==",
+ "node_modules/@storybook/addon-essentials/node_modules/@storybook/types": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz",
+ "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==",
+ "dev": true,
"dependencies": {
- "@babel/core": "^7.23.0",
- "@babel/types": "^7.23.0",
- "@ndelangen/get-tarball": "^3.0.7",
- "@storybook/codemod": "8.0.6",
- "@storybook/core-common": "8.0.6",
- "@storybook/core-events": "8.0.6",
- "@storybook/core-server": "8.0.6",
- "@storybook/csf-tools": "8.0.6",
- "@storybook/node-logger": "8.0.6",
- "@storybook/telemetry": "8.0.6",
- "@storybook/types": "8.0.6",
- "@types/semver": "^7.3.4",
- "@yarnpkg/fslib": "2.10.3",
- "@yarnpkg/libzip": "2.3.0",
- "chalk": "^4.1.0",
- "commander": "^6.2.1",
- "cross-spawn": "^7.0.3",
- "detect-indent": "^6.1.0",
- "envinfo": "^7.7.3",
- "execa": "^5.0.0",
- "find-up": "^5.0.0",
- "fs-extra": "^11.1.0",
- "get-npm-tarball-url": "^2.0.3",
- "giget": "^1.0.0",
- "globby": "^11.0.2",
- "jscodeshift": "^0.15.1",
- "leven": "^3.1.0",
- "ora": "^5.4.1",
- "prettier": "^3.1.1",
- "prompts": "^2.4.0",
- "read-pkg-up": "^7.0.1",
- "semver": "^7.3.7",
- "strip-json-comments": "^3.0.1",
- "tempy": "^1.0.1",
- "tiny-invariant": "^1.3.1",
- "ts-dedent": "^2.0.0"
- },
- "bin": {
- "getstorybook": "bin/index.js",
- "sb": "bin/index.js"
+ "@storybook/channels": "8.1.10",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/cli/node_modules/ansi-styles": {
+ "node_modules/@storybook/addon-essentials/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -10095,10 +10713,20 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@storybook/cli/node_modules/chalk": {
+ "node_modules/@storybook/addon-essentials/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -10110,10 +10738,11 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@storybook/cli/node_modules/color-convert": {
+ "node_modules/@storybook/addon-essentials/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -10121,25 +10750,32 @@
"node": ">=7.0.0"
}
},
- "node_modules/@storybook/cli/node_modules/color-name": {
+ "node_modules/@storybook/addon-essentials/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
},
- "node_modules/@storybook/cli/node_modules/del": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
- "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
+ "node_modules/@storybook/addon-essentials/node_modules/crypto-random-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz",
+ "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==",
+ "dev": true,
"dependencies": {
- "globby": "^11.0.1",
- "graceful-fs": "^4.2.4",
- "is-glob": "^4.0.1",
- "is-path-cwd": "^2.2.0",
- "is-path-inside": "^3.0.2",
- "p-map": "^4.0.0",
- "rimraf": "^3.0.2",
- "slash": "^3.0.0"
+ "type-fest": "^1.0.1"
},
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/crypto-random-string/node_modules/type-fest": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "dev": true,
"engines": {
"node": ">=10"
},
@@ -10147,10 +10783,53 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/cli/node_modules/fs-extra": {
+ "node_modules/@storybook/addon-essentials/node_modules/find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/find-cache-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/find-cache-dir/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/fs-extra": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -10160,78 +10839,169 @@
"node": ">=14.14"
}
},
- "node_modules/@storybook/cli/node_modules/has-flag": {
+ "node_modules/@storybook/addon-essentials/node_modules/glob": {
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
+ "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
"engines": {
"node": ">=8"
}
},
- "node_modules/@storybook/cli/node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "node_modules/@storybook/addon-essentials/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/cli/node_modules/jscodeshift": {
- "version": "0.15.2",
- "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.2.tgz",
- "integrity": "sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==",
+ "node_modules/@storybook/addon-essentials/node_modules/jackspeak": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
+ "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
+ "dev": true,
"dependencies": {
- "@babel/core": "^7.23.0",
- "@babel/parser": "^7.23.0",
- "@babel/plugin-transform-class-properties": "^7.22.5",
- "@babel/plugin-transform-modules-commonjs": "^7.23.0",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11",
- "@babel/plugin-transform-optional-chaining": "^7.23.0",
- "@babel/plugin-transform-private-methods": "^7.22.5",
- "@babel/preset-flow": "^7.22.15",
- "@babel/preset-typescript": "^7.23.0",
- "@babel/register": "^7.22.15",
- "babel-core": "^7.0.0-bridge.0",
- "chalk": "^4.1.2",
- "flow-parser": "0.*",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.4",
- "neo-async": "^2.5.0",
- "node-dir": "^0.1.17",
- "recast": "^0.23.3",
- "temp": "^0.8.4",
- "write-file-atomic": "^2.3.0"
+ "@isaacs/cliui": "^8.0.2"
},
- "bin": {
- "jscodeshift": "bin/jscodeshift.js"
+ "engines": {
+ "node": ">=14"
},
- "peerDependencies": {
- "@babel/preset-env": "^7.1.6"
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
},
- "peerDependenciesMeta": {
- "@babel/preset-env": {
- "optional": true
- }
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
}
},
- "node_modules/@storybook/cli/node_modules/prettier": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
- "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
+ "node_modules/@storybook/addon-essentials/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
"bin": {
- "prettier": "bin/prettier.cjs"
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/minimatch": {
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
+ "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
},
"engines": {
- "node": ">=14"
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@storybook/cli/node_modules/recast": {
- "version": "0.23.6",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz",
- "integrity": "sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==",
+ "node_modules/@storybook/addon-essentials/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/recast": {
+ "version": "0.23.9",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
+ "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==",
+ "dev": true,
"dependencies": {
"ast-types": "^0.16.1",
"esprima": "~4.0.0",
@@ -10243,10 +11013,11 @@
"node": ">= 4"
}
},
- "node_modules/@storybook/cli/node_modules/supports-color": {
+ "node_modules/@storybook/addon-essentials/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -10254,39 +11025,78 @@
"node": ">=8"
}
},
- "node_modules/@storybook/cli/node_modules/tempy": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz",
- "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==",
+ "node_modules/@storybook/addon-essentials/node_modules/temp-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz",
+ "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/tempy": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz",
+ "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==",
+ "dev": true,
"dependencies": {
- "del": "^6.0.0",
- "is-stream": "^2.0.0",
- "temp-dir": "^2.0.0",
- "type-fest": "^0.16.0",
- "unique-string": "^2.0.0"
+ "is-stream": "^3.0.0",
+ "temp-dir": "^3.0.0",
+ "type-fest": "^2.12.2",
+ "unique-string": "^3.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14.16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/cli/node_modules/type-fest": {
- "version": "0.16.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz",
- "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==",
+ "node_modules/@storybook/addon-essentials/node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=12.20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/client-logger": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.0.6.tgz",
- "integrity": "sha512-et/IHPHiiOwMg93l5KSgw47NZXz5xOyIrIElRcsT1wr8OJeIB9DzopB/suoHBZ/IML+t8x91atdutzUN2BLF6A==",
+ "node_modules/@storybook/addon-essentials/node_modules/unique-string": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz",
+ "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==",
+ "dev": true,
+ "dependencies": {
+ "crypto-random-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/addon-essentials/node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "node_modules/@storybook/addon-highlight": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.1.10.tgz",
+ "integrity": "sha512-s9QKGtU6WGB/+CggNWg940NIi+u0tcxpPxqg/ltg3EOHr8J0NAZur6mibs3Z4Q5CXkAuNdWrvopLu+/27i1rQQ==",
+ "dev": true,
"dependencies": {
"@storybook/global": "^5.0.0"
},
@@ -10295,25 +11105,13 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/codemod": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.0.6.tgz",
- "integrity": "sha512-IMaTVI+EvmFxkz4leKWKForPC3LFxzfeTmd/QnTNF3nCeyvmIXvP01pQXRjro0+XcGDncEStuxa1d9ClMlac9Q==",
+ "node_modules/@storybook/addon-measure": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.1.10.tgz",
+ "integrity": "sha512-akhdg3WBOBvDsolzSSvW4TIdZLMVlL9DS6rpZvhydXeX8pG0sjb+sON6VUL4h8Gs7qa8QumauXCr+Y4q1FhZhw==",
+ "dev": true,
"dependencies": {
- "@babel/core": "^7.23.2",
- "@babel/preset-env": "^7.23.2",
- "@babel/types": "^7.23.0",
- "@storybook/csf": "^0.1.2",
- "@storybook/csf-tools": "8.0.6",
- "@storybook/node-logger": "8.0.6",
- "@storybook/types": "8.0.6",
- "@types/cross-spawn": "^6.0.2",
- "cross-spawn": "^7.0.3",
- "globby": "^11.0.2",
- "jscodeshift": "^0.15.1",
- "lodash": "^4.17.21",
- "prettier": "^3.1.1",
- "recast": "^0.23.5",
+ "@storybook/global": "^5.0.0",
"tiny-invariant": "^1.3.1"
},
"funding": {
@@ -10321,170 +11119,165 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/codemod/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/@storybook/addon-outline": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.1.10.tgz",
+ "integrity": "sha512-Edn5TWpV1DcumOjx0qG9bBKja6vz210ip7O47JbRDu7IDR8lguaM2X9xbmhXhBQq4fmqvobZmfRnrSeCtSYeyQ==",
+ "dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
+ "@storybook/global": "^5.0.0",
+ "ts-dedent": "^2.0.0"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/codemod/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
+ "node_modules/@storybook/addon-toolbars": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.1.10.tgz",
+ "integrity": "sha512-5bRcCWrhaTX5Y91EWmHilPZ7kZaneaY414Gn5a6gsaNgaVPkSx9KD9j8M9DyXJ4yQNs265TiPWQqWrPB3Q2VgA==",
+ "dev": true,
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/codemod/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/@storybook/addon-viewport": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.1.10.tgz",
+ "integrity": "sha512-rJpyAwTVQa+6yqjdMDeqNKoW5aPoSzBAtMywtNMP5lHwF6NpJUvm67c/ox0//d5dPPPjlJDz2QC2COWqjviQyw==",
+ "dev": true,
"dependencies": {
- "color-name": "~1.1.4"
+ "memoizerific": "^1.11.3"
},
- "engines": {
- "node": ">=7.0.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/codemod/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/@storybook/codemod/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/@storybook/addon-webpack5-compiler-babel": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-webpack5-compiler-babel/-/addon-webpack5-compiler-babel-3.0.3.tgz",
+ "integrity": "sha512-rVQTTw+oxJltbVKaejIWSHwVKOBJs3au21f/pYXhV0aiNgNhxEa3vr79t/j0j8ox8uJtzM8XYOb7FlkvGfHlwQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.23.7",
+ "babel-loader": "^9.1.3"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=18"
}
},
- "node_modules/@storybook/codemod/node_modules/jscodeshift": {
- "version": "0.15.2",
- "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.2.tgz",
- "integrity": "sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==",
+ "node_modules/@storybook/blocks": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.1.10.tgz",
+ "integrity": "sha512-8ZGgLIUBdSafcyaKR5Zs0CFisFCPoxZBVt3GMUCZtN+G17YhEg4+OnZs5aMZknfnh28BUnZS2STjWTGStAE5Rw==",
+ "dev": true,
"dependencies": {
- "@babel/core": "^7.23.0",
- "@babel/parser": "^7.23.0",
- "@babel/plugin-transform-class-properties": "^7.22.5",
- "@babel/plugin-transform-modules-commonjs": "^7.23.0",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11",
- "@babel/plugin-transform-optional-chaining": "^7.23.0",
- "@babel/plugin-transform-private-methods": "^7.22.5",
- "@babel/preset-flow": "^7.22.15",
- "@babel/preset-typescript": "^7.23.0",
- "@babel/register": "^7.22.15",
- "babel-core": "^7.0.0-bridge.0",
- "chalk": "^4.1.2",
- "flow-parser": "0.*",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.4",
- "neo-async": "^2.5.0",
- "node-dir": "^0.1.17",
- "recast": "^0.23.3",
- "temp": "^0.8.4",
- "write-file-atomic": "^2.3.0"
+ "@storybook/channels": "8.1.10",
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/components": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/docs-tools": "8.1.10",
+ "@storybook/global": "^5.0.0",
+ "@storybook/icons": "^1.2.5",
+ "@storybook/manager-api": "8.1.10",
+ "@storybook/preview-api": "8.1.10",
+ "@storybook/theming": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "@types/lodash": "^4.14.167",
+ "color-convert": "^2.0.1",
+ "dequal": "^2.0.2",
+ "lodash": "^4.17.21",
+ "markdown-to-jsx": "7.3.2",
+ "memoizerific": "^1.11.3",
+ "polished": "^4.2.2",
+ "react-colorful": "^5.1.2",
+ "telejson": "^7.2.0",
+ "tocbot": "^4.20.1",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
},
- "bin": {
- "jscodeshift": "bin/jscodeshift.js"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "@babel/preset-env": "^7.1.6"
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta"
},
"peerDependenciesMeta": {
- "@babel/preset-env": {
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
"optional": true
}
}
},
- "node_modules/@storybook/codemod/node_modules/prettier": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
- "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
- "bin": {
- "prettier": "bin/prettier.cjs"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
- "node_modules/@storybook/codemod/node_modules/recast": {
- "version": "0.23.6",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz",
- "integrity": "sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==",
- "dependencies": {
- "ast-types": "^0.16.1",
- "esprima": "~4.0.0",
- "source-map": "~0.6.1",
- "tiny-invariant": "^1.3.3",
- "tslib": "^2.0.1"
+ "node_modules/@storybook/blocks/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
},
"engines": {
- "node": ">= 4"
+ "node": ">=6.9.0"
}
},
- "node_modules/@storybook/codemod/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/@storybook/blocks/node_modules/@storybook/channels": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz",
+ "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==",
+ "dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/global": "^5.0.0",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
},
- "engines": {
- "node": ">=8"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/components": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.0.6.tgz",
- "integrity": "sha512-6W2BAqAPJkrExk8D/ug2NPBPvMs05p6Bdt9tk3eWjiMrhG/CUKBzlBTEfNK/mzy3YVB6ijyT2DgsqzmWWYJ/Xw==",
+ "node_modules/@storybook/blocks/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
"dependencies": {
- "@radix-ui/react-slot": "^1.0.2",
- "@storybook/client-logger": "8.0.6",
- "@storybook/csf": "^0.1.2",
- "@storybook/global": "^5.0.0",
- "@storybook/icons": "^1.2.5",
- "@storybook/theming": "8.0.6",
- "@storybook/types": "8.0.6",
- "memoizerific": "^1.11.3",
- "util-deprecate": "^1.0.2"
+ "@storybook/global": "^5.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/core-common": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.0.6.tgz",
- "integrity": "sha512-Z4cA52SjcW6SAV9hayqVm5kyr362O20Zmwz7+H2nYEhcu8bY69y5p45aaoyElMxL1GDNu84GrmTp7dY4URw1fQ==",
+ "node_modules/@storybook/blocks/node_modules/@storybook/core-common": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.10.tgz",
+ "integrity": "sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==",
+ "dev": true,
"dependencies": {
- "@storybook/core-events": "8.0.6",
- "@storybook/csf-tools": "8.0.6",
- "@storybook/node-logger": "8.0.6",
- "@storybook/types": "8.0.6",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf-tools": "8.1.10",
+ "@storybook/node-logger": "8.1.10",
+ "@storybook/types": "8.1.10",
"@yarnpkg/fslib": "2.10.3",
"@yarnpkg/libzip": "2.3.0",
"chalk": "^4.1.0",
@@ -10502,10 +11295,11 @@
"node-fetch": "^2.0.0",
"picomatch": "^2.3.0",
"pkg-dir": "^5.0.0",
+ "prettier-fallback": "npm:prettier@^3",
"pretty-hrtime": "^1.0.3",
"resolve-from": "^5.0.0",
"semver": "^7.3.7",
- "tempy": "^1.0.1",
+ "tempy": "^3.1.0",
"tiny-invariant": "^1.3.1",
"ts-dedent": "^2.0.0",
"util": "^0.12.4"
@@ -10513,12 +11307,127 @@
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "prettier": "^2 || ^3"
+ },
+ "peerDependenciesMeta": {
+ "prettier": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/core-common/node_modules/ansi-styles": {
+ "node_modules/@storybook/blocks/node_modules/@storybook/core-events": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz",
+ "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/csf": "^0.1.7",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/blocks/node_modules/@storybook/csf-tools": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.10.tgz",
+ "integrity": "sha512-bm/J1jAJf1YaKhcXgOlsNN02sf8XvILXuVAvr9cFC3aFkxVoGbC2AKCss4cgXAd8EQxUNtyETkOcheB5mJ5IlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/generator": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "@babel/traverse": "^7.24.1",
+ "@babel/types": "^7.24.0",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/types": "8.1.10",
+ "fs-extra": "^11.1.0",
+ "recast": "^0.23.5",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/blocks/node_modules/@storybook/docs-tools": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.1.10.tgz",
+ "integrity": "sha512-FsO/+L9CrUfAIbm9cdH9UpjTusT7L5RZxN4WCXkiF5SpAVyBoY8kar3RzTZVoh4aQxt1yGWYC+SZGjgf++xa4g==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/core-common": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/preview-api": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "@types/doctrine": "^0.0.3",
+ "assert": "^2.1.0",
+ "doctrine": "^3.0.0",
+ "lodash": "^4.17.21"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/blocks/node_modules/@storybook/node-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.10.tgz",
+ "integrity": "sha512-djgbAROgGAvz/gr49egBxCHn1+rui57e76qa9aOMPzEBcxsGrnnKKp0uNdiNt4M7Xv6S2QHbJ2SfOlHhWmMeaA==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/blocks/node_modules/@storybook/preview-api": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.10.tgz",
+ "integrity": "sha512-0Gl8WHDtp/srrA5uBYXl7YbC8kFQA7IxVmwWN7dIS7HAXu63JZ6JfxaFcfy+kCBfZSBD7spFG4J0f5JXRDYbpg==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.1.10",
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/global": "^5.0.0",
+ "@storybook/types": "8.1.10",
+ "@types/qs": "^6.9.5",
+ "dequal": "^2.0.2",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/blocks/node_modules/@storybook/types": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz",
+ "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.1.10",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/blocks/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -10529,18 +11438,33 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@storybook/core-common/node_modules/brace-expansion": {
+ "node_modules/@storybook/blocks/node_modules/assert": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
+ "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-nan": "^1.3.2",
+ "object-is": "^1.1.5",
+ "object.assign": "^4.1.4",
+ "util": "^0.12.5"
+ }
+ },
+ "node_modules/@storybook/blocks/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
},
- "node_modules/@storybook/core-common/node_modules/chalk": {
+ "node_modules/@storybook/blocks/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -10552,10 +11476,11 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@storybook/core-common/node_modules/color-convert": {
+ "node_modules/@storybook/blocks/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -10563,25 +11488,32 @@
"node": ">=7.0.0"
}
},
- "node_modules/@storybook/core-common/node_modules/color-name": {
+ "node_modules/@storybook/blocks/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
},
- "node_modules/@storybook/core-common/node_modules/del": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
- "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
+ "node_modules/@storybook/blocks/node_modules/crypto-random-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz",
+ "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==",
+ "dev": true,
"dependencies": {
- "globby": "^11.0.1",
- "graceful-fs": "^4.2.4",
- "is-glob": "^4.0.1",
- "is-path-cwd": "^2.2.0",
- "is-path-inside": "^3.0.2",
- "p-map": "^4.0.0",
- "rimraf": "^3.0.2",
- "slash": "^3.0.0"
+ "type-fest": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=12"
},
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/blocks/node_modules/crypto-random-string/node_modules/type-fest": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "dev": true,
"engines": {
"node": ">=10"
},
@@ -10589,10 +11521,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-common/node_modules/find-cache-dir": {
+ "node_modules/@storybook/blocks/node_modules/find-cache-dir": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
"integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
"dependencies": {
"commondir": "^1.0.1",
"make-dir": "^3.0.2",
@@ -10605,10 +11538,11 @@
"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
}
},
- "node_modules/@storybook/core-common/node_modules/find-cache-dir/node_modules/find-up": {
+ "node_modules/@storybook/blocks/node_modules/find-cache-dir/node_modules/find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -10617,10 +11551,11 @@
"node": ">=8"
}
},
- "node_modules/@storybook/core-common/node_modules/find-cache-dir/node_modules/pkg-dir": {
+ "node_modules/@storybook/blocks/node_modules/find-cache-dir/node_modules/pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
"dependencies": {
"find-up": "^4.0.0"
},
@@ -10628,10 +11563,11 @@
"node": ">=8"
}
},
- "node_modules/@storybook/core-common/node_modules/fs-extra": {
+ "node_modules/@storybook/blocks/node_modules/fs-extra": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -10641,47 +11577,73 @@
"node": ">=14.14"
}
},
- "node_modules/@storybook/core-common/node_modules/glob": {
- "version": "10.3.12",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz",
- "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==",
+ "node_modules/@storybook/blocks/node_modules/glob": {
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
+ "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
- "jackspeak": "^2.3.6",
- "minimatch": "^9.0.1",
- "minipass": "^7.0.4",
- "path-scurry": "^1.10.2"
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@storybook/core-common/node_modules/has-flag": {
+ "node_modules/@storybook/blocks/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
"engines": {
"node": ">=8"
}
},
- "node_modules/@storybook/core-common/node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "node_modules/@storybook/blocks/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-common/node_modules/locate-path": {
+ "node_modules/@storybook/blocks/node_modules/jackspeak": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
+ "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/@storybook/blocks/node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
"dependencies": {
"p-locate": "^4.1.0"
},
@@ -10689,10 +11651,11 @@
"node": ">=8"
}
},
- "node_modules/@storybook/core-common/node_modules/make-dir": {
+ "node_modules/@storybook/blocks/node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
"dependencies": {
"semver": "^6.0.0"
},
@@ -10703,18 +11666,20 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-common/node_modules/make-dir/node_modules/semver": {
+ "node_modules/@storybook/blocks/node_modules/make-dir/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
"bin": {
"semver": "bin/semver.js"
}
},
- "node_modules/@storybook/core-common/node_modules/minimatch": {
+ "node_modules/@storybook/blocks/node_modules/minimatch": {
"version": "9.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
"integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+ "dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -10725,18 +11690,20 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@storybook/core-common/node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+ "node_modules/@storybook/blocks/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
"engines": {
"node": ">=16 || 14 >=14.17"
}
},
- "node_modules/@storybook/core-common/node_modules/p-limit": {
+ "node_modules/@storybook/blocks/node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
"dependencies": {
"p-try": "^2.0.0"
},
@@ -10747,10 +11714,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-common/node_modules/p-locate": {
+ "node_modules/@storybook/blocks/node_modules/p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -10758,18 +11726,36 @@
"node": ">=8"
}
},
- "node_modules/@storybook/core-common/node_modules/path-exists": {
+ "node_modules/@storybook/blocks/node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
"engines": {
"node": ">=8"
}
},
- "node_modules/@storybook/core-common/node_modules/supports-color": {
+ "node_modules/@storybook/blocks/node_modules/recast": {
+ "version": "0.23.9",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
+ "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==",
+ "dev": true,
+ "dependencies": {
+ "ast-types": "^0.16.1",
+ "esprima": "~4.0.0",
+ "source-map": "~0.6.1",
+ "tiny-invariant": "^1.3.3",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@storybook/blocks/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -10777,39 +11763,65 @@
"node": ">=8"
}
},
- "node_modules/@storybook/core-common/node_modules/tempy": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz",
- "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==",
+ "node_modules/@storybook/blocks/node_modules/temp-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz",
+ "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ }
+ },
+ "node_modules/@storybook/blocks/node_modules/tempy": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz",
+ "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==",
+ "dev": true,
"dependencies": {
- "del": "^6.0.0",
- "is-stream": "^2.0.0",
- "temp-dir": "^2.0.0",
- "type-fest": "^0.16.0",
- "unique-string": "^2.0.0"
+ "is-stream": "^3.0.0",
+ "temp-dir": "^3.0.0",
+ "type-fest": "^2.12.2",
+ "unique-string": "^3.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14.16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-common/node_modules/type-fest": {
- "version": "0.16.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz",
- "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==",
+ "node_modules/@storybook/blocks/node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=12.20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-common/node_modules/util": {
+ "node_modules/@storybook/blocks/node_modules/unique-string": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz",
+ "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==",
+ "dev": true,
+ "dependencies": {
+ "crypto-random-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/blocks/node_modules/util": {
"version": "0.12.5",
"resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
"integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dev": true,
"dependencies": {
"inherits": "^2.0.3",
"is-arguments": "^1.0.4",
@@ -10818,84 +11830,197 @@
"which-typed-array": "^1.1.2"
}
},
- "node_modules/@storybook/core-events": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.0.6.tgz",
- "integrity": "sha512-EwGmuMm8QTUAHPhab4yftQWoSCX3OzEk6cQdpLtbNFtRRLE9aPZzxhk5Z/d3KhLNSCUAGyCiDt5I9JxTBetT9A==",
+ "node_modules/@storybook/builder-manager": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.1.10.tgz",
+ "integrity": "sha512-dhg54zpaglR9XKNAiwMqm5/IONMCEG/hO/iTfNHJI1rAGeWhvM71cmhF+VlKUcjpTlIfHe7J19+TL+sWQJNgtg==",
+ "dev": true,
"dependencies": {
- "ts-dedent": "^2.0.0"
+ "@fal-works/esbuild-plugin-global-externals": "^2.1.2",
+ "@storybook/core-common": "8.1.10",
+ "@storybook/manager": "8.1.10",
+ "@storybook/node-logger": "8.1.10",
+ "@types/ejs": "^3.1.1",
+ "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10",
+ "browser-assert": "^1.2.1",
+ "ejs": "^3.1.10",
+ "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0",
+ "esbuild-plugin-alias": "^0.2.1",
+ "express": "^4.17.3",
+ "fs-extra": "^11.1.0",
+ "process": "^0.11.10",
+ "util": "^0.12.4"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/core-server": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.0.6.tgz",
- "integrity": "sha512-COmcjrry8vZXDh08ZGbfDz2bFB4of5wnwOwYf8uwlVND6HnhQzV22On1s3/p8qw+dKOpjpwDdHWtMnndnPNuqQ==",
+ "node_modules/@storybook/builder-manager/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/@storybook/channels": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz",
+ "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==",
+ "dev": true,
"dependencies": {
- "@aw-web-design/x-default-browser": "1.4.126",
- "@babel/core": "^7.23.9",
- "@discoveryjs/json-ext": "^0.5.3",
- "@storybook/builder-manager": "8.0.6",
- "@storybook/channels": "8.0.6",
- "@storybook/core-common": "8.0.6",
- "@storybook/core-events": "8.0.6",
- "@storybook/csf": "^0.1.2",
- "@storybook/csf-tools": "8.0.6",
- "@storybook/docs-mdx": "3.0.0",
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
"@storybook/global": "^5.0.0",
- "@storybook/manager": "8.0.6",
- "@storybook/manager-api": "8.0.6",
- "@storybook/node-logger": "8.0.6",
- "@storybook/preview-api": "8.0.6",
- "@storybook/telemetry": "8.0.6",
- "@storybook/types": "8.0.6",
- "@types/detect-port": "^1.3.0",
- "@types/node": "^18.0.0",
- "@types/pretty-hrtime": "^1.0.0",
- "@types/semver": "^7.3.4",
- "better-opn": "^3.0.2",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/global": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/@storybook/core-common": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.10.tgz",
+ "integrity": "sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf-tools": "8.1.10",
+ "@storybook/node-logger": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "@yarnpkg/fslib": "2.10.3",
+ "@yarnpkg/libzip": "2.3.0",
"chalk": "^4.1.0",
- "cli-table3": "^0.6.1",
- "compression": "^1.7.4",
- "detect-port": "^1.3.0",
- "express": "^4.17.3",
+ "cross-spawn": "^7.0.3",
+ "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0",
+ "esbuild-register": "^3.5.0",
+ "execa": "^5.0.0",
+ "file-system-cache": "2.3.0",
+ "find-cache-dir": "^3.0.0",
+ "find-up": "^5.0.0",
"fs-extra": "^11.1.0",
- "globby": "^11.0.2",
- "ip": "^2.0.1",
- "lodash": "^4.17.21",
- "open": "^8.4.0",
+ "glob": "^10.0.0",
+ "handlebars": "^4.7.7",
+ "lazy-universal-dotenv": "^4.0.0",
+ "node-fetch": "^2.0.0",
+ "picomatch": "^2.3.0",
+ "pkg-dir": "^5.0.0",
+ "prettier-fallback": "npm:prettier@^3",
"pretty-hrtime": "^1.0.3",
- "prompts": "^2.4.0",
- "read-pkg-up": "^7.0.1",
+ "resolve-from": "^5.0.0",
"semver": "^7.3.7",
- "telejson": "^7.2.0",
+ "tempy": "^3.1.0",
"tiny-invariant": "^1.3.1",
"ts-dedent": "^2.0.0",
- "util": "^0.12.4",
- "util-deprecate": "^1.0.2",
- "watchpack": "^2.2.0",
- "ws": "^8.2.3"
+ "util": "^0.12.4"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "prettier": "^2 || ^3"
+ },
+ "peerDependenciesMeta": {
+ "prettier": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/core-server/node_modules/@types/node": {
- "version": "18.19.30",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.30.tgz",
- "integrity": "sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==",
+ "node_modules/@storybook/builder-manager/node_modules/@storybook/core-events": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz",
+ "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==",
+ "dev": true,
"dependencies": {
- "undici-types": "~5.26.4"
+ "@storybook/csf": "^0.1.7",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/core-server/node_modules/ansi-styles": {
+ "node_modules/@storybook/builder-manager/node_modules/@storybook/csf-tools": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.10.tgz",
+ "integrity": "sha512-bm/J1jAJf1YaKhcXgOlsNN02sf8XvILXuVAvr9cFC3aFkxVoGbC2AKCss4cgXAd8EQxUNtyETkOcheB5mJ5IlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/generator": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "@babel/traverse": "^7.24.1",
+ "@babel/types": "^7.24.0",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/types": "8.1.10",
+ "fs-extra": "^11.1.0",
+ "recast": "^0.23.5",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/@storybook/node-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.10.tgz",
+ "integrity": "sha512-djgbAROgGAvz/gr49egBxCHn1+rui57e76qa9aOMPzEBcxsGrnnKKp0uNdiNt4M7Xv6S2QHbJ2SfOlHhWmMeaA==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/@storybook/types": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz",
+ "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.1.10",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -10906,10 +12031,20 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@storybook/core-server/node_modules/chalk": {
+ "node_modules/@storybook/builder-manager/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -10921,10 +12056,11 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@storybook/core-server/node_modules/color-convert": {
+ "node_modules/@storybook/builder-manager/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -10932,15 +12068,86 @@
"node": ">=7.0.0"
}
},
- "node_modules/@storybook/core-server/node_modules/color-name": {
+ "node_modules/@storybook/builder-manager/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
},
- "node_modules/@storybook/core-server/node_modules/fs-extra": {
+ "node_modules/@storybook/builder-manager/node_modules/crypto-random-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz",
+ "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/crypto-random-string/node_modules/type-fest": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/find-cache-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/find-cache-dir/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/fs-extra": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -10950,121 +12157,169 @@
"node": ">=14.14"
}
},
- "node_modules/@storybook/core-server/node_modules/has-flag": {
+ "node_modules/@storybook/builder-manager/node_modules/glob": {
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
+ "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
"engines": {
"node": ">=8"
}
},
- "node_modules/@storybook/core-server/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
+ "node_modules/@storybook/builder-manager/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-server/node_modules/util": {
- "version": "0.12.5",
- "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
- "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "node_modules/@storybook/builder-manager/node_modules/jackspeak": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
+ "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
+ "dev": true,
"dependencies": {
- "inherits": "^2.0.3",
- "is-arguments": "^1.0.4",
- "is-generator-function": "^1.0.7",
- "is-typed-array": "^1.1.3",
- "which-typed-array": "^1.1.2"
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
}
},
- "node_modules/@storybook/core-webpack": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.0.6.tgz",
- "integrity": "sha512-77f3vc8wQz22hWBzW1pf+MB2K8LBhyUjST0vr0NoO7tPf/7LMvVgtIr/qZdumx9jjytv8P3reJ92pkarqdvdQQ==",
+ "node_modules/@storybook/builder-manager/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"dependencies": {
- "@storybook/core-common": "8.0.6",
- "@storybook/node-logger": "8.0.6",
- "@storybook/types": "8.0.6",
- "@types/node": "^18.0.0",
- "ts-dedent": "^2.0.0"
+ "p-locate": "^4.1.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@storybook/core-webpack/node_modules/@types/node": {
- "version": "18.19.30",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.30.tgz",
- "integrity": "sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==",
+ "node_modules/@storybook/builder-manager/node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
"dev": true,
"dependencies": {
- "undici-types": "~5.26.4"
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/csf": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.3.tgz",
- "integrity": "sha512-IPZvXXo4b3G+gpmgBSBqVM81jbp2ePOKsvhgJdhyZJtkYQCII7rg9KKLQhvBQM5sLaF1eU6r0iuwmyynC9d9SA==",
- "dependencies": {
- "type-fest": "^2.19.0"
+ "node_modules/@storybook/builder-manager/node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
}
},
- "node_modules/@storybook/csf-plugin": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.0.6.tgz",
- "integrity": "sha512-ULaAFGhdgDDbknGnCqxitzeBlSzYZJQvZT4HtFgxfNU2McOu+GLIzyUOx3xG5eoziLvvm+oW+lxLr5nDkSaBUg==",
+ "node_modules/@storybook/builder-manager/node_modules/minimatch": {
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
+ "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+ "dev": true,
"dependencies": {
- "@storybook/csf-tools": "8.0.6",
- "unplugin": "^1.3.1"
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@storybook/csf-tools": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.0.6.tgz",
- "integrity": "sha512-MEBVxpnzqkBPyYXdtYQrY0SQC3oflmAQdEM0qWFzPvZXTnIMk3Q2ft8JNiBht6RlrKGvKql8TodwpbOiPeJI/w==",
+ "node_modules/@storybook/builder-manager/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
"dependencies": {
- "@babel/generator": "^7.23.0",
- "@babel/parser": "^7.23.0",
- "@babel/traverse": "^7.23.2",
- "@babel/types": "^7.23.0",
- "@storybook/csf": "^0.1.2",
- "@storybook/types": "8.0.6",
- "fs-extra": "^11.1.0",
- "recast": "^0.23.5",
- "ts-dedent": "^2.0.0"
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/csf-tools/node_modules/fs-extra": {
- "version": "11.2.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
- "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "node_modules/@storybook/builder-manager/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
"dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "p-limit": "^2.2.0"
},
"engines": {
- "node": ">=14.14"
+ "node": ">=8"
}
},
- "node_modules/@storybook/csf-tools/node_modules/recast": {
- "version": "0.23.6",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz",
- "integrity": "sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==",
+ "node_modules/@storybook/builder-manager/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/recast": {
+ "version": "0.23.9",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
+ "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==",
+ "dev": true,
"dependencies": {
"ast-types": "^0.16.1",
"esprima": "~4.0.0",
@@ -11076,56 +12331,186 @@
"node": ">= 4"
}
},
- "node_modules/@storybook/csf/node_modules/type-fest": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
- "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
- "engines": {
+ "node_modules/@storybook/builder-manager/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/temp-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz",
+ "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/tempy": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz",
+ "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==",
+ "dev": true,
+ "dependencies": {
+ "is-stream": "^3.0.0",
+ "temp-dir": "^3.0.0",
+ "type-fest": "^2.12.2",
+ "unique-string": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/builder-manager/node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "dev": true,
+ "engines": {
"node": ">=12.20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/docs-mdx": {
+ "node_modules/@storybook/builder-manager/node_modules/unique-string": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-3.0.0.tgz",
- "integrity": "sha512-NmiGXl2HU33zpwTv1XORe9XG9H+dRUC1Jl11u92L4xr062pZtrShLmD4VKIsOQujxhhOrbxpwhNOt+6TdhyIdQ=="
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz",
+ "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==",
+ "dev": true,
+ "dependencies": {
+ "crypto-random-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "node_modules/@storybook/docs-tools": {
+ "node_modules/@storybook/builder-manager/node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "node_modules/@storybook/builder-webpack5": {
"version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.0.6.tgz",
- "integrity": "sha512-PsAA2b/Q1ki5IR0fa52MI+fdDkQ0W+mrZVRRj3eJzonGZYcQtXofTXQB7yi0CaX7zzI/N8JcdE4bO9sI6SrOTg==",
+ "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.0.6.tgz",
+ "integrity": "sha512-xhGmjDufD4nhOC9D10A78V73gw5foGWXACs0Trz76PdrSymwHdaTIZ4y4lMJMdp7qkqhO4o2K9kHweO4YPbajg==",
+ "dev": true,
"dependencies": {
+ "@storybook/channels": "8.0.6",
+ "@storybook/client-logger": "8.0.6",
"@storybook/core-common": "8.0.6",
+ "@storybook/core-events": "8.0.6",
+ "@storybook/core-webpack": "8.0.6",
+ "@storybook/node-logger": "8.0.6",
+ "@storybook/preview": "8.0.6",
"@storybook/preview-api": "8.0.6",
- "@storybook/types": "8.0.6",
- "@types/doctrine": "^0.0.3",
- "assert": "^2.1.0",
- "doctrine": "^3.0.0",
- "lodash": "^4.17.21"
+ "@types/node": "^18.0.0",
+ "@types/semver": "^7.3.4",
+ "browser-assert": "^1.2.1",
+ "case-sensitive-paths-webpack-plugin": "^2.4.0",
+ "cjs-module-lexer": "^1.2.3",
+ "constants-browserify": "^1.0.0",
+ "css-loader": "^6.7.1",
+ "es-module-lexer": "^1.4.1",
+ "express": "^4.17.3",
+ "fork-ts-checker-webpack-plugin": "^8.0.0",
+ "fs-extra": "^11.1.0",
+ "html-webpack-plugin": "^5.5.0",
+ "magic-string": "^0.30.5",
+ "path-browserify": "^1.0.1",
+ "process": "^0.11.10",
+ "semver": "^7.3.7",
+ "style-loader": "^3.3.1",
+ "terser-webpack-plugin": "^5.3.1",
+ "ts-dedent": "^2.0.0",
+ "url": "^0.11.0",
+ "util": "^0.12.4",
+ "util-deprecate": "^1.0.2",
+ "webpack": "5",
+ "webpack-dev-middleware": "^6.1.1",
+ "webpack-hot-middleware": "^2.25.1",
+ "webpack-virtual-modules": "^0.5.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/docs-tools/node_modules/assert": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
- "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
+ "node_modules/@storybook/builder-webpack5/node_modules/@types/node": {
+ "version": "18.19.30",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.30.tgz",
+ "integrity": "sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==",
+ "dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "is-nan": "^1.3.2",
- "object-is": "^1.1.5",
- "object.assign": "^4.1.4",
- "util": "^0.12.5"
+ "undici-types": "~5.26.4"
}
},
- "node_modules/@storybook/docs-tools/node_modules/util": {
+ "node_modules/@storybook/builder-webpack5/node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/@storybook/builder-webpack5/node_modules/path-browserify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+ "dev": true
+ },
+ "node_modules/@storybook/builder-webpack5/node_modules/style-loader": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz",
+ "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 12.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.0.0"
+ }
+ },
+ "node_modules/@storybook/builder-webpack5/node_modules/util": {
"version": "0.12.5",
"resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
"integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dev": true,
"dependencies": {
"inherits": "^2.0.3",
"is-arguments": "^1.0.4",
@@ -11134,229 +12519,321 @@
"which-typed-array": "^1.1.2"
}
},
- "node_modules/@storybook/global": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz",
- "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ=="
- },
- "node_modules/@storybook/icons": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.2.9.tgz",
- "integrity": "sha512-cOmylsz25SYXaJL/gvTk/dl3pyk7yBFRfeXTsHvTA3dfhoU/LWSq0NKL9nM7WBasJyn6XPSGnLS4RtKXLw5EUg==",
- "engines": {
- "node": ">=14.0.0"
+ "node_modules/@storybook/channels": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.0.6.tgz",
+ "integrity": "sha512-IbNvjxeyQKiMpb+gSpQ7yYsFqb8BM/KYgfypJM3yJV6iU/NFeevrC/DA6/R+8xWFyPc70unRNLv8fPvxhcIu8Q==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.0.6",
+ "@storybook/core-events": "8.0.6",
+ "@storybook/global": "^5.0.0",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
},
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.0.6.tgz",
- "integrity": "sha512-wdL3lG72qrCOLkxEUW49+hmwA4fIFXFvAEU7wVgEt4KyRRGWhHa8Dr/5Tnq54CWJrA+BTrTPHaoo/Vu4BAjgow==",
+ "node_modules/@storybook/cli": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.1.10.tgz",
+ "integrity": "sha512-7Fm2Qgk33sHayZ0QABqwe1Jto4yyVRVW6kTrSeP5IuLh+mn244RgxBvWtGCyL1EcWDFI7PYUFa0HxgTCq7C+OA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.24.4",
+ "@babel/types": "^7.24.0",
+ "@ndelangen/get-tarball": "^3.0.7",
+ "@storybook/codemod": "8.1.10",
+ "@storybook/core-common": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/core-server": "8.1.10",
+ "@storybook/csf-tools": "8.1.10",
+ "@storybook/node-logger": "8.1.10",
+ "@storybook/telemetry": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "@types/semver": "^7.3.4",
+ "@yarnpkg/fslib": "2.10.3",
+ "@yarnpkg/libzip": "2.3.0",
+ "chalk": "^4.1.0",
+ "commander": "^6.2.1",
+ "cross-spawn": "^7.0.3",
+ "detect-indent": "^6.1.0",
+ "envinfo": "^7.7.3",
+ "execa": "^5.0.0",
+ "find-up": "^5.0.0",
+ "fs-extra": "^11.1.0",
+ "get-npm-tarball-url": "^2.0.3",
+ "giget": "^1.0.0",
+ "globby": "^14.0.1",
+ "jscodeshift": "^0.15.1",
+ "leven": "^3.1.0",
+ "ora": "^5.4.1",
+ "prettier": "^3.1.1",
+ "prompts": "^2.4.0",
+ "read-pkg-up": "^7.0.1",
+ "semver": "^7.3.7",
+ "strip-json-comments": "^3.0.1",
+ "tempy": "^3.1.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0"
+ },
+ "bin": {
+ "getstorybook": "bin/index.js",
+ "sb": "bin/index.js"
+ },
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-api": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.0.6.tgz",
- "integrity": "sha512-khYA5CM+LY/B5VsqqUmt2ivNLNqyIKfcgGsXHkOs3Kr5BOz8LhEmSwZOB348ey2C2ejFJmvKlkcsE+rB9ixlww==",
+ "node_modules/@storybook/cli/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/@storybook/channels": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz",
+ "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==",
+ "dev": true,
"dependencies": {
- "@storybook/channels": "8.0.6",
- "@storybook/client-logger": "8.0.6",
- "@storybook/core-events": "8.0.6",
- "@storybook/csf": "^0.1.2",
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
"@storybook/global": "^5.0.0",
- "@storybook/icons": "^1.2.5",
- "@storybook/router": "8.0.6",
- "@storybook/theming": "8.0.6",
- "@storybook/types": "8.0.6",
- "dequal": "^2.0.2",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "store2": "^2.14.2",
"telejson": "^7.2.0",
- "ts-dedent": "^2.0.0"
+ "tiny-invariant": "^1.3.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/node-logger": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.0.6.tgz",
- "integrity": "sha512-mDRJLVAuTWauO0mnrwajfJV/6zKBJVPp/9g0ULccE3Q+cuqNfUefqfCd17cZBlJHeRsdB9jy9tod48d4qzGEkQ==",
+ "node_modules/@storybook/cli/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/global": "^5.0.0"
+ },
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/preset-react-webpack": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-8.0.6.tgz",
- "integrity": "sha512-nOcpjqefSh0kTtKBJEyvWv1QIeWfp47RSwR2z1/jPtU8XT4Tw+Y1g0Vu+RkeL/UWRWYrAoIO++14CxCwFu1Knw==",
+ "node_modules/@storybook/cli/node_modules/@storybook/core-common": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.10.tgz",
+ "integrity": "sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==",
"dev": true,
"dependencies": {
- "@storybook/core-webpack": "8.0.6",
- "@storybook/docs-tools": "8.0.6",
- "@storybook/node-logger": "8.0.6",
- "@storybook/react": "8.0.6",
- "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0",
- "@types/node": "^18.0.0",
- "@types/semver": "^7.3.4",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf-tools": "8.1.10",
+ "@storybook/node-logger": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "@yarnpkg/fslib": "2.10.3",
+ "@yarnpkg/libzip": "2.3.0",
+ "chalk": "^4.1.0",
+ "cross-spawn": "^7.0.3",
+ "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0",
+ "esbuild-register": "^3.5.0",
+ "execa": "^5.0.0",
+ "file-system-cache": "2.3.0",
+ "find-cache-dir": "^3.0.0",
"find-up": "^5.0.0",
"fs-extra": "^11.1.0",
- "magic-string": "^0.30.5",
- "react-docgen": "^7.0.0",
- "resolve": "^1.22.8",
+ "glob": "^10.0.0",
+ "handlebars": "^4.7.7",
+ "lazy-universal-dotenv": "^4.0.0",
+ "node-fetch": "^2.0.0",
+ "picomatch": "^2.3.0",
+ "pkg-dir": "^5.0.0",
+ "prettier-fallback": "npm:prettier@^3",
+ "pretty-hrtime": "^1.0.3",
+ "resolve-from": "^5.0.0",
"semver": "^7.3.7",
- "tsconfig-paths": "^4.2.0",
- "webpack": "5"
- },
- "engines": {
- "node": ">=18.0.0"
+ "tempy": "^3.1.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util": "^0.12.4"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "prettier": "^2 || ^3"
},
"peerDependenciesMeta": {
- "typescript": {
+ "prettier": {
"optional": true
}
}
},
- "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": {
- "version": "18.19.30",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.30.tgz",
- "integrity": "sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==",
+ "node_modules/@storybook/cli/node_modules/@storybook/core-events": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz",
+ "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==",
"dev": true,
"dependencies": {
- "undici-types": "~5.26.4"
+ "@storybook/csf": "^0.1.7",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/preset-react-webpack/node_modules/fs-extra": {
- "version": "11.2.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
- "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "node_modules/@storybook/cli/node_modules/@storybook/csf-tools": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.10.tgz",
+ "integrity": "sha512-bm/J1jAJf1YaKhcXgOlsNN02sf8XvILXuVAvr9cFC3aFkxVoGbC2AKCss4cgXAd8EQxUNtyETkOcheB5mJ5IlA==",
"dev": true,
"dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "@babel/generator": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "@babel/traverse": "^7.24.1",
+ "@babel/types": "^7.24.0",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/types": "8.1.10",
+ "fs-extra": "^11.1.0",
+ "recast": "^0.23.5",
+ "ts-dedent": "^2.0.0"
},
- "engines": {
- "node": ">=14.14"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/preview": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.0.6.tgz",
- "integrity": "sha512-NdVstxdUghv5goQJ4zFftyezfCEPKHOSNu8k02KU6u6g5IiK430jp5y71E/eiBK3m1AivtluC7tPRSch0HsidA==",
+ "node_modules/@storybook/cli/node_modules/@storybook/node-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.10.tgz",
+ "integrity": "sha512-djgbAROgGAvz/gr49egBxCHn1+rui57e76qa9aOMPzEBcxsGrnnKKp0uNdiNt4M7Xv6S2QHbJ2SfOlHhWmMeaA==",
"dev": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/preview-api": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.0.6.tgz",
- "integrity": "sha512-O5SvBqlHIO/Cf5oGZUJV2npkp9bLqg9Sn0T0a5zXolJbRy+gP7MDyz4AnliLpTn5bT2rzVQ6VH8IDlhHBq3K6g==",
+ "node_modules/@storybook/cli/node_modules/@storybook/types": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz",
+ "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==",
+ "dev": true,
"dependencies": {
- "@storybook/channels": "8.0.6",
- "@storybook/client-logger": "8.0.6",
- "@storybook/core-events": "8.0.6",
- "@storybook/csf": "^0.1.2",
- "@storybook/global": "^5.0.0",
- "@storybook/types": "8.0.6",
- "@types/qs": "^6.9.5",
- "dequal": "^2.0.2",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "tiny-invariant": "^1.3.1",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
+ "@storybook/channels": "8.1.10",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/react": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.0.6.tgz",
- "integrity": "sha512-A1zivNti15nHkJ6EcVKpxKwlDkyMb5MlJMUb8chX/xBWxoR1f5R8eI484rhdPRYUzBY7JwvgZfy4y/murqg6hA==",
+ "node_modules/@storybook/cli/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
"dependencies": {
- "@storybook/client-logger": "8.0.6",
- "@storybook/docs-tools": "8.0.6",
- "@storybook/global": "^5.0.0",
- "@storybook/preview-api": "8.0.6",
- "@storybook/react-dom-shim": "8.0.6",
- "@storybook/types": "8.0.6",
- "@types/escodegen": "^0.0.6",
- "@types/estree": "^0.0.51",
- "@types/node": "^18.0.0",
- "acorn": "^7.4.1",
- "acorn-jsx": "^5.3.1",
- "acorn-walk": "^7.2.0",
- "escodegen": "^2.1.0",
- "html-tags": "^3.1.0",
- "lodash": "^4.17.21",
- "prop-types": "^15.7.2",
- "react-element-to-jsx-string": "^15.0.0",
- "semver": "^7.3.7",
- "ts-dedent": "^2.0.0",
- "type-fest": "~2.19",
- "util-deprecate": "^1.0.2"
+ "color-convert": "^2.0.1"
},
"engines": {
- "node": ">=18.0.0"
+ "node": ">=8"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "typescript": ">= 4.2.x"
+ "engines": {
+ "node": ">=10"
},
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@storybook/react-docgen-typescript-plugin": {
- "version": "1.0.6--canary.9.0c3f3b7.0",
- "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz",
- "integrity": "sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==",
+ "node_modules/@storybook/cli/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
- "debug": "^4.1.1",
- "endent": "^2.0.1",
- "find-cache-dir": "^3.3.1",
- "flat-cache": "^3.0.4",
- "micromatch": "^4.0.2",
- "react-docgen-typescript": "^2.2.2",
- "tslib": "^2.0.0"
+ "color-name": "~1.1.4"
},
- "peerDependencies": {
- "typescript": ">= 4.x",
- "webpack": ">= 4"
+ "engines": {
+ "node": ">=7.0.0"
}
},
- "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/find-cache-dir": {
+ "node_modules/@storybook/cli/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/@storybook/cli/node_modules/crypto-random-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz",
+ "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/crypto-random-string/node_modules/type-fest": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/find-cache-dir": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
"integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
@@ -11373,20 +12850,3836 @@
"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
}
},
- "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "node_modules/@storybook/cli/node_modules/find-cache-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/find-cache-dir/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/glob": {
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
+ "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/globby": {
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz",
+ "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==",
+ "dev": true,
+ "dependencies": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.2",
+ "ignore": "^5.2.4",
+ "path-type": "^5.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/jackspeak": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
+ "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/jscodeshift": {
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.2.tgz",
+ "integrity": "sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.23.0",
+ "@babel/parser": "^7.23.0",
+ "@babel/plugin-transform-class-properties": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.23.0",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11",
+ "@babel/plugin-transform-optional-chaining": "^7.23.0",
+ "@babel/plugin-transform-private-methods": "^7.22.5",
+ "@babel/preset-flow": "^7.22.15",
+ "@babel/preset-typescript": "^7.23.0",
+ "@babel/register": "^7.22.15",
+ "babel-core": "^7.0.0-bridge.0",
+ "chalk": "^4.1.2",
+ "flow-parser": "0.*",
+ "graceful-fs": "^4.2.4",
+ "micromatch": "^4.0.4",
+ "neo-async": "^2.5.0",
+ "node-dir": "^0.1.17",
+ "recast": "^0.23.3",
+ "temp": "^0.8.4",
+ "write-file-atomic": "^2.3.0"
+ },
+ "bin": {
+ "jscodeshift": "bin/jscodeshift.js"
+ },
+ "peerDependencies": {
+ "@babel/preset-env": "^7.1.6"
+ },
+ "peerDependenciesMeta": {
+ "@babel/preset-env": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/minimatch": {
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
+ "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/path-type": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
+ "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/prettier": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz",
+ "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/recast": {
+ "version": "0.23.9",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
+ "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==",
+ "dev": true,
+ "dependencies": {
+ "ast-types": "^0.16.1",
+ "esprima": "~4.0.0",
+ "source-map": "~0.6.1",
+ "tiny-invariant": "^1.3.3",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/temp-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz",
+ "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/tempy": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz",
+ "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==",
+ "dev": true,
+ "dependencies": {
+ "is-stream": "^3.0.0",
+ "temp-dir": "^3.0.0",
+ "type-fest": "^2.12.2",
+ "unique-string": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/unique-string": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz",
+ "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==",
+ "dev": true,
+ "dependencies": {
+ "crypto-random-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/cli/node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "node_modules/@storybook/client-logger": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.0.6.tgz",
+ "integrity": "sha512-et/IHPHiiOwMg93l5KSgw47NZXz5xOyIrIElRcsT1wr8OJeIB9DzopB/suoHBZ/IML+t8x91atdutzUN2BLF6A==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/global": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/codemod": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.1.10.tgz",
+ "integrity": "sha512-HZ/vrseP/sHfbO2RZpImP5eeqOakJ0X31BIiD4uxDBIKGltMXhlPKHTI93O2YGR+vbB33otoTVRjE+ZpPmC6SA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.24.4",
+ "@babel/preset-env": "^7.24.4",
+ "@babel/types": "^7.24.0",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/csf-tools": "8.1.10",
+ "@storybook/node-logger": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "@types/cross-spawn": "^6.0.2",
+ "cross-spawn": "^7.0.3",
+ "globby": "^14.0.1",
+ "jscodeshift": "^0.15.1",
+ "lodash": "^4.17.21",
+ "prettier": "^3.1.1",
+ "recast": "^0.23.5",
+ "tiny-invariant": "^1.3.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/@storybook/channels": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz",
+ "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/global": "^5.0.0",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/global": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/@storybook/core-events": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz",
+ "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/csf": "^0.1.7",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/@storybook/csf-tools": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.10.tgz",
+ "integrity": "sha512-bm/J1jAJf1YaKhcXgOlsNN02sf8XvILXuVAvr9cFC3aFkxVoGbC2AKCss4cgXAd8EQxUNtyETkOcheB5mJ5IlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/generator": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "@babel/traverse": "^7.24.1",
+ "@babel/types": "^7.24.0",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/types": "8.1.10",
+ "fs-extra": "^11.1.0",
+ "recast": "^0.23.5",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/@storybook/node-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.10.tgz",
+ "integrity": "sha512-djgbAROgGAvz/gr49egBxCHn1+rui57e76qa9aOMPzEBcxsGrnnKKp0uNdiNt4M7Xv6S2QHbJ2SfOlHhWmMeaA==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/@storybook/types": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz",
+ "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.1.10",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/@storybook/codemod/node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/globby": {
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz",
+ "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==",
+ "dev": true,
+ "dependencies": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.2",
+ "ignore": "^5.2.4",
+ "path-type": "^5.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/jscodeshift": {
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.2.tgz",
+ "integrity": "sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.23.0",
+ "@babel/parser": "^7.23.0",
+ "@babel/plugin-transform-class-properties": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.23.0",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11",
+ "@babel/plugin-transform-optional-chaining": "^7.23.0",
+ "@babel/plugin-transform-private-methods": "^7.22.5",
+ "@babel/preset-flow": "^7.22.15",
+ "@babel/preset-typescript": "^7.23.0",
+ "@babel/register": "^7.22.15",
+ "babel-core": "^7.0.0-bridge.0",
+ "chalk": "^4.1.2",
+ "flow-parser": "0.*",
+ "graceful-fs": "^4.2.4",
+ "micromatch": "^4.0.4",
+ "neo-async": "^2.5.0",
+ "node-dir": "^0.1.17",
+ "recast": "^0.23.3",
+ "temp": "^0.8.4",
+ "write-file-atomic": "^2.3.0"
+ },
+ "bin": {
+ "jscodeshift": "bin/jscodeshift.js"
+ },
+ "peerDependencies": {
+ "@babel/preset-env": "^7.1.6"
+ },
+ "peerDependenciesMeta": {
+ "@babel/preset-env": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/path-type": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
+ "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/prettier": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz",
+ "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/recast": {
+ "version": "0.23.9",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
+ "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==",
+ "dev": true,
+ "dependencies": {
+ "ast-types": "^0.16.1",
+ "esprima": "~4.0.0",
+ "source-map": "~0.6.1",
+ "tiny-invariant": "^1.3.3",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/codemod/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/components": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.10.tgz",
+ "integrity": "sha512-fL2odC3Ct3NiFJEiGLmMNB3Tw3CdUDA/+va3Ka/JEhjaRhbsND2JgriHYmED8SnX9CCqwXoxl5QA8qwl+Oyolw==",
+ "dev": true,
+ "dependencies": {
+ "@radix-ui/react-dialog": "^1.0.5",
+ "@radix-ui/react-slot": "^1.0.2",
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/global": "^5.0.0",
+ "@storybook/icons": "^1.2.5",
+ "@storybook/theming": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "memoizerific": "^1.11.3",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta"
+ }
+ },
+ "node_modules/@storybook/components/node_modules/@storybook/channels": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz",
+ "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/global": "^5.0.0",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/components/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/global": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/components/node_modules/@storybook/core-events": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz",
+ "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/csf": "^0.1.7",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/components/node_modules/@storybook/types": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz",
+ "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.1.10",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/core-common": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.0.6.tgz",
+ "integrity": "sha512-Z4cA52SjcW6SAV9hayqVm5kyr362O20Zmwz7+H2nYEhcu8bY69y5p45aaoyElMxL1GDNu84GrmTp7dY4URw1fQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/core-events": "8.0.6",
+ "@storybook/csf-tools": "8.0.6",
+ "@storybook/node-logger": "8.0.6",
+ "@storybook/types": "8.0.6",
+ "@yarnpkg/fslib": "2.10.3",
+ "@yarnpkg/libzip": "2.3.0",
+ "chalk": "^4.1.0",
+ "cross-spawn": "^7.0.3",
+ "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0",
+ "esbuild-register": "^3.5.0",
+ "execa": "^5.0.0",
+ "file-system-cache": "2.3.0",
+ "find-cache-dir": "^3.0.0",
+ "find-up": "^5.0.0",
+ "fs-extra": "^11.1.0",
+ "glob": "^10.0.0",
+ "handlebars": "^4.7.7",
+ "lazy-universal-dotenv": "^4.0.0",
+ "node-fetch": "^2.0.0",
+ "picomatch": "^2.3.0",
+ "pkg-dir": "^5.0.0",
+ "pretty-hrtime": "^1.0.3",
+ "resolve-from": "^5.0.0",
+ "semver": "^7.3.7",
+ "tempy": "^1.0.1",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util": "^0.12.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/@storybook/core-common/node_modules/del": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
+ "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
+ "dev": true,
+ "dependencies": {
+ "globby": "^11.0.1",
+ "graceful-fs": "^4.2.4",
+ "is-glob": "^4.0.1",
+ "is-path-cwd": "^2.2.0",
+ "is-path-inside": "^3.0.2",
+ "p-map": "^4.0.0",
+ "rimraf": "^3.0.2",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/find-cache-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/find-cache-dir/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/glob": {
+ "version": "10.3.12",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz",
+ "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.3.6",
+ "minimatch": "^9.0.1",
+ "minipass": "^7.0.4",
+ "path-scurry": "^1.10.2"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/minimatch": {
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
+ "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/minipass": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/tempy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz",
+ "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==",
+ "dev": true,
+ "dependencies": {
+ "del": "^6.0.0",
+ "is-stream": "^2.0.0",
+ "temp-dir": "^2.0.0",
+ "type-fest": "^0.16.0",
+ "unique-string": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/type-fest": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz",
+ "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "node_modules/@storybook/core-events": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.0.6.tgz",
+ "integrity": "sha512-EwGmuMm8QTUAHPhab4yftQWoSCX3OzEk6cQdpLtbNFtRRLE9aPZzxhk5Z/d3KhLNSCUAGyCiDt5I9JxTBetT9A==",
+ "dev": true,
+ "dependencies": {
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/core-server": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.1.10.tgz",
+ "integrity": "sha512-jNL5/daNyo7Rcu+y/bOmSB1P65pmcaLwvpr31EUEIISaAqvgruaneS3GKHg2TR0wcxEoHaM4abqhW6iwkI/XYQ==",
+ "dev": true,
+ "dependencies": {
+ "@aw-web-design/x-default-browser": "1.4.126",
+ "@babel/core": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "@discoveryjs/json-ext": "^0.5.3",
+ "@storybook/builder-manager": "8.1.10",
+ "@storybook/channels": "8.1.10",
+ "@storybook/core-common": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/csf-tools": "8.1.10",
+ "@storybook/docs-mdx": "3.1.0-next.0",
+ "@storybook/global": "^5.0.0",
+ "@storybook/manager": "8.1.10",
+ "@storybook/manager-api": "8.1.10",
+ "@storybook/node-logger": "8.1.10",
+ "@storybook/preview-api": "8.1.10",
+ "@storybook/telemetry": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "@types/detect-port": "^1.3.0",
+ "@types/diff": "^5.0.9",
+ "@types/node": "^18.0.0",
+ "@types/pretty-hrtime": "^1.0.0",
+ "@types/semver": "^7.3.4",
+ "better-opn": "^3.0.2",
+ "chalk": "^4.1.0",
+ "cli-table3": "^0.6.1",
+ "compression": "^1.7.4",
+ "detect-port": "^1.3.0",
+ "diff": "^5.2.0",
+ "express": "^4.17.3",
+ "fs-extra": "^11.1.0",
+ "globby": "^14.0.1",
+ "lodash": "^4.17.21",
+ "open": "^8.4.0",
+ "pretty-hrtime": "^1.0.3",
+ "prompts": "^2.4.0",
+ "read-pkg-up": "^7.0.1",
+ "semver": "^7.3.7",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util": "^0.12.4",
+ "util-deprecate": "^1.0.2",
+ "watchpack": "^2.2.0",
+ "ws": "^8.2.3"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/@storybook/channels": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz",
+ "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/global": "^5.0.0",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/global": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/@storybook/core-common": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.10.tgz",
+ "integrity": "sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf-tools": "8.1.10",
+ "@storybook/node-logger": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "@yarnpkg/fslib": "2.10.3",
+ "@yarnpkg/libzip": "2.3.0",
+ "chalk": "^4.1.0",
+ "cross-spawn": "^7.0.3",
+ "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0",
+ "esbuild-register": "^3.5.0",
+ "execa": "^5.0.0",
+ "file-system-cache": "2.3.0",
+ "find-cache-dir": "^3.0.0",
+ "find-up": "^5.0.0",
+ "fs-extra": "^11.1.0",
+ "glob": "^10.0.0",
+ "handlebars": "^4.7.7",
+ "lazy-universal-dotenv": "^4.0.0",
+ "node-fetch": "^2.0.0",
+ "picomatch": "^2.3.0",
+ "pkg-dir": "^5.0.0",
+ "prettier-fallback": "npm:prettier@^3",
+ "pretty-hrtime": "^1.0.3",
+ "resolve-from": "^5.0.0",
+ "semver": "^7.3.7",
+ "tempy": "^3.1.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util": "^0.12.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "prettier": "^2 || ^3"
+ },
+ "peerDependenciesMeta": {
+ "prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/@storybook/core-events": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz",
+ "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/csf": "^0.1.7",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/@storybook/csf-tools": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.10.tgz",
+ "integrity": "sha512-bm/J1jAJf1YaKhcXgOlsNN02sf8XvILXuVAvr9cFC3aFkxVoGbC2AKCss4cgXAd8EQxUNtyETkOcheB5mJ5IlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/generator": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "@babel/traverse": "^7.24.1",
+ "@babel/types": "^7.24.0",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/types": "8.1.10",
+ "fs-extra": "^11.1.0",
+ "recast": "^0.23.5",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/@storybook/node-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.10.tgz",
+ "integrity": "sha512-djgbAROgGAvz/gr49egBxCHn1+rui57e76qa9aOMPzEBcxsGrnnKKp0uNdiNt4M7Xv6S2QHbJ2SfOlHhWmMeaA==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/@storybook/preview-api": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.10.tgz",
+ "integrity": "sha512-0Gl8WHDtp/srrA5uBYXl7YbC8kFQA7IxVmwWN7dIS7HAXu63JZ6JfxaFcfy+kCBfZSBD7spFG4J0f5JXRDYbpg==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.1.10",
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/global": "^5.0.0",
+ "@storybook/types": "8.1.10",
+ "@types/qs": "^6.9.5",
+ "dequal": "^2.0.2",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/@storybook/types": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz",
+ "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.1.10",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/@types/node": {
+ "version": "18.19.39",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz",
+ "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/@storybook/core-server/node_modules/crypto-random-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz",
+ "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/crypto-random-string/node_modules/type-fest": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/diff": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
+ "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/find-cache-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/find-cache-dir/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/glob": {
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
+ "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/globby": {
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz",
+ "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==",
+ "dev": true,
+ "dependencies": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.2",
+ "ignore": "^5.2.4",
+ "path-type": "^5.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/jackspeak": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
+ "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/minimatch": {
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
+ "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/path-type": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
+ "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/recast": {
+ "version": "0.23.9",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
+ "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==",
+ "dev": true,
+ "dependencies": {
+ "ast-types": "^0.16.1",
+ "esprima": "~4.0.0",
+ "source-map": "~0.6.1",
+ "tiny-invariant": "^1.3.3",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/temp-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz",
+ "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/tempy": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz",
+ "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==",
+ "dev": true,
+ "dependencies": {
+ "is-stream": "^3.0.0",
+ "temp-dir": "^3.0.0",
+ "type-fest": "^2.12.2",
+ "unique-string": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/unique-string": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz",
+ "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==",
+ "dev": true,
+ "dependencies": {
+ "crypto-random-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/core-server/node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "node_modules/@storybook/core-webpack": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.0.6.tgz",
+ "integrity": "sha512-77f3vc8wQz22hWBzW1pf+MB2K8LBhyUjST0vr0NoO7tPf/7LMvVgtIr/qZdumx9jjytv8P3reJ92pkarqdvdQQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/core-common": "8.0.6",
+ "@storybook/node-logger": "8.0.6",
+ "@storybook/types": "8.0.6",
+ "@types/node": "^18.0.0",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/core-webpack/node_modules/@types/node": {
+ "version": "18.19.30",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.30.tgz",
+ "integrity": "sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@storybook/csf": {
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.9.tgz",
+ "integrity": "sha512-JlZ6v/iFn+iKohKGpYXnMeNeTiiAMeFoDhYnPLIC8GnyyIWqEI9wJYrOK9i9rxlJ8NZAH/ojGC/u/xVC41qSgQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^2.19.0"
+ }
+ },
+ "node_modules/@storybook/csf-plugin": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.1.10.tgz",
+ "integrity": "sha512-EwW9Olw85nKamUH/2YrkD+bxDvDP4TJ2MqS1qR3UU+lBP/HMQA2zFAgiW1TUmmdHmhAeiDOXbDhijxMa30sppQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/csf-tools": "8.1.10",
+ "unplugin": "^1.3.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/csf-plugin/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@storybook/csf-plugin/node_modules/@storybook/channels": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz",
+ "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/global": "^5.0.0",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/csf-plugin/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/global": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/csf-plugin/node_modules/@storybook/core-events": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz",
+ "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/csf": "^0.1.7",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/csf-plugin/node_modules/@storybook/csf-tools": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.10.tgz",
+ "integrity": "sha512-bm/J1jAJf1YaKhcXgOlsNN02sf8XvILXuVAvr9cFC3aFkxVoGbC2AKCss4cgXAd8EQxUNtyETkOcheB5mJ5IlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/generator": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "@babel/traverse": "^7.24.1",
+ "@babel/types": "^7.24.0",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/types": "8.1.10",
+ "fs-extra": "^11.1.0",
+ "recast": "^0.23.5",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/csf-plugin/node_modules/@storybook/types": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz",
+ "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.1.10",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/csf-plugin/node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/@storybook/csf-plugin/node_modules/recast": {
+ "version": "0.23.9",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
+ "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==",
+ "dev": true,
+ "dependencies": {
+ "ast-types": "^0.16.1",
+ "esprima": "~4.0.0",
+ "source-map": "~0.6.1",
+ "tiny-invariant": "^1.3.3",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@storybook/csf-tools": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.0.6.tgz",
+ "integrity": "sha512-MEBVxpnzqkBPyYXdtYQrY0SQC3oflmAQdEM0qWFzPvZXTnIMk3Q2ft8JNiBht6RlrKGvKql8TodwpbOiPeJI/w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/generator": "^7.23.0",
+ "@babel/parser": "^7.23.0",
+ "@babel/traverse": "^7.23.2",
+ "@babel/types": "^7.23.0",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/types": "8.0.6",
+ "fs-extra": "^11.1.0",
+ "recast": "^0.23.5",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/csf-tools/node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/@storybook/csf-tools/node_modules/recast": {
+ "version": "0.23.6",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz",
+ "integrity": "sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==",
+ "dev": true,
+ "dependencies": {
+ "ast-types": "^0.16.1",
+ "esprima": "~4.0.0",
+ "source-map": "~0.6.1",
+ "tiny-invariant": "^1.3.3",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@storybook/csf/node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/docs-mdx": {
+ "version": "3.1.0-next.0",
+ "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-3.1.0-next.0.tgz",
+ "integrity": "sha512-t4syFIeSyufieNovZbLruPt2DmRKpbwL4fERCZ1MifWDRIORCKLc4NCEHy+IqvIqd71/SJV2k4B51nF7vlJfmQ==",
+ "dev": true
+ },
+ "node_modules/@storybook/docs-tools": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.0.6.tgz",
+ "integrity": "sha512-PsAA2b/Q1ki5IR0fa52MI+fdDkQ0W+mrZVRRj3eJzonGZYcQtXofTXQB7yi0CaX7zzI/N8JcdE4bO9sI6SrOTg==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/core-common": "8.0.6",
+ "@storybook/preview-api": "8.0.6",
+ "@storybook/types": "8.0.6",
+ "@types/doctrine": "^0.0.3",
+ "assert": "^2.1.0",
+ "doctrine": "^3.0.0",
+ "lodash": "^4.17.21"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/docs-tools/node_modules/assert": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
+ "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-nan": "^1.3.2",
+ "object-is": "^1.1.5",
+ "object.assign": "^4.1.4",
+ "util": "^0.12.5"
+ }
+ },
+ "node_modules/@storybook/docs-tools/node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "node_modules/@storybook/global": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz",
+ "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==",
+ "dev": true
+ },
+ "node_modules/@storybook/icons": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.2.9.tgz",
+ "integrity": "sha512-cOmylsz25SYXaJL/gvTk/dl3pyk7yBFRfeXTsHvTA3dfhoU/LWSq0NKL9nM7WBasJyn6XPSGnLS4RtKXLw5EUg==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@storybook/manager": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.1.10.tgz",
+ "integrity": "sha512-dQmRBfT4CABIPhv0kL25qKcQk2SiU5mIZ1DuVzckIbZW+iYEOAusyJ/0HExM9leCrymaW3BgZGlHbIXL7EvZtw==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/manager-api": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.1.10.tgz",
+ "integrity": "sha512-9aZ+zoNrTo1BJskVmCKE/yqlBXmWaKVZh1W/+/xu3WL9wdm/tBlozRvQwegIZlRVvUOxtjOg28Vd2hySYL58zg==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.1.10",
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/global": "^5.0.0",
+ "@storybook/icons": "^1.2.5",
+ "@storybook/router": "8.1.10",
+ "@storybook/theming": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "dequal": "^2.0.2",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "store2": "^2.14.2",
+ "telejson": "^7.2.0",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/manager-api/node_modules/@storybook/channels": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz",
+ "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/global": "^5.0.0",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/manager-api/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/global": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/manager-api/node_modules/@storybook/core-events": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz",
+ "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/csf": "^0.1.7",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/manager-api/node_modules/@storybook/types": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz",
+ "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.1.10",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/node-logger": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.0.6.tgz",
+ "integrity": "sha512-mDRJLVAuTWauO0mnrwajfJV/6zKBJVPp/9g0ULccE3Q+cuqNfUefqfCd17cZBlJHeRsdB9jy9tod48d4qzGEkQ==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/preset-react-webpack": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-8.0.6.tgz",
+ "integrity": "sha512-nOcpjqefSh0kTtKBJEyvWv1QIeWfp47RSwR2z1/jPtU8XT4Tw+Y1g0Vu+RkeL/UWRWYrAoIO++14CxCwFu1Knw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/core-webpack": "8.0.6",
+ "@storybook/docs-tools": "8.0.6",
+ "@storybook/node-logger": "8.0.6",
+ "@storybook/react": "8.0.6",
+ "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0",
+ "@types/node": "^18.0.0",
+ "@types/semver": "^7.3.4",
+ "find-up": "^5.0.0",
+ "fs-extra": "^11.1.0",
+ "magic-string": "^0.30.5",
+ "react-docgen": "^7.0.0",
+ "resolve": "^1.22.8",
+ "semver": "^7.3.7",
+ "tsconfig-paths": "^4.2.0",
+ "webpack": "5"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/preset-react-webpack/node_modules/@storybook/react": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.0.6.tgz",
+ "integrity": "sha512-A1zivNti15nHkJ6EcVKpxKwlDkyMb5MlJMUb8chX/xBWxoR1f5R8eI484rhdPRYUzBY7JwvgZfy4y/murqg6hA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.0.6",
+ "@storybook/docs-tools": "8.0.6",
+ "@storybook/global": "^5.0.0",
+ "@storybook/preview-api": "8.0.6",
+ "@storybook/react-dom-shim": "8.0.6",
+ "@storybook/types": "8.0.6",
+ "@types/escodegen": "^0.0.6",
+ "@types/estree": "^0.0.51",
+ "@types/node": "^18.0.0",
+ "acorn": "^7.4.1",
+ "acorn-jsx": "^5.3.1",
+ "acorn-walk": "^7.2.0",
+ "escodegen": "^2.1.0",
+ "html-tags": "^3.1.0",
+ "lodash": "^4.17.21",
+ "prop-types": "^15.7.2",
+ "react-element-to-jsx-string": "^15.0.0",
+ "semver": "^7.3.7",
+ "ts-dedent": "^2.0.0",
+ "type-fest": "~2.19",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "typescript": ">= 4.2.x"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/preset-react-webpack/node_modules/@storybook/react-dom-shim": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.0.6.tgz",
+ "integrity": "sha512-NC4k0dBIypvVqwqnMhKDUxNc1OeL6lgspn8V26PnmCYbvY97ZqoGQ7n2a5Kw/kubN6yWX1nxNkV6HcTRgEnYTw==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": {
+ "version": "18.19.30",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.30.tgz",
+ "integrity": "sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@storybook/preset-react-webpack/node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/@storybook/preset-react-webpack/node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/preview": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.0.6.tgz",
+ "integrity": "sha512-NdVstxdUghv5goQJ4zFftyezfCEPKHOSNu8k02KU6u6g5IiK430jp5y71E/eiBK3m1AivtluC7tPRSch0HsidA==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/preview-api": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.0.6.tgz",
+ "integrity": "sha512-O5SvBqlHIO/Cf5oGZUJV2npkp9bLqg9Sn0T0a5zXolJbRy+gP7MDyz4AnliLpTn5bT2rzVQ6VH8IDlhHBq3K6g==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.0.6",
+ "@storybook/client-logger": "8.0.6",
+ "@storybook/core-events": "8.0.6",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/global": "^5.0.0",
+ "@storybook/types": "8.0.6",
+ "@types/qs": "^6.9.5",
+ "dequal": "^2.0.2",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/react": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.1.10.tgz",
+ "integrity": "sha512-y0ycq19tTLLk+4rB+nfCPCtoFBWC0QvmMaJY32dbAjWPk+UNFGhWdqjg0oP1NwXYL18WnhRzlyz1Rojw0aXk1w==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/docs-tools": "8.1.10",
+ "@storybook/global": "^5.0.0",
+ "@storybook/preview-api": "8.1.10",
+ "@storybook/react-dom-shim": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "@types/escodegen": "^0.0.6",
+ "@types/estree": "^0.0.51",
+ "@types/node": "^18.0.0",
+ "acorn": "^7.4.1",
+ "acorn-jsx": "^5.3.1",
+ "acorn-walk": "^7.2.0",
+ "escodegen": "^2.1.0",
+ "html-tags": "^3.1.0",
+ "lodash": "^4.17.21",
+ "prop-types": "^15.7.2",
+ "react-element-to-jsx-string": "^15.0.0",
+ "semver": "^7.3.7",
+ "ts-dedent": "^2.0.0",
+ "type-fest": "~2.19",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta",
+ "typescript": ">= 4.2.x"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/react-docgen-typescript-plugin": {
+ "version": "1.0.6--canary.9.0c3f3b7.0",
+ "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz",
+ "integrity": "sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "endent": "^2.0.1",
+ "find-cache-dir": "^3.3.1",
+ "flat-cache": "^3.0.4",
+ "micromatch": "^4.0.2",
+ "react-docgen-typescript": "^2.2.2",
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "typescript": ">= 4.x",
+ "webpack": ">= 4"
+ }
+ },
+ "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@storybook/react-dom-shim": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.1.10.tgz",
+ "integrity": "sha512-+HS75Pq8jb3xkVq0hK33D84aGfbJCURRB+GN2vfTMmmjguQt7z2+MnGqRgrUCt6h2rxU3VdPg9OBnYi/UC0Zrg==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta"
+ }
+ },
+ "node_modules/@storybook/react-webpack5": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-8.0.6.tgz",
+ "integrity": "sha512-Ai8gPnQiz7EAsoVw8nGBx5S28r7L4LMlb7o7HS44XlsDR0ZlMGe2H0ZiAFyf8i8SvLK708KRaXCfcT5zGcetMQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/builder-webpack5": "8.0.6",
+ "@storybook/preset-react-webpack": "8.0.6",
+ "@storybook/react": "8.0.6",
+ "@types/node": "^18.0.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "typescript": ">= 4.2.x"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/react-webpack5/node_modules/@storybook/react": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.0.6.tgz",
+ "integrity": "sha512-A1zivNti15nHkJ6EcVKpxKwlDkyMb5MlJMUb8chX/xBWxoR1f5R8eI484rhdPRYUzBY7JwvgZfy4y/murqg6hA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.0.6",
+ "@storybook/docs-tools": "8.0.6",
+ "@storybook/global": "^5.0.0",
+ "@storybook/preview-api": "8.0.6",
+ "@storybook/react-dom-shim": "8.0.6",
+ "@storybook/types": "8.0.6",
+ "@types/escodegen": "^0.0.6",
+ "@types/estree": "^0.0.51",
+ "@types/node": "^18.0.0",
+ "acorn": "^7.4.1",
+ "acorn-jsx": "^5.3.1",
+ "acorn-walk": "^7.2.0",
+ "escodegen": "^2.1.0",
+ "html-tags": "^3.1.0",
+ "lodash": "^4.17.21",
+ "prop-types": "^15.7.2",
+ "react-element-to-jsx-string": "^15.0.0",
+ "semver": "^7.3.7",
+ "ts-dedent": "^2.0.0",
+ "type-fest": "~2.19",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "typescript": ">= 4.2.x"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/react-webpack5/node_modules/@storybook/react-dom-shim": {
+ "version": "8.0.6",
+ "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.0.6.tgz",
+ "integrity": "sha512-NC4k0dBIypvVqwqnMhKDUxNc1OeL6lgspn8V26PnmCYbvY97ZqoGQ7n2a5Kw/kubN6yWX1nxNkV6HcTRgEnYTw==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@storybook/react-webpack5/node_modules/@types/node": {
+ "version": "18.19.28",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.28.tgz",
+ "integrity": "sha512-J5cOGD9n4x3YGgVuaND6khm5x07MMdAKkRyXnjVR6KFhLMNh2yONGiP7Z+4+tBOt5mK+GvDTiacTOVGGpqiecw==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@storybook/react-webpack5/node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/@storybook/channels": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz",
+ "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/global": "^5.0.0",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/global": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/@storybook/core-common": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.10.tgz",
+ "integrity": "sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf-tools": "8.1.10",
+ "@storybook/node-logger": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "@yarnpkg/fslib": "2.10.3",
+ "@yarnpkg/libzip": "2.3.0",
+ "chalk": "^4.1.0",
+ "cross-spawn": "^7.0.3",
+ "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0",
+ "esbuild-register": "^3.5.0",
+ "execa": "^5.0.0",
+ "file-system-cache": "2.3.0",
+ "find-cache-dir": "^3.0.0",
+ "find-up": "^5.0.0",
+ "fs-extra": "^11.1.0",
+ "glob": "^10.0.0",
+ "handlebars": "^4.7.7",
+ "lazy-universal-dotenv": "^4.0.0",
+ "node-fetch": "^2.0.0",
+ "picomatch": "^2.3.0",
+ "pkg-dir": "^5.0.0",
+ "prettier-fallback": "npm:prettier@^3",
+ "pretty-hrtime": "^1.0.3",
+ "resolve-from": "^5.0.0",
+ "semver": "^7.3.7",
+ "tempy": "^3.1.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util": "^0.12.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "prettier": "^2 || ^3"
+ },
+ "peerDependenciesMeta": {
+ "prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/react/node_modules/@storybook/core-events": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz",
+ "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/csf": "^0.1.7",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/@storybook/csf-tools": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.10.tgz",
+ "integrity": "sha512-bm/J1jAJf1YaKhcXgOlsNN02sf8XvILXuVAvr9cFC3aFkxVoGbC2AKCss4cgXAd8EQxUNtyETkOcheB5mJ5IlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/generator": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "@babel/traverse": "^7.24.1",
+ "@babel/types": "^7.24.0",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/types": "8.1.10",
+ "fs-extra": "^11.1.0",
+ "recast": "^0.23.5",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/@storybook/docs-tools": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.1.10.tgz",
+ "integrity": "sha512-FsO/+L9CrUfAIbm9cdH9UpjTusT7L5RZxN4WCXkiF5SpAVyBoY8kar3RzTZVoh4aQxt1yGWYC+SZGjgf++xa4g==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/core-common": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/preview-api": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "@types/doctrine": "^0.0.3",
+ "assert": "^2.1.0",
+ "doctrine": "^3.0.0",
+ "lodash": "^4.17.21"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/@storybook/node-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.10.tgz",
+ "integrity": "sha512-djgbAROgGAvz/gr49egBxCHn1+rui57e76qa9aOMPzEBcxsGrnnKKp0uNdiNt4M7Xv6S2QHbJ2SfOlHhWmMeaA==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/@storybook/preview-api": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.10.tgz",
+ "integrity": "sha512-0Gl8WHDtp/srrA5uBYXl7YbC8kFQA7IxVmwWN7dIS7HAXu63JZ6JfxaFcfy+kCBfZSBD7spFG4J0f5JXRDYbpg==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.1.10",
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/global": "^5.0.0",
+ "@storybook/types": "8.1.10",
+ "@types/qs": "^6.9.5",
+ "dequal": "^2.0.2",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/@storybook/types": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz",
+ "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.1.10",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/@types/node": {
+ "version": "18.19.39",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz",
+ "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/assert": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
+ "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-nan": "^1.3.2",
+ "object-is": "^1.1.5",
+ "object.assign": "^4.1.4",
+ "util": "^0.12.5"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/@storybook/react/node_modules/crypto-random-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz",
+ "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/crypto-random-string/node_modules/type-fest": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/find-cache-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/find-cache-dir/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/glob": {
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
+ "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/jackspeak": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
+ "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/minimatch": {
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
+ "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/recast": {
+ "version": "0.23.9",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
+ "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==",
+ "dev": true,
+ "dependencies": {
+ "ast-types": "^0.16.1",
+ "esprima": "~4.0.0",
+ "source-map": "~0.6.1",
+ "tiny-invariant": "^1.3.3",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/temp-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz",
+ "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/tempy": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz",
+ "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==",
+ "dev": true,
+ "dependencies": {
+ "is-stream": "^3.0.0",
+ "temp-dir": "^3.0.0",
+ "type-fest": "^2.12.2",
+ "unique-string": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/unique-string": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz",
+ "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==",
+ "dev": true,
+ "dependencies": {
+ "crypto-random-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/react/node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "node_modules/@storybook/router": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.1.10.tgz",
+ "integrity": "sha512-JDEgZ0vVDx0GLz+dKD+R1xqWwjqsCdA2F+s3/si7upHqkFRWU5ocextZ63oKsRnCoaeUh6OavAU4EdkrKiQtQw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.1.10",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/router/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/global": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/telemetry": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.1.10.tgz",
+ "integrity": "sha512-pwiMWrq85D0AnaAgYNfB2w2BDgqnetQ+tXwsUAw4fUEFwA4oPU6r0uqekRbNNE6wmSSYjiiFP3JgknBFqjd2hg==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-common": "8.1.10",
+ "@storybook/csf-tools": "8.1.10",
+ "chalk": "^4.1.0",
+ "detect-package-manager": "^2.0.1",
+ "fetch-retry": "^5.0.2",
+ "fs-extra": "^11.1.0",
+ "read-pkg-up": "^7.0.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/@storybook/channels": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.10.tgz",
+ "integrity": "sha512-CxZE4XrQoe+F+S2mo8Z9HTvFZKfKHIIiwYfoXKCryVp2U/z7ZKrely2PbfxWsrQvF3H0+oegfYYhYRHRiM21Zw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "8.1.10",
+ "@storybook/core-events": "8.1.10",
+ "@storybook/global": "^5.0.0",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/global": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/@storybook/core-common": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.10.tgz",
+ "integrity": "sha512-+0GhgDRQwUlXu1lY77NdLnVBVycCEW0DG7eu7rvLYYkTyNRxbdl2RWsQpjr/j4sxqT6u82l9/b+RWpmsl4MgMQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/core-events": "8.1.10",
+ "@storybook/csf-tools": "8.1.10",
+ "@storybook/node-logger": "8.1.10",
+ "@storybook/types": "8.1.10",
+ "@yarnpkg/fslib": "2.10.3",
+ "@yarnpkg/libzip": "2.3.0",
+ "chalk": "^4.1.0",
+ "cross-spawn": "^7.0.3",
+ "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0",
+ "esbuild-register": "^3.5.0",
+ "execa": "^5.0.0",
+ "file-system-cache": "2.3.0",
+ "find-cache-dir": "^3.0.0",
+ "find-up": "^5.0.0",
+ "fs-extra": "^11.1.0",
+ "glob": "^10.0.0",
+ "handlebars": "^4.7.7",
+ "lazy-universal-dotenv": "^4.0.0",
+ "node-fetch": "^2.0.0",
+ "picomatch": "^2.3.0",
+ "pkg-dir": "^5.0.0",
+ "prettier-fallback": "npm:prettier@^3",
+ "pretty-hrtime": "^1.0.3",
+ "resolve-from": "^5.0.0",
+ "semver": "^7.3.7",
+ "tempy": "^3.1.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util": "^0.12.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "prettier": "^2 || ^3"
+ },
+ "peerDependenciesMeta": {
+ "prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/@storybook/core-events": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.10.tgz",
+ "integrity": "sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/csf": "^0.1.7",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/@storybook/csf-tools": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.10.tgz",
+ "integrity": "sha512-bm/J1jAJf1YaKhcXgOlsNN02sf8XvILXuVAvr9cFC3aFkxVoGbC2AKCss4cgXAd8EQxUNtyETkOcheB5mJ5IlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/generator": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "@babel/traverse": "^7.24.1",
+ "@babel/types": "^7.24.0",
+ "@storybook/csf": "^0.1.7",
+ "@storybook/types": "8.1.10",
+ "fs-extra": "^11.1.0",
+ "recast": "^0.23.5",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/@storybook/node-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.10.tgz",
+ "integrity": "sha512-djgbAROgGAvz/gr49egBxCHn1+rui57e76qa9aOMPzEBcxsGrnnKKp0uNdiNt4M7Xv6S2QHbJ2SfOlHhWmMeaA==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/@storybook/types": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.10.tgz",
+ "integrity": "sha512-UJ97iqI+0Mk13I6ayd3TaBfSFBkWnEauwTnFMQe1dN/L3wTh8laOBaLa0Vr3utRSnt2b5hpcw/nq7azB/Gx4Yw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "8.1.10",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/@storybook/telemetry/node_modules/crypto-random-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz",
+ "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/crypto-random-string/node_modules/type-fest": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/find-cache-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/find-cache-dir/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/glob": {
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
+ "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/jackspeak": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
+ "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
"dev": true,
"dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
+ "@isaacs/cliui": "^8.0.2"
},
"engines": {
- "node": ">=8"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
}
},
- "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/locate-path": {
+ "node_modules/@storybook/telemetry/node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
@@ -11398,7 +16691,7 @@
"node": ">=8"
}
},
- "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/make-dir": {
+ "node_modules/@storybook/telemetry/node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
@@ -11413,7 +16706,40 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/p-limit": {
+ "node_modules/@storybook/telemetry/node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/minimatch": {
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
+ "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/@storybook/telemetry/node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
@@ -11428,7 +16754,7 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/p-locate": {
+ "node_modules/@storybook/telemetry/node_modules/p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
@@ -11440,7 +16766,7 @@
"node": ">=8"
}
},
- "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/path-exists": {
+ "node_modules/@storybook/telemetry/node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
@@ -11449,90 +16775,66 @@
"node": ">=8"
}
},
- "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "node_modules/@storybook/telemetry/node_modules/recast": {
+ "version": "0.23.9",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
+ "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==",
"dev": true,
"dependencies": {
- "find-up": "^4.0.0"
+ "ast-types": "^0.16.1",
+ "esprima": "~4.0.0",
+ "source-map": "~0.6.1",
+ "tiny-invariant": "^1.3.3",
+ "tslib": "^2.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">= 4"
}
},
- "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "node_modules/@storybook/telemetry/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
- "bin": {
- "semver": "bin/semver.js"
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@storybook/react-dom-shim": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.0.6.tgz",
- "integrity": "sha512-NC4k0dBIypvVqwqnMhKDUxNc1OeL6lgspn8V26PnmCYbvY97ZqoGQ7n2a5Kw/kubN6yWX1nxNkV6HcTRgEnYTw==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "node_modules/@storybook/telemetry/node_modules/temp-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz",
+ "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
}
},
- "node_modules/@storybook/react-webpack5": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-8.0.6.tgz",
- "integrity": "sha512-Ai8gPnQiz7EAsoVw8nGBx5S28r7L4LMlb7o7HS44XlsDR0ZlMGe2H0ZiAFyf8i8SvLK708KRaXCfcT5zGcetMQ==",
+ "node_modules/@storybook/telemetry/node_modules/tempy": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz",
+ "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==",
"dev": true,
"dependencies": {
- "@storybook/builder-webpack5": "8.0.6",
- "@storybook/preset-react-webpack": "8.0.6",
- "@storybook/react": "8.0.6",
- "@types/node": "^18.0.0"
+ "is-stream": "^3.0.0",
+ "temp-dir": "^3.0.0",
+ "type-fest": "^2.12.2",
+ "unique-string": "^3.0.0"
},
"engines": {
- "node": ">=18.0.0"
+ "node": ">=14.16"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "typescript": ">= 4.2.x"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@storybook/react-webpack5/node_modules/@types/node": {
- "version": "18.19.28",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.28.tgz",
- "integrity": "sha512-J5cOGD9n4x3YGgVuaND6khm5x07MMdAKkRyXnjVR6KFhLMNh2yONGiP7Z+4+tBOt5mK+GvDTiacTOVGGpqiecw==",
- "dev": true,
- "dependencies": {
- "undici-types": "~5.26.4"
- }
- },
- "node_modules/@storybook/react/node_modules/@types/node": {
- "version": "18.19.28",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.28.tgz",
- "integrity": "sha512-J5cOGD9n4x3YGgVuaND6khm5x07MMdAKkRyXnjVR6KFhLMNh2yONGiP7Z+4+tBOt5mK+GvDTiacTOVGGpqiecw==",
- "dependencies": {
- "undici-types": "~5.26.4"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/react/node_modules/type-fest": {
+ "node_modules/@storybook/telemetry/node_modules/type-fest": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
"integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "dev": true,
"engines": {
"node": ">=12.20"
},
@@ -11540,123 +16842,42 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/router": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.0.6.tgz",
- "integrity": "sha512-ektN0+TyQPxVxcUvt9ksGizgDM1bKFEdGJeeqv0yYaOSyC4M1e4S8QZ+Iq/p/NFNt5XJWsWU+HtQ8AzQWagQfQ==",
- "dependencies": {
- "@storybook/client-logger": "8.0.6",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/telemetry": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.0.6.tgz",
- "integrity": "sha512-kzxhhzGRSBYR4oe/Vlp/adKVxD8KWbIDMCgLWaINe14ILfEmpyrC00MXRSjS1tMF1qfrtn600Oe/xkHFQUpivQ==",
- "dependencies": {
- "@storybook/client-logger": "8.0.6",
- "@storybook/core-common": "8.0.6",
- "@storybook/csf-tools": "8.0.6",
- "chalk": "^4.1.0",
- "detect-package-manager": "^2.0.1",
- "fetch-retry": "^5.0.2",
- "fs-extra": "^11.1.0",
- "read-pkg-up": "^7.0.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/telemetry/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@storybook/telemetry/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@storybook/telemetry/node_modules/unique-string": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz",
+ "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==",
+ "dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "crypto-random-string": "^4.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@storybook/telemetry/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@storybook/telemetry/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/@storybook/telemetry/node_modules/fs-extra": {
- "version": "11.2.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
- "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=14.14"
- }
- },
- "node_modules/@storybook/telemetry/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/telemetry/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/@storybook/telemetry/node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
}
},
"node_modules/@storybook/theming": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.0.6.tgz",
- "integrity": "sha512-o/b12+nDp8WDFlE0qQilzJ2aIeOHD48MCoc+ouFRPRH4tUS5xNaBPYxBxTgdtFbwZNuOC2my4A37Uhjn6IwkuQ==",
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.10.tgz",
+ "integrity": "sha512-W7mth4hwdTqWLneqYCyUnIEiDg4vSokoad8HEodPz6JC9XUPUX3Yi2W4W3xFvqrW4Z5RXfuJ53iG2HN+0AgaQw==",
+ "dev": true,
"dependencies": {
"@emotion/use-insertion-effect-with-fallbacks": "^1.0.1",
- "@storybook/client-logger": "8.0.6",
+ "@storybook/client-logger": "8.1.10",
"@storybook/global": "^5.0.0",
"memoizerific": "^1.11.3"
},
@@ -11665,8 +16886,8 @@
"url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta"
},
"peerDependenciesMeta": {
"react": {
@@ -11677,10 +16898,24 @@
}
}
},
+ "node_modules/@storybook/theming/node_modules/@storybook/client-logger": {
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.10.tgz",
+ "integrity": "sha512-sVXCOo7jnlCgRPOcMlQGODAEt6ipPj+8xGkRUws0kie77qiDld1drLSB6R380dWc9lUrbv9E1GpxCd/Y4ZzSJQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/global": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
"node_modules/@storybook/types": {
"version": "8.0.6",
"resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.0.6.tgz",
"integrity": "sha512-YKq4A+3diQ7UCGuyrB/9LkB29jjGoEmPl3TfV7mO1FvdRw22BNuV3GyJCiLUHigSKiZgFo+pfQhmsNRJInHUnQ==",
+ "dev": true,
"dependencies": {
"@storybook/channels": "8.0.6",
"@types/express": "^4.7.0",
@@ -12321,6 +17556,7 @@
},
"node_modules/@types/body-parser": {
"version": "1.19.2",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@types/connect": "*",
@@ -12362,6 +17598,7 @@
},
"node_modules/@types/connect": {
"version": "3.4.35",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
@@ -12381,6 +17618,7 @@
"version": "6.0.6",
"resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz",
"integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==",
+ "dev": true,
"dependencies": {
"@types/node": "*"
}
@@ -12396,27 +17634,38 @@
"node_modules/@types/detect-port": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.5.tgz",
- "integrity": "sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA=="
+ "integrity": "sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==",
+ "dev": true
+ },
+ "node_modules/@types/diff": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/@types/diff/-/diff-5.2.1.tgz",
+ "integrity": "sha512-uxpcuwWJGhe2AR1g8hD9F5OYGCqjqWnBUQFD8gMZsDbv8oPHzxJF6iMO6n8Tk0AdzlxoaaoQhOYlIg/PukVU8g==",
+ "dev": true
},
"node_modules/@types/doctrine": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
- "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA=="
+ "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==",
+ "dev": true
},
"node_modules/@types/ejs": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
- "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg=="
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==",
+ "dev": true
},
"node_modules/@types/emscripten": {
"version": "1.39.10",
"resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.10.tgz",
- "integrity": "sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw=="
+ "integrity": "sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==",
+ "dev": true
},
"node_modules/@types/escodegen": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz",
- "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig=="
+ "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==",
+ "dev": true
},
"node_modules/@types/eslint": {
"version": "8.4.6",
@@ -12442,6 +17691,7 @@
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
"integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
+ "dev": true,
"dependencies": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.33",
@@ -12453,6 +17703,7 @@
"version": "4.19.0",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz",
"integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==",
+ "dev": true,
"dependencies": {
"@types/node": "*",
"@types/qs": "*",
@@ -12496,6 +17747,7 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
"integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "dev": true,
"dependencies": {
"@types/unist": "*"
}
@@ -12520,7 +17772,8 @@
"node_modules/@types/http-errors": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
- "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA=="
+ "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
+ "dev": true
},
"node_modules/@types/http-proxy": {
"version": "1.17.9",
@@ -12619,6 +17872,7 @@
},
"node_modules/@types/lodash": {
"version": "4.14.195",
+ "dev": true,
"license": "MIT"
},
"node_modules/@types/mapbox-gl": {
@@ -12629,14 +17883,16 @@
}
},
"node_modules/@types/mdx": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.12.tgz",
- "integrity": "sha512-H9VZ9YqE+H28FQVchC83RCs5xQ2J7mAAv6qdDEaWmXEVl3OpdH+xfrSUzQ1lp7U7oSTRZ0RvW08ASPJsYBi7Cw=="
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz",
+ "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==",
+ "dev": true
},
"node_modules/@types/mime": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
- "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="
+ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
+ "dev": true
},
"node_modules/@types/minimatch": {
"version": "3.0.5",
@@ -12667,7 +17923,8 @@
"node_modules/@types/normalize-package-data": {
"version": "2.4.4",
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
- "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
+ "dev": true
},
"node_modules/@types/parse-json": {
"version": "4.0.0",
@@ -12687,7 +17944,8 @@
"node_modules/@types/pretty-hrtime": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA=="
+ "integrity": "sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==",
+ "dev": true
},
"node_modules/@types/prop-types": {
"version": "15.7.5",
@@ -12703,6 +17961,7 @@
},
"node_modules/@types/qs": {
"version": "6.9.7",
+ "dev": true,
"license": "MIT"
},
"node_modules/@types/ramda": {
@@ -12714,6 +17973,7 @@
},
"node_modules/@types/range-parser": {
"version": "1.2.4",
+ "dev": true,
"license": "MIT"
},
"node_modules/@types/react": {
@@ -12748,6 +18008,15 @@
"@types/react": "*"
}
},
+ "node_modules/@types/react-is": {
+ "version": "18.3.0",
+ "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.3.0.tgz",
+ "integrity": "sha512-KZJpHUkAdzyKj/kUHJDc6N7KyidftICufJfOFpiG6haL/BDQNQt5i4n1XDUL/nDZAtGLHDSWRYpLzKTAKSvX6w==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
"node_modules/@types/react-native": {
"version": "0.73.0",
"deprecated": "This is a stub types definition. react-native provides its own type definitions, so you do not need this installed.",
@@ -12801,12 +18070,14 @@
},
"node_modules/@types/semver": {
"version": "7.5.4",
+ "dev": true,
"license": "MIT"
},
"node_modules/@types/send": {
"version": "0.17.4",
"resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
"integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
+ "dev": true,
"dependencies": {
"@types/mime": "^1",
"@types/node": "*"
@@ -12825,6 +18096,7 @@
"version": "1.15.7",
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
"integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
+ "dev": true,
"dependencies": {
"@types/http-errors": "*",
"@types/node": "*",
@@ -12856,7 +18128,8 @@
"node_modules/@types/unist": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
- "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==",
+ "dev": true
},
"node_modules/@types/urijs": {
"version": "1.19.19",
@@ -12865,7 +18138,8 @@
"node_modules/@types/uuid": {
"version": "9.0.8",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz",
- "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA=="
+ "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==",
+ "dev": true
},
"node_modules/@types/verror": {
"version": "1.10.9",
@@ -13299,7 +18573,8 @@
"node_modules/@ungap/structured-clone": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
- "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
},
"node_modules/@urql/core": {
"version": "2.3.6",
@@ -13584,6 +18859,7 @@
"version": "3.0.0-rc.15",
"resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz",
"integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==",
+ "dev": true,
"dependencies": {
"tslib": "^2.4.0"
},
@@ -13598,6 +18874,7 @@
"version": "2.10.3",
"resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz",
"integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==",
+ "dev": true,
"dependencies": {
"@yarnpkg/libzip": "^2.3.0",
"tslib": "^1.13.0"
@@ -13609,12 +18886,14 @@
"node_modules/@yarnpkg/fslib/node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
},
"node_modules/@yarnpkg/libzip": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz",
"integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==",
+ "dev": true,
"dependencies": {
"@types/emscripten": "^1.39.6",
"tslib": "^1.13.0"
@@ -13626,7 +18905,8 @@
"node_modules/@yarnpkg/libzip/node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
},
"node_modules/@yarnpkg/lockfile": {
"version": "1.1.0",
@@ -13672,6 +18952,7 @@
},
"node_modules/acorn": {
"version": "7.4.1",
+ "dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -13724,6 +19005,7 @@
},
"node_modules/acorn-jsx": {
"version": "5.3.2",
+ "dev": true,
"license": "MIT",
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
@@ -13731,6 +19013,7 @@
},
"node_modules/acorn-walk": {
"version": "7.2.0",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.4.0"
@@ -13740,6 +19023,7 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz",
"integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==",
+ "dev": true,
"engines": {
"node": ">= 10.0.0"
}
@@ -14090,7 +19374,8 @@
"node_modules/app-root-dir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz",
- "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g=="
+ "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==",
+ "dev": true
},
"node_modules/appdirsjs": {
"version": "1.2.7",
@@ -14204,6 +19489,18 @@
"sprintf-js": "~1.0.2"
}
},
+ "node_modules/aria-hidden": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
+ "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/aria-query": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
@@ -14437,6 +19734,7 @@
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
"integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
+ "dev": true,
"dependencies": {
"tslib": "^2.0.1"
},
@@ -14462,6 +19760,7 @@
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
+ "dev": true,
"license": "MIT"
},
"node_modules/async-each": {
@@ -14513,6 +19812,7 @@
},
"node_modules/available-typed-arrays": {
"version": "1.0.5",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -14535,6 +19835,7 @@
},
"node_modules/axe-core": {
"version": "4.7.2",
+ "dev": true,
"license": "MPL-2.0",
"engines": {
"node": ">=4"
@@ -15029,6 +20330,179 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/babel-plugin-react-compiler": {
+ "version": "0.0.0-experimental-c23de8d-20240515",
+ "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-0.0.0-experimental-c23de8d-20240515.tgz",
+ "integrity": "sha512-0XN2gmpT55QtAz5n7d5g91y1AuO9tRhWBaLgCRyc4ExHrlr7+LfxW+YTb3mOwxngkkiggwM8HyYsaEK9MqhnlQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/generator": "7.2.0",
+ "@babel/types": "^7.19.0",
+ "chalk": "4",
+ "invariant": "^2.2.4",
+ "pretty-format": "^24",
+ "zod": "^3.22.4",
+ "zod-validation-error": "^2.1.0"
+ }
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/@babel/generator": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.0.tgz",
+ "integrity": "sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.2.0",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.10",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/@jest/types": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
+ "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
+ "dev": true,
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^1.1.1",
+ "@types/yargs": "^13.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/@types/istanbul-reports": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz",
+ "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==",
+ "dev": true,
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "*",
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/@types/yargs": {
+ "version": "13.0.12",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz",
+ "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/chalk/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/pretty-format": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz",
+ "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^24.9.0",
+ "ansi-regex": "^4.0.0",
+ "ansi-styles": "^3.2.0",
+ "react-is": "^16.8.4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-react-compiler/node_modules/zod-validation-error": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-2.1.0.tgz",
+ "integrity": "sha512-VJh93e2wb4c3tWtGgTa0OF/dTt/zoPCPzXq4V11ZjxmEAFaPi/Zss1xIZdEB5RD8GD00U0/iVXgqkF77RV7pdQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "zod": "^3.18.0"
+ }
+ },
"node_modules/babel-plugin-react-native-web": {
"version": "0.18.12",
"license": "MIT"
@@ -15401,6 +20875,7 @@
},
"node_modules/binary-extensions": {
"version": "2.2.0",
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -15541,6 +21016,7 @@
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
"integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
+ "dev": true,
"dependencies": {
"big-integer": "^1.6.44"
},
@@ -15573,7 +21049,8 @@
"node_modules/browser-assert": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz",
- "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ=="
+ "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==",
+ "dev": true
},
"node_modules/browserify-aes": {
"version": "1.2.0",
@@ -16233,6 +21710,7 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "devOptional": true,
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -16324,6 +21802,7 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz",
"integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==",
+ "dev": true,
"dependencies": {
"consola": "^3.2.3"
}
@@ -16486,9 +21965,10 @@
}
},
"node_modules/cli-table3": {
- "version": "0.6.4",
- "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.4.tgz",
- "integrity": "sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==",
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz",
+ "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==",
+ "dev": true,
"dependencies": {
"string-width": "^4.2.0"
},
@@ -16695,7 +22175,9 @@
},
"node_modules/commander": {
"version": "6.2.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "dev": true,
"engines": {
"node": ">= 6"
}
@@ -17065,6 +22547,7 @@
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz",
"integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==",
+ "dev": true,
"engines": {
"node": "^14.18.0 || >=16.10.0"
}
@@ -17879,6 +23362,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz",
"integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==",
+ "dev": true,
"dependencies": {
"bplist-parser": "^0.2.0",
"untildify": "^4.0.0"
@@ -17940,6 +23424,7 @@
},
"node_modules/define-properties": {
"version": "1.2.0",
+ "dev": true,
"license": "MIT",
"dependencies": {
"has-property-descriptors": "^1.0.0",
@@ -17967,7 +23452,8 @@
"node_modules/defu": {
"version": "6.1.4",
"resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
- "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="
+ "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==",
+ "dev": true
},
"node_modules/del": {
"version": "4.1.1",
@@ -18120,6 +23606,7 @@
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
"integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -18144,10 +23631,17 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/detect-node-es": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
+ "dev": true
+ },
"node_modules/detect-package-manager": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz",
"integrity": "sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==",
+ "dev": true,
"dependencies": {
"execa": "^5.1.1"
},
@@ -18156,9 +23650,10 @@
}
},
"node_modules/detect-port": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz",
- "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz",
+ "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==",
+ "dev": true,
"dependencies": {
"address": "^1.0.1",
"debug": "4"
@@ -18166,6 +23661,9 @@
"bin": {
"detect": "bin/detect-port.js",
"detect-port": "bin/detect-port.js"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
}
},
"node_modules/diff": {
@@ -18333,6 +23831,7 @@
},
"node_modules/doctrine": {
"version": "3.0.0",
+ "dev": true,
"license": "Apache-2.0",
"dependencies": {
"esutils": "^2.0.2"
@@ -18431,6 +23930,7 @@
},
"node_modules/dotenv": {
"version": "16.3.1",
+ "dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
@@ -18453,7 +23953,9 @@
},
"node_modules/duplexify": {
"version": "3.7.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "dev": true,
"dependencies": {
"end-of-stream": "^1.0.0",
"inherits": "^2.0.1",
@@ -18467,6 +23969,7 @@
},
"node_modules/eastasianwidth": {
"version": "0.2.0",
+ "dev": true,
"license": "MIT"
},
"node_modules/ee-first": {
@@ -18474,8 +23977,10 @@
"license": "MIT"
},
"node_modules/ejs": {
- "version": "3.1.9",
- "license": "Apache-2.0",
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "dev": true,
"dependencies": {
"jake": "^10.8.5"
},
@@ -19026,6 +24531,7 @@
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
"integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
+ "dev": true,
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
@@ -19062,12 +24568,14 @@
"node_modules/esbuild-plugin-alias": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz",
- "integrity": "sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ=="
+ "integrity": "sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==",
+ "dev": true
},
"node_modules/esbuild-register": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz",
"integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==",
+ "dev": true,
"dependencies": {
"debug": "^4.3.4"
},
@@ -19788,6 +25296,41 @@
"eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
}
},
+ "node_modules/eslint-plugin-react-compiler": {
+ "version": "0.0.0-experimental-53bb89e-20240515",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-compiler/-/eslint-plugin-react-compiler-0.0.0-experimental-53bb89e-20240515.tgz",
+ "integrity": "sha512-L3HV9qja1dnClRlR9aaWEJeJoGPH9cgjKq0sYqIOOH9uyWdVMH9CudsFr6yLva7dj05FpLZkiIaRSZJ3P/v6yQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "@babel/plugin-proposal-private-methods": "^7.18.6",
+ "hermes-parser": "^0.20.1",
+ "zod": "^3.22.4",
+ "zod-validation-error": "^3.0.3"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.0.0 || >= 18.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=7"
+ }
+ },
+ "node_modules/eslint-plugin-react-compiler/node_modules/hermes-estree": {
+ "version": "0.20.1",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz",
+ "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==",
+ "dev": true
+ },
+ "node_modules/eslint-plugin-react-compiler/node_modules/hermes-parser": {
+ "version": "0.20.1",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz",
+ "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==",
+ "dev": true,
+ "dependencies": {
+ "hermes-estree": "0.20.1"
+ }
+ },
"node_modules/eslint-plugin-react-hooks": {
"version": "4.6.0",
"dev": true,
@@ -20992,8 +26535,9 @@
"license": "MIT"
},
"node_modules/fast-glob": {
- "version": "3.3.1",
- "license": "MIT",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -21124,7 +26668,8 @@
"node_modules/fetch-retry": {
"version": "5.0.6",
"resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz",
- "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ=="
+ "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==",
+ "dev": true
},
"node_modules/file-entry-cache": {
"version": "6.0.1",
@@ -21141,6 +26686,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz",
"integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==",
+ "dev": true,
"dependencies": {
"fs-extra": "11.1.1",
"ramda": "0.29.0"
@@ -21150,6 +26696,7 @@
"version": "11.1.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
"integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
+ "dev": true,
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -21166,6 +26713,7 @@
},
"node_modules/filelist": {
"version": "1.0.4",
+ "dev": true,
"license": "Apache-2.0",
"dependencies": {
"minimatch": "^5.0.1"
@@ -21173,6 +26721,7 @@
},
"node_modules/filelist/node_modules/brace-expansion": {
"version": "2.0.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
@@ -21180,6 +26729,7 @@
},
"node_modules/filelist/node_modules/minimatch": {
"version": "5.1.6",
+ "dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
@@ -21421,6 +26971,7 @@
},
"node_modules/for-each": {
"version": "0.3.3",
+ "dev": true,
"license": "MIT",
"dependencies": {
"is-callable": "^1.1.3"
@@ -21437,6 +26988,7 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
"integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+ "dev": true,
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^4.0.1"
@@ -21452,6 +27004,7 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
"engines": {
"node": ">=14"
},
@@ -21641,6 +27194,7 @@
},
"node_modules/fs-constants": {
"version": "1.0.0",
+ "dev": true,
"license": "MIT"
},
"node_modules/fs-extra": {
@@ -21779,10 +27333,20 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-nonce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+ "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/get-npm-tarball-url": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.1.0.tgz",
"integrity": "sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==",
+ "dev": true,
"engines": {
"node": ">=12.17"
}
@@ -21852,6 +27416,7 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz",
"integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==",
+ "dev": true,
"dependencies": {
"citty": "^0.1.6",
"consola": "^3.2.3",
@@ -21869,7 +27434,8 @@
"node_modules/github-slugger": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
- "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="
+ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
+ "dev": true
},
"node_modules/gl-matrix": {
"version": "3.4.3",
@@ -21972,6 +27538,7 @@
},
"node_modules/gopd": {
"version": "1.0.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.3"
@@ -22041,6 +27608,7 @@
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz",
"integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==",
+ "dev": true,
"dependencies": {
"browserify-zlib": "^0.1.4",
"is-deflate": "^1.0.0",
@@ -22057,6 +27625,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
"integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==",
+ "dev": true,
"dependencies": {
"pako": "~0.2.0"
}
@@ -22064,7 +27633,8 @@
"node_modules/gunzip-maybe/node_modules/pako": {
"version": "0.2.9",
"resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
- "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="
+ "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
+ "dev": true
},
"node_modules/gzip-size": {
"version": "6.0.0",
@@ -22089,6 +27659,7 @@
"version": "4.7.8",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
"integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
+ "dev": true,
"dependencies": {
"minimist": "^1.2.5",
"neo-async": "^2.6.2",
@@ -22151,6 +27722,7 @@
},
"node_modules/has-property-descriptors": {
"version": "1.0.0",
+ "dev": true,
"license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.1"
@@ -22181,6 +27753,7 @@
},
"node_modules/has-tostringtag": {
"version": "1.0.0",
+ "dev": true,
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.2"
@@ -22324,6 +27897,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz",
"integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==",
+ "dev": true,
"dependencies": {
"@types/hast": "^3.0.0"
},
@@ -22336,6 +27910,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
"integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
+ "dev": true,
"dependencies": {
"@types/hast": "^3.0.0"
},
@@ -22348,6 +27923,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz",
"integrity": "sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==",
+ "dev": true,
"dependencies": {
"@types/hast": "^3.0.0"
},
@@ -22411,6 +27987,11 @@
"react-is": "^16.7.0"
}
},
+ "node_modules/hoist-non-react-statics/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
"node_modules/hosted-git-info": {
"version": "4.1.0",
"dev": true,
@@ -22484,6 +28065,7 @@
},
"node_modules/html-tags": {
"version": "3.2.0",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -23318,11 +28900,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/ip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz",
- "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ=="
- },
"node_modules/ip-regex": {
"version": "2.1.0",
"license": "MIT",
@@ -23341,6 +28918,7 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz",
"integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==",
+ "dev": true,
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
@@ -23361,6 +28939,7 @@
},
"node_modules/is-arguments": {
"version": "1.1.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
@@ -23417,6 +28996,7 @@
},
"node_modules/is-binary-path": {
"version": "2.1.0",
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"binary-extensions": "^2.0.0"
@@ -23456,6 +29036,7 @@
},
"node_modules/is-callable": {
"version": "1.2.7",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -23513,7 +29094,8 @@
"node_modules/is-deflate": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz",
- "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ=="
+ "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==",
+ "dev": true
},
"node_modules/is-descriptor": {
"version": "1.0.2",
@@ -23602,6 +29184,7 @@
},
"node_modules/is-generator-function": {
"version": "1.0.10",
+ "dev": true,
"license": "MIT",
"dependencies": {
"has-tostringtag": "^1.0.0"
@@ -23627,6 +29210,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
"integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==",
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -23711,6 +29295,7 @@
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
"integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
+ "dev": true,
"dependencies": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3"
@@ -23797,6 +29382,7 @@
},
"node_modules/is-plain-object": {
"version": "5.0.0",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -23880,6 +29466,7 @@
},
"node_modules/is-typed-array": {
"version": "1.1.12",
+ "dev": true,
"license": "MIT",
"dependencies": {
"which-typed-array": "^1.1.11"
@@ -24106,6 +29693,7 @@
},
"node_modules/jackspeak": {
"version": "2.3.6",
+ "dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/cliui": "^8.0.2"
@@ -24122,6 +29710,7 @@
},
"node_modules/jake": {
"version": "10.8.7",
+ "dev": true,
"license": "Apache-2.0",
"dependencies": {
"async": "^3.2.3",
@@ -24138,6 +29727,7 @@
},
"node_modules/jake/node_modules/ansi-styles": {
"version": "4.3.0",
+ "dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -24151,6 +29741,7 @@
},
"node_modules/jake/node_modules/chalk": {
"version": "4.1.2",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -24165,6 +29756,7 @@
},
"node_modules/jake/node_modules/color-convert": {
"version": "2.0.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -24175,10 +29767,12 @@
},
"node_modules/jake/node_modules/color-name": {
"version": "1.1.4",
+ "dev": true,
"license": "MIT"
},
"node_modules/jake/node_modules/has-flag": {
"version": "4.0.0",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -24186,6 +29780,7 @@
},
"node_modules/jake/node_modules/supports-color": {
"version": "7.2.0",
+ "dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
@@ -27061,6 +32656,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz",
"integrity": "sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==",
+ "dev": true,
"dependencies": {
"app-root-dir": "^1.0.2",
"dotenv": "^16.0.0",
@@ -27074,6 +32670,7 @@
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz",
"integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==",
+ "dev": true,
"engines": {
"node": ">=12"
}
@@ -27659,6 +33256,15 @@
"node": ">=10"
}
},
+ "node_modules/luxon": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
+ "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/magic-string": {
"version": "0.30.9",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.9.tgz",
@@ -27726,7 +33332,8 @@
"node_modules/map-or-similar": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz",
- "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg=="
+ "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==",
+ "dev": true
},
"node_modules/map-visit": {
"version": "1.0.0",
@@ -27791,6 +33398,7 @@
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.3.2.tgz",
"integrity": "sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==",
+ "dev": true,
"engines": {
"node": ">= 10"
},
@@ -27947,6 +33555,7 @@
"version": "1.11.3",
"resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz",
"integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==",
+ "dev": true,
"dependencies": {
"map-or-similar": "^1.5.0"
}
@@ -28682,7 +34291,8 @@
"node_modules/mkdirp-classic": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "dev": true
},
"node_modules/mrmime": {
"version": "1.0.1",
@@ -28917,7 +34527,8 @@
"node_modules/node-fetch-native": {
"version": "1.6.4",
"resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz",
- "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ=="
+ "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==",
+ "dev": true
},
"node_modules/node-fetch/node_modules/tr46": {
"version": "0.0.3",
@@ -29132,6 +34743,7 @@
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.8.tgz",
"integrity": "sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==",
+ "dev": true,
"dependencies": {
"citty": "^0.1.6",
"consola": "^3.2.3",
@@ -29150,6 +34762,7 @@
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
"integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "dev": true,
"dependencies": {
"cross-spawn": "^7.0.3",
"get-stream": "^8.0.1",
@@ -29172,6 +34785,7 @@
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
"integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "dev": true,
"engines": {
"node": ">=16"
},
@@ -29183,6 +34797,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
"integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "dev": true,
"engines": {
"node": ">=16.17.0"
}
@@ -29191,6 +34806,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
"integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
@@ -29202,6 +34818,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
"integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "dev": true,
"engines": {
"node": ">=12"
},
@@ -29213,6 +34830,7 @@
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
"integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "dev": true,
"dependencies": {
"path-key": "^4.0.0"
},
@@ -29227,6 +34845,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
"integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "dev": true,
"dependencies": {
"mimic-fn": "^4.0.0"
},
@@ -29241,6 +34860,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
"integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "dev": true,
"engines": {
"node": ">=12"
},
@@ -29252,6 +34872,7 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
"engines": {
"node": ">=14"
},
@@ -29263,6 +34884,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
"integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true,
"engines": {
"node": ">=12"
},
@@ -29376,6 +34998,7 @@
},
"node_modules/object-is": {
"version": "1.1.5",
+ "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
@@ -29390,6 +35013,7 @@
},
"node_modules/object-keys": {
"version": "1.1.1",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -29408,6 +35032,7 @@
},
"node_modules/object.assign": {
"version": "4.1.4",
+ "dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
@@ -29514,7 +35139,8 @@
"node_modules/ohash": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz",
- "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw=="
+ "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==",
+ "dev": true
},
"node_modules/on-finished": {
"version": "2.4.1",
@@ -29821,6 +35447,12 @@
"node": ">=6"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+ "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+ "dev": true
+ },
"node_modules/pako": {
"version": "1.0.11",
"license": "(MIT AND Zlib)"
@@ -30119,15 +35751,16 @@
"license": "MIT"
},
"node_modules/path-scurry": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz",
- "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
"dependencies": {
"lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -30137,12 +35770,14 @@
"version": "10.2.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
"integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
+ "dev": true,
"engines": {
"node": "14 || >=16.14"
}
},
"node_modules/path-scurry/node_modules/minipass": {
"version": "7.0.3",
+ "dev": true,
"license": "ISC",
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -30171,7 +35806,8 @@
"node_modules/pathe": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
- "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+ "dev": true
},
"node_modules/pbf": {
"version": "3.2.1",
@@ -30214,6 +35850,7 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz",
"integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==",
+ "dev": true,
"dependencies": {
"buffer-from": "^1.0.0",
"duplexify": "^3.5.0",
@@ -30276,6 +35913,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
"integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==",
+ "dev": true,
"dependencies": {
"find-up": "^5.0.0"
},
@@ -30379,6 +36017,7 @@
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz",
"integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==",
+ "dev": true,
"dependencies": {
"@babel/runtime": "^7.17.8"
},
@@ -30476,6 +36115,22 @@
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
+ "node_modules/prettier-fallback": {
+ "name": "prettier",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz",
+ "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
"node_modules/prettier-linter-helpers": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
@@ -30528,14 +36183,11 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/pretty-format/node_modules/react-is": {
- "version": "18.2.0",
- "license": "MIT"
- },
"node_modules/pretty-hrtime": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
"integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==",
+ "dev": true,
"engines": {
"node": ">= 0.8"
}
@@ -30609,6 +36261,11 @@
"react-is": "^16.13.1"
}
},
+ "node_modules/prop-types/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
"node_modules/propagate": {
"version": "2.0.1",
"license": "MIT",
@@ -30665,7 +36322,9 @@
},
"node_modules/pumpify": {
"version": "1.5.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "dev": true,
"dependencies": {
"duplexify": "^3.6.0",
"inherits": "^2.0.3",
@@ -30674,7 +36333,9 @@
},
"node_modules/pumpify/node_modules/pump": {
"version": "2.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -30968,6 +36629,7 @@
"version": "0.29.0",
"resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz",
"integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==",
+ "dev": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/ramda"
@@ -31090,11 +36752,16 @@
"version": "5.6.1",
"resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz",
"integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==",
+ "dev": true,
"peerDependencies": {
"react": ">=16.8.0",
"react-dom": ">=16.8.0"
}
},
+ "node_modules/react-compiler-runtime": {
+ "resolved": "lib/react-compiler-runtime",
+ "link": true
+ },
"node_modules/react-content-loader": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/react-content-loader/-/react-content-loader-7.0.0.tgz",
@@ -31199,6 +36866,7 @@
"version": "15.0.0",
"resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz",
"integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==",
+ "dev": true,
"dependencies": {
"@base2/pretty-print-object": "1.0.1",
"is-plain-object": "5.0.0",
@@ -31212,7 +36880,8 @@
"node_modules/react-element-to-jsx-string/node_modules/react-is": {
"version": "18.1.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz",
- "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg=="
+ "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==",
+ "dev": true
},
"node_modules/react-error-boundary": {
"version": "4.0.11",
@@ -31254,8 +36923,9 @@
}
},
"node_modules/react-is": {
- "version": "16.13.1",
- "license": "MIT"
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
},
"node_modules/react-map-gl": {
"version": "7.1.3",
@@ -31607,9 +37277,9 @@
}
},
"node_modules/react-native-onyx": {
- "version": "2.0.53",
- "resolved": "https://registry.npmjs.org/react-native-onyx/-/react-native-onyx-2.0.53.tgz",
- "integrity": "sha512-ObNk5MhLOAVkLgE0NCI04CEO3qaP5ZG+NY1Kn3UnxcHlhyLlDQb10EOiDWSLwNR2s4K3kK+ge7Xmo6N0VdMyyA==",
+ "version": "2.0.54",
+ "resolved": "https://registry.npmjs.org/react-native-onyx/-/react-native-onyx-2.0.54.tgz",
+ "integrity": "sha512-cANbs0KuiwHAIUC0HY7DGNXbFMHH4ZWbTci+qhHhuNNf4aNIP0/ncJ4W8a3VCgFVtfobIFAX5ouT40dEcgBOIQ==",
"dependencies": {
"ascii-table": "0.0.9",
"fast-equals": "^4.0.3",
@@ -32213,6 +37883,53 @@
"version": "17.0.2",
"license": "MIT"
},
+ "node_modules/react-remove-scroll": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz",
+ "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==",
+ "dev": true,
+ "dependencies": {
+ "react-remove-scroll-bar": "^2.3.4",
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.0",
+ "use-sidecar": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-remove-scroll-bar": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz",
+ "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
+ "dev": true,
+ "dependencies": {
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/react-script-hook": {
"version": "1.7.2",
"license": "MIT",
@@ -32232,6 +37949,29 @@
"react": "^16.0.0 || ^17.0.0 || ^18.0.0"
}
},
+ "node_modules/react-style-singleton": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
+ "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+ "dev": true,
+ "dependencies": {
+ "get-nonce": "^1.0.0",
+ "invariant": "^2.2.4",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/react-test-renderer": {
"version": "18.2.0",
"license": "MIT",
@@ -32740,6 +38480,7 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
"integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
"dependencies": {
"find-up": "^4.1.0",
"read-pkg": "^5.2.0",
@@ -32756,6 +38497,7 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -32768,6 +38510,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
"dependencies": {
"p-locate": "^4.1.0"
},
@@ -32779,6 +38522,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
"dependencies": {
"p-try": "^2.0.0"
},
@@ -32793,6 +38537,7 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -32804,6 +38549,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -32812,6 +38558,7 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
"integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
"dependencies": {
"@types/normalize-package-data": "^2.4.0",
"normalize-package-data": "^2.5.0",
@@ -32826,6 +38573,7 @@
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
"integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -32834,6 +38582,7 @@
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -32907,6 +38656,7 @@
},
"node_modules/readdirp": {
"version": "3.6.0",
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
@@ -33105,6 +38855,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz",
"integrity": "sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==",
+ "dev": true,
"dependencies": {
"@types/hast": "^3.0.0",
"@ungap/structured-clone": "^1.0.0",
@@ -33122,6 +38873,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz",
"integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==",
+ "dev": true,
"dependencies": {
"@types/hast": "^3.0.0",
"github-slugger": "^2.0.0",
@@ -34419,6 +40171,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
"integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "dev": true,
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -34721,15 +40474,16 @@
"node_modules/store2": {
"version": "2.14.3",
"resolved": "https://registry.npmjs.org/store2/-/store2-2.14.3.tgz",
- "integrity": "sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg=="
+ "integrity": "sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==",
+ "dev": true
},
"node_modules/storybook": {
- "version": "8.0.6",
- "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.0.6.tgz",
- "integrity": "sha512-QcQl8Sj77scGl0s9pw+cSPFmXK9DPogEkOceG12B2PqdS23oGkaBt24292Y3W5TTMVNyHtRTRB/FqPwK3FOdmA==",
+ "version": "8.1.10",
+ "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.1.10.tgz",
+ "integrity": "sha512-HHlZibyc/QkcQj8aEnYnYwEl+ItNZ/uRbCdkvJzu/vIWYon5jUg30mHFIGZprgLSt27CxOs30Et8yT9z4VhwjA==",
"dev": true,
"dependencies": {
- "@storybook/cli": "8.0.6"
+ "@storybook/cli": "8.1.10"
},
"bin": {
"sb": "index.js",
@@ -34767,8 +40521,10 @@
}
},
"node_modules/stream-shift": {
- "version": "1.0.1",
- "license": "MIT"
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz",
+ "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
+ "dev": true
},
"node_modules/strict-uri-encode": {
"version": "2.0.0",
@@ -34816,6 +40572,7 @@
"node_modules/string-width-cjs": {
"name": "string-width",
"version": "4.2.3",
+ "dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -34912,6 +40669,7 @@
"node_modules/strip-ansi-cjs": {
"name": "strip-ansi",
"version": "6.0.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
@@ -34922,6 +40680,7 @@
},
"node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
"version": "5.0.1",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -35270,6 +41029,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
"integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+ "dev": true,
"dependencies": {
"chownr": "^1.1.1",
"mkdirp-classic": "^0.5.2",
@@ -35280,10 +41040,12 @@
"node_modules/tar-fs/node_modules/chownr": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "dev": true
},
"node_modules/tar-stream": {
"version": "2.2.0",
+ "dev": true,
"license": "MIT",
"dependencies": {
"bl": "^4.0.3",
@@ -35298,6 +41060,7 @@
},
"node_modules/tar-stream/node_modules/readable-stream": {
"version": "3.6.2",
+ "dev": true,
"license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
@@ -35319,6 +41082,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz",
"integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==",
+ "dev": true,
"dependencies": {
"memoizerific": "^1.11.3"
}
@@ -35776,9 +41540,10 @@
}
},
"node_modules/tocbot": {
- "version": "4.25.0",
- "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.25.0.tgz",
- "integrity": "sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA=="
+ "version": "4.28.2",
+ "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.28.2.tgz",
+ "integrity": "sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ==",
+ "dev": true
},
"node_modules/toidentifier": {
"version": "1.0.1",
@@ -35833,6 +41598,15 @@
"tree-kill": "cli.js"
}
},
+ "node_modules/trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/truncate-utf8-bytes": {
"version": "1.0.2",
"dev": true,
@@ -35855,6 +41629,7 @@
},
"node_modules/ts-dedent": {
"version": "2.2.0",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.10"
@@ -36199,12 +41974,14 @@
"node_modules/ufo": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz",
- "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw=="
+ "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==",
+ "dev": true
},
"node_modules/uglify-js": {
"version": "3.17.4",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
"integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
"optional": true,
"bin": {
"uglifyjs": "bin/uglifyjs"
@@ -36272,6 +42049,18 @@
"node": ">=4"
}
},
+ "node_modules/unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/union-value": {
"version": "1.0.1",
"license": "MIT",
@@ -36320,6 +42109,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
"integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+ "dev": true,
"dependencies": {
"@types/unist": "^3.0.0"
},
@@ -36332,6 +42122,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
"integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "dev": true,
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-is": "^6.0.0",
@@ -36346,6 +42137,7 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
"integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+ "dev": true,
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-is": "^6.0.0"
@@ -36378,6 +42170,7 @@
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.1.tgz",
"integrity": "sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==",
+ "dev": true,
"dependencies": {
"acorn": "^8.11.3",
"chokidar": "^3.6.0",
@@ -36389,9 +42182,10 @@
}
},
"node_modules/unplugin/node_modules/acorn": {
- "version": "8.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz",
+ "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==",
+ "dev": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -36403,14 +42197,16 @@
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
"integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "dev": true,
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/unplugin/node_modules/webpack-virtual-modules": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz",
- "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg=="
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+ "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
+ "dev": true
},
"node_modules/unset-value": {
"version": "1.0.0",
@@ -36465,6 +42261,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
"integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -36555,6 +42352,27 @@
"node": ">=0.10.0"
}
},
+ "node_modules/use-callback-ref": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz",
+ "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/use-latest-callback": {
"version": "0.1.9",
"license": "MIT",
@@ -36569,6 +42387,28 @@
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
+ "node_modules/use-sidecar": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
+ "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
+ "dev": true,
+ "dependencies": {
+ "detect-node-es": "^1.1.0",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/utf8": {
"version": "3.0.0",
"license": "MIT"
@@ -37773,6 +43613,7 @@
},
"node_modules/which-typed-array": {
"version": "1.1.11",
+ "dev": true,
"license": "MIT",
"dependencies": {
"available-typed-arrays": "^1.0.5",
@@ -37823,7 +43664,8 @@
"node_modules/wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
},
"node_modules/wrap-ansi": {
"version": "7.0.0",
@@ -37843,6 +43685,7 @@
"node_modules/wrap-ansi-cjs": {
"name": "wrap-ansi",
"version": "7.0.0",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
@@ -37858,6 +43701,7 @@
},
"node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
"version": "4.3.0",
+ "dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -37871,6 +43715,7 @@
},
"node_modules/wrap-ansi-cjs/node_modules/color-convert": {
"version": "2.0.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -37881,6 +43726,7 @@
},
"node_modules/wrap-ansi-cjs/node_modules/color-name": {
"version": "1.1.4",
+ "dev": true,
"license": "MIT"
},
"node_modules/wrap-ansi/node_modules/ansi-styles": {
@@ -38147,6 +43993,18 @@
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
+ },
+ "node_modules/zod-validation-error": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.3.0.tgz",
+ "integrity": "sha512-Syib9oumw1NTqEv4LT0e6U83Td9aVRk9iTXPUQr1otyV1PuXQKOvOwhMNqZIq5hluzHP2pMgnOmHEo7kPdI2mw==",
+ "dev": true,
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "zod": "^3.18.0"
+ }
}
}
}
diff --git a/package.json b/package.json
index f5261521cb7f..ddb75aae9700 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "new.expensify",
- "version": "9.0.1-14",
+ "version": "9.0.3-3",
"author": "Expensify, Inc.",
"homepage": "https://new.expensify.com",
"description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",
@@ -36,7 +36,7 @@
"android-build-e2edelta": "bundle exec fastlane android build_e2edelta",
"test": "TZ=utc NODE_OPTIONS=--experimental-vm-modules jest",
"typecheck": "tsc",
- "lint": "eslint . --max-warnings=0 --cache --cache-location=node_modules/.cache/eslint",
+ "lint": "NODE_OPTIONS=--max_old_space_size=8192 eslint . --max-warnings=0 --cache --cache-location=node_modules/.cache/eslint",
"lint-changed": "eslint --fix $(git diff --diff-filter=AM --name-only main -- \"*.js\" \"*.ts\" \"*.tsx\")",
"lint-watch": "npx eslint-watch --watch --changed",
"shellcheck": "./scripts/shellCheck.sh",
@@ -98,11 +98,6 @@
"@react-ng/bounds-observer": "^0.2.1",
"@rnmapbox/maps": "10.1.20",
"@shopify/flash-list": "1.6.3",
- "@storybook/addon-a11y": "^8.0.6",
- "@storybook/addon-essentials": "^8.0.6",
- "@storybook/cli": "^8.0.6",
- "@storybook/react": "^8.0.6",
- "@storybook/theming": "^8.0.6",
"@ua/react-native-airship": "17.2.1",
"@vue/preload-webpack-plugin": "^2.0.0",
"awesome-phonenumber": "^5.4.0",
@@ -133,6 +128,7 @@
"react": "18.2.0",
"react-beautiful-dnd": "^13.1.1",
"react-collapse": "^5.1.0",
+ "react-compiler-runtime": "file:./lib/react-compiler-runtime",
"react-content-loader": "^7.0.0",
"react-dom": "18.1.0",
"react-error-boundary": "^4.0.11",
@@ -159,7 +155,7 @@
"react-native-linear-gradient": "^2.8.1",
"react-native-localize": "^2.2.6",
"react-native-modal": "^13.0.0",
- "react-native-onyx": "2.0.53",
+ "react-native-onyx": "2.0.54",
"react-native-pager-view": "6.2.3",
"react-native-pdf": "6.7.3",
"react-native-performance": "^5.1.0",
@@ -212,12 +208,20 @@
"@octokit/core": "4.0.4",
"@octokit/plugin-paginate-rest": "3.1.0",
"@octokit/plugin-throttling": "4.1.0",
+ "@perf-profiler/profiler": "^0.10.10",
+ "@perf-profiler/reporter": "^0.9.0",
+ "@perf-profiler/types": "^0.8.0",
"@react-native-community/eslint-config": "3.2.0",
"@react-native/babel-preset": "^0.73.21",
"@react-native/metro-config": "^0.73.5",
"@react-navigation/devtools": "^6.0.10",
+ "@storybook/addon-a11y": "^8.1.10",
+ "@storybook/addon-essentials": "^8.1.10",
"@storybook/addon-webpack5-compiler-babel": "^3.0.3",
+ "@storybook/cli": "^8.1.10",
+ "@storybook/react": "^8.1.10",
"@storybook/react-webpack5": "^8.0.6",
+ "@storybook/theming": "^8.1.10",
"@svgr/webpack": "^6.0.0",
"@testing-library/jest-native": "5.4.1",
"@testing-library/react-native": "11.5.1",
@@ -235,6 +239,7 @@
"@types/react-beautiful-dnd": "^13.1.4",
"@types/react-collapse": "^5.0.1",
"@types/react-dom": "^18.2.4",
+ "@types/react-is": "^18.3.0",
"@types/react-test-renderer": "^18.0.0",
"@types/semver": "^7.5.4",
"@types/setimmediate": "^1.0.2",
@@ -248,6 +253,7 @@
"babel-jest": "29.4.1",
"babel-loader": "^9.1.3",
"babel-plugin-module-resolver": "^5.0.0",
+ "babel-plugin-react-compiler": "^0.0.0-experimental-c23de8d-20240515",
"babel-plugin-react-native-web": "^0.18.7",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-plugin-transform-remove-console": "^6.9.4",
@@ -266,6 +272,7 @@
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-jest": "^28.6.0",
"eslint-plugin-jsdoc": "^46.2.6",
+ "eslint-plugin-react-compiler": "^0.0.0-experimental-53bb89e-20240515",
"eslint-plugin-react-native-a11y": "^3.3.0",
"eslint-plugin-storybook": "^0.8.0",
"eslint-plugin-testing-library": "^6.2.2",
@@ -282,12 +289,13 @@
"portfinder": "^1.0.28",
"prettier": "^2.8.8",
"pusher-js-mock": "^0.3.3",
+ "react-is": "^18.3.1",
"react-native-clean-project": "^4.0.0-alpha4.0",
"react-test-renderer": "18.2.0",
"reassure": "^0.10.1",
"setimmediate": "^1.0.5",
"shellcheck": "^1.1.0",
- "storybook": "^8.0.6",
+ "storybook": "^8.1.10",
"style-loader": "^2.0.0",
"time-analytics-webpack-plugin": "^0.1.17",
"ts-jest": "^29.1.2",
diff --git a/patches/@expensify+react-native-live-markdown+0.1.85.patch b/patches/@expensify+react-native-live-markdown+0.1.88.patch
similarity index 100%
rename from patches/@expensify+react-native-live-markdown+0.1.85.patch
rename to patches/@expensify+react-native-live-markdown+0.1.88.patch
diff --git a/patches/@perf-profiler+android+0.12.1.patch b/patches/@perf-profiler+android+0.12.1.patch
new file mode 100644
index 000000000000..e6e4a90d6ab4
--- /dev/null
+++ b/patches/@perf-profiler+android+0.12.1.patch
@@ -0,0 +1,26 @@
+diff --git a/node_modules/@perf-profiler/android/dist/src/commands/platforms/UnixProfiler.js b/node_modules/@perf-profiler/android/dist/src/commands/platforms/UnixProfiler.js
+index 59aeed9..ee1d8a6 100644
+--- a/node_modules/@perf-profiler/android/dist/src/commands/platforms/UnixProfiler.js
++++ b/node_modules/@perf-profiler/android/dist/src/commands/platforms/UnixProfiler.js
+@@ -28,7 +28,7 @@ exports.CppProfilerName = `BAMPerfProfiler`;
+ // into the Flipper plugin directory
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-expect-error
+-const binaryFolder = global.Flipper
++const binaryFolder = (global.Flipper || process.env.AWS)
+ ? `${__dirname}/bin`
+ : `${__dirname}/../../..${__dirname.includes("dist") ? "/.." : ""}/cpp-profiler/bin`;
+ class UnixProfiler {
+diff --git a/node_modules/@perf-profiler/android/src/commands/platforms/UnixProfiler.ts b/node_modules/@perf-profiler/android/src/commands/platforms/UnixProfiler.ts
+index ccacf09..1eea659 100644
+--- a/node_modules/@perf-profiler/android/src/commands/platforms/UnixProfiler.ts
++++ b/node_modules/@perf-profiler/android/src/commands/platforms/UnixProfiler.ts
+@@ -26,7 +26,7 @@ export const CppProfilerName = `BAMPerfProfiler`;
+ // into the Flipper plugin directory
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-expect-error
+-const binaryFolder = global.Flipper
++const binaryFolder = (global.Flipper || process.env.AWS)
+ ? `${__dirname}/bin`
+ : `${__dirname}/../../..${__dirname.includes("dist") ? "/.." : ""}/cpp-profiler/bin`;
+
diff --git a/patches/@react-navigation+core+6.4.11+001+fix-react-strictmode.patch b/patches/@react-navigation+core+6.4.11+001+fix-react-strictmode.patch
new file mode 100644
index 000000000000..8941bb380a79
--- /dev/null
+++ b/patches/@react-navigation+core+6.4.11+001+fix-react-strictmode.patch
@@ -0,0 +1,44 @@
+diff --git a/node_modules/@react-navigation/core/lib/module/useNavigationBuilder.js b/node_modules/@react-navigation/core/lib/module/useNavigationBuilder.js
+index 051520b..6fb49e0 100644
+--- a/node_modules/@react-navigation/core/lib/module/useNavigationBuilder.js
++++ b/node_modules/@react-navigation/core/lib/module/useNavigationBuilder.js
+@@ -174,10 +174,6 @@ export default function useNavigationBuilder(createRouter, options) {
+ getIsInitial
+ } = React.useContext(NavigationStateContext);
+ const stateCleanedUp = React.useRef(false);
+- const cleanUpState = React.useCallback(() => {
+- setCurrentState(undefined);
+- stateCleanedUp.current = true;
+- }, [setCurrentState]);
+ const setState = React.useCallback(state => {
+ if (stateCleanedUp.current) {
+ // State might have been already cleaned up due to unmount
+@@ -291,6 +287,9 @@ export default function useNavigationBuilder(createRouter, options) {
+ // So we override the state object we return to use the latest state as soon as possible
+ state = nextState;
+ React.useEffect(() => {
++ // In strict mode, React will double-invoke effects.
++ // So we need to reset the flag if component was not unmounted
++ stateCleanedUp.current = false;
+ setKey(navigatorKey);
+ if (!getIsInitial()) {
+ // If it's not initial render, we need to update the state
+@@ -300,14 +299,10 @@ export default function useNavigationBuilder(createRouter, options) {
+ }
+ return () => {
+ // We need to clean up state for this navigator on unmount
+- // We do it in a timeout because we need to detect if another navigator mounted in the meantime
+- // For example, if another navigator has started rendering, we should skip cleanup
+- // Otherwise, our cleanup step will cleanup state for the other navigator and re-initialize it
+- setTimeout(() => {
+- if (getCurrentState() !== undefined && getKey() === navigatorKey) {
+- cleanUpState();
+- }
+- }, 0);
++ if (getCurrentState() !== undefined && getKey() === navigatorKey) {
++ setCurrentState(undefined);
++ stateCleanedUp.current = true;
++ }
+ };
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
diff --git a/patches/eslint-plugin-react-compiler+0.0.0-experimental-53bb89e-20240515.patch b/patches/eslint-plugin-react-compiler+0.0.0-experimental-53bb89e-20240515.patch
new file mode 100644
index 000000000000..f81f70944dd2
--- /dev/null
+++ b/patches/eslint-plugin-react-compiler+0.0.0-experimental-53bb89e-20240515.patch
@@ -0,0 +1,13 @@
+diff --git a/node_modules/eslint-plugin-react-compiler/dist/index.js b/node_modules/eslint-plugin-react-compiler/dist/index.js
+index a0f47a7..f649250 100644
+--- a/node_modules/eslint-plugin-react-compiler/dist/index.js
++++ b/node_modules/eslint-plugin-react-compiler/dist/index.js
+@@ -69108,7 +69108,7 @@ const rule = {
+ return false;
+ }
+ let babelAST;
+- if (context.filename.endsWith(".tsx") || context.filename.endsWith(".ts")) {
++ if (filename.endsWith(".tsx") || filename.endsWith(".ts")) {
+ try {
+ const { parse: babelParse } = require("@babel/parser");
+ babelAST = babelParse(sourceCode, {
diff --git a/patches/react-native-keyboard-controller+1.12.2.patch.patch b/patches/react-native-keyboard-controller+1.12.2.patch
similarity index 100%
rename from patches/react-native-keyboard-controller+1.12.2.patch.patch
rename to patches/react-native-keyboard-controller+1.12.2.patch
diff --git a/patches/react-native-reanimated+3.8.1+003+fix-strict-mode.patch b/patches/react-native-reanimated+3.8.1+003+fix-strict-mode.patch
new file mode 100644
index 000000000000..ccc208062d10
--- /dev/null
+++ b/patches/react-native-reanimated+3.8.1+003+fix-strict-mode.patch
@@ -0,0 +1,36 @@
+diff --git a/node_modules/react-native-reanimated/Common/cpp/Fabric/ReanimatedCommitMarker.cpp b/node_modules/react-native-reanimated/Common/cpp/Fabric/ReanimatedCommitMarker.cpp
+index 3404e89..b545cb6 100644
+--- a/node_modules/react-native-reanimated/Common/cpp/Fabric/ReanimatedCommitMarker.cpp
++++ b/node_modules/react-native-reanimated/Common/cpp/Fabric/ReanimatedCommitMarker.cpp
+@@ -9,7 +9,7 @@ namespace reanimated {
+ thread_local bool ReanimatedCommitMarker::reanimatedCommitFlag_{false};
+
+ ReanimatedCommitMarker::ReanimatedCommitMarker() {
+- react_native_assert(reanimatedCommitFlag_ != true);
++ // react_native_assert(reanimatedCommitFlag_ != true);
+ reanimatedCommitFlag_ = true;
+ }
+
+diff --git a/node_modules/react-native-reanimated/lib/module/reanimated2/UpdateProps.js b/node_modules/react-native-reanimated/lib/module/reanimated2/UpdateProps.js
+index e69c581..78b7034 100644
+--- a/node_modules/react-native-reanimated/lib/module/reanimated2/UpdateProps.js
++++ b/node_modules/react-native-reanimated/lib/module/reanimated2/UpdateProps.js
+@@ -7,14 +7,11 @@ import { isFabric, isJest, shouldBeUseWeb } from './PlatformChecker';
+ import { runOnUIImmediately } from './threads';
+ let updateProps;
+ if (shouldBeUseWeb()) {
+- updateProps = (_, updates, maybeViewRef, isAnimatedProps) => {
++ updateProps = (viewDescriptorsSet, updates, maybeViewRef, isAnimatedProps) => {
+ 'worklet';
+-
+- if (maybeViewRef) {
+- maybeViewRef.items.forEach((item, _index) => {
+- _updatePropsJS(updates, item, isAnimatedProps);
+- });
+- }
++ viewDescriptorsSet.value.forEach((viewDescriptor) => {
++ _updatePropsJS(updates, {_component: viewDescriptor.tag}, isAnimatedProps);
++ })
+ };
+ } else {
+ updateProps = (viewDescriptors, updates) => {
diff --git a/scripts/applyPatches.sh b/scripts/applyPatches.sh
new file mode 100755
index 000000000000..31e1b7f50e6a
--- /dev/null
+++ b/scripts/applyPatches.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+# This script is a simple wrapper around patch-package that fails if any errors or warnings are detected.
+# This is useful because patch-package does not fail on errors or warnings by default,
+# which means that broken patches are easy to miss, and leads to developer frustration and wasted time.
+
+SCRIPTS_DIR=$(dirname "${BASH_SOURCE[0]}")
+source "$SCRIPTS_DIR/shellUtils.sh"
+
+# Run patch-package and capture its output and exit code, while still displaying the original output to the terminal
+# (we use `script -q /dev/null` to preserve colorization in the output)
+TEMP_OUTPUT="$(mktemp)"
+script -q /dev/null npx patch-package --error-on-fail 2>&1 | tee "$TEMP_OUTPUT"
+EXIT_CODE=${PIPESTATUS[0]}
+OUTPUT="$(cat "$TEMP_OUTPUT")"
+rm -f "$TEMP_OUTPUT"
+
+# Check if the output contains a warning message
+echo "$OUTPUT" | grep -q "Warning:"
+WARNING_FOUND=$?
+
+printf "\n";
+
+# Determine the final exit code
+if [ "$EXIT_CODE" -eq 0 ]; then
+ if [ $WARNING_FOUND -eq 0 ]; then
+ # patch-package succeeded but warning was found
+ error "It looks like you upgraded a dependency without upgrading the patch. Please review the patch, determine if it's still needed, and port it to the new version of the dependency."
+ exit 1
+ else
+ # patch-package succeeded and no warning was found
+ success "patch-package succeeded without errors or warnings"
+ exit 0
+ fi
+else
+ # patch-package failed
+ error "patch-package failed to apply a patch"
+ exit "$EXIT_CODE"
+fi
diff --git a/scripts/postInstall.sh b/scripts/postInstall.sh
index 339fdf25cb10..782c8ef5822c 100755
--- a/scripts/postInstall.sh
+++ b/scripts/postInstall.sh
@@ -1,11 +1,14 @@
#!/bin/bash
+# Exit immediately if any command exits with a non-zero status
+set -e
+
# Go to project root
ROOT_DIR=$(dirname "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)")
cd "$ROOT_DIR" || exit 1
-# Run patch-package
-npx patch-package
+# Apply packages using patch-package
+scripts/applyPatches.sh
# Install node_modules in subpackages, unless we're in a CI/CD environment,
# where the node_modules for subpackages are cached separately.
diff --git a/src/App.tsx b/src/App.tsx
index 1ce17ea095bd..21025d34a661 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -31,6 +31,7 @@ import {CurrentReportIDContextProvider} from './components/withCurrentReportID';
import {EnvironmentProvider} from './components/withEnvironment';
import {KeyboardStateProvider} from './components/withKeyboardState';
import {WindowDimensionsProvider} from './components/withWindowDimensions';
+import CONFIG from './CONFIG';
import Expensify from './Expensify';
import useDefaultDragAndDrop from './hooks/useDefaultDragAndDrop';
import {ReportIDsContextProvider} from './hooks/useReportIDs';
@@ -52,51 +53,56 @@ LogBox.ignoreLogs([
const fill = {flex: 1};
+const StrictModeWrapper = CONFIG.USE_REACT_STRICT_MODE ? React.StrictMode : ({children}: {children: React.ReactElement}) => children;
+
function App({url}: AppProps) {
useDefaultDragAndDrop();
OnyxUpdateManager();
+
return (
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
diff --git a/src/CONFIG.ts b/src/CONFIG.ts
index 9ed4242d7604..8800cc907588 100644
--- a/src/CONFIG.ts
+++ b/src/CONFIG.ts
@@ -96,4 +96,5 @@ export default {
IOS_CLIENT_ID: '921154746561-s3uqn2oe4m85tufi6mqflbfbuajrm2i3.apps.googleusercontent.com',
},
GCP_GEOLOCATION_API_KEY: googleGeolocationAPIKey,
+ USE_REACT_STRICT_MODE: true,
} as const;
diff --git a/src/CONST.ts b/src/CONST.ts
index f8ce1a574d49..d74474978c2b 100755
--- a/src/CONST.ts
+++ b/src/CONST.ts
@@ -364,6 +364,7 @@ const CONST = {
NETSUITE_ON_NEW_EXPENSIFY: 'netsuiteOnNewExpensify',
REPORT_FIELDS_FEATURE: 'reportFieldsFeature',
WORKSPACE_FEEDS: 'workspaceFeeds',
+ NETSUITE_USA_TAX: 'netsuiteUsaTax',
},
BUTTON_STATES: {
DEFAULT: 'default',
@@ -601,6 +602,10 @@ const CONST = {
ONFIDO_TERMS_OF_SERVICE_URL: 'https://onfido.com/terms-of-service/',
LIST_OF_RESTRICTED_BUSINESSES: 'https://community.expensify.com/discussion/6191/list-of-restricted-businesses',
TRAVEL_TERMS_URL: `${USE_EXPENSIFY_URL}/travelterms`,
+ EXPENSIFY_PACKAGE_FOR_SAGE_INTACCT: 'https://www.expensify.com/tools/integrations/downloadPackage',
+ EXPENSIFY_PACKAGE_FOR_SAGE_INTACCT_FILE_NAME: 'ExpensifyPackageForSageIntacct',
+ HOW_TO_CONNECT_TO_SAGE_INTACCT: 'https://help.expensify.com/articles/expensify-classic/integrations/accounting-integrations/Sage-Intacct#how-to-connect-to-sage-intacct',
+ PRICING: `https://www.expensify.com/pricing`,
// Use Environment.getEnvironmentURL to get the complete URL with port number
DEV_NEW_EXPENSIFY_URL: 'https://dev.new.expensify.com:',
@@ -670,12 +675,12 @@ const CONST = {
CLOSED: 'CLOSED',
CREATED: 'CREATED',
DELEGATE_SUBMIT: 'DELEGATESUBMIT', // OldDot Action
- DELETED_ACCOUNT: 'DELETEDACCOUNT', // OldDot Action
+ DELETED_ACCOUNT: 'DELETEDACCOUNT', // Deprecated OldDot Action
DISMISSED_VIOLATION: 'DISMISSEDVIOLATION',
- DONATION: 'DONATION', // OldDot Action
+ DONATION: 'DONATION', // Deprecated OldDot Action
EXPORTED_TO_CSV: 'EXPORTCSV', // OldDot Action
EXPORTED_TO_INTEGRATION: 'EXPORTINTEGRATION', // OldDot Action
- EXPORTED_TO_QUICK_BOOKS: 'EXPORTED', // OldDot Action
+ EXPORTED_TO_QUICK_BOOKS: 'EXPORTED', // Deprecated OldDot Action
FORWARDED: 'FORWARDED', // OldDot Action
HOLD: 'HOLD',
HOLD_COMMENT: 'HOLDCOMMENT',
@@ -695,9 +700,9 @@ const CONST = {
REIMBURSEMENT_DELAYED: 'REIMBURSEMENTDELAYED', // OldDot Action
REIMBURSEMENT_QUEUED: 'REIMBURSEMENTQUEUED',
REIMBURSEMENT_DEQUEUED: 'REIMBURSEMENTDEQUEUED',
- REIMBURSEMENT_REQUESTED: 'REIMBURSEMENTREQUESTED', // OldDot Action
- REIMBURSEMENT_SETUP: 'REIMBURSEMENTSETUP', // OldDot Action
- REIMBURSEMENT_SETUP_REQUESTED: 'REIMBURSEMENTSETUPREQUESTED', // OldDot Action
+ REIMBURSEMENT_REQUESTED: 'REIMBURSEMENTREQUESTED', // Deprecated OldDot Action
+ REIMBURSEMENT_SETUP: 'REIMBURSEMENTSETUP', // Deprecated OldDot Action
+ REIMBURSEMENT_SETUP_REQUESTED: 'REIMBURSEMENTSETUPREQUESTED', // Deprecated OldDot Action
RENAMED: 'RENAMED',
REPORT_PREVIEW: 'REPORTPREVIEW',
SELECTED_FOR_RANDOM_AUDIT: 'SELECTEDFORRANDOMAUDIT', // OldDot Action
@@ -1345,6 +1350,130 @@ const CONST = {
REPORT_SUBMITTED: 'REPORT_SUBMITTED',
},
+ NETSUITE_CONFIG: {
+ SUBSIDIARY: 'subsidiary',
+ EXPORTER: 'exporter',
+ EXPORT_DATE: 'exportDate',
+ REIMBURSABLE_EXPENSES_EXPORT_DESTINATION: 'reimbursableExpensesExportDestination',
+ NON_REIMBURSABLE_EXPENSES_EXPORT_DESTINATION: 'nonreimbursableExpensesExportDestination',
+ DEFAULT_VENDOR: 'defaultVendor',
+ REIMBURSABLE_PAYABLE_ACCOUNT: 'reimbursablePayableAccount',
+ PAYABLE_ACCT: 'payableAcct',
+ JOURNAL_POSTING_PREFERENCE: 'journalPostingPreference',
+ RECEIVABLE_ACCOUNT: 'receivableAccount',
+ INVOICE_ITEM_PREFERENCE: 'invoiceItemPreference',
+ INVOICE_ITEM: 'invoiceItem',
+ TAX_POSTING_ACCOUNT: 'taxPostingAccount',
+ PROVINCIAL_TAX_POSTING_ACCOUNT: 'provincialTaxPostingAccount',
+ ALLOW_FOREIGN_CURRENCY: 'allowForeignCurrency',
+ EXPORT_TO_NEXT_OPEN_PERIOD: 'exportToNextOpenPeriod',
+ },
+
+ NETSUITE_EXPORT_DATE: {
+ LAST_EXPENSE: 'LAST_EXPENSE',
+ EXPORTED: 'EXPORTED',
+ SUBMITTED: 'SUBMITTED',
+ },
+
+ NETSUITE_EXPORT_DESTINATION: {
+ EXPENSE_REPORT: 'EXPENSE_REPORT',
+ VENDOR_BILL: 'VENDOR_BILL',
+ JOURNAL_ENTRY: 'JOURNAL_ENTRY',
+ },
+
+ NETSUITE_INVOICE_ITEM_PREFERENCE: {
+ CREATE: 'create',
+ SELECT: 'select',
+ },
+
+ NETSUITE_JOURNAL_POSTING_PREFERENCE: {
+ JOURNALS_POSTING_INDIVIDUAL_LINE: 'JOURNALS_POSTING_INDIVIDUAL_LINE',
+ JOURNALS_POSTING_TOTAL_LINE: 'JOURNALS_POSTING_TOTAL_LINE',
+ },
+
+ NETSUITE_EXPENSE_TYPE: {
+ REIMBURSABLE: 'reimbursable',
+ NON_REIMBURSABLE: 'nonreimbursable',
+ },
+
+ /**
+ * Countries where tax setting is permitted (Strings are in the format of Netsuite's Country type/enum)
+ *
+ * Should mirror the list on the OldDot.
+ */
+ NETSUITE_TAX_COUNTRIES: [
+ '_canada',
+ '_unitedKingdomGB',
+ '_unitedKingdom',
+ '_australia',
+ '_southAfrica',
+ '_india',
+ '_france',
+ '_netherlands',
+ '_germany',
+ '_singapore',
+ '_spain',
+ '_ireland',
+ '_denmark',
+ '_brazil',
+ '_japan',
+ '_philippines',
+ '_china',
+ '_argentina',
+ '_newZealand',
+ '_switzerland',
+ '_sweden',
+ '_portugal',
+ '_mexico',
+ '_israel',
+ '_thailand',
+ '_czechRepublic',
+ '_egypt',
+ '_ghana',
+ '_indonesia',
+ '_iranIslamicRepublicOf',
+ '_jordan',
+ '_kenya',
+ '_kuwait',
+ '_lebanon',
+ '_malaysia',
+ '_morocco',
+ '_myanmar',
+ '_nigeria',
+ '_pakistan',
+ '_saudiArabia',
+ '_sriLanka',
+ '_unitedArabEmirates',
+ '_vietnam',
+ '_austria',
+ '_bulgaria',
+ '_greece',
+ '_cyprus',
+ '_norway',
+ '_romania',
+ '_poland',
+ '_hongKong',
+ '_luxembourg',
+ '_lithuania',
+ '_malta',
+ '_finland',
+ '_koreaRepublicOf',
+ '_italy',
+ '_georgia',
+ '_hungary',
+ '_latvia',
+ '_estonia',
+ '_slovenia',
+ '_serbia',
+ '_croatiaHrvatska',
+ '_belgium',
+ '_turkey',
+ '_taiwan',
+ '_azerbaijan',
+ '_slovakRepublic',
+ '_costaRica',
+ ] as string[],
+
QUICKBOOKS_EXPORT_DATE: {
LAST_EXPENSE: 'LAST_EXPENSE',
REPORT_EXPORTED: 'REPORT_EXPORTED',
@@ -1720,6 +1849,7 @@ const CONST = {
ARE_WORKFLOWS_ENABLED: 'areWorkflowsEnabled',
ARE_REPORT_FIELDS_ENABLED: 'areReportFieldsEnabled',
ARE_CONNECTIONS_ENABLED: 'areConnectionsEnabled',
+ ARE_EXPENSIFY_CARDS_ENABLED: 'areExpensifyCardsEnabled',
ARE_TAXES_ENABLED: 'tax',
},
CATEGORIES_BULK_ACTION_TYPES: {
@@ -1788,6 +1918,13 @@ const CONST = {
QBO: 'quickbooksOnline',
XERO: 'xero',
NETSUITE: 'netsuite',
+ SAGE_INTACCT: 'intacct',
+ },
+ NAME_USER_FRIENDLY: {
+ netsuite: 'NetSuite',
+ quickbooksOnline: 'Quickbooks Online',
+ xero: 'Xero',
+ intacct: 'Sage Intacct',
},
SYNC_STAGE_NAME: {
STARTING_IMPORT_QBO: 'startingImportQBO',
@@ -1835,6 +1972,12 @@ const CONST = {
NETSUITE_SYNC_UPDATE_DATA: 'netSuiteSyncUpdateConnectionData',
NETSUITE_SYNC_NETSUITE_REIMBURSED_REPORTS: 'netSuiteSyncNetSuiteReimbursedReports',
NETSUITE_SYNC_EXPENSIFY_REIMBURSED_REPORTS: 'netSuiteSyncExpensifyReimbursedReports',
+ SAGE_INTACCT_SYNC_CHECK_CONNECTION: 'intacctCheckConnection',
+ SAGE_INTACCT_SYNC_IMPORT_TITLE: 'intacctImportTitle',
+ SAGE_INTACCT_SYNC_IMPORT_DATA: 'intacctImportData',
+ SAGE_INTACCT_SYNC_IMPORT_EMPLOYEES: 'intacctImportEmployees',
+ SAGE_INTACCT_SYNC_IMPORT_DIMENSIONS: 'intacctImportDimensions',
+ SAGE_INTACCT_SYNC_IMPORT_SYNC_REIMBURSED_REPORTS: 'intacctImportSyncBillPayments',
},
SYNC_STAGE_TIMEOUT_MINUTES: 20,
},
@@ -1911,6 +2054,15 @@ const CONST = {
MONTHLY: 'monthly',
FIXED: 'fixed',
},
+ STEP_NAMES: ['1', '2', '3', '4', '5', '6'],
+ STEP: {
+ ASSIGNEE: 'Assignee',
+ CARD_TYPE: 'CardType',
+ LIMIT_TYPE: 'LimitType',
+ LIMIT: 'Limit',
+ CARD_NAME: 'CardName',
+ CONFIRMATION: 'Confirmation',
+ },
},
AVATAR_ROW_SIZE: {
DEFAULT: 4,
@@ -2028,6 +2180,7 @@ const CONST = {
WORKSPACE_INVOICES: 'WorkspaceSendInvoices',
WORKSPACE_TRAVEL: 'WorkspaceBookTravel',
WORKSPACE_MEMBERS: 'WorkspaceManageMembers',
+ WORKSPACE_EXPENSIFY_CARD: 'WorkspaceExpensifyCard',
WORKSPACE_WORKFLOWS: 'WorkspaceWorkflows',
WORKSPACE_BANK_ACCOUNT: 'WorkspaceBankAccount',
WORKSPACE_SETTINGS: 'WorkspaceSettings',
@@ -4885,10 +5038,6 @@ const CONST = {
},
SUBSCRIPTION_PRICE_FACTOR: 2,
- SUBSCRIPTION_POSSIBLE_COST_SAVINGS: {
- COLLECT_PLAN: 10,
- CONTROL_PLAN: 18,
- },
FEEDBACK_SURVEY_OPTIONS: {
TOO_LIMITED: {
ID: 'tooLimited',
diff --git a/src/Expensify.tsx b/src/Expensify.tsx
index 458f1e3c5d24..bfe4db13d9c4 100644
--- a/src/Expensify.tsx
+++ b/src/Expensify.tsx
@@ -1,7 +1,7 @@
import {Audio} from 'expo-av';
import React, {useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState} from 'react';
import type {NativeEventSubscription} from 'react-native';
-import {AppState, Linking} from 'react-native';
+import {AppState, Linking, NativeModules} from 'react-native';
import type {OnyxEntry} from 'react-native-onyx';
import Onyx, {withOnyx} from 'react-native-onyx';
import ConfirmModal from './components/ConfirmModal';
@@ -77,9 +77,12 @@ type ExpensifyOnyxProps = {
type ExpensifyProps = ExpensifyOnyxProps;
-type SplashScreenHiddenContextType = {isSplashHidden?: boolean};
+// HybridApp needs access to SetStateAction in order to properly hide SplashScreen when React Native was booted before.
+type SplashScreenHiddenContextType = {isSplashHidden?: boolean; setIsSplashHidden: React.Dispatch>};
-const SplashScreenHiddenContext = React.createContext({});
+const SplashScreenHiddenContext = React.createContext({
+ setIsSplashHidden: () => {},
+});
function Expensify({
isCheckingPublicRoom = true,
@@ -109,16 +112,6 @@ function Expensify({
const isAuthenticated = useMemo(() => !!(session?.authToken ?? null), [session]);
const autoAuthState = useMemo(() => session?.autoAuthState ?? '', [session]);
- const isAuthenticatedRef = useRef(false);
- isAuthenticatedRef.current = isAuthenticated;
-
- const contextValue = useMemo(
- () => ({
- isSplashHidden,
- }),
- [isSplashHidden],
- );
-
const shouldInit = isNavigationReady && hasAttemptedToOpenPublicRoom;
const shouldHideSplash = shouldInit && !isSplashHidden;
@@ -142,6 +135,14 @@ function Expensify({
Performance.markEnd(CONST.TIMING.SIDEBAR_LOADED);
}, []);
+ const contextValue = useMemo(
+ () => ({
+ isSplashHidden,
+ setIsSplashHidden,
+ }),
+ [isSplashHidden, setIsSplashHidden],
+ );
+
useLayoutEffect(() => {
// Initialize this client as being an active client
ActiveClientManager.init();
@@ -198,8 +199,7 @@ function Expensify({
// Open chat report from a deep link (only mobile native)
Linking.addEventListener('url', (state) => {
- // We need to pass 'isAuthenticated' to avoid loading a non-existing profile page twice
- Report.openReportFromDeepLink(state.url, !isAuthenticatedRef.current);
+ Report.openReportFromDeepLink(state.url);
});
return () => {
@@ -263,8 +263,8 @@ function Expensify({
/>
)}
-
- {shouldHideSplash && }
+ {/* HybridApp has own middleware to hide SplashScreen */}
+ {!NativeModules.HybridAppModule && shouldHideSplash && }
);
}
diff --git a/src/NAVIGATORS.ts b/src/NAVIGATORS.ts
index eea357322075..0b4a86c99247 100644
--- a/src/NAVIGATORS.ts
+++ b/src/NAVIGATORS.ts
@@ -10,5 +10,6 @@ export default {
ONBOARDING_MODAL_NAVIGATOR: 'OnboardingModalNavigator',
FEATURE_TRANING_MODAL_NAVIGATOR: 'FeatureTrainingModalNavigator',
WELCOME_VIDEO_MODAL_NAVIGATOR: 'WelcomeVideoModalNavigator',
+ EXPLANATION_MODAL_NAVIGATOR: 'ExplanationModalNavigator',
FULL_SCREEN_NAVIGATOR: 'FullScreenNavigator',
} as const;
diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts
index b5eea4228042..8ec415442041 100755
--- a/src/ONYXKEYS.ts
+++ b/src/ONYXKEYS.ts
@@ -115,6 +115,9 @@ const ONYXKEYS = {
/** This NVP contains information about whether the onboarding flow was completed or not */
NVP_ONBOARDING: 'nvp_onboarding',
+ /** This NVP contains data associated with HybridApp */
+ NVP_TRYNEWDOT: 'nvp_tryNewDot',
+
/** Contains the user preference for the LHN priority mode */
NVP_PRIORITY_MODE: 'nvp_priorityMode',
@@ -154,9 +157,20 @@ const ONYXKEYS = {
/** Whether the user has dismissed the hold educational interstitial */
NVP_DISMISSED_HOLD_USE_EXPLANATION: 'nvp_dismissedHoldUseExplanation',
+ /** Whether the user has seen HybridApp explanation modal */
+ NVP_SEEN_NEW_USER_MODAL: 'nvp_seen_new_user_modal',
/** Store the state of the subscription */
NVP_PRIVATE_SUBSCRIPTION: 'nvp_private_subscription',
+ /** Store the stripe id status */
+ NVP_PRIVATE_STRIPE_CUSTOMER_ID: 'nvp_private_stripeCustomerID',
+
+ /** Store the billing dispute status */
+ NVP_PRIVATE_BILLING_DISPUTE_PENDING: 'nvp_private_billingDisputePending',
+
+ /** Store the billing status */
+ NVP_PRIVATE_BILLING_STATUS: 'nvp_private_billingStatus',
+
/** Store preferred skintone for emoji */
PREFERRED_EMOJI_SKIN_TONE: 'nvp_expensify_preferredEmojiSkinTone',
@@ -169,6 +183,9 @@ const ONYXKEYS = {
/** The NVP with the last action taken (for the Quick Action Button) */
NVP_QUICK_ACTION_GLOBAL_CREATE: 'nvp_quickActionGlobalCreate',
+ /** The NVP containing all information necessary to connect with Spontana */
+ NVP_TRAVEL_SETTINGS: 'nvp_travelSettings',
+
/** The start date (yyyy-MM-dd HH:mm:ss) of the workspace owner’s free trial period. */
NVP_FIRST_DAY_FREE_TRIAL: 'nvp_private_firstDayFreeTrial',
@@ -179,7 +196,7 @@ const ONYXKEYS = {
NVP_BILLING_FUND_ID: 'nvp_expensify_billingFundID',
/** The amount owed by the workspace’s owner. */
- NVP_PRIVATE_AMOUNT_OWNED: 'nvp_private_amountOwed',
+ NVP_PRIVATE_AMOUNT_OWED: 'nvp_private_amountOwed',
/** The end date (epoch timestamp) of the workspace owner’s grace period after the free trial ends. */
NVP_PRIVATE_OWNER_BILLING_GRACE_PERIOD_END: 'nvp_private_billingGracePeriodEnd',
@@ -336,12 +353,24 @@ const ONYXKEYS = {
// Paths of PDF file that has been cached during one session
CACHED_PDF_PATHS: 'cachedPDFPaths',
+ /** Stores iframe link to verify 3DS flow for subscription */
+ VERIFY_3DS_SUBSCRIPTION: 'verify3dsSubscription',
+
/** Holds the checks used while transferring the ownership of the workspace */
POLICY_OWNERSHIP_CHANGE_CHECKS: 'policyOwnershipChangeChecks',
+ /** Indicates whether ClearOutstandingBalance failed */
+ SUBSCRIPTION_RETRY_BILLING_STATUS_FAILED: 'subscriptionRetryBillingStatusFailed',
+
+ /** Indicates whether ClearOutstandingBalance was successful */
+ SUBSCRIPTION_RETRY_BILLING_STATUS_SUCCESSFUL: 'subscriptionRetryBillingStatusSuccessful',
+
/** Stores info during review duplicates flow */
REVIEW_DUPLICATES: 'reviewDuplicates',
+ /** Stores the information about the state of issuing a new card */
+ ISSUE_NEW_EXPENSIFY_CARD: 'issueNewExpensifyCard',
+
/** Collection Keys */
COLLECTION: {
DOWNLOAD: 'download_',
@@ -402,8 +431,8 @@ const ONYXKEYS = {
/** List of Form ids */
FORMS: {
- ADD_DEBIT_CARD_FORM: 'addDebitCardForm',
- ADD_DEBIT_CARD_FORM_DRAFT: 'addDebitCardFormDraft',
+ ADD_PAYMENT_CARD_FORM: 'addPaymentCardForm',
+ ADD_PAYMENT_CARD_FORM_DRAFT: 'addPaymentCardFormDraft',
WORKSPACE_SETTINGS_FORM: 'workspaceSettingsForm',
WORKSPACE_CATEGORY_FORM: 'workspaceCategoryForm',
WORKSPACE_CATEGORY_FORM_DRAFT: 'workspaceCategoryFormDraft',
@@ -472,6 +501,8 @@ const ONYXKEYS = {
SETTINGS_STATUS_SET_CLEAR_AFTER_FORM_DRAFT: 'settingsStatusSetClearAfterFormDraft',
SETTINGS_STATUS_CLEAR_DATE_FORM: 'settingsStatusClearDateForm',
SETTINGS_STATUS_CLEAR_DATE_FORM_DRAFT: 'settingsStatusClearDateFormDraft',
+ CHANGE_BILLING_CURRENCY_FORM: 'changeBillingCurrencyForm',
+ CHANGE_BILLING_CURRENCY_FORM_DRAFT: 'changeBillingCurrencyFormDraft',
PRIVATE_NOTES_FORM: 'privateNotesForm',
PRIVATE_NOTES_FORM_DRAFT: 'privateNotesFormDraft',
I_KNOW_A_TEACHER_FORM: 'iKnowTeacherForm',
@@ -508,13 +539,17 @@ const ONYXKEYS = {
NEW_CHAT_NAME_FORM_DRAFT: 'newChatNameFormDraft',
SUBSCRIPTION_SIZE_FORM: 'subscriptionSizeForm',
SUBSCRIPTION_SIZE_FORM_DRAFT: 'subscriptionSizeFormDraft',
+ ISSUE_NEW_EXPENSIFY_CARD_FORM: 'issueNewExpensifyCardForm',
+ ISSUE_NEW_EXPENSIFY_CARD_FORM_DRAFT: 'issueNewExpensifyCardFormDraft',
+ SAGE_INTACCT_CREDENTIALS_FORM: 'sageIntacctCredentialsForm',
+ SAGE_INTACCT_CREDENTIALS_FORM_DRAFT: 'sageIntacctCredentialsFormDraft',
},
} as const;
type AllOnyxKeys = DeepValueOf;
type OnyxFormValuesMapping = {
- [ONYXKEYS.FORMS.ADD_DEBIT_CARD_FORM]: FormTypes.AddDebitCardForm;
+ [ONYXKEYS.FORMS.ADD_PAYMENT_CARD_FORM]: FormTypes.AddPaymentCardForm;
[ONYXKEYS.FORMS.WORKSPACE_SETTINGS_FORM]: FormTypes.WorkspaceSettingsForm;
[ONYXKEYS.FORMS.WORKSPACE_CATEGORY_FORM]: FormTypes.WorkspaceCategoryForm;
[ONYXKEYS.FORMS.WORKSPACE_TAG_FORM]: FormTypes.WorkspaceTagForm;
@@ -546,6 +581,7 @@ type OnyxFormValuesMapping = {
[ONYXKEYS.FORMS.WAYPOINT_FORM]: FormTypes.WaypointForm;
[ONYXKEYS.FORMS.SETTINGS_STATUS_SET_FORM]: FormTypes.SettingsStatusSetForm;
[ONYXKEYS.FORMS.SETTINGS_STATUS_CLEAR_DATE_FORM]: FormTypes.SettingsStatusClearDateForm;
+ [ONYXKEYS.FORMS.CHANGE_BILLING_CURRENCY_FORM]: FormTypes.ChangeBillingCurrencyForm;
[ONYXKEYS.FORMS.SETTINGS_STATUS_SET_CLEAR_AFTER_FORM]: FormTypes.SettingsStatusSetClearAfterForm;
[ONYXKEYS.FORMS.PRIVATE_NOTES_FORM]: FormTypes.PrivateNotesForm;
[ONYXKEYS.FORMS.I_KNOW_A_TEACHER_FORM]: FormTypes.IKnowTeacherForm;
@@ -567,6 +603,8 @@ type OnyxFormValuesMapping = {
[ONYXKEYS.FORMS.WORKSPACE_TAX_VALUE_FORM]: FormTypes.WorkspaceTaxValueForm;
[ONYXKEYS.FORMS.NEW_CHAT_NAME_FORM]: FormTypes.NewChatNameForm;
[ONYXKEYS.FORMS.SUBSCRIPTION_SIZE_FORM]: FormTypes.SubscriptionSizeForm;
+ [ONYXKEYS.FORMS.ISSUE_NEW_EXPENSIFY_CARD_FORM]: FormTypes.IssueNewExpensifyCardForm;
+ [ONYXKEYS.FORMS.SAGE_INTACCT_CREDENTIALS_FORM]: FormTypes.SageIntactCredentialsForm;
};
type OnyxFormDraftValuesMapping = {
@@ -622,6 +660,9 @@ type OnyxValuesMapping = {
// NVP_ONBOARDING is an array for old users.
[ONYXKEYS.NVP_ONBOARDING]: Onboarding | [];
+ // ONYXKEYS.NVP_TRYNEWDOT is HybridApp onboarding data
+ [ONYXKEYS.NVP_TRYNEWDOT]: OnyxTypes.TryNewDot;
+
[ONYXKEYS.ACTIVE_CLIENTS]: string[];
[ONYXKEYS.DEVICE_ID]: string;
[ONYXKEYS.IS_SIDEBAR_LOADED]: boolean;
@@ -664,6 +705,7 @@ type OnyxValuesMapping = {
[ONYXKEYS.NVP_RECENT_WAYPOINTS]: OnyxTypes.RecentWaypoint[];
[ONYXKEYS.NVP_INTRO_SELECTED]: OnyxTypes.IntroSelected;
[ONYXKEYS.NVP_LAST_SELECTED_DISTANCE_RATES]: OnyxTypes.LastSelectedDistanceRates;
+ [ONYXKEYS.NVP_SEEN_NEW_USER_MODAL]: boolean;
[ONYXKEYS.PUSH_NOTIFICATIONS_ENABLED]: boolean;
[ONYXKEYS.PLAID_DATA]: OnyxTypes.PlaidData;
[ONYXKEYS.IS_PLAID_DISABLED]: boolean;
@@ -675,6 +717,9 @@ type OnyxValuesMapping = {
[ONYXKEYS.NVP_DISMISSED_REFERRAL_BANNERS]: OnyxTypes.DismissedReferralBanners;
[ONYXKEYS.NVP_HAS_SEEN_TRACK_TRAINING]: boolean;
[ONYXKEYS.NVP_PRIVATE_SUBSCRIPTION]: OnyxTypes.PrivateSubscription;
+ [ONYXKEYS.NVP_PRIVATE_STRIPE_CUSTOMER_ID]: OnyxTypes.StripeCustomerID;
+ [ONYXKEYS.NVP_PRIVATE_BILLING_DISPUTE_PENDING]: number;
+ [ONYXKEYS.NVP_PRIVATE_BILLING_STATUS]: OnyxTypes.BillingStatus;
[ONYXKEYS.USER_WALLET]: OnyxTypes.UserWallet;
[ONYXKEYS.WALLET_ONFIDO]: OnyxTypes.WalletOnfido;
[ONYXKEYS.WALLET_ADDITIONAL_DETAILS]: OnyxTypes.WalletAdditionalDetails;
@@ -701,6 +746,7 @@ type OnyxValuesMapping = {
[ONYXKEYS.IS_CHECKING_PUBLIC_ROOM]: boolean;
[ONYXKEYS.MY_DOMAIN_SECURITY_GROUPS]: Record;
[ONYXKEYS.LAST_OPENED_PUBLIC_ROOM_ID]: string;
+ [ONYXKEYS.VERIFY_3DS_SUBSCRIPTION]: string;
[ONYXKEYS.PREFERRED_THEME]: ValueOf;
[ONYXKEYS.MAPBOX_ACCESS_TOKEN]: OnyxTypes.MapboxAccessToken;
[ONYXKEYS.ONYX_UPDATES_FROM_SERVER]: OnyxTypes.OnyxUpdatesFromServer;
@@ -722,11 +768,15 @@ type OnyxValuesMapping = {
[ONYXKEYS.CACHED_PDF_PATHS]: Record;
[ONYXKEYS.POLICY_OWNERSHIP_CHANGE_CHECKS]: Record;
[ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE]: OnyxTypes.QuickAction;
+ [ONYXKEYS.SUBSCRIPTION_RETRY_BILLING_STATUS_FAILED]: boolean;
+ [ONYXKEYS.SUBSCRIPTION_RETRY_BILLING_STATUS_SUCCESSFUL]: boolean;
+ [ONYXKEYS.NVP_TRAVEL_SETTINGS]: OnyxTypes.TravelSettings;
[ONYXKEYS.REVIEW_DUPLICATES]: OnyxTypes.ReviewDuplicates;
+ [ONYXKEYS.ISSUE_NEW_EXPENSIFY_CARD]: OnyxTypes.IssueNewCard;
[ONYXKEYS.NVP_FIRST_DAY_FREE_TRIAL]: string;
[ONYXKEYS.NVP_LAST_DAY_FREE_TRIAL]: string;
[ONYXKEYS.NVP_BILLING_FUND_ID]: number;
- [ONYXKEYS.NVP_PRIVATE_AMOUNT_OWNED]: number;
+ [ONYXKEYS.NVP_PRIVATE_AMOUNT_OWED]: number;
[ONYXKEYS.NVP_PRIVATE_OWNER_BILLING_GRACE_PERIOD_END]: number;
};
diff --git a/src/ROUTES.ts b/src/ROUTES.ts
index d354ee1c47fd..1798b79bde0f 100644
--- a/src/ROUTES.ts
+++ b/src/ROUTES.ts
@@ -2,7 +2,7 @@ import type {ValueOf} from 'type-fest';
import type CONST from './CONST';
import type {IOUAction, IOUType} from './CONST';
import type {IOURequestType} from './libs/actions/IOU';
-import type {CentralPaneNavigatorParamList} from './libs/Navigation/types';
+import type {AuthScreensParamList} from './libs/Navigation/types';
import type {SearchQuery} from './types/onyx/SearchResults';
import type AssertTypesNotEqual from './types/utils/AssertTypesNotEqual';
@@ -37,7 +37,7 @@ const ROUTES = {
SEARCH: {
route: '/search/:query',
- getRoute: (searchQuery: SearchQuery, queryParams?: CentralPaneNavigatorParamList['Search_Central_Pane']) => {
+ getRoute: (searchQuery: SearchQuery, queryParams?: AuthScreensParamList['Search_Central_Pane']) => {
const {sortBy, sortOrder} = queryParams ?? {};
if (!sortBy && !sortOrder) {
@@ -95,6 +95,7 @@ const ROUTES = {
WORKSPACE_SWITCHER: 'workspace-switcher',
SETTINGS: 'settings',
SETTINGS_PROFILE: 'settings/profile',
+ SETTINGS_CHANGE_CURRENCY: 'settings/add-payment-card/change-currency',
SETTINGS_SHARE_CODE: 'settings/shareCode',
SETTINGS_DISPLAY_NAME: 'settings/profile/display-name',
SETTINGS_TIMEZONE: 'settings/profile/timezone',
@@ -107,6 +108,8 @@ const ROUTES = {
getRoute: (canChangeSize: 0 | 1) => `settings/subscription/subscription-size?canChangeSize=${canChangeSize}` as const,
},
SETTINGS_SUBSCRIPTION_ADD_PAYMENT_CARD: 'settings/subscription/add-payment-card',
+ SETTINGS_SUBSCRIPTION_CHANGE_BILLING_CURRENCY: 'settings/subscription/change-billing-currency',
+ SETTINGS_SUBSCRIPTION_CHANGE_PAYMENT_CURRENCY: 'settings/subscription/add-payment-card/change-payment-currency',
SETTINGS_SUBSCRIPTION_DISABLE_AUTO_RENEW_SURVEY: 'settings/subscription/disable-auto-renew-survey',
SETTINGS_PRIORITY_MODE: 'settings/preferences/priority-mode',
SETTINGS_LANGUAGE: 'settings/preferences/language',
@@ -780,10 +783,21 @@ const ROUTES = {
route: 'settings/workspaces/:policyID/reportFields',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/reportFields` as const,
},
+ // TODO: uncomment after development is done
+ // WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW: {
+ // route: 'settings/workspaces/:policyID/expensify-card/issues-new',
+ // getRoute: (policyID: string) => `settings/workspaces/${policyID}/expensify-card/issue-new` as const,
+ // },
+ // TODO: remove after development is done - this one is for testing purposes
+ WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW: 'settings/workspaces/expensify-card/issue-new',
WORKSPACE_DISTANCE_RATES: {
route: 'settings/workspaces/:policyID/distance-rates',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/distance-rates` as const,
},
+ WORKSPACE_EXPENSIFY_CARD: {
+ route: 'settings/workspaces/:policyID/expensify-card',
+ getRoute: (policyID: string) => `settings/workspaces/${policyID}/expensify-card` as const,
+ },
WORKSPACE_CREATE_DISTANCE_RATE: {
route: 'settings/workspaces/:policyID/distance-rates/new',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/distance-rates/new` as const,
@@ -822,6 +836,7 @@ const ROUTES = {
ONBOARDING_WORK: 'onboarding/work',
ONBOARDING_PURPOSE: 'onboarding/purpose',
WELCOME_VIDEO_ROOT: 'onboarding/welcome-video',
+ EXPLANATION_MODAL_ROOT: 'onboarding/explanation',
TRANSACTION_RECEIPT: {
route: 'r/:reportID/transaction/:transactionID/receipt',
@@ -921,6 +936,79 @@ const ROUTES = {
route: 'restricted-action/workspace/:policyID',
getRoute: (policyID: string) => `restricted-action/workspace/${policyID}` as const,
},
+ POLICY_ACCOUNTING_NETSUITE_SUBSIDIARY_SELECTOR: {
+ route: 'settings/workspaces/:policyID/accounting/net-suite/subsidiary-selector',
+ getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/net-suite/subsidiary-selector` as const,
+ },
+ POLICY_ACCOUNTING_NETSUITE_EXPORT: {
+ route: 'settings/workspaces/:policyID/connections/netsuite/export/',
+ getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/export/` as const,
+ },
+ POLICY_ACCOUNTING_NETSUITE_PREFERRED_EXPORTER_SELECT: {
+ route: 'settings/workspaces/:policyID/connections/netsuite/export/preferred-exporter/select',
+ getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/export/preferred-exporter/select` as const,
+ },
+ POLICY_ACCOUNTING_NETSUITE_DATE_SELECT: {
+ route: 'settings/workspaces/:policyID/connections/netsuite/export/date/select',
+ getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/export/date/select` as const,
+ },
+ POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES: {
+ route: 'settings/workspaces/:policyID/connections/netsuite/export/expenses/:expenseType',
+ getRoute: (policyID: string, expenseType: ValueOf) =>
+ `settings/workspaces/${policyID}/connections/netsuite/export/expenses/${expenseType}` as const,
+ },
+ POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES_DESTINATION_SELECT: {
+ route: 'settings/workspaces/:policyID/connections/netsuite/export/expenses/:expenseType/destination/select',
+ getRoute: (policyID: string, expenseType: ValueOf) =>
+ `settings/workspaces/${policyID}/connections/netsuite/export/expenses/${expenseType}/destination/select` as const,
+ },
+ POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES_VENDOR_SELECT: {
+ route: 'settings/workspaces/:policyID/connections/netsuite/export/expenses/:expenseType/vendor/select',
+ getRoute: (policyID: string, expenseType: ValueOf) =>
+ `settings/workspaces/${policyID}/connections/netsuite/export/expenses/${expenseType}/vendor/select` as const,
+ },
+ POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES_PAYABLE_ACCOUNT_SELECT: {
+ route: 'settings/workspaces/:policyID/connections/netsuite/export/expenses/:expenseType/payable-account/select',
+ getRoute: (policyID: string, expenseType: ValueOf) =>
+ `settings/workspaces/${policyID}/connections/netsuite/export/expenses/${expenseType}/payable-account/select` as const,
+ },
+ POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES_JOURNAL_POSTING_PREFERENCE_SELECT: {
+ route: 'settings/workspaces/:policyID/connections/netsuite/export/expenses/:expenseType/journal-posting-preference/select',
+ getRoute: (policyID: string, expenseType: ValueOf) =>
+ `settings/workspaces/${policyID}/connections/netsuite/export/expenses/${expenseType}/journal-posting-preference/select` as const,
+ },
+ POLICY_ACCOUNTING_NETSUITE_RECEIVABLE_ACCOUNT_SELECT: {
+ route: 'settings/workspaces/:policyID/connections/netsuite/export/receivable-account/select',
+ getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/export/receivable-account/select` as const,
+ },
+ POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT: {
+ route: 'settings/workspaces/:policyID/connections/netsuite/export/invoice-item-preference/select',
+ getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/export/invoice-item-preference/select` as const,
+ },
+ POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_SELECT: {
+ route: 'settings/workspaces/:policyID/connections/netsuite/export/invoice-item-preference/invoice-item/select',
+ getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/export/invoice-item-preference/invoice-item/select` as const,
+ },
+ POLICY_ACCOUNTING_NETSUITE_TAX_POSTING_ACCOUNT_SELECT: {
+ route: 'settings/workspaces/:policyID/connections/netsuite/export/tax-posting-account/select',
+ getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/export/tax-posting-account/select` as const,
+ },
+ POLICY_ACCOUNTING_NETSUITE_PROVINCIAL_TAX_POSTING_ACCOUNT_SELECT: {
+ route: 'settings/workspaces/:policyID/connections/netsuite/export/provincial-tax-posting-account/select',
+ getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/export/provincial-tax-posting-account/select` as const,
+ },
+ POLICY_ACCOUNTING_SAGE_INTACCT_PREREQUISITES: {
+ route: 'settings/workspaces/:policyID/accounting/sage-intacct/prerequisites',
+ getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/sage-intacct/prerequisites` as const,
+ },
+ POLICY_ACCOUNTING_SAGE_INTACCT_ENTER_CREDENTIALS: {
+ route: 'settings/workspaces/:policyID/accounting/sage-intacct/enter-credentials',
+ getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/sage-intacct/enter-credentials` as const,
+ },
+ POLICY_ACCOUNTING_SAGE_INTACCT_EXISTING_CONNECTIONS: {
+ route: 'settings/workspaces/:policyID/accounting/sage-intacct/existing-connections',
+ getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/sage-intacct/existing-connections` as const,
+ },
} as const;
/**
diff --git a/src/SCREENS.ts b/src/SCREENS.ts
index d8a2d166099e..83a110609afd 100644
--- a/src/SCREENS.ts
+++ b/src/SCREENS.ts
@@ -41,6 +41,7 @@ const SCREENS = {
SAVE_THE_WORLD: 'Settings_TeachersUnite',
APP_DOWNLOAD_LINKS: 'Settings_App_Download_Links',
ADD_DEBIT_CARD: 'Settings_Add_Debit_Card',
+ ADD_PAYMENT_CARD_CHANGE_CURRENCY: 'Settings_Add_Payment_Card_Change_Currency',
ADD_BANK_ACCOUNT: 'Settings_Add_Bank_Account',
CLOSE: 'Settings_Close',
TWO_FACTOR_AUTH: 'Settings_TwoFactorAuth',
@@ -104,6 +105,8 @@ const SCREENS = {
SIZE: 'Settings_Subscription_Size',
ADD_PAYMENT_CARD: 'Settings_Subscription_Add_Payment_Card',
DISABLE_AUTO_RENEW_SURVEY: 'Settings_Subscription_DisableAutoRenewSurvey',
+ CHANGE_BILLING_CURRENCY: 'Settings_Subscription_Change_Billing_Currency',
+ CHANGE_PAYMENT_CURRENCY: 'Settings_Subscription_Change_Payment_Currency',
},
},
SAVE_THE_WORLD: {
@@ -269,6 +272,23 @@ const SCREENS = {
XERO_EXPORT_PREFERRED_EXPORTER_SELECT: 'Workspace_Accounting_Xero_Export_Preferred_Exporter_Select',
XERO_BILL_PAYMENT_ACCOUNT_SELECTOR: 'Policy_Accounting_Xero_Bill_Payment_Account_Selector',
XERO_EXPORT_BANK_ACCOUNT_SELECT: 'Policy_Accounting_Xero_Export_Bank_Account_Select',
+ NETSUITE_SUBSIDIARY_SELECTOR: 'Policy_Accounting_Net_Suite_Subsidiary_Selector',
+ NETSUITE_EXPORT: 'Policy_Accounting_NetSuite_Export',
+ NETSUITE_PREFERRED_EXPORTER_SELECT: 'Policy_Accounting_NetSuite_Preferred_Exporter_Select',
+ NETSUITE_DATE_SELECT: 'Policy_Accounting_NetSuite_Date_Select',
+ NETSUITE_EXPORT_EXPENSES: 'Policy_Accounting_NetSuite_Export_Expenses',
+ NETSUITE_EXPORT_EXPENSES_DESTINATION_SELECT: 'Policy_Accounting_NetSuite_Export_Expenses_Destination_Select',
+ NETSUITE_EXPORT_EXPENSES_VENDOR_SELECT: 'Policy_Accounting_NetSuite_Export_Expenses_Vendor_Select',
+ NETSUITE_EXPORT_EXPENSES_PAYABLE_ACCOUNT_SELECT: 'Policy_Accounting_NetSuite_Export_Expenses_Payable_Account_Select',
+ NETSUITE_EXPORT_EXPENSES_JOURNAL_POSTING_PREFERENCE_SELECT: 'Policy_Accounting_NetSuite_Export_Expenses_Journal_Posting_Preference_Select',
+ NETSUITE_RECEIVABLE_ACCOUNT_SELECT: 'Policy_Accounting_NetSuite_Receivable_Account_Select',
+ NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT: 'Policy_Accounting_NetSuite_Invoice_Item_Preference_Select',
+ NETSUITE_INVOICE_ITEM_SELECT: 'Policy_Accounting_NetSuite_Invoice_Item_Select',
+ NETSUITE_TAX_POSTING_ACCOUNT_SELECT: 'Policy_Accounting_NetSuite_Tax_Posting_Account_Select',
+ NETSUITE_PROVINCIAL_TAX_POSTING_ACCOUNT_SELECT: 'Policy_Accounting_NetSuite_Provincial_Tax_Posting_Account_Select',
+ SAGE_INTACCT_PREREQUISITES: 'Policy_Accounting_Sage_Intacct_Prerequisites',
+ ENTER_SAGE_INTACCT_CREDENTIALS: 'Policy_Enter_Sage_Intacct_Credentials',
+ EXISTING_SAGE_INTACCT_CONNECTIONS: 'Policy_Existing_Sage_Intacct_Connections',
},
INITIAL: 'Workspace_Initial',
PROFILE: 'Workspace_Profile',
@@ -277,6 +297,8 @@ const SCREENS = {
RATE_AND_UNIT: 'Workspace_RateAndUnit',
RATE_AND_UNIT_RATE: 'Workspace_RateAndUnit_Rate',
RATE_AND_UNIT_UNIT: 'Workspace_RateAndUnit_Unit',
+ EXPENSIFY_CARD: 'Workspace_ExpensifyCard',
+ EXPENSIFY_CARD_ISSUE_NEW: 'Workspace_ExpensifyCard_New',
BILLS: 'Workspace_Bills',
INVOICES: 'Workspace_Invoices',
TRAVEL: 'Workspace_Travel',
@@ -358,6 +380,10 @@ const SCREENS = {
ROOT: 'Welcome_Video_Root',
},
+ EXPLANATION_MODAL: {
+ ROOT: 'Explanation_Modal_Root',
+ },
+
I_KNOW_A_TEACHER: 'I_Know_A_Teacher',
INTRO_SCHOOL_PRINCIPAL: 'Intro_School_Principal',
I_AM_A_TEACHER: 'I_Am_A_Teacher',
diff --git a/src/components/AccountingConnectionConfirmationModal.tsx b/src/components/AccountingConnectionConfirmationModal.tsx
new file mode 100644
index 000000000000..c472f215b6df
--- /dev/null
+++ b/src/components/AccountingConnectionConfirmationModal.tsx
@@ -0,0 +1,30 @@
+import React from 'react';
+import useLocalize from '@hooks/useLocalize';
+import type {ConnectionName} from '@src/types/onyx/Policy';
+import ConfirmModal from './ConfirmModal';
+
+type AccountingConnectionConfirmationModalProps = {
+ integrationToConnect: ConnectionName;
+ onConfirm: () => void;
+ onCancel: () => void;
+};
+
+function AccountingConnectionConfirmationModal({integrationToConnect, onCancel, onConfirm}: AccountingConnectionConfirmationModalProps) {
+ const {translate} = useLocalize();
+
+ return (
+
+ );
+}
+
+AccountingConnectionConfirmationModal.displayName = 'AccountingConnectionConfirmationModal';
+export default AccountingConnectionConfirmationModal;
diff --git a/src/components/AddPaymentCard/PaymentCardChangeCurrencyForm.tsx b/src/components/AddPaymentCard/PaymentCardChangeCurrencyForm.tsx
new file mode 100644
index 000000000000..f967272ac63c
--- /dev/null
+++ b/src/components/AddPaymentCard/PaymentCardChangeCurrencyForm.tsx
@@ -0,0 +1,142 @@
+import React, {useCallback, useMemo, useState} from 'react';
+import {View} from 'react-native';
+import type {ValueOf} from 'type-fest';
+import FormProvider from '@components/Form/FormProvider';
+import InputWrapper from '@components/Form/InputWrapper';
+import type {FormInputErrors, FormOnyxValues} from '@components/Form/types';
+import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
+import SelectionList from '@components/SelectionList';
+import RadioListItem from '@components/SelectionList/RadioListItem';
+import TextInput from '@components/TextInput';
+import useLocalize from '@hooks/useLocalize';
+import useThemeStyles from '@hooks/useThemeStyles';
+import * as ValidationUtils from '@libs/ValidationUtils';
+import CONST from '@src/CONST';
+import ONYXKEYS from '@src/ONYXKEYS';
+import INPUT_IDS from '@src/types/form/ChangeBillingCurrencyForm';
+import PaymentCardCurrencyHeader from './PaymentCardCurrencyHeader';
+import PaymentCardCurrencyModal from './PaymentCardCurrencyModal';
+
+type PaymentCardFormProps = {
+ initialCurrency?: ValueOf;
+ isSecurityCodeRequired?: boolean;
+ changeBillingCurrency: (currency?: ValueOf, values?: FormOnyxValues) => void;
+};
+
+const REQUIRED_FIELDS = [INPUT_IDS.SECURITY_CODE];
+
+function PaymentCardChangeCurrencyForm({changeBillingCurrency, isSecurityCodeRequired, initialCurrency}: PaymentCardFormProps) {
+ const styles = useThemeStyles();
+ const {translate} = useLocalize();
+
+ const [isCurrencyModalVisible, setIsCurrencyModalVisible] = useState(false);
+ const [currency, setCurrency] = useState>(initialCurrency ?? CONST.PAYMENT_CARD_CURRENCY.USD);
+
+ const validate = (values: FormOnyxValues): FormInputErrors => {
+ const errors = ValidationUtils.getFieldRequiredErrors(values, REQUIRED_FIELDS);
+
+ if (values.securityCode && !ValidationUtils.isValidSecurityCode(values.securityCode)) {
+ errors.securityCode = translate('addPaymentCardPage.error.securityCode');
+ }
+
+ return errors;
+ };
+
+ const {sections} = useMemo(
+ () => ({
+ sections: [
+ {
+ data: (Object.keys(CONST.PAYMENT_CARD_CURRENCY) as Array>).map((currencyItem) => ({
+ text: currencyItem,
+ value: currencyItem,
+ keyForList: currencyItem,
+ isSelected: currencyItem === currency,
+ })),
+ },
+ ],
+ }),
+ [currency],
+ );
+
+ const showCurrenciesModal = useCallback(() => {
+ setIsCurrencyModalVisible(true);
+ }, []);
+
+ const changeCurrency = useCallback((selectedCurrency: ValueOf) => {
+ setCurrency(selectedCurrency);
+ setIsCurrencyModalVisible(false);
+ }, []);
+
+ const selectCurrency = useCallback(
+ (selectedCurrency: ValueOf) => {
+ setCurrency(selectedCurrency);
+ changeBillingCurrency(selectedCurrency);
+ },
+ [changeBillingCurrency],
+ );
+
+ if (isSecurityCodeRequired) {
+ return (
+ changeBillingCurrency(currency, values)}
+ submitButtonText={translate('common.save')}
+ scrollContextEnabled
+ style={[styles.mh5, styles.flexGrow1]}
+ >
+
+ <>
+
+
+
+
+ >
+ >}
+ currentCurrency={currency}
+ onCurrencyChange={changeCurrency}
+ onClose={() => setIsCurrencyModalVisible(false)}
+ />
+
+ );
+ }
+
+ return (
+
+ }
+ initiallyFocusedOptionKey={currency}
+ containerStyle={[styles.mhn5]}
+ sections={sections}
+ onSelectRow={(option) => {
+ selectCurrency(option.value);
+ }}
+ showScrollIndicator
+ shouldStopPropagation
+ shouldUseDynamicMaxToRenderPerBatch
+ ListItem={RadioListItem}
+ />
+
+ );
+}
+
+PaymentCardChangeCurrencyForm.displayName = 'PaymentCardChangeCurrencyForm';
+
+export default PaymentCardChangeCurrencyForm;
diff --git a/src/components/AddPaymentCard/PaymentCardCurrencyHeader.tsx b/src/components/AddPaymentCard/PaymentCardCurrencyHeader.tsx
new file mode 100644
index 000000000000..e5142aec8efc
--- /dev/null
+++ b/src/components/AddPaymentCard/PaymentCardCurrencyHeader.tsx
@@ -0,0 +1,28 @@
+import React from 'react';
+import {View} from 'react-native';
+import Text from '@components/Text';
+import TextLink from '@components/TextLink';
+import useLocalize from '@hooks/useLocalize';
+import useThemeStyles from '@hooks/useThemeStyles';
+import CONST from '@src/CONST';
+
+function PaymentCardCurrencyHeader({isSectionList}: {isSectionList?: boolean}) {
+ const styles = useThemeStyles();
+ const {translate} = useLocalize();
+ return (
+
+
+ {`${translate('billingCurrency.note')}`}{' '}
+ {`${translate('billingCurrency.noteLink')}`}{' '}
+ {`${translate('billingCurrency.noteDetails')}`}
+
+
+ );
+}
+
+PaymentCardCurrencyHeader.displayName = 'PaymentCardCurrencyHeader';
+
+export default PaymentCardCurrencyHeader;
diff --git a/src/components/AddPaymentCard/PaymentCardCurrencyModal.tsx b/src/components/AddPaymentCard/PaymentCardCurrencyModal.tsx
index 60fa838b0577..c3c38c4aec72 100644
--- a/src/components/AddPaymentCard/PaymentCardCurrencyModal.tsx
+++ b/src/components/AddPaymentCard/PaymentCardCurrencyModal.tsx
@@ -1,4 +1,5 @@
import React, {useMemo} from 'react';
+import type {ValueOf} from 'type-fest';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import Modal from '@components/Modal';
import ScreenWrapper from '@components/ScreenWrapper';
@@ -13,20 +14,20 @@ type PaymentCardCurrencyModalProps = {
/** Whether the modal is visible */
isVisible: boolean;
- /** The list of years to render */
- currencies: Array;
+ /** The list of currencies to render */
+ currencies: Array>;
- /** Currently selected year */
- currentCurrency: keyof typeof CONST.CURRENCY;
+ /** Currently selected currency */
+ currentCurrency: ValueOf;
- /** Function to call when the user selects a year */
- onCurrencyChange?: (currency: keyof typeof CONST.CURRENCY) => void;
+ /** Function to call when the user selects a currency */
+ onCurrencyChange?: (currency: ValueOf) => void;
- /** Function to call when the user closes the year picker */
+ /** Function to call when the user closes the currency picker */
onClose?: () => void;
};
-function PaymentCardCurrencyModal({isVisible, currencies, currentCurrency = CONST.CURRENCY.USD, onCurrencyChange, onClose}: PaymentCardCurrencyModalProps) {
+function PaymentCardCurrencyModal({isVisible, currencies, currentCurrency = CONST.PAYMENT_CARD_CURRENCY.USD, onCurrencyChange, onClose}: PaymentCardCurrencyModalProps) {
const {isSmallScreenWidth} = useWindowDimensions();
const styles = useThemeStyles();
const {translate} = useLocalize();
@@ -57,7 +58,7 @@ function PaymentCardCurrencyModal({isVisible, currencies, currentCurrency = CONS
useNativeDriver
>
, currency?: ValueOf) => void;
+ addPaymentCard: (values: FormOnyxValues, currency?: ValueOf) => void;
submitButtonText: string;
/** Custom content to display in the footer after card form */
footerContent?: ReactNode;
/** Custom content to display in the header before card form */
headerContent?: ReactNode;
+ /** object to get currency route details from */
+ currencySelectorRoute?: typeof ROUTES.SETTINGS_SUBSCRIPTION_CHANGE_PAYMENT_CURRENCY;
};
function IAcceptTheLabel() {
@@ -61,6 +62,7 @@ const REQUIRED_FIELDS = [
INPUT_IDS.SECURITY_CODE,
INPUT_IDS.ADDRESS_ZIP_CODE,
INPUT_IDS.ADDRESS_STATE,
+ INPUT_IDS.CURRENCY,
];
const CARD_TYPES = {
@@ -127,42 +129,44 @@ function PaymentCardForm({
showStateSelector,
footerContent,
headerContent,
+ currencySelectorRoute,
}: PaymentCardFormProps) {
const styles = useThemeStyles();
+ const [data] = useOnyx(ONYXKEYS.FORMS.ADD_PAYMENT_CARD_FORM);
+
const {translate} = useLocalize();
const route = useRoute();
const label = CARD_LABELS[isDebitCard ? CARD_TYPES.DEBIT_CARD : CARD_TYPES.PAYMENT_CARD];
const cardNumberRef = useRef(null);
- const [isCurrencyModalVisible, setIsCurrencyModalVisible] = useState(false);
- const [currency, setCurrency] = useState(CONST.CURRENCY.USD);
+ const [cardNumber, setCardNumber] = useState('');
- const validate = (values: FormOnyxValues): FormInputErrors => {
+ const validate = (values: FormOnyxValues): FormInputErrors => {
const errors = ValidationUtils.getFieldRequiredErrors(values, REQUIRED_FIELDS);
if (values.nameOnCard && !ValidationUtils.isValidLegalName(values.nameOnCard)) {
- errors.nameOnCard = translate('addDebitCardPage.error.invalidName');
+ errors.nameOnCard = translate(label.error.nameOnCard);
}
if (values.cardNumber && !ValidationUtils.isValidDebitCard(values.cardNumber.replace(/ /g, ''))) {
- errors.cardNumber = translate('addDebitCardPage.error.debitCardNumber');
+ errors.cardNumber = translate(label.error.cardNumber);
}
if (values.expirationDate && !ValidationUtils.isValidExpirationDate(values.expirationDate)) {
- errors.expirationDate = translate('addDebitCardPage.error.expirationDate');
+ errors.expirationDate = translate(label.error.expirationDate);
}
if (values.securityCode && !ValidationUtils.isValidSecurityCode(values.securityCode)) {
- errors.securityCode = translate('addDebitCardPage.error.securityCode');
+ errors.securityCode = translate(label.error.securityCode);
}
if (values.addressStreet && !ValidationUtils.isValidAddress(values.addressStreet)) {
- errors.addressStreet = translate('addDebitCardPage.error.addressStreet');
+ errors.addressStreet = translate(label.error.addressStreet);
}
if (values.addressZipCode && !ValidationUtils.isValidZipCode(values.addressZipCode)) {
- errors.addressZipCode = translate('addDebitCardPage.error.addressZipCode');
+ errors.addressZipCode = translate(label.error.addressZipCode);
}
if (!values.acceptTerms) {
@@ -172,13 +176,21 @@ function PaymentCardForm({
return errors;
};
- const showCurrenciesModal = useCallback(() => {
- setIsCurrencyModalVisible(true);
- }, []);
+ const onChangeCardNumber = useCallback((newValue: string) => {
+ // replace all characters that are not spaces or digits
+ let validCardNumber = newValue.replace(/[^\d ]/g, '');
+
+ // gets only the first 16 digits if the inputted number have more digits than that
+ validCardNumber = validCardNumber.match(/(?:\d *){1,16}/)?.[0] ?? '';
- const changeCurrency = useCallback((newCurrency: keyof typeof CONST.CURRENCY) => {
- setCurrency(newCurrency);
- setIsCurrencyModalVisible(false);
+ // add the spacing between every 4 digits
+ validCardNumber =
+ validCardNumber
+ .replace(/ /g, '')
+ .match(/.{1,4}/g)
+ ?.join(' ') ?? '';
+
+ setCardNumber(validCardNumber);
}, []);
if (!shouldShowPaymentCardForm) {
@@ -189,9 +201,9 @@ function PaymentCardForm({
<>
{headerContent}
addPaymentCard(formData, currency)}
+ onSubmit={addPaymentCard}
submitButtonText={submitButtonText}
scrollContextEnabled
style={[styles.mh5, styles.flexGrow1]}
@@ -199,15 +211,19 @@ function PaymentCardForm({
)}
{!!showCurrencyField && (
-
- {(isHovered) => (
-
- )}
-
+
+
+
)}
{!!showAcceptTerms && (
@@ -298,19 +309,11 @@ function PaymentCardForm({
'common.privacyPolicy',
)}`}
inputID={INPUT_IDS.ACCEPT_TERMS}
- defaultValue={false}
+ defaultValue={!!data?.acceptTerms}
LabelComponent={IAcceptTheLabel}
/>
)}
-
- }
- currentCurrency={currency}
- onCurrencyChange={changeCurrency}
- onClose={() => setIsCurrencyModalVisible(false)}
- />
{footerContent}
>
diff --git a/src/components/AddPaymentMethodMenu.tsx b/src/components/AddPaymentMethodMenu.tsx
index 734e8affa9ea..325bab091bec 100644
--- a/src/components/AddPaymentMethodMenu.tsx
+++ b/src/components/AddPaymentMethodMenu.tsx
@@ -11,7 +11,6 @@ import ONYXKEYS from '@src/ONYXKEYS';
import type {AnchorPosition} from '@src/styles';
import type {Report, Session} from '@src/types/onyx';
import type AnchorAlignment from '@src/types/utils/AnchorAlignment';
-import type {EmptyObject} from '@src/types/utils/EmptyObject';
import * as Expensicons from './Icon/Expensicons';
import type {PaymentMethod} from './KYCWall/types';
import PopoverMenu from './PopoverMenu';
@@ -32,7 +31,7 @@ type AddPaymentMethodMenuProps = AddPaymentMethodMenuOnyxProps & {
onItemSelected: (paymentMethod: PaymentMethod) => void;
/** The IOU/Expense report we are paying */
- iouReport?: OnyxEntry | EmptyObject;
+ iouReport?: OnyxEntry;
/** Anchor position for the AddPaymentMenu. */
anchorPosition: AnchorPosition;
@@ -65,9 +64,9 @@ function AddPaymentMethodMenu({
// Users can choose to pay with business bank account in case of Expense reports or in case of P2P IOU report
// which then starts a bottom up flow and creates a Collect workspace where the payer is an admin and payee is an employee.
- const isIOUReport = ReportUtils.isIOUReport(iouReport ?? {});
+ const isIOUReport = ReportUtils.isIOUReport(iouReport);
const canUseBusinessBankAccount =
- ReportUtils.isExpenseReport(iouReport ?? {}) || (isIOUReport && !ReportActionsUtils.hasRequestFromCurrentAccount(iouReport?.reportID ?? '-1', session?.accountID ?? -1));
+ ReportUtils.isExpenseReport(iouReport) || (isIOUReport && !ReportActionsUtils.hasRequestFromCurrentAccount(iouReport?.reportID ?? '-1', session?.accountID ?? -1));
const canUsePersonalBankAccount = shouldShowPersonalBankAccountOption || isIOUReport;
diff --git a/src/components/AttachmentModal.tsx b/src/components/AttachmentModal.tsx
index 19bad0fbdf5a..df027ed6edb4 100644
--- a/src/components/AttachmentModal.tsx
+++ b/src/components/AttachmentModal.tsx
@@ -26,7 +26,6 @@ import type {TranslationPaths} from '@src/languages/types';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import type * as OnyxTypes from '@src/types/onyx';
-import type {EmptyObject} from '@src/types/utils/EmptyObject';
import {isEmptyObject} from '@src/types/utils/EmptyObject';
import type ModalType from '@src/types/utils/ModalType';
import AttachmentCarousel from './Attachments/AttachmentCarousel';
@@ -99,7 +98,7 @@ type AttachmentModalProps = AttachmentModalOnyxProps & {
headerTitle?: string;
/** The report that has this attachment */
- report?: OnyxEntry | EmptyObject;
+ report?: OnyxEntry;
/** The type of the attachment */
type?: ValueOf;
diff --git a/src/components/Composer/index.tsx b/src/components/Composer/index.tsx
index 3a8a4e724948..f4a5174c2602 100755
--- a/src/components/Composer/index.tsx
+++ b/src/components/Composer/index.tsx
@@ -5,7 +5,7 @@ import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';
import {flushSync} from 'react-dom';
// eslint-disable-next-line no-restricted-imports
import type {DimensionValue, NativeSyntheticEvent, Text as RNText, TextInput, TextInputKeyPressEventData, TextInputSelectionChangeEventData, TextStyle} from 'react-native';
-import {StyleSheet, View} from 'react-native';
+import {DeviceEventEmitter, StyleSheet, View} from 'react-native';
import type {AnimatedMarkdownTextInputRef} from '@components/RNMarkdownTextInput';
import RNMarkdownTextInput from '@components/RNMarkdownTextInput';
import Text from '@components/Text';
@@ -74,7 +74,7 @@ function Composer(
},
isReportActionCompose = false,
isComposerFullSize = false,
- shouldContainScroll = false,
+ shouldContainScroll = true,
isGroupPolicyReport = false,
...props
}: ComposerProps,
@@ -105,6 +105,7 @@ function Composer(
const [isRendered, setIsRendered] = useState(false);
const isScrollBarVisible = useIsScrollBarVisible(textInput, value ?? '');
const [prevScroll, setPrevScroll] = useState();
+ const isReportFlatListScrolling = useRef(false);
useEffect(() => {
if (!shouldClear) {
@@ -249,6 +250,29 @@ function Composer(
};
}, []);
+ useEffect(() => {
+ const scrollingListener = DeviceEventEmitter.addListener(CONST.EVENTS.SCROLLING, (scrolling) => {
+ isReportFlatListScrolling.current = scrolling;
+ });
+
+ return () => scrollingListener.remove();
+ }, []);
+
+ useEffect(() => {
+ const handleWheel = (e: MouseEvent) => {
+ if (isReportFlatListScrolling.current) {
+ e.preventDefault();
+ return;
+ }
+ e.stopPropagation();
+ };
+ textInput.current?.addEventListener('wheel', handleWheel, {passive: false});
+
+ return () => {
+ textInput.current?.removeEventListener('wheel', handleWheel);
+ };
+ }, []);
+
useEffect(() => {
if (!textInput.current || prevScroll === undefined) {
return;
diff --git a/src/components/ConnectToNetSuiteButton/index.tsx b/src/components/ConnectToNetSuiteButton/index.tsx
new file mode 100644
index 000000000000..fc948503a127
--- /dev/null
+++ b/src/components/ConnectToNetSuiteButton/index.tsx
@@ -0,0 +1,54 @@
+import React, {useState} from 'react';
+import AccountingConnectionConfirmationModal from '@components/AccountingConnectionConfirmationModal';
+import Button from '@components/Button';
+import useLocalize from '@hooks/useLocalize';
+import useNetwork from '@hooks/useNetwork';
+import useThemeStyles from '@hooks/useThemeStyles';
+import {removePolicyConnection} from '@libs/actions/connections';
+import Navigation from '@libs/Navigation/Navigation';
+import CONST from '@src/CONST';
+import ROUTES from '@src/ROUTES';
+import type {ConnectToNetSuiteButtonProps} from './types';
+
+function ConnectToNetSuiteButton({policyID, shouldDisconnectIntegrationBeforeConnecting, integrationToDisconnect}: ConnectToNetSuiteButtonProps) {
+ const styles = useThemeStyles();
+ const {translate} = useLocalize();
+ const {isOffline} = useNetwork();
+
+ const [isDisconnectModalOpen, setIsDisconnectModalOpen] = useState(false);
+
+ return (
+ <>
+
diff --git a/src/components/SettlementButton.tsx b/src/components/SettlementButton.tsx
index 2b1cd0729c0b..d3916220ca88 100644
--- a/src/components/SettlementButton.tsx
+++ b/src/components/SettlementButton.tsx
@@ -16,7 +16,6 @@ import type {ButtonSizeValue} from '@src/styles/utils/types';
import type {LastPaymentMethod, Policy, Report} from '@src/types/onyx';
import type {PaymentMethodType} from '@src/types/onyx/OriginalMessage';
import type AnchorAlignment from '@src/types/utils/AnchorAlignment';
-import type {EmptyObject} from '@src/types/utils/EmptyObject';
import {isEmptyObject} from '@src/types/utils/EmptyObject';
import ButtonWithDropdownMenu from './ButtonWithDropdownMenu';
import type {PaymentType} from './ButtonWithDropdownMenu/types';
@@ -55,7 +54,7 @@ type SettlementButtonProps = SettlementButtonOnyxProps & {
chatReportID?: string;
/** The IOU/Expense report we are paying */
- iouReport?: OnyxEntry | EmptyObject;
+ iouReport?: OnyxEntry;
/** Should we show the payment options? */
shouldHidePaymentOptions?: boolean;
@@ -121,9 +120,9 @@ function SettlementButton({
chatReportID = '',
currency = CONST.CURRENCY.USD,
enablePaymentsRoute,
- // The "iouReport" and "nvpLastPaymentMethod" objects needs to be stable to prevent the "useMemo"
- // hook from being recreated unnecessarily, hence the use of CONST.EMPTY_ARRAY and CONST.EMPTY_OBJECT
- iouReport = CONST.EMPTY_OBJECT,
+ iouReport,
+ // The "nvpLastPaymentMethod" object needs to be stable to prevent the "useMemo"
+ // hook from being recreated unnecessarily, hence the use of CONST.EMPTY_OBJECT
nvpLastPaymentMethod = CONST.EMPTY_OBJECT,
isDisabled = false,
isLoading = false,
@@ -148,7 +147,7 @@ function SettlementButton({
const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${chatReportID || -1}`);
const isInvoiceReport = (!isEmptyObject(iouReport) && ReportUtils.isInvoiceReport(iouReport)) || false;
const isPaidGroupPolicy = ReportUtils.isPaidGroupPolicyExpenseChat(chatReport);
- const shouldShowPaywithExpensifyOption = !isPaidGroupPolicy || (!shouldHidePaymentOptions && ReportUtils.isPayer(session, iouReport as OnyxEntry));
+ const shouldShowPaywithExpensifyOption = !isPaidGroupPolicy || (!shouldHidePaymentOptions && ReportUtils.isPayer(session, iouReport));
const shouldShowPayElsewhereOption = (!isPaidGroupPolicy || policy?.reimbursementChoice === CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_MANUAL) && !isInvoiceReport;
const paymentButtonOptions = useMemo(() => {
const buttonOptions = [];
@@ -238,7 +237,7 @@ function SettlementButton({
if (confirmApproval) {
confirmApproval();
} else {
- IOU.approveMoneyRequest(iouReport ?? {});
+ IOU.approveMoneyRequest(iouReport);
}
return;
}
diff --git a/src/components/Switch.tsx b/src/components/Switch.tsx
index 2e29008cd9ec..1ddc65bbd0fc 100644
--- a/src/components/Switch.tsx
+++ b/src/components/Switch.tsx
@@ -23,6 +23,9 @@ type SwitchProps = {
/** Whether to show the lock icon even if the switch is enabled */
showLockIcon?: boolean;
+
+ /** Callback to fire when the switch is toggled in disabled state */
+ disabledAction?: () => void;
};
const OFFSET_X = {
@@ -30,13 +33,17 @@ const OFFSET_X = {
ON: 20,
};
-function Switch({isOn, onToggle, accessibilityLabel, disabled, showLockIcon}: SwitchProps) {
+function Switch({isOn, onToggle, accessibilityLabel, disabled, showLockIcon, disabledAction}: SwitchProps) {
const styles = useThemeStyles();
const offsetX = useRef(new Animated.Value(isOn ? OFFSET_X.ON : OFFSET_X.OFF));
const theme = useTheme();
const handleSwitchPress = () => {
InteractionManager.runAfterInteractions(() => {
+ if (disabled) {
+ disabledAction?.();
+ return;
+ }
onToggle(!isOn);
});
};
@@ -51,7 +58,7 @@ function Switch({isOn, onToggle, accessibilityLabel, disabled, showLockIcon}: Sw
return (
;
-
type HOCProps = {
- currentUserPersonalDetails: CurrentUserPersonalDetails;
+ currentUserPersonalDetails: PersonalDetails;
};
type WithCurrentUserPersonalDetailsProps = HOCProps;
@@ -32,4 +30,4 @@ export default function React.ComponentType) {
+ return freezeScreenWithLazyLoading(lazyComponent);
+}
diff --git a/src/components/withPrepareCentralPaneScreen/index.tsx b/src/components/withPrepareCentralPaneScreen/index.tsx
new file mode 100644
index 000000000000..f53368188b3d
--- /dev/null
+++ b/src/components/withPrepareCentralPaneScreen/index.tsx
@@ -0,0 +1,9 @@
+import type React from 'react';
+
+/**
+ * This higher-order function is dependent on the platform. On native platforms, screens that aren't already displayed in the navigation stack should be frozen to prevent unnecessary rendering.
+ * It's handled this way only on mobile platforms because on the web, more than one screen is displayed in a wide layout, so these screens shouldn't be frozen.
+ */
+export default function withPrepareCentralPaneScreen(lazyComponent: () => React.ComponentType) {
+ return lazyComponent;
+}
diff --git a/src/hooks/useActiveRoute.ts b/src/hooks/useActiveRoute.ts
index afccc28f8243..812e7c634ee8 100644
--- a/src/hooks/useActiveRoute.ts
+++ b/src/hooks/useActiveRoute.ts
@@ -1,8 +1,8 @@
import {useContext} from 'react';
import ActiveRouteContext from '@libs/Navigation/AppNavigator/Navigators/ActiveRouteContext';
-import type {CentralPaneNavigatorParamList, NavigationPartialRoute} from '@libs/Navigation/types';
+import type {AuthScreensParamList, NavigationPartialRoute} from '@libs/Navigation/types';
-function useActiveRoute(): NavigationPartialRoute | undefined {
+function useActiveRoute(): NavigationPartialRoute | undefined {
return useContext(ActiveRouteContext);
}
diff --git a/src/hooks/useCurrentUserPersonalDetails.ts b/src/hooks/useCurrentUserPersonalDetails.ts
index 447e441fae80..37fbaeab4ccb 100644
--- a/src/hooks/useCurrentUserPersonalDetails.ts
+++ b/src/hooks/useCurrentUserPersonalDetails.ts
@@ -1,19 +1,13 @@
import {useMemo} from 'react';
import {usePersonalDetails, useSession} from '@components/OnyxProvider';
-import CONST from '@src/CONST';
import type {PersonalDetails} from '@src/types/onyx';
-type CurrentUserPersonalDetails = PersonalDetails | Record;
-
function useCurrentUserPersonalDetails() {
const session = useSession();
- const personalDetails = usePersonalDetails() ?? CONST.EMPTY_OBJECT;
+ const personalDetails = usePersonalDetails();
const accountID = session?.accountID ?? -1;
const accountPersonalDetails = personalDetails?.[accountID];
- const currentUserPersonalDetails: CurrentUserPersonalDetails = useMemo(
- () => (accountPersonalDetails ? {...accountPersonalDetails, accountID} : {}) as CurrentUserPersonalDetails,
- [accountPersonalDetails, accountID],
- );
+ const currentUserPersonalDetails: PersonalDetails = useMemo(() => ({...accountPersonalDetails, accountID}), [accountPersonalDetails, accountID]);
return currentUserPersonalDetails;
}
diff --git a/src/hooks/useHybridAppMiddleware.ts b/src/hooks/useHybridAppMiddleware.ts
new file mode 100644
index 000000000000..18ebd9730630
--- /dev/null
+++ b/src/hooks/useHybridAppMiddleware.ts
@@ -0,0 +1,11 @@
+import {useContext} from 'react';
+import {HybridAppMiddlewareContext} from '@components/HybridAppMiddleware';
+
+type SplashScreenHiddenContextType = {isSplashHidden: boolean};
+
+export default function useHybridAppMiddleware() {
+ const {navigateToExitUrl, showSplashScreenOnNextStart} = useContext(HybridAppMiddlewareContext);
+ return {navigateToExitUrl, showSplashScreenOnNextStart};
+}
+
+export type {SplashScreenHiddenContextType};
diff --git a/src/hooks/useIsSplashHidden.ts b/src/hooks/useIsSplashHidden.ts
deleted file mode 100644
index 7563d388416c..000000000000
--- a/src/hooks/useIsSplashHidden.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import {useContext} from 'react';
-import {SplashScreenHiddenContext} from '@src/Expensify';
-
-type SplashScreenHiddenContextType = {isSplashHidden: boolean};
-
-export default function useIsSplashHidden() {
- const {isSplashHidden} = useContext(SplashScreenHiddenContext) as SplashScreenHiddenContextType;
- return isSplashHidden;
-}
-
-export type {SplashScreenHiddenContextType};
diff --git a/src/hooks/useKeyboardShortcut.ts b/src/hooks/useKeyboardShortcut.ts
index 6bf8b2c52bc3..1c5bbc426ef2 100644
--- a/src/hooks/useKeyboardShortcut.ts
+++ b/src/hooks/useKeyboardShortcut.ts
@@ -26,7 +26,7 @@ type KeyboardShortcutConfig = {
* Register a keyboard shortcut handler.
* Recommendation: To ensure stability, wrap the `callback` function with the useCallback hook before using it with this hook.
*/
-export default function useKeyboardShortcut(shortcut: Shortcut, callback: (e?: GestureResponderEvent | KeyboardEvent) => void, config: KeyboardShortcutConfig | Record = {}) {
+export default function useKeyboardShortcut(shortcut: Shortcut, callback: (e?: GestureResponderEvent | KeyboardEvent) => void, config: KeyboardShortcutConfig = {}) {
const {
captureOnInputs = true,
shouldBubble = false,
diff --git a/src/hooks/useLastAccessedReportID.ts b/src/hooks/useLastAccessedReportID.ts
new file mode 100644
index 000000000000..16a4a6bc2a31
--- /dev/null
+++ b/src/hooks/useLastAccessedReportID.ts
@@ -0,0 +1,148 @@
+import {useCallback, useSyncExternalStore} from 'react';
+import type {OnyxCollection} from 'react-native-onyx';
+import Onyx from 'react-native-onyx';
+import {getPolicyEmployeeListByIdWithoutCurrentUser} from '@libs/PolicyUtils';
+import * as ReportUtils from '@libs/ReportUtils';
+import ONYXKEYS from '@src/ONYXKEYS';
+import type {Policy, Report, ReportMetadata} from '@src/types/onyx';
+import useActiveWorkspace from './useActiveWorkspace';
+import usePermissions from './usePermissions';
+
+/*
+ * This hook is used to get the lastAccessedReportID.
+ * This is a piece of data that's derived from a lot of frequently-changing Onyx values: (reports, reportMetadata, policies, etc...)
+ * We don't want any component that needs access to the lastAccessedReportID to have to re-render any time any of those values change, just when the lastAccessedReportID changes.
+ * So we have a custom implementation in this file that leverages useSyncExternalStore to connect to a "store" of multiple Onyx values, and re-render only when the one derived value changes.
+ */
+
+const subscribers: Array<() => void> = [];
+
+let reports: OnyxCollection = {};
+let reportMetadata: OnyxCollection = {};
+let policies: OnyxCollection = {};
+let accountID: number | undefined;
+let isFirstTimeNewExpensifyUser = false;
+
+let reportsConnection: number;
+let reportMetadataConnection: number;
+let policiesConnection: number;
+let accountIDConnection: number;
+let isFirstTimeNewExpensifyUserConnection: number;
+
+function notifySubscribers() {
+ subscribers.forEach((subscriber) => subscriber());
+}
+
+function subscribeToOnyxData() {
+ // eslint-disable-next-line rulesdir/prefer-onyx-connect-in-libs
+ reportsConnection = Onyx.connect({
+ key: ONYXKEYS.COLLECTION.REPORT,
+ waitForCollectionCallback: true,
+ callback: (value) => {
+ reports = value;
+ notifySubscribers();
+ },
+ });
+ // eslint-disable-next-line rulesdir/prefer-onyx-connect-in-libs
+ reportMetadataConnection = Onyx.connect({
+ key: ONYXKEYS.COLLECTION.REPORT_METADATA,
+ waitForCollectionCallback: true,
+ callback: (value) => {
+ reportMetadata = value;
+ notifySubscribers();
+ },
+ });
+ // eslint-disable-next-line rulesdir/prefer-onyx-connect-in-libs
+ policiesConnection = Onyx.connect({
+ key: ONYXKEYS.COLLECTION.POLICY,
+ waitForCollectionCallback: true,
+ callback: (value) => {
+ policies = value;
+ notifySubscribers();
+ },
+ });
+ // eslint-disable-next-line rulesdir/prefer-onyx-connect-in-libs
+ accountIDConnection = Onyx.connect({
+ key: ONYXKEYS.SESSION,
+ callback: (value) => {
+ accountID = value?.accountID;
+ notifySubscribers();
+ },
+ });
+ // eslint-disable-next-line rulesdir/prefer-onyx-connect-in-libs
+ isFirstTimeNewExpensifyUserConnection = Onyx.connect({
+ key: ONYXKEYS.NVP_IS_FIRST_TIME_NEW_EXPENSIFY_USER,
+ callback: (value) => {
+ isFirstTimeNewExpensifyUser = !!value;
+ notifySubscribers();
+ },
+ });
+}
+
+function unsubscribeFromOnyxData() {
+ if (reportsConnection) {
+ Onyx.disconnect(reportsConnection);
+ reportsConnection = 0;
+ }
+ if (reportMetadataConnection) {
+ Onyx.disconnect(reportMetadataConnection);
+ reportMetadataConnection = 0;
+ }
+ if (policiesConnection) {
+ Onyx.disconnect(policiesConnection);
+ policiesConnection = 0;
+ }
+ if (accountIDConnection) {
+ Onyx.disconnect(accountIDConnection);
+ accountIDConnection = 0;
+ }
+ if (isFirstTimeNewExpensifyUserConnection) {
+ Onyx.disconnect(isFirstTimeNewExpensifyUserConnection);
+ isFirstTimeNewExpensifyUserConnection = 0;
+ }
+}
+
+function removeSubscriber(subscriber: () => void) {
+ const subscriberIndex = subscribers.indexOf(subscriber);
+ if (subscriberIndex < 0) {
+ return;
+ }
+ subscribers.splice(subscriberIndex, 1);
+ if (subscribers.length === 0) {
+ unsubscribeFromOnyxData();
+ }
+}
+
+function addSubscriber(subscriber: () => void) {
+ subscribers.push(subscriber);
+ if (!reportsConnection) {
+ subscribeToOnyxData();
+ }
+ return () => removeSubscriber(subscriber);
+}
+
+/**
+ * Get the last accessed reportID.
+ */
+export default function useLastAccessedReportID(shouldOpenOnAdminRoom: boolean) {
+ const {canUseDefaultRooms} = usePermissions();
+ const {activeWorkspaceID} = useActiveWorkspace();
+
+ const getSnapshot = useCallback(() => {
+ const policyMemberAccountIDs = getPolicyEmployeeListByIdWithoutCurrentUser(policies, activeWorkspaceID, accountID);
+ return ReportUtils.findLastAccessedReport(
+ reports,
+ !canUseDefaultRooms,
+ policies,
+ isFirstTimeNewExpensifyUser,
+ shouldOpenOnAdminRoom,
+ reportMetadata,
+ activeWorkspaceID,
+ policyMemberAccountIDs,
+ )?.reportID;
+ }, [activeWorkspaceID, canUseDefaultRooms, shouldOpenOnAdminRoom]);
+
+ // We need access to all the data from these Onyx.connect calls, but we don't want to re-render the consuming component
+ // unless the derived value (lastAccessedReportID) changes. To address these, we'll wrap everything with useSyncExternalStore
+ return useSyncExternalStore(addSubscriber, getSnapshot);
+}
diff --git a/src/hooks/usePaginatedReportActions.ts b/src/hooks/usePaginatedReportActions.ts
new file mode 100644
index 000000000000..44a82253b7c0
--- /dev/null
+++ b/src/hooks/usePaginatedReportActions.ts
@@ -0,0 +1,33 @@
+import {useMemo} from 'react';
+import {useOnyx} from 'react-native-onyx';
+import * as ReportActionsUtils from '@libs/ReportActionsUtils';
+import ONYXKEYS from '@src/ONYXKEYS';
+
+/**
+ * Get the longest continuous chunk of reportActions including the linked reportAction. If not linking to a specific action, returns the continuous chunk of newest reportActions.
+ */
+function usePaginatedReportActions(reportID?: string, reportActionID?: string) {
+ // Use `||` instead of `??` to handle empty string.
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
+ const reportIDWithDefault = reportID || '-1';
+ const [sortedAllReportActions = []] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportIDWithDefault}`, {
+ canEvict: false,
+ selector: (allReportActions) => ReportActionsUtils.getSortedReportActionsForDisplay(allReportActions, true),
+ });
+
+ const reportActions = useMemo(() => {
+ if (!sortedAllReportActions.length) {
+ return [];
+ }
+ return ReportActionsUtils.getContinuousReportActionChain(sortedAllReportActions, reportActionID);
+ }, [reportActionID, sortedAllReportActions]);
+
+ const linkedAction = useMemo(() => sortedAllReportActions.find((obj) => String(obj.reportActionID) === String(reportActionID)), [reportActionID, sortedAllReportActions]);
+
+ return {
+ reportActions,
+ linkedAction,
+ };
+}
+
+export default usePaginatedReportActions;
diff --git a/src/hooks/useSplashScreen.ts b/src/hooks/useSplashScreen.ts
new file mode 100644
index 000000000000..8838ac1289c7
--- /dev/null
+++ b/src/hooks/useSplashScreen.ts
@@ -0,0 +1,11 @@
+import {useContext} from 'react';
+import {SplashScreenHiddenContext} from '@src/Expensify';
+
+type SplashScreenHiddenContextType = {isSplashHidden: boolean; setIsSplashHidden: React.Dispatch>};
+
+export default function useSplashScreen() {
+ const {isSplashHidden, setIsSplashHidden} = useContext(SplashScreenHiddenContext) as SplashScreenHiddenContextType;
+ return {isSplashHidden, setIsSplashHidden};
+}
+
+export type {SplashScreenHiddenContextType};
diff --git a/src/hooks/useSubscriptionPossibleCostSavings.ts b/src/hooks/useSubscriptionPossibleCostSavings.ts
new file mode 100644
index 000000000000..ef92009549fe
--- /dev/null
+++ b/src/hooks/useSubscriptionPossibleCostSavings.ts
@@ -0,0 +1,38 @@
+import {useOnyx} from 'react-native-onyx';
+import CONST from '@src/CONST';
+import ONYXKEYS from '@src/ONYXKEYS';
+import usePreferredCurrency from './usePreferredCurrency';
+import useSubscriptionPlan from './useSubscriptionPlan';
+
+const POSSIBLE_COST_SAVINGS = {
+ [CONST.PAYMENT_CARD_CURRENCY.USD]: {
+ [CONST.POLICY.TYPE.TEAM]: 1000,
+ [CONST.POLICY.TYPE.CORPORATE]: 1800,
+ },
+ [CONST.PAYMENT_CARD_CURRENCY.AUD]: {
+ [CONST.POLICY.TYPE.TEAM]: 1400,
+ [CONST.POLICY.TYPE.CORPORATE]: 3000,
+ },
+ [CONST.PAYMENT_CARD_CURRENCY.GBP]: {
+ [CONST.POLICY.TYPE.TEAM]: 800,
+ [CONST.POLICY.TYPE.CORPORATE]: 1400,
+ },
+ [CONST.PAYMENT_CARD_CURRENCY.NZD]: {
+ [CONST.POLICY.TYPE.TEAM]: 1600,
+ [CONST.POLICY.TYPE.CORPORATE]: 3200,
+ },
+} as const;
+
+function useSubscriptionPossibleCostSavings(): number {
+ const preferredCurrency = usePreferredCurrency();
+ const subscriptionPlan = useSubscriptionPlan();
+ const [privateSubscription] = useOnyx(ONYXKEYS.NVP_PRIVATE_SUBSCRIPTION);
+
+ if (!subscriptionPlan || !privateSubscription?.type) {
+ return 0;
+ }
+
+ return POSSIBLE_COST_SAVINGS[preferredCurrency][subscriptionPlan];
+}
+
+export default useSubscriptionPossibleCostSavings;
diff --git a/src/languages/en.ts b/src/languages/en.ts
index be0734090888..0340bac7ffbc 100755
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -12,10 +12,14 @@ import type {
BeginningOfChatHistoryAnnounceRoomPartTwo,
BeginningOfChatHistoryDomainRoomPartOneParams,
CanceledRequestParams,
+ ChangeFieldParams,
+ ChangePolicyParams,
+ ChangeTypeParams,
CharacterLimitParams,
ConfirmThatParams,
DateShouldBeAfterParams,
DateShouldBeBeforeParams,
+ DelegateSubmitParams,
DeleteActionParams,
DeleteConfirmationParams,
DidSplitAmountMessageParams,
@@ -23,15 +27,20 @@ import type {
EditActionParams,
ElectronicFundsParams,
EnterMagicCodeParams,
+ ExportedToIntegrationParams,
FormattedMaxLengthParams,
+ ForwardedParams,
GoBackMessageParams,
GoToRoomParams,
InstantSummaryParams,
+ IntegrationsMessageParams,
LocalTimeParams,
LoggedInAsParams,
LogSizeParams,
ManagerApprovedAmountParams,
ManagerApprovedParams,
+ MarkedReimbursedParams,
+ MarkReimbursedFromIntegrationParams,
NoLongerHaveAccessParams,
NotAllowedExtensionParams,
NotYouParams,
@@ -49,6 +58,7 @@ import type {
PaySomeoneParams,
ReimbursementRateParams,
RemovedTheRequestParams,
+ RemoveMembersWarningPrompt,
RenamedRoomActionParams,
ReportArchiveReasonsClosedParams,
ReportArchiveReasonsMergedParams,
@@ -64,10 +74,12 @@ import type {
SetTheRequestParams,
SettledAfterAddedBankAccountParams,
SettleExpensifyCardParams,
+ ShareParams,
SignUpNewFaceCodeParams,
SizeExceededParams,
SplitAmountParams,
StepCounterParams,
+ StripePaidParams,
TaskCreatedActionParams,
TermsParams,
ThreadRequestReportNameParams,
@@ -75,6 +87,8 @@ import type {
ToValidateLoginParams,
TransferParams,
TranslationBase,
+ UnapprovedParams,
+ UnshareParams,
UntilTimeParams,
UpdatedTheDistanceParams,
UpdatedTheRequestParams,
@@ -273,7 +287,7 @@ export default {
your: 'your',
conciergeHelp: 'Please reach out to Concierge for help.',
youAppearToBeOffline: 'You appear to be offline.',
- thisFeatureRequiresInternet: 'This feature requires an active internet connection to be used.',
+ thisFeatureRequiresInternet: 'This feature requires an active internet connection.',
attachementWillBeAvailableOnceBackOnline: 'Attachment will become available once back online.',
areYouSure: 'Are you sure?',
verify: 'Verify',
@@ -339,44 +353,46 @@ export default {
shared: 'Shared',
drafts: 'Drafts',
finished: 'Finished',
+ companyID: 'Company ID',
+ userID: 'User ID',
disable: 'Disable',
},
location: {
useCurrent: 'Use current location',
- notFound: 'We were unable to find your location, please try again or enter an address manually.',
- permissionDenied: 'It looks like you have denied permission to your location.',
+ notFound: 'We were unable to find your location. Please try again or enter an address manually.',
+ permissionDenied: "It looks like you've denied access to your location.",
please: 'Please',
- allowPermission: 'allow location permission in settings',
- tryAgain: 'and then try again.',
+ allowPermission: 'allow location access in settings',
+ tryAgain: 'and try again.',
},
anonymousReportFooter: {
logoTagline: 'Join the discussion.',
},
attachmentPicker: {
cameraPermissionRequired: 'Camera access',
- expensifyDoesntHaveAccessToCamera: "Expensify can't take photos without access to your camera. Tap Settings to update permissions.",
+ expensifyDoesntHaveAccessToCamera: "Expensify can't take photos without access to your camera. Tap settings to update permissions.",
attachmentError: 'Attachment error',
- errorWhileSelectingAttachment: 'An error occurred while selecting an attachment, please try again.',
- errorWhileSelectingCorruptedAttachment: 'An error occurred while selecting a corrupted attachment, please try another file.',
+ errorWhileSelectingAttachment: 'An error occurred while selecting an attachment. Please try again.',
+ errorWhileSelectingCorruptedAttachment: 'An error occurred while selecting a corrupted attachment. Please try another file.',
takePhoto: 'Take photo',
chooseFromGallery: 'Choose from gallery',
chooseDocument: 'Choose file',
- attachmentTooLarge: 'Attachment too large',
- sizeExceeded: 'Attachment size is larger than 24 MB limit.',
- attachmentTooSmall: 'Attachment too small',
- sizeNotMet: 'Attachment size must be greater than 240 bytes.',
+ attachmentTooLarge: 'Attachment is too large',
+ sizeExceeded: 'Attachment size is larger than 24 MB limit',
+ attachmentTooSmall: 'Attachment is too small',
+ sizeNotMet: 'Attachment size must be greater than 240 bytes',
wrongFileType: 'Invalid file type',
- notAllowedExtension: 'This file type is not allowed',
- folderNotAllowedMessage: 'Uploading a folder is not allowed. Try a different file.',
+ notAllowedExtension: 'This file type is not allowed. Please try a different file type.',
+ folderNotAllowedMessage: 'Uploading a folder is not allowed. Please try a different file.',
protectedPDFNotSupported: 'Password-protected PDF is not supported',
},
connectionComplete: {
- title: 'Connection Complete',
+ title: 'Connection complete',
supportingText: 'You can close this window and head back to the Expensify app.',
},
avatarCropModal: {
title: 'Edit photo',
- description: 'Drag, zoom, and rotate your image to your preferred specifications',
+ description: 'Drag, zoom, and rotate your image however you like.',
},
composer: {
noExtensionFoundForMimeType: 'No extension found for mime type',
@@ -385,7 +401,7 @@ export default {
},
baseUpdateAppModal: {
updateApp: 'Update app',
- updatePrompt: 'A new version of this app is available.\nUpdate now or restart the app at a later time to download the latest changes.',
+ updatePrompt: 'A new version of this app is available.\nUpdate now or restart the app later to download the latest changes.',
},
deeplinkWrapper: {
launching: 'Launching Expensify',
@@ -401,17 +417,17 @@ export default {
continueInWeb: 'continue to the web app',
},
validateCodeModal: {
- successfulSignInTitle: 'Abracadabra,\nyou are signed in!',
+ successfulSignInTitle: "Abracadabra,\nyou're signed in!",
successfulSignInDescription: 'Head back to your original tab to continue.',
- title: 'Here is your magic code',
- description: 'Please enter the code using the device\nwhere it was originally requested',
+ title: "Here's your magic code",
+ description: 'Please enter the code from the device\nwhere it was originally requested',
or: ', or',
signInHere: 'just sign in here',
expiredCodeTitle: 'Magic code expired',
expiredCodeDescription: 'Go back to the original device and request a new code.',
successfulNewCodeRequest: 'Code requested. Please check your device.',
tfaRequiredTitle: 'Two-factor authentication\nrequired',
- tfaRequiredDescription: 'Please enter the two-factor authentication code\nwhere you are trying to sign in.',
+ tfaRequiredDescription: "Please enter the two-factor authentication code\nwhere you're trying to sign in.",
},
moneyRequestConfirmationList: {
paidBy: 'Paid by',
@@ -429,7 +445,7 @@ export default {
welcomeText: {
getStarted: 'Get started below.',
anotherLoginPageIsOpen: 'Another login page is open.',
- anotherLoginPageIsOpenExplanation: "You've opened the login page in a separate tab, please login from that specific tab.",
+ anotherLoginPageIsOpenExplanation: "You've opened the login page in a separate tab. Please log in from that tab.",
welcome: 'Welcome!',
welcomeWithoutExclamation: 'Welcome',
phrase2: "Money talks. And now that chat and payments are in one place, it's also easy.",
@@ -445,7 +461,7 @@ export default {
},
},
thirdPartySignIn: {
- alreadySignedIn: ({email}: AlreadySignedInParams) => `You are already signed in as ${email}.`,
+ alreadySignedIn: ({email}: AlreadySignedInParams) => `You're already signed in as ${email}.`,
goBackMessage: ({provider}: GoBackMessageParams) => `Don't want to sign in with ${provider}?`,
continueWithMyCurrentSession: 'Continue with my current session',
redirectToDesktopMessage: "We'll redirect you to the desktop app once you finish signing in.",
@@ -455,7 +471,7 @@ export default {
},
samlSignIn: {
welcomeSAMLEnabled: 'Continue logging in with single sign-on:',
- orContinueWithMagicCode: 'Or optionally, your company allows signing in with a magic code',
+ orContinueWithMagicCode: 'You can also sign in with a magic code',
useSingleSignOn: 'Use single sign-on',
useMagicCode: 'Use magic code',
launching: 'Launching...',
@@ -546,7 +562,7 @@ export default {
hereAlternateText: 'Notify everyone in this conversation',
},
newMessages: 'New messages',
- youHaveBeenBanned: 'Note: You have been banned from communicating in this channel',
+ youHaveBeenBanned: "Note: You've been banned from chatting in this channel.",
reportTypingIndicator: {
isTyping: 'is typing...',
areTyping: 'are typing...',
@@ -601,8 +617,8 @@ export default {
chooseFile: 'Choose file',
takePhoto: 'Take a photo',
cameraAccess: 'Camera access is required to take pictures of receipts.',
- cameraErrorTitle: 'Camera Error',
- cameraErrorMessage: 'An error occurred while taking a photo, please try again.',
+ cameraErrorTitle: 'Camera error',
+ cameraErrorMessage: 'An error occurred while taking a photo. Please try again.',
dropTitle: 'Let it go',
dropMessage: 'Drop your file here',
flash: 'flash',
@@ -658,12 +674,12 @@ export default {
canceled: 'Canceled',
posted: 'Posted',
deleteReceipt: 'Delete receipt',
- pendingMatchWithCreditCard: 'Receipt pending match with credit card.',
- pendingMatchWithCreditCardDescription: 'Receipt pending match with credit card. Mark as cash to ignore and request payment.',
+ pendingMatchWithCreditCard: 'Receipt pending match with card transaction',
+ pendingMatchWithCreditCardDescription: 'Receipt pending match with card transaction. Mark as cash to cancel.',
markAsCash: 'Mark as cash',
routePending: 'Route pending...',
receiptScanning: 'Receipt scanning...',
- receiptScanInProgress: 'Receipt scan in progress.',
+ receiptScanInProgress: 'Receipt scan in progress',
receiptScanInProgressDescription: 'Receipt scan in progress. Check back later or enter the details now.',
receiptIssuesFound: (count: number) => `${count === 1 ? 'Issue' : 'Issues'} found`,
fieldPending: 'Pending...',
@@ -673,8 +689,8 @@ export default {
missingMerchant: 'Missing merchant',
receiptStatusTitle: 'Scanning…',
receiptStatusText: "Only you can see this receipt when it's scanning. Check back later or enter the details now.",
- receiptScanningFailed: 'Receipt scanning failed. Enter the details manually.',
- transactionPendingDescription: 'Transaction pending. It can take a few days from the date the card was used for the transaction to post.',
+ receiptScanningFailed: 'Receipt scanning failed. Please enter the details manually.',
+ transactionPendingDescription: 'Transaction pending. It may take a few days to post.',
expenseCount: ({count, scanningReceipts = 0, pendingReceipts = 0}: RequestCountParams) =>
`${count} ${Str.pluralize('expense', 'expenses', count)}${scanningReceipts > 0 ? `, ${scanningReceipts} scanning` : ''}${
pendingReceipts > 0 ? `, ${pendingReceipts} pending` : ''
@@ -689,7 +705,7 @@ export default {
settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Pay ${formattedAmount}`,
settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pay ${formattedAmount} as a business` : `Pay as a business`),
payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pay ${formattedAmount} elsewhere` : `Pay elsewhere`),
- nextStep: 'Next Steps',
+ nextStep: 'Next steps',
finished: 'Finished',
sendInvoice: ({amount}: RequestAmountParams) => `Send ${amount} invoice`,
submitAmount: ({amount}: RequestAmountParams) => `submit ${amount}`,
@@ -731,24 +747,24 @@ export default {
tagSelection: 'Select a tag to better organize your spend.',
categorySelection: 'Select a category to better organize your spend.',
error: {
- invalidCategoryLength: 'The length of the category chosen exceeds the maximum allowed (255). Please choose a different or shorten the category name first.',
+ invalidCategoryLength: 'The category name exceeds 255 characters. Please shorten it or choose a different category.',
invalidAmount: 'Please enter a valid amount before continuing.',
invalidTaxAmount: ({amount}: RequestAmountParams) => `Maximum tax amount is ${amount}`,
invalidSplit: 'The sum of splits must equal the total amount.',
- invalidSplitParticipants: 'Enter an amount greater than zero for at least two participants.',
- other: 'Unexpected error, please try again later.',
+ invalidSplitParticipants: 'Please enter an amount greater than zero for at least two participants.',
+ other: 'Unexpected error. Please try again later.',
genericCreateFailureMessage: 'Unexpected error submitting this expense. Please try again later.',
- genericCreateInvoiceFailureMessage: 'Unexpected error sending invoice, please try again later.',
- genericHoldExpenseFailureMessage: 'Unexpected error while holding the expense. Please try again later.',
- genericUnholdExpenseFailureMessage: 'Unexpected error while taking the expense off hold. Please try again later.',
+ genericCreateInvoiceFailureMessage: 'Unexpected error sending this invoice. Please try again later.',
+ genericHoldExpenseFailureMessage: 'Unexpected error holding this expense. Please try again later.',
+ genericUnholdExpenseFailureMessage: 'Unexpected error taking this expense off hold. Please try again later.',
receiptDeleteFailureError: 'Unexpected error deleting this receipt. Please try again later.',
// eslint-disable-next-line rulesdir/use-periods-for-error-messages
receiptFailureMessage: "The receipt didn't upload. ",
// eslint-disable-next-line rulesdir/use-periods-for-error-messages
saveFileMessage: 'Download the file ',
loseFileMessage: 'or dismiss this error and lose it.',
- genericDeleteFailureMessage: 'Unexpected error deleting this expense, please try again later.',
- genericEditFailureMessage: 'Unexpected error editing this expense, please try again later.',
+ genericDeleteFailureMessage: 'Unexpected error deleting this expense. Please try again later.',
+ genericEditFailureMessage: 'Unexpected error editing this expense. Please try again later.',
genericSmartscanFailureMessage: 'Transaction is missing fields.',
duplicateWaypointsErrorMessage: 'Please remove duplicate waypoints.',
atLeastTwoDifferentWaypoints: 'Please enter at least two different addresses.',
@@ -756,7 +772,7 @@ export default {
invalidMerchant: 'Please enter a correct merchant.',
},
waitingOnEnabledWallet: ({submitterDisplayName}: WaitingOnBankAccountParams) => `started settling up. Payment is on hold until ${submitterDisplayName} enables their wallet.`,
- enableWallet: 'Enable Wallet',
+ enableWallet: 'Enable wallet',
hold: 'Hold',
unhold: 'Unhold',
holdExpense: 'Hold expense',
@@ -766,8 +782,9 @@ export default {
explainHold: "Explain why you're holding this expense.",
reason: 'Reason',
holdReasonRequired: 'A reason is required when holding.',
- expenseOnHold: 'This expense was put on hold. Review the comments for next steps.',
- expenseDuplicate: 'This expense has the same details as another one. Review the duplicates to remove the hold.',
+ expenseOnHold: 'This expense was put on hold. Please review the comments for next steps.',
+ expensesOnHold: 'All expenses were put on hold. Please review the comments for next steps.',
+ expenseDuplicate: 'This expense has the same details as another one. Please review the duplicates to remove the hold.',
reviewDuplicates: 'Review duplicates',
keepAll: 'Keep all',
confirmApprove: 'Confirm approval amount',
@@ -780,9 +797,9 @@ export default {
whatIsHoldTitle: 'What is hold?',
whatIsHoldExplain: 'Hold is our way of streamlining financial collaboration. "Reject" is so harsh!',
holdIsTemporaryTitle: 'Hold is usually temporary',
- holdIsTemporaryExplain: "Because hold is used to clear up confusion or clarify an important detail before payment, it's not permanent.",
+ holdIsTemporaryExplain: "Hold is used to clear up confusion or clarify an important detail before payment. Don't worry, it's not permanent!",
deleteHoldTitle: "Delete whatever won't be paid",
- deleteHoldExplain: "In the rare case where something is put on hold and won't be paid, it's on the person requesting payment to delete it.",
+ deleteHoldExplain: "In the rare case where something's put on hold and won't be paid, it's on the person requesting payment to delete it.",
set: 'set',
changed: 'changed',
removed: 'removed',
@@ -800,8 +817,8 @@ export default {
},
},
loginField: {
- numberHasNotBeenValidated: 'The number has not yet been validated. Click the button to resend the validation link via text.',
- emailHasNotBeenValidated: 'The email has not yet been validated. Click the button to resend the validation link via text.',
+ numberHasNotBeenValidated: "The number hasn't been validated. Click the button to resend the validation link via text.",
+ emailHasNotBeenValidated: "The email hasn't been validated. Click the button to resend the validation link via text.",
},
avatarWithImagePicker: {
uploadPhoto: 'Upload photo',
@@ -809,7 +826,7 @@ export default {
editImage: 'Edit photo',
viewPhoto: 'View photo',
imageUploadFailed: 'Image upload failed',
- deleteWorkspaceError: 'Sorry, there was an unexpected problem deleting your workspace avatar.',
+ deleteWorkspaceError: 'Sorry, there was an unexpected problem deleting your workspace avatar',
sizeExceeded: ({maxUploadSizeInMB}: SizeExceededParams) => `The selected image exceeds the maximum upload size of ${maxUploadSizeInMB}MB.`,
resolutionConstraints: ({minHeightInPx, minWidthInPx, maxHeightInPx, maxWidthInPx}: ResolutionConstraintsParams) =>
`Please upload an image larger than ${minHeightInPx}x${minWidthInPx} pixels and smaller than ${maxHeightInPx}x${maxWidthInPx} pixels.`,
@@ -824,18 +841,18 @@ export default {
setMyTimezoneAutomatically: 'Set my timezone automatically',
timezone: 'Timezone',
invalidFileMessage: 'Invalid file. Please try a different image.',
- avatarUploadFailureMessage: 'An error occurred uploading the avatar, please try again.',
+ avatarUploadFailureMessage: 'An error occurred uploading the avatar. Please try again.',
online: 'Online',
offline: 'Offline',
syncing: 'Syncing',
profileAvatar: 'Profile avatar',
publicSection: {
title: 'Public',
- subtitle: 'These details are displayed on your public profile, available for people to see.',
+ subtitle: 'These details are displayed on your public profile. Anyone can see them.',
},
privateSection: {
title: 'Private',
- subtitle: 'These details are used for travel and payments. They are never shown on your public profile.',
+ subtitle: "These details are used for travel and payments. They're never shown on your public profile.",
},
},
securityPage: {
@@ -860,10 +877,9 @@ export default {
getInTouch: "Whenever we need to get in touch with you, we'll use this contact method.",
enterMagicCode: ({contactMethod}: EnterMagicCodeParams) => `Please enter the magic code sent to ${contactMethod}`,
setAsDefault: 'Set as default',
- yourDefaultContactMethod:
- 'This is your current default contact method. You will not be able to delete this contact method until you set an alternative default by selecting another contact method and pressing “Set as default”.',
+ yourDefaultContactMethod: "This is your current default contact method. Before you can delete it, you'll need to choose another contact method and click “Set as default”.",
removeContactMethod: 'Remove contact method',
- removeAreYouSure: 'Are you sure you want to remove this contact method? This action cannot be undone.',
+ removeAreYouSure: "Are you sure you want to remove this contact method? This action can't be undone.",
failedNewContact: 'Failed to add this contact method.',
genericFailureMessages: {
requestContactMethodValidateCode: 'Failed to send a new magic code. Please wait a bit and try again.',
@@ -871,7 +887,7 @@ export default {
deleteContactMethod: 'Failed to delete contact method. Please reach out to Concierge for help.',
setDefaultContactMethod: 'Failed to set a new default contact method. Please reach out to Concierge for help.',
addContactMethod: 'Failed to add this contact method. Please reach out to Concierge for help.',
- enteredMethodIsAlreadySubmited: 'The Entered Contact Method already exists.',
+ enteredMethodIsAlreadySubmited: 'This contact method already exists.',
passwordRequired: 'password required.',
contactMethodRequired: 'Contact method is required.',
invalidContactMethod: 'Invalid contact method',
@@ -917,7 +933,7 @@ export default {
initialSettingsPage: {
about: 'About',
aboutPage: {
- description: 'The New Expensify App is built by a community of open source developers from around the world. Help us build the future of Expensify.',
+ description: 'The New Expensify App is built by a community of open-source developers from around the world. Help us build the future of Expensify.',
appDownloadLinks: 'App download links',
viewKeyboardShortcuts: 'View keyboard shortcuts',
viewTheCode: 'View the code',
@@ -971,7 +987,7 @@ export default {
security: 'Security',
signOut: 'Sign out',
restoreStashed: 'Restore stashed login',
- signOutConfirmationText: "You'll lose any offline changes if you sign-out.",
+ signOutConfirmationText: "You'll lose any offline changes if you sign out.",
versionLetter: 'v',
readTheTermsAndPrivacy: {
phrase1: 'Read the',
@@ -991,7 +1007,7 @@ export default {
enterMessageHere: 'Enter message here',
closeAccountWarning: 'Closing your account cannot be undone.',
closeAccountPermanentlyDeleteData: 'Are you sure you want to delete your account? This will permanently delete any outstanding expenses.',
- enterDefaultContactToConfirm: 'Please type your default contact method to confirm you wish to close your account. Your default contact method is:',
+ enterDefaultContactToConfirm: 'Please enter your default contact method to confirm you wish to close your account. Your default contact method is:',
enterDefaultContact: 'Enter your default contact method',
defaultContact: 'Default contact method:',
enterYourDefaultContactMethod: 'Please enter your default contact method to close your account.',
@@ -1001,7 +1017,7 @@ export default {
changingYourPasswordPrompt: 'Changing your password will update your password for both your Expensify.com and New Expensify accounts.',
currentPassword: 'Current password',
newPassword: 'New password',
- newPasswordPrompt: 'New password must be different than your old password, have at least 8 characters, 1 capital letter, 1 lowercase letter, and 1 number.',
+ newPasswordPrompt: 'Your new password must be different from your old password and contain at least 8 characters, 1 capital letter, 1 lowercase letter, and 1 number.',
},
twoFactorAuth: {
headerTitle: 'Two-factor authentication',
@@ -1014,13 +1030,13 @@ export default {
stepCodes: 'Recovery codes',
keepCodesSafe: 'Keep these recovery codes safe!',
codesLoseAccess:
- 'If you lose access to your authenticator app and don’t have these codes, you will lose access to your account. \n\nNote: Setting up two-factor authentication will log you out of all other active sessions.',
+ "If you lose access to your authenticator app and don’t have these codes, you'll lose access to your account. \n\nNote: Setting up two-factor authentication will log you out of all other active sessions.",
errorStepCodes: 'Please copy or download codes before continuing.',
stepVerify: 'Verify',
scanCode: 'Scan the QR code using your',
authenticatorApp: 'authenticator app',
addKey: 'Or add this secret key to your authenticator app:',
- enterCode: 'Then enter the six digit code generated from your authenticator app.',
+ enterCode: 'Then enter the six-digit code generated from your authenticator app.',
stepSuccess: 'Finished',
enabled: 'Two-factor authentication is now enabled!',
congrats: 'Congrats, now you’ve got that extra security.',
@@ -1055,6 +1071,18 @@ export default {
genericFailureMessage: "Private notes couldn't be saved.",
},
},
+ billingCurrency: {
+ error: {
+ securityCode: 'Please enter a valid security code.',
+ },
+ securityCode: 'Security code',
+ changeBillingCurrency: 'Change billing currency',
+ changePaymentCurrency: 'Change payment currency',
+ paymentCurrency: 'Payment currency',
+ note: 'Note: Changing your payment currency can impact how much you’ll pay for Expensify. Refer to our',
+ noteLink: 'pricing page',
+ noteDetails: 'for full details.',
+ },
addDebitCardPage: {
addADebitCard: 'Add a debit card',
nameOnCard: 'Name on card',
@@ -1071,10 +1099,10 @@ export default {
debitCardNumber: 'Please enter a valid debit card number.',
expirationDate: 'Please select a valid expiration date.',
securityCode: 'Please enter a valid security code.',
- addressStreet: 'Please enter a valid billing address that is not a PO Box.',
+ addressStreet: "Please enter a valid billing address that's not a PO box.",
addressState: 'Please select a state.',
addressCity: 'Please enter a city.',
- genericFailureMessage: 'An error occurred while adding your card, please try again.',
+ genericFailureMessage: 'An error occurred while adding your card. Please try again.',
password: 'Please enter your Expensify password.',
},
},
@@ -1094,10 +1122,10 @@ export default {
paymentCardNumber: 'Please enter a valid card number.',
expirationDate: 'Please select a valid expiration date.',
securityCode: 'Please enter a valid security code.',
- addressStreet: 'Please enter a valid billing address that is not a PO Box.',
+ addressStreet: "Please enter a valid billing address that's not a PO box.",
addressState: 'Please select a state.',
addressCity: 'Please enter a city.',
- genericFailureMessage: 'An error occurred while adding your card, please try again.',
+ genericFailureMessage: 'An error occurred while adding your card. Please try again.',
password: 'Please enter your Expensify password.',
},
},
@@ -1106,7 +1134,7 @@ export default {
setDefaultConfirmation: 'Make default payment method',
setDefaultSuccess: 'Default payment method set!',
deleteAccount: 'Delete account',
- deleteConfirmation: 'Are you sure that you want to delete this account?',
+ deleteConfirmation: 'Are you sure you want to delete this account?',
error: {
notOwnerOfBankAccount: 'There was an error setting this bank account as your default payment method.',
invalidBankAccount: 'This bank account is temporarily suspended.',
@@ -1129,13 +1157,13 @@ export default {
assignedCards: 'Assigned cards',
assignedCardsDescription: 'These are cards assigned by a workspace admin to manage company spend.',
expensifyCard: 'Expensify Card',
- walletActivationPending: "We're reviewing your information, please check back in a few minutes!",
- walletActivationFailed: 'Unfortunately your wallet cannot be enabled at this time. Please chat with Concierge for further assistance.',
- addYourBankAccount: 'Add your bank account.',
+ walletActivationPending: "We're reviewing your information. Please check back in a few minutes!",
+ walletActivationFailed: "Unfortunately, your wallet can't be enabled at this time. Please chat with Concierge for further assistance.",
+ addYourBankAccount: 'Add your bank account',
addBankAccountBody: "Let's connect your bank account to Expensify so it’s easier than ever to send and receive payments directly in the app.",
- chooseYourBankAccount: 'Choose your bank account.',
+ chooseYourBankAccount: 'Choose your bank account',
chooseAccountBody: 'Make sure that you select the right one.',
- confirmYourBankAccount: 'Confirm your bank account.',
+ confirmYourBankAccount: 'Confirm your bank account',
},
cardPage: {
expensifyCard: 'Expensify Card',
@@ -1158,7 +1186,7 @@ export default {
reportFraud: 'Report virtual card fraud',
reviewTransaction: 'Review transaction',
suspiciousBannerTitle: 'Suspicious transaction',
- suspiciousBannerDescription: 'We noticed suspicious transaction on your card. Tap below to review.',
+ suspiciousBannerDescription: 'We noticed suspicious transactions on your card. Tap below to review.',
cardLocked: "Your card is temporarily locked while our team reviews your company's account.",
cardDetails: {
cardNumber: 'Virtual card number',
@@ -1205,12 +1233,12 @@ export default {
},
},
workflowsDelayedSubmissionPage: {
- autoReportingErrorMessage: 'The delayed submission parameter could not be changed. Please try again or contact support.',
- autoReportingFrequencyErrorMessage: 'The submission frequency could not be changed. Please try again or contact support.',
- monthlyOffsetErrorMessage: 'The monthly frequency could not be changed. Please try again or contact support.',
+ autoReportingErrorMessage: "Delayed submission couldn't be changed. Please try again or contact support.",
+ autoReportingFrequencyErrorMessage: "Submission frequency couldn't be changed. Please try again or contact support.",
+ monthlyOffsetErrorMessage: "Monthly frequency couldn't be changed. Please try again or contact support.",
},
workflowsApprovalPage: {
- genericErrorMessage: 'The approver could not be changed. Please try again or contact support.',
+ genericErrorMessage: "The approver couldn't be changed. Please try again or contact support.",
},
workflowsPayerPage: {
title: 'Authorized payer',
@@ -1295,7 +1323,7 @@ export default {
},
priorityModePage: {
priorityMode: 'Priority mode',
- explainerText: 'Choose whether to show all chats by default sorted with most recent with pinned items at the top, or #focus on unread pinned items, sorted alphabetically.',
+ explainerText: 'Choose whether to #focus on unread and pinned chats only, or show everything with the most recent and pinned chats at the top.',
priorityModes: {
default: {
label: 'Most recent',
@@ -1396,11 +1424,17 @@ export default {
error: {
invalidFormatEmailLogin: 'The email entered is invalid. Please fix the format and try again.',
},
- cannotGetAccountDetails: "Couldn't retrieve account details, please try to sign in again.",
+ cannotGetAccountDetails: "Couldn't retrieve account details. Please try to sign in again.",
loginForm: 'Login form',
notYou: ({user}: NotYouParams) => `Not ${user}?`,
},
onboarding: {
+ welcome: 'Welcome!',
+ explanationModal: {
+ title: 'Welcome to Expensify',
+ description: 'Request and send money is just as easy as sending a message. The new era of expensing is upon us.',
+ secondaryDescription: 'To switch back to Expensify Classic, just tap your profile picture > Go to Expensify Classic.',
+ },
welcomeVideo: {
title: 'Welcome to Expensify',
description: 'One app to handle all your business and personal spend in a chat. Built for your business, your team, and your friends.',
@@ -1622,7 +1656,7 @@ export default {
},
},
messages: {
- errorMessageInvalidPhone: `Please enter a valid phone number without brackets or dashes. If you're outside the US please include your country code (e.g. ${CONST.EXAMPLE_PHONE_NUMBER}).`,
+ errorMessageInvalidPhone: `Please enter a valid phone number without brackets or dashes. If you're outside the US, please include your country code (e.g. ${CONST.EXAMPLE_PHONE_NUMBER}).`,
errorMessageInvalidEmail: 'Invalid email',
userIsAlreadyMember: ({login, name}: UserIsAlreadyMemberParams) => `${login} is already a member of ${name}`,
},
@@ -1641,24 +1675,24 @@ export default {
originalDocumentNeeded: 'Please upload an original image of your ID rather than a screenshot or scanned image.',
documentNeedsBetterQuality: 'Your ID appears to be damaged or has missing security features. Please upload an original image of an undamaged ID that is entirely visible.',
imageNeedsBetterQuality: "There's an issue with the image quality of your ID. Please upload a new image where your entire ID can be seen clearly.",
- selfieIssue: "There's an issue with your selfie/video. Please upload a new selfie/video in real time.",
+ selfieIssue: "There's an issue with your selfie/video. Please upload a live selfie/video.",
selfieNotMatching: "Your selfie/video doesn't match your ID. Please upload a new selfie/video where your face can be clearly seen.",
selfieNotLive: "Your selfie/video doesn't appear to be a live photo/video. Please upload a live selfie/video.",
},
additionalDetailsStep: {
headerTitle: 'Additional details',
- helpText: 'We need to confirm the following information before you can send and receive money from your Wallet.',
- helpTextIdologyQuestions: 'We need to ask you just a few more questions to finish validating your identity.',
+ helpText: 'We need to confirm the following information before you can send and receive money with your wallet.',
+ helpTextIdologyQuestions: 'Just a few more questions to finish verifying your identity.',
helpLink: 'Learn more about why we need this.',
legalFirstNameLabel: 'Legal first name',
legalMiddleNameLabel: 'Legal middle name',
legalLastNameLabel: 'Legal last name',
selectAnswer: 'You need to select a response to proceed.',
- ssnFull9Error: 'Please enter a valid 9 digit SSN.',
+ ssnFull9Error: 'Please enter a valid 9-digit SSN.',
needSSNFull9: "We're having trouble verifying your SSN. Please enter the full 9 digits of your SSN.",
weCouldNotVerify: 'We could not verify',
pleaseFixIt: 'Please fix this information before continuing.',
- failedKYCTextBefore: "We weren't able to successfully verify your identity. Please try again later and reach out to ",
+ failedKYCTextBefore: "We weren't able to verify your identity. Please try again later or reach out to ",
failedKYCTextAfter: ' if you have any questions.',
},
termsStep: {
@@ -1692,7 +1726,7 @@ export default {
weChargeOneFee: 'We charge one type of fee.',
fdicInsurance: 'Your funds are eligible for FDIC insurance.',
generalInfo: 'For general information about prepaid accounts, visit',
- conditionsDetails: 'Find details and conditions for all fees and services by visiting',
+ conditionsDetails: 'For details and conditions for all fees and services, visit',
conditionsPhone: 'or calling +1 833-400-0904.',
instant: '(instant)',
electronicFundsInstantFeeMin: ({amount}: TermsParams) => `(min ${amount})`,
@@ -1703,19 +1737,19 @@ export default {
feeAmountHeader: 'Fee amount',
moreDetailsHeader: 'More details',
openingAccountTitle: 'Opening an account',
- openingAccountDetails: 'There is no fee to open an account.',
- monthlyFeeDetails: 'There is no monthly fee.',
+ openingAccountDetails: "There's no fee to open an account.",
+ monthlyFeeDetails: "There's no monthly fee.",
customerServiceTitle: 'Customer service',
customerServiceDetails: 'There are no customer service fees.',
- inactivityDetails: 'There is no inactivity fee.',
+ inactivityDetails: "There's no inactivity fee.",
sendingFundsTitle: 'Sending funds to another account holder',
- sendingFundsDetails: 'There is no fee to send funds to another account holder using your balance, bank account, or debit card.',
+ sendingFundsDetails: "There's no fee to send funds to another account holder using your balance, bank account, or debit card.",
electronicFundsStandardDetails:
- 'There is no fee to transfer funds from your Expensify Wallet ' +
+ "There's no fee to transfer funds from your Expensify Wallet " +
'to your bank account using the standard option. This transfer usually completes within 1-3 business' +
' days.',
electronicFundsInstantDetails: ({percentage, amount}: ElectronicFundsParams) =>
- 'There is a fee to transfer funds from your Expensify Wallet to ' +
+ "There's a fee to transfer funds from your Expensify Wallet to " +
'your linked debit card using the instant transfer option. This transfer usually completes within ' +
`several minutes. The fee is ${percentage}% of the transfer amount (with a minimum fee of ${amount}).`,
fdicInsuranceBancorp: ({amount}: TermsParams) =>
@@ -1729,7 +1763,7 @@ export default {
generalInformation2: 'If you have a complaint about a prepaid account, call the Consumer Financial Protection Bureau at 1-855-411-2372 or visit',
printerFriendlyView: 'View printer-friendly version',
automated: 'Automated',
- liveAgent: 'Live Agent',
+ liveAgent: 'Live agent',
instant: 'Instant',
electronicFundsInstantFeeMin: ({amount}: TermsParams) => `Min ${amount}`,
},
@@ -1773,18 +1807,18 @@ export default {
},
personalInfoStep: {
personalInfo: 'Personal info',
- enterYourLegalFirstAndLast: 'Enter your legal first and last name.',
+ enterYourLegalFirstAndLast: "What's your legal name?",
legalFirstName: 'Legal first name',
legalLastName: 'Legal last name',
legalName: 'Legal name',
- enterYourDateOfBirth: 'Enter your date of birth.',
- enterTheLast4: 'Enter the last 4 of your SSN.',
+ enterYourDateOfBirth: "What's your date of birth?",
+ enterTheLast4: 'What are the last four digits of your Social Security Number?',
dontWorry: "Don't worry, we don't do any personal credit checks!",
- last4SSN: 'Last 4 Social Security Number',
- enterYourAddress: 'Enter your address.',
+ last4SSN: 'Last 4 of SSN',
+ enterYourAddress: "What's your address?",
address: 'Address',
letsDoubleCheck: "Let's double check that everything looks right.",
- byAddingThisBankAccount: 'By adding this bank account, you confirm that you have read, understand and accept',
+ byAddingThisBankAccount: "By adding this bank account, you confirm that you've read, understand, and accept",
whatsYourLegalName: 'What’s your legal name?',
whatsYourDOB: 'What’s your date of birth?',
whatsYourAddress: 'What’s your address?',
@@ -1795,17 +1829,17 @@ export default {
weNeedThisToVerify: 'We need this to verify your wallet.',
},
businessInfoStep: {
- businessInfo: 'Business info',
- enterTheNameOfYourBusiness: 'Enter the name of your business.',
- businessName: 'Legal business name',
- enterYourCompanysTaxIdNumber: 'Enter your company’s Tax ID number.',
+ businessInfo: 'Company info',
+ enterTheNameOfYourBusiness: "What's the name of your company?",
+ businessName: 'Legal company name',
+ enterYourCompanysTaxIdNumber: "What's your company’s Tax ID number?",
taxIDNumber: 'Tax ID number',
taxIDNumberPlaceholder: '9 digits',
- enterYourCompanysWebsite: 'Enter your company’s website.',
+ enterYourCompanysWebsite: "What's your company’s website?",
companyWebsite: 'Company website',
- enterYourCompanysPhoneNumber: 'Enter your company’s phone number.',
- enterYourCompanysAddress: 'Enter your company’s address.',
- selectYourCompanysType: 'Select your company’s type.',
+ enterYourCompanysPhoneNumber: "What's your company’s phone number?",
+ enterYourCompanysAddress: "What's your company’s address?",
+ selectYourCompanysType: 'What type of company is it?',
companyType: 'Company type',
incorporationType: {
LLC: 'LLC',
@@ -1815,11 +1849,11 @@ export default {
SOLE_PROPRIETORSHIP: 'Sole proprietorship',
OTHER: 'Other',
},
- selectYourCompanysIncorporationDate: 'Select your company’s incorporation date.',
+ selectYourCompanysIncorporationDate: "What's your company’s incorporation date?",
incorporationDate: 'Incorporation date',
incorporationDatePlaceholder: 'Start date (yyyy-mm-dd)',
incorporationState: 'Incorporation state',
- pleaseSelectTheStateYourCompanyWasIncorporatedIn: 'Please select the state your company was incorporated in.',
+ pleaseSelectTheStateYourCompanyWasIncorporatedIn: 'Which state was your company incorporated in?',
letsDoubleCheck: "Let's double check that everything looks right.",
companyAddress: 'Company address',
listOfRestrictedBusinesses: 'list of restricted businesses',
@@ -1829,36 +1863,35 @@ export default {
doYouOwn25percent: 'Do you own 25% or more of',
doAnyIndividualOwn25percent: 'Do any individuals own 25% or more of',
areThereMoreIndividualsWhoOwn25percent: 'Are there more individuals who own 25% or more of',
- regulationRequiresUsToVerifyTheIdentity: 'Regulation requires us to verify the identity of any individual that owns more than 25% of the company.',
+ regulationRequiresUsToVerifyTheIdentity: 'Regulation requires us to verify the identity of any individual who owns more than 25% of the company.',
companyOwner: 'Company owner',
- enterLegalFirstAndLastName: 'Enter the legal first and last name of the owner.',
+ enterLegalFirstAndLastName: "What's the owner's legal name?",
legalFirstName: 'Legal first name',
legalLastName: 'Legal last name',
- enterTheDateOfBirthOfTheOwner: 'Enter the date of birth of the owner.',
- enterTheLast4: 'Enter the last 4 of the owner’s SSN.',
- last4SSN: 'Last 4 Social Security Number',
+ enterTheDateOfBirthOfTheOwner: "What's the owner's date of birth?",
+ enterTheLast4: 'What are the last 4 digits of the owner’s Social Security Number?',
+ last4SSN: 'Last 4 of SSN',
dontWorry: "Don't worry, we don't do any personal credit checks!",
- enterTheOwnersAddress: 'Enter the owner’s address.',
+ enterTheOwnersAddress: "What's the owner's address?",
letsDoubleCheck: 'Let’s double check that everything looks right.',
legalName: 'Legal name',
address: 'Address',
- byAddingThisBankAccount: 'By adding this bank account, you confirm that you have read, understand and accept',
+ byAddingThisBankAccount: "By adding this bank account, you confirm that you've read, understand, and accept",
owners: 'Owners',
},
validationStep: {
- headerTitle: 'Validate Bank Account',
+ headerTitle: 'Validate bank account',
buttonText: 'Finish setup',
maxAttemptsReached: 'Validation for this bank account has been disabled due to too many incorrect attempts.',
- description: 'A day or two after you add your account to Expensify we send three (3) transactions to your account. They have a merchant line like "Expensify, Inc. Validation".',
+ description: `Within 1-2 business days, we'll send three (3) small transactions to your bank account from a name like "Expensify, Inc. Validation".`,
descriptionCTA: 'Please enter each transaction amount in the fields below. Example: 1.51.',
reviewingInfo: "Thanks! We're reviewing your information, and will be in touch shortly. Please check your chat with Concierge ",
forNextStep: ' for next steps to finish setting up your bank account.',
letsChatCTA: "Yes, let's chat",
- letsChatText: 'Thanks for doing that. We need your help verifying a few pieces of information, but we can work this out quickly over chat. Ready?',
+ letsChatText: 'Almost there! We need your help verifying a few last bits of information over chat. Ready?',
letsChatTitle: "Let's chat!",
- enable2FATitle: 'Prevent fraud, enable two-factor authentication!',
- enable2FAText:
- 'We take your security seriously, so please set up two-factor authentication for your account now. That will allow us to dispute Expensify Card digital transactions, and will reduce your risk for fraud.',
+ enable2FATitle: 'Prevent fraud, enable two-factor authentication (2FA)',
+ enable2FAText: 'We take your security seriously. Please set up 2FA now to add an extra layer of protection to your account.',
secureYourAccount: 'Secure your account',
},
beneficialOwnersStep: {
@@ -1880,7 +1913,7 @@ export default {
completeVerification: 'Complete verification',
confirmAgreements: 'Please confirm the agreements below.',
certifyTrueAndAccurate: 'I certify that the information provided is true and accurate',
- certifyTrueAndAccurateError: 'Must certify information is true and accurate',
+ certifyTrueAndAccurateError: 'Please certify that the information is true and accurate',
isAuthorizedToUseBankAccount: 'I am authorized to use my company bank account for business spend',
isAuthorizedToUseBankAccountError: 'You must be a controlling officer with authorization to operate the business bank account.',
termsAndConditions: 'terms and conditions',
@@ -1892,21 +1925,20 @@ export default {
validateButtonText: 'Validate',
validationInputLabel: 'Transaction',
maxAttemptsReached: 'Validation for this bank account has been disabled due to too many incorrect attempts.',
- description: 'A day or two after you add your account to Expensify we send three (3) transactions to your account. They have a merchant line like "Expensify, Inc. Validation".',
+ description: `Within 1-2 business days, we'll send three (3) small transactions to your bank account from a name like "Expensify, Inc. Validation".`,
descriptionCTA: 'Please enter each transaction amount in the fields below. Example: 1.51.',
- reviewingInfo: "Thanks! We're reviewing your information, and will be in touch shortly. Please check your chat with Concierge ",
+ reviewingInfo: "Thanks! We're reviewing your information and will be in touch shortly. Please check your chat with Concierge ",
forNextSteps: ' for next steps to finish setting up your bank account.',
letsChatCTA: "Yes, let's chat",
- letsChatText: 'Thanks for doing that. We need your help verifying a few pieces of information, but we can work this out quickly over chat. Ready?',
+ letsChatText: 'Almost there! We need your help verifying a few last bits of information over chat. Ready?',
letsChatTitle: "Let's chat!",
- enable2FATitle: 'Prevent fraud, enable two-factor authentication!',
- enable2FAText:
- 'We take your security seriously, so please set up two-factor authentication for your account now. That will allow us to dispute Expensify Card digital transactions, and will reduce your risk for fraud.',
+ enable2FATitle: 'Prevent fraud, enable two-factor authentication (2FA)',
+ enable2FAText: 'We take your security seriously. Please set up 2FA now to add an extra layer of protection to your account.',
secureYourAccount: 'Secure your account',
},
reimbursementAccountLoadingAnimation: {
oneMoment: 'One moment',
- explanationLine: 'We’re taking a look at your information. You will be able to continue with next steps shortly.',
+ explanationLine: "We’re taking a look at your information. You'll be able to continue with next steps shortly.",
},
session: {
offlineMessageRetry: "Looks like you're offline. Please check your connection and try again.",
@@ -1974,17 +2006,18 @@ export default {
settlementFrequency: 'Settlement frequency',
deleteConfirmation: 'Are you sure you want to delete this workspace?',
unavailable: 'Unavailable workspace',
- memberNotFound: 'Member not found. To invite a new member to the workspace, please use the Invite button above.',
- notAuthorized: `You do not have access to this page. Are you trying to join the workspace? Please reach out to the owner of this workspace so they can add you as a member! Something else? Reach out to ${CONST.EMAIL.CONCIERGE}`,
+ memberNotFound: 'Member not found. To invite a new member to the workspace, please use the invite button above.',
+ notAuthorized: `You don't have access to this page. If you're trying to join this workspace, just ask the workspace owner to add you as a member. Something else? Reach out to ${CONST.EMAIL.CONCIERGE}.`,
goToRoom: ({roomName}: GoToRoomParams) => `Go to ${roomName} room`,
workspaceName: 'Workspace name',
workspaceOwner: 'Owner',
workspaceType: 'Workspace type',
workspaceAvatar: 'Workspace avatar',
- mustBeOnlineToViewMembers: 'You must be online in order to view members of this workspace.',
+ mustBeOnlineToViewMembers: 'You need to be online in order to view members of this workspace.',
moreFeatures: 'More features',
requested: 'Requested',
distanceRates: 'Distance rates',
+ expensifyCard: 'Expensify Card',
welcomeNote: ({workspaceName}: WelcomeNoteParams) =>
`You have been invited to ${workspaceName || 'a workspace'}! Download the Expensify mobile app at use.expensify.com/download to start tracking your expenses.`,
subscription: 'Subscription',
@@ -2006,10 +2039,7 @@ export default {
outOfPocketLocationEnabledDescription:
'QuickBooks Online doesn’t support locations on vendor bills or checks. As you have locations enabled on your workspace, these export options are unavailable.',
taxesJournalEntrySwitchNote: "QuickBooks Online doesn't support taxes on journal entries. Please change your export option to vendor bill or check.",
- export: 'Export',
- exportAs: 'Export as',
exportDescription: 'Configure how Expensify data exports to QuickBooks Online.',
- preferredExporter: 'Preferred exporter',
date: 'Export date',
exportExpenses: 'Export out-of-pocket expenses as',
exportInvoices: 'Export invoices to',
@@ -2037,26 +2067,21 @@ export default {
},
receivable: 'Accounts receivable', // This is an account name that will come directly from QBO, so I don't know why we need a translation for it. It should take whatever the name of the account is in QBO. Leaving this note for CS.
archive: 'Accounts receivable archive', // This is an account name that will come directly from QBO, so I don't know why we need a translation for it. It should take whatever the name of the account is in QBO. Leaving this note for CS.
- exportInvoicesDescription: 'Invoices will export to this account in QuickBooks Online.',
+ exportInvoicesDescription: 'Use this account when exporting invoices to QuickBooks Online.',
exportCompanyCardsDescription: 'Set how company card purchases export to QuickBooks Online.',
vendor: 'Vendor',
- defaultVendor: 'Default vendor',
defaultVendorDescription: 'Set a default vendor that will apply to all credit card transactions upon export.',
- exportPreferredExporterNote:
- 'The preferred exporter can be any workspace admin, but must also be a Domain Admin if you set different export accounts for individual company cards in Domain Settings.',
- exportPreferredExporterSubNote: 'Once set, the preferred exporter will see reports for export in their account.',
exportOutOfPocketExpensesDescription: 'Set how out-of-pocket expenses export to QuickBooks Online.',
exportCheckDescription: "We'll create an itemized check for each Expensify report and send it from the bank account below.",
exportJournalEntryDescription: "We'll create an itemized journal entry for each Expensify report and post it to the account below.",
exportVendorBillDescription:
"We'll create an itemized vendor bill for each Expensify report and add it to the account below. If this period is closed, we'll post to the 1st of the next open period.",
account: 'Account',
- accountDescription: 'Choose where to post journal entry offsets.',
+ accountDescription: 'Choose where to post journal entries.',
accountsPayable: 'Accounts payable',
accountsPayableDescription: 'Choose where to create vendor bills.',
bankAccount: 'Bank account',
bankAccountDescription: 'Choose where to send checks from.',
- optionBelow: 'Choose an option below:',
companyCardsLocationEnabledDescription:
"QuickBooks Online doesn't support locations on vendor bill exports. As you have locations enabled on your workspace, this export option is unavailable.",
outOfPocketTaxEnabledDescription:
@@ -2066,7 +2091,7 @@ export default {
advancedConfig: {
advanced: 'Advanced',
autoSync: 'Auto-sync',
- autoSyncDescription: 'Sync QuickBooks Online and Expensify automatically, every day.',
+ autoSyncDescription: 'Expensify will automatically sync with QuickBooks Online every day.',
inviteEmployees: 'Invite employees',
inviteEmployeesDescription: 'Import Quickbooks Online employee records and invite employees to this workspace.',
createEntities: 'Auto-create entities',
@@ -2075,8 +2100,8 @@ export default {
reimbursedReportsDescription: 'Any time a report is paid using Expensify ACH, the corresponding bill payment will be created in the Quickbooks Online account below.',
qboBillPaymentAccount: 'QuickBooks bill payment account',
qboInvoiceCollectionAccount: 'QuickBooks invoice collections account',
- accountSelectDescription: "Choose a bank account for reimbursements and we'll create the payment in QuickBooks Online.",
- invoiceAccountSelectorDescription: 'Once an invoice is marked as paid in Expensify and exported to QuickBooks Online, it’ll appear against the account below.',
+ accountSelectDescription: "Choose where to pay bills from and we'll create the payment in QuickBooks Online.",
+ invoiceAccountSelectorDescription: "Choose where to receive invoice payments and we'll create the payment in QuickBooks Online.",
},
accounts: {
[CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.DEBIT_CARD]: 'Debit card',
@@ -2092,8 +2117,8 @@ export default {
[`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}Description`]:
"We'll create an itemized vendor bill for each Expensify report with the date of the last expense, and add it to the account below. If this period is closed, we'll post to the 1st of the next open period.",
- [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.DEBIT_CARD}AccountDescription`]: 'Debit card transactions will export to the bank account below.',
- [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD}AccountDescription`]: 'Credit card transactions will export to the bank account below.',
+ [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.DEBIT_CARD}AccountDescription`]: 'Choose where to export debit card transactions.',
+ [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD}AccountDescription`]: 'Choose where to export credit card transactions.',
[`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}AccountDescription`]: 'Choose a vendor to apply to all credit card transactions.',
[`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}Error`]: 'Vendor bills are unavailable when locations are enabled. Please choose a different export option.',
@@ -2122,7 +2147,6 @@ export default {
default: 'Xero contact default',
tag: 'Tags',
},
- export: 'Export',
exportDescription: 'Configure how Expensify data exports to Xero.',
exportCompanyCard: 'Export company card expenses as',
purchaseBill: 'Purchase bill',
@@ -2130,7 +2154,6 @@ export default {
bankTransactions: 'Bank transactions',
xeroBankAccount: 'Xero bank account',
xeroBankAccountDescription: 'Choose where expenses will post as bank transactions.',
- preferredExporter: 'Preferred exporter',
exportExpenses: 'Export out-of-pocket expenses as',
exportExpensesDescription: 'Reports will export as a purchase bill with the date and status selected below.',
purchaseBillDate: 'Purchase bill date',
@@ -2140,28 +2163,28 @@ export default {
advancedConfig: {
advanced: 'Advanced',
autoSync: 'Auto-sync',
- autoSyncDescription: 'Sync Xero and Expensify automatically, every day.',
+ autoSyncDescription: 'Expensify will automatically sync with Xero every day.',
purchaseBillStatusTitle: 'Purchase bill status',
reimbursedReports: 'Sync reimbursed reports',
reimbursedReportsDescription: 'Any time a report is paid using Expensify ACH, the corresponding bill payment will be created in the Xero account below.',
xeroBillPaymentAccount: 'Xero bill payment account',
xeroInvoiceCollectionAccount: 'Xero invoice collections account',
- invoiceAccountSelectorDescription: 'Once an invoice is marked as paid in Expensify and exported to Xero, it’ll appear against the account below.',
- xeroBillPaymentAccountDescription: "Choose a bank account for reimbursements and we'll create the payment in Xero.",
+ xeroBillPaymentAccountDescription: "Choose where to pay bills from and we'll create the payment in Xero.",
+ invoiceAccountSelectorDescription: "Choose where to receive invoice payments and we'll create the payment in Xero.",
},
exportDate: {
- label: 'Export date',
+ label: 'Purchase bill date',
description: 'Use this date when exporting reports to Xero.',
values: {
- [CONST.QUICKBOOKS_EXPORT_DATE.LAST_EXPENSE]: {
+ [CONST.XERO_EXPORT_DATE.LAST_EXPENSE]: {
label: 'Date of last expense',
description: 'Date of the most recent expense on the report.',
},
- [CONST.QUICKBOOKS_EXPORT_DATE.REPORT_EXPORTED]: {
+ [CONST.XERO_EXPORT_DATE.REPORT_EXPORTED]: {
label: 'Export date',
description: 'Date the report was exported to Xero.',
},
- [CONST.QUICKBOOKS_EXPORT_DATE.REPORT_SUBMITTED]: {
+ [CONST.XERO_EXPORT_DATE.REPORT_SUBMITTED]: {
label: 'Submitted date',
description: 'Date the report was submitted for approval.',
},
@@ -2169,19 +2192,118 @@ export default {
},
invoiceStatus: {
label: 'Purchase bill status',
- description: 'Choose a status for purchase bills exported to Xero.',
+ description: 'Use this status when exporting purchase bills to Xero.',
values: {
[CONST.XERO_CONFIG.INVOICE_STATUS.DRAFT]: 'Draft',
[CONST.XERO_CONFIG.INVOICE_STATUS.AWAITING_APPROVAL]: 'Awaiting approval',
[CONST.XERO_CONFIG.INVOICE_STATUS.AWAITING_PAYMENT]: 'Awaiting payment',
},
},
- exportPreferredExporterNote:
- 'The preferred exporter can be any workspace admin, but must be a domain admin if you set different export accounts for individual company cards in domain settings.',
- exportPreferredExporterSubNote: 'Once set, the preferred exporter will see reports for export in their account.',
noAccountsFound: 'No accounts found',
noAccountsFoundDescription: 'Add the account in Xero and sync the connection again.',
},
+ netsuite: {
+ subsidiary: 'Subsidiary',
+ subsidiarySelectDescription: "Choose the subsidiary in NetSuite that you'd like to import data from.",
+ exportDescription: 'Configure how Expensify data exports to NetSuite.',
+ exportReimbursable: 'Export reimbursable expenses as',
+ exportNonReimbursable: 'Export non-reimbursable expenses as',
+ exportInvoices: 'Export invoices to',
+ journalEntriesTaxPostingAccount: 'Journal entries tax posting account',
+ journalEntriesProvTaxPostingAccount: 'Journal entries provincial tax posting account',
+ foreignCurrencyAmount: 'Export foreign currency amount',
+ exportToNextOpenPeriod: 'Export to next open period',
+ nonReimbursableJournalPostingAccount: 'Non-reimbursable journal posting account',
+ reimbursableJournalPostingAccount: 'Reimbursable journal posting account',
+ journalPostingPreference: {
+ label: 'Journal entries posting preference',
+ values: {
+ [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Single, itemized entry for each report',
+ [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Single entry for each individual expense',
+ },
+ },
+ invoiceItem: {
+ label: 'Invoice item',
+ values: {
+ [CONST.NETSUITE_INVOICE_ITEM_PREFERENCE.CREATE]: {
+ label: 'Create one for me',
+ description: 'We\'ll create an "Expensify invoice line item" for you upon export (if one doesn’t exist already).',
+ },
+ [CONST.NETSUITE_INVOICE_ITEM_PREFERENCE.SELECT]: {
+ label: 'Select existing',
+ description: "We'll tie invoices from Expensify to the item selected below.",
+ },
+ },
+ },
+ exportDate: {
+ label: 'Export date',
+ description: 'Use this date when exporting reports to NetSuite.',
+ values: {
+ [CONST.NETSUITE_EXPORT_DATE.LAST_EXPENSE]: {
+ label: 'Date of last expense',
+ description: 'Date of the most recent expense on the report.',
+ },
+ [CONST.NETSUITE_EXPORT_DATE.EXPORTED]: {
+ label: 'Export date',
+ description: 'Date the report was exported to NetSuite.',
+ },
+ [CONST.NETSUITE_EXPORT_DATE.SUBMITTED]: {
+ label: 'Submitted date',
+ description: 'Date the report was submitted for approval.',
+ },
+ },
+ },
+ exportDestination: {
+ values: {
+ [CONST.NETSUITE_EXPORT_DESTINATION.EXPENSE_REPORT]: {
+ label: 'Expense reports',
+ reimbursableDescription: 'Reimbursable expenses will export as expense reports to NetSuite.',
+ nonReimbursableDescription: 'Non-reimbursable expenses will export as expense reports to NetSuite.',
+ },
+ [CONST.NETSUITE_EXPORT_DESTINATION.VENDOR_BILL]: {
+ label: 'Vendor bills',
+ reimbursableDescription:
+ 'Reimbursable expenses will export as bills payable to the NetSuite vendor specified below.\n' +
+ '\n' +
+ 'If you’d like to set a specific vendor for each card, go to *Settings > Domains > Company Cards*.',
+ nonReimbursableDescription:
+ 'Non-reimbursable expenses will export as bills payable to the NetSuite vendor specified below.\n' +
+ '\n' +
+ 'If you’d like to set a specific vendor for each card, go to *Settings > Domains > Company Cards*.',
+ },
+ [CONST.NETSUITE_EXPORT_DESTINATION.JOURNAL_ENTRY]: {
+ label: 'Journal Entries',
+ reimbursableDescription:
+ 'Reimbursable expenses will export as journal entries to the NetSuite account specified below.\n' +
+ '\n' +
+ 'If you’d like to set a specific vendor for each card, go to *Settings > Domains > Company Cards*.',
+ nonReimbursableDescription:
+ 'Non-reimbursable expenses will export as journal entries to the NetSuite account specified below.\n' +
+ '\n' +
+ 'If you’d like to set a specific vendor for each card, go to *Settings > Domains > Company Cards*.',
+ },
+ },
+ },
+ noAccountsFound: 'No accounts found',
+ noAccountsFoundDescription: 'Add the account in NetSuite and sync the connection again.',
+ noVendorsFound: 'No vendors found',
+ noVendorsFoundDescription: 'Add vendors in NetSuite and sync the connection again.',
+ noItemsFound: 'No invoice items found',
+ noItemsFoundDescription: 'Add invoice items in NetSuite and sync the connection again.',
+ noSubsidiariesFound: 'No subsidiaries found',
+ noSubsidiariesFoundDescription: 'Add the subsidiary in NetSuite and sync the connection again.',
+ },
+ intacct: {
+ sageIntacctSetup: 'Sage Intacct setup',
+ prerequisitesTitle: 'Before you connect...',
+ downloadExpensifyPackage: 'Download the Expensify package for Sage Intacct',
+ followSteps: 'Follow the steps in our How-to: Connect to Sage Intacct instructions',
+ enterCredentials: 'Enter your Sage Intacct credentials',
+ createNewConnection: 'Create new connection',
+ reuseExistingConnection: 'Reuse existing connection',
+ existingConnections: 'Existing connections',
+ sageIntacctLastSync: (formattedDate: string) => `Sage Intacct - Last synced ${formattedDate}`,
+ },
type: {
free: 'Free',
control: 'Control',
@@ -2232,6 +2354,13 @@ export default {
title: 'Distance rates',
subtitle: 'Add, update, and enforce rates.',
},
+ expensifyCard: {
+ title: 'Expensify Card',
+ subtitle: 'Gain insights and control over spend',
+ disableCardTitle: 'Disable Expensify Card',
+ disableCardPrompt: 'You can’t disable the Expensify Card because it’s already in use. Reach out to Concierge for next steps.',
+ disableCardButton: 'Chat with Concierge',
+ },
workflows: {
title: 'Workflows',
subtitle: 'Configure how spend is approved and paid.',
@@ -2354,6 +2483,8 @@ export default {
people: {
genericFailureMessage: 'An error occurred removing a user from the workspace, please try again.',
removeMembersPrompt: 'Are you sure you want to remove these members?',
+ removeMembersWarningPrompt: ({memberName, ownerName}: RemoveMembersWarningPrompt) =>
+ `${memberName} is an approver in this workspace. When you unshare this workspace with them, we’ll replace them in the approval workflow with the workspace owner, ${ownerName}`,
removeMembersTitle: 'Remove members',
removeMemberButtonTitle: 'Remove from workspace',
removeMemberGroupButtonTitle: 'Remove from group',
@@ -2365,25 +2496,53 @@ export default {
selectAll: 'Select all',
error: {
genericAdd: 'There was a problem adding this workspace member.',
- cannotRemove: 'You cannot remove yourself or the workspace owner.',
+ cannotRemove: "You can't remove yourself or the workspace owner.",
genericRemove: 'There was a problem removing that workspace member.',
},
- addedWithPrimary: 'Some users were added with their primary logins.',
+ addedWithPrimary: 'Some members were added with their primary logins.',
invitedBySecondaryLogin: ({secondaryLogin}) => `Added by secondary login ${secondaryLogin}.`,
membersListTitle: 'Directory of all workspace members.',
},
card: {
header: 'Unlock free Expensify Cards',
headerWithEcard: 'Cards are ready!',
- noVBACopy: 'Connect a bank account to issue Expensify Cards to your workspace members, and access these incredible benefits and more:',
- VBANoECardCopy: 'Add a work email address to issue unlimited Expensify Cards for your workspace members, as well as all of these incredible benefits:',
+ noVBACopy: 'Connect a bank account to issue Expensify Cards to your workspace members and access exclusive benefits like:',
+ VBANoECardCopy: 'Add a work email to issue unlimited Expensify Cards to your workspace members and enjoy exclusive benefits like:',
VBAWithECardCopy: 'Access these incredible benefits and more:',
benefit1: 'Cash back on every US purchase',
- benefit2: 'Digital and physical cards',
+ benefit2: 'Unlimited virtual and physical cards',
benefit3: 'No personal liability',
- benefit4: 'Customizable limits',
+ benefit4: 'Customizable limits and spend controls',
addWorkEmail: 'Add work email address',
- checkingDomain: 'Hang tight! We are still working on enabling your Expensify Cards. Check back here in a few minutes.',
+ checkingDomain: "Hang tight! We're still working on enabling your Expensify Cards. Check back here in a few minutes.",
+ issueCard: 'Issue card',
+ issueNewCard: {
+ whoNeedsCard: 'Who needs a card?',
+ findMember: 'Find member',
+ chooseCardType: 'Choose a card type',
+ physicalCard: 'Physical card',
+ physicalCardDescription: 'Great for the frequent spender',
+ virtualCard: 'Virtual card',
+ virtualCardDescription: 'Instant and flexible',
+ chooseLimitType: 'Choose a limit type',
+ smartLimit: 'Smart Limit',
+ smartLimitDescription: 'Spend up to a certain amount before requiring approval',
+ monthly: 'Monthly',
+ monthlyDescription: 'Spend up to a certain amount per month',
+ fixedAmount: 'Fixed amount',
+ fixedAmountDescription: 'Spend up to a certain amount once',
+ setLimit: 'Set a limit',
+ giveItName: 'Give it a name',
+ giveItNameInstruction: 'Make it unique enough to tell apart from the other. Specific use cases are even better!',
+ cardName: 'Card name',
+ letsDoubleCheck: 'Let’s double check that everything looks right.',
+ willBeReady: 'This card will be ready to use immediately.',
+ cardholder: 'Cardholder',
+ cardType: 'Card type',
+ limit: 'Limit',
+ limitType: 'Limit type',
+ name: 'Name',
+ },
},
reimburse: {
captureReceipts: 'Capture receipts',
@@ -2397,10 +2556,10 @@ export default {
trackDistanceChooseUnit: 'Choose a default unit to track.',
unlockNextDayReimbursements: 'Unlock next-day reimbursements',
captureNoVBACopyBeforeEmail: 'Ask your workspace members to forward receipts to ',
- captureNoVBACopyAfterEmail: ' and download the Expensify App to track cash expenses on the go.',
- unlockNoVBACopy: 'Connect a bank account to reimburse your workspace members online.',
+ captureNoVBACopyAfterEmail: ' and download the Expensify app to track expenses on the go.',
+ unlockNoVBACopy: 'Connect a bank account to reimburse your workspace members quickly and easily.',
fastReimbursementsVBACopy: "You're all set to reimburse receipts from your bank account!",
- updateCustomUnitError: "Your changes couldn't be saved. The workspace was modified while you were offline, please try again.",
+ updateCustomUnitError: "Your changes couldn't be saved because the workspace was modified while you were offline. Please try again.",
invalidRateError: 'Please enter a valid rate.',
lowRateError: 'Rate must be greater than 0.',
},
@@ -2410,8 +2569,10 @@ export default {
subtitle: 'Connect to your accounting system to code transactions with your chart of accounts, auto-match payments, and keep your finances in sync.',
qbo: 'Quickbooks Online',
xero: 'Xero',
+ netsuite: 'NetSuite',
+ intacct: 'Sage Intacct',
setup: 'Connect',
- lastSync: 'Last synced just now',
+ lastSync: (relativeDate: string) => `Last synced ${relativeDate}`,
import: 'Import',
export: 'Export',
advanced: 'Advanced',
@@ -2419,22 +2580,19 @@ export default {
syncNow: 'Sync now',
disconnect: 'Disconnect',
disconnectTitle: (integration?: ConnectionName): string => {
- switch (integration) {
- case CONST.POLICY.CONNECTIONS.NAME.QBO:
- return 'Disconnect QuickBooks Online';
- case CONST.POLICY.CONNECTIONS.NAME.XERO:
- return 'Disconnect Xero';
- default: {
- return 'Disconnect integration';
- }
- }
+ const integrationName = integration && CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[integration] ? CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[integration] : 'integration';
+ return `Disconnect ${integrationName}`;
},
+ connectTitle: (integrationToConnect: ConnectionName): string => `Connect ${CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[integrationToConnect] ?? 'accounting integration'}`,
+
syncError: (integration?: ConnectionName): string => {
switch (integration) {
case CONST.POLICY.CONNECTIONS.NAME.QBO:
return "Can't connect to QuickBooks Online.";
case CONST.POLICY.CONNECTIONS.NAME.XERO:
return "Can't connect to Xero.";
+ case CONST.POLICY.CONNECTIONS.NAME.NETSUITE:
+ return "Can't connect to NetSuite.";
default: {
return "Can't connect to integration.";
}
@@ -2444,34 +2602,26 @@ export default {
taxes: 'Taxes',
imported: 'Imported',
notImported: 'Not imported',
- importAsCategory: 'Imported, displayed as categories',
+ importAsCategory: 'Imported as categories',
importTypes: {
[CONST.INTEGRATION_ENTITY_MAP_TYPES.IMPORTED]: 'Imported',
- [CONST.INTEGRATION_ENTITY_MAP_TYPES.TAG]: 'Imported, displayed as tags',
+ [CONST.INTEGRATION_ENTITY_MAP_TYPES.TAG]: 'Imported as tags',
[CONST.INTEGRATION_ENTITY_MAP_TYPES.DEFAULT]: 'Imported',
[CONST.INTEGRATION_ENTITY_MAP_TYPES.NOT_IMPORTED]: 'Not imported',
[CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE]: 'Not imported',
- [CONST.INTEGRATION_ENTITY_MAP_TYPES.REPORT_FIELD]: 'Imported, displayed as report fields',
+ [CONST.INTEGRATION_ENTITY_MAP_TYPES.REPORT_FIELD]: 'Imported as report fields',
},
- disconnectPrompt: (integrationToConnect?: ConnectionName, currentIntegration?: ConnectionName): string => {
- switch (integrationToConnect) {
- case CONST.POLICY.CONNECTIONS.NAME.QBO:
- return 'Are you sure you want to disconnect Xero to set up QuickBooks Online?';
- case CONST.POLICY.CONNECTIONS.NAME.XERO:
- return 'Are you sure you want to disconnect QuickBooks Online to set up Xero?';
- default: {
- switch (currentIntegration) {
- case CONST.POLICY.CONNECTIONS.NAME.QBO:
- return 'Are you sure you want to disconnect QuickBooks Online?';
- case CONST.POLICY.CONNECTIONS.NAME.XERO:
- return 'Are you sure you want to disconnect Xero?';
- default: {
- return 'Are you sure you want to disconnect this integration?';
- }
- }
- }
- }
+ disconnectPrompt: (currentIntegration?: ConnectionName): string => {
+ const integrationName =
+ currentIntegration && CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[currentIntegration]
+ ? CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[currentIntegration]
+ : 'this integration';
+ return `Are you sure you want to disconnect ${integrationName}?`;
},
+ connectPrompt: (integrationToConnect: ConnectionName): string =>
+ `Are you sure you want to connect ${
+ CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[integrationToConnect] ?? 'this accounting integration'
+ }? This will remove any existing acounting connections.`,
enterCredentials: 'Enter your credentials',
connections: {
syncStageName: (stage: PolicyConnectionSyncStage) => {
@@ -2479,6 +2629,8 @@ export default {
case 'quickbooksOnlineImportCustomers':
return 'Importing customers';
case 'quickbooksOnlineImportEmployees':
+ case 'netSuiteSyncImportEmployees':
+ case 'intacctImportEmployees':
return 'Importing employees';
case 'quickbooksOnlineImportAccounts':
return 'Importing accounts';
@@ -2489,6 +2641,7 @@ export default {
case 'quickbooksOnlineImportProcessing':
return 'Processing imported data';
case 'quickbooksOnlineSyncBillPayments':
+ case 'intacctImportSyncBillPayments':
return 'Syncing reimbursed reports and bill payments';
case 'quickbooksOnlineSyncTaxCodes':
return 'Importing tax codes';
@@ -2503,6 +2656,8 @@ export default {
case 'quickbooksOnlineSyncTitle':
return 'Syncing QuickBooks Online data';
case 'quickbooksOnlineSyncLoadData':
+ case 'xeroSyncStep':
+ case 'intacctImportData':
return 'Loading data';
case 'quickbooksOnlineSyncApplyCategories':
return 'Updating categories';
@@ -2532,8 +2687,6 @@ export default {
return 'Checking Xero connection';
case 'xeroSyncTitle':
return 'Syncing Xero data';
- case 'xeroSyncStep':
- return 'Loading data';
case 'netSuiteSyncConnection':
return 'Initializing connection to NetSuite';
case 'netSuiteSyncCustomers':
@@ -2552,8 +2705,6 @@ export default {
return 'Syncing currencies';
case 'netSuiteSyncCategories':
return 'Syncing categories';
- case 'netSuiteSyncImportEmployees':
- return 'Importing employees';
case 'netSuiteSyncReportFields':
return 'Importing data as Expensify report fields';
case 'netSuiteSyncTags':
@@ -2564,12 +2715,22 @@ export default {
return 'Marking Expensify reports as reimbursed';
case 'netSuiteSyncExpensifyReimbursedReports':
return 'Marking NetSuite bills and invoices as paid';
+ case 'intacctCheckConnection':
+ return 'Checking Sage Intacct connection';
+ case 'intacctImportTitle':
+ return 'Importing Sage Intacct data';
default: {
return `Translation missing for stage: ${stage}`;
}
}
},
},
+ preferredExporter: 'Preferred exporter',
+ exportPreferredExporterNote:
+ 'The preferred exporter can be any workspace admin, but must also be a Domain Admin if you set different export accounts for individual company cards in Domain Settings.',
+ exportPreferredExporterSubNote: 'Once set, the preferred exporter will see reports for export in their account.',
+ exportAs: 'Export as',
+ defaultVendor: 'Default vendor',
},
bills: {
manageYourBills: 'Manage your bills',
@@ -2583,10 +2744,10 @@ export default {
},
invoices: {
invoiceClientsAndCustomers: 'Invoice clients and customers',
- invoiceFirstSectionCopy: 'Send beautiful, professional invoices directly to your clients and customers right from within the Expensify app.',
+ invoiceFirstSectionCopy: 'Send beautiful, professional invoices directly to your clients and customers right from the Expensify app.',
viewAllInvoices: 'View all invoices',
unlockOnlineInvoiceCollection: 'Unlock online invoice collection',
- unlockNoVBACopy: 'Connect your bank account to accept online payments for invoices - by ACH or credit card - to be deposited straight into your account.',
+ unlockNoVBACopy: 'Connect your bank account to accept online invoice payments by ACH or credit card.',
moneyBackInAFlash: 'Money back, in a flash!',
unlockVBACopy: "You're all set to accept payments by ACH or credit card!",
viewUnpaidInvoices: 'View unpaid invoices',
@@ -2612,7 +2773,7 @@ export default {
member: 'Invite member',
members: 'Invite members',
invitePeople: 'Invite new members',
- genericFailureMessage: 'An error occurred inviting the user to the workspace, please try again.',
+ genericFailureMessage: 'An error occurred inviting the member to the workspace. Please try again.',
pleaseEnterValidLogin: `Please ensure the email or phone number is valid (e.g. ${CONST.EXAMPLE_PHONE_NUMBER}).`,
user: 'user',
users: 'users',
@@ -2626,14 +2787,14 @@ export default {
inviteMessageTitle: 'Add message',
inviteMessagePrompt: 'Make your invitation extra special by adding a message below',
personalMessagePrompt: 'Message',
- genericFailureMessage: 'An error occurred inviting the user to the workspace, please try again.',
+ genericFailureMessage: 'An error occurred inviting the member to the workspace. Please try again.',
inviteNoMembersError: 'Please select at least one member to invite.',
},
distanceRates: {
oopsNotSoFast: 'Oops! Not so fast...',
workspaceNeeds: 'A workspace needs at least one enabled distance rate.',
distance: 'Distance',
- centrallyManage: 'Centrally manage rates, choose to track in miles or kilometers, and set a default category.',
+ centrallyManage: 'Centrally manage rates, track in miles or kilometers, and set a default category.',
rate: 'Rate',
addRate: 'Add rate',
trackTax: 'Track tax',
@@ -2652,27 +2813,26 @@ export default {
editor: {
descriptionInputLabel: 'Description',
nameInputLabel: 'Name',
- nameInputHelpText: 'This is the name you will see on your workspace.',
- nameIsRequiredError: 'You need to define a name for your workspace.',
+ nameInputHelpText: "This is the name you'll see on your workspace.",
+ nameIsRequiredError: "You'll need to give your workspace a name.",
currencyInputLabel: 'Default currency',
currencyInputHelpText: 'All expenses on this workspace will be converted to this currency.',
currencyInputDisabledText: "The default currency can't be changed because this workspace is linked to a USD bank account.",
save: 'Save',
- genericFailureMessage: 'An error occurred updating the workspace, please try again.',
- avatarUploadFailureMessage: 'An error occurred uploading the avatar, please try again.',
- addressContext: 'A workspace address is required to enable Expensify Travel. Please enter an address associated with your business.',
+ genericFailureMessage: 'An error occurred updating the workspace. Please try again.',
+ avatarUploadFailureMessage: 'An error occurred uploading the avatar. Please try again.',
+ addressContext: 'A Workspace Address is required to enable Expensify Travel. Please enter an address associated with your business.',
},
bankAccount: {
continueWithSetup: 'Continue with setup',
- youreAlmostDone:
- "You're almost done setting up your bank account, which will let you issue corporate cards, reimburse expenses, collect invoices, and pay bills all from the same bank account.",
+ youreAlmostDone: "You're almost done setting up your bank account, which will let you issue corporate cards, reimburse expenses, collect invoices, and pay bills.",
streamlinePayments: 'Streamline payments',
oneMoreThing: 'One more thing!',
allSet: "You're all set!",
accountDescriptionNoCards:
- 'This bank account will be used to reimburse expenses, collect invoices, and pay bills all from the same account.\n\nPlease add a work email address as a secondary login to enable the Expensify Card.',
- accountDescriptionWithCards: 'This bank account will be used to issue corporate cards, reimburse expenses, collect invoices, and pay bills all from the same account.',
- addWorkEmail: 'Add work email address',
+ 'This bank account will be used to reimburse expenses, collect invoices, and pay bills.\n\nPlease add a work email as a secondary login to enable the Expensify Card.',
+ accountDescriptionWithCards: 'This bank account will be used to issue corporate cards, reimburse expenses, collect invoices, and pay bills.',
+ addWorkEmail: 'Add work email',
letsFinishInChat: "Let's finish in chat!",
almostDone: 'Almost done!',
disconnectBankAccount: 'Disconnect bank account',
@@ -2682,7 +2842,7 @@ export default {
yesStartOver: 'Yes, start over',
disconnectYour: 'Disconnect your ',
bankAccountAnyTransactions: ' bank account. Any outstanding transactions for this account will still complete.',
- clearProgress: 'Starting over will clear the progress you have made so far.',
+ clearProgress: "Starting over will clear any progress you've made.",
areYouSure: 'Are you sure?',
workspaceCurrency: 'Workspace currency',
updateCurrencyPrompt: 'It looks like your workspace is currently set to a different currency than USD. Please click the button below to update your currency to USD now.',
@@ -2704,7 +2864,7 @@ export default {
addPaymentCardSecurity: 'security',
amountOwedTitle: 'Outstanding balance',
amountOwedButtonText: 'OK',
- amountOwedText: 'This account has an outstanding balance from a previous month.\n\nDo you want to clear balance and take over billing of this workspace?',
+ amountOwedText: 'This account has an outstanding balance from a previous month.\n\nDo you want to clear the balance and take over billing of this workspace?',
ownerOwesAmountTitle: 'Outstanding balance',
ownerOwesAmountButtonText: 'Transfer balance',
ownerOwesAmountText: ({email, amount}) =>
@@ -2712,7 +2872,7 @@ export default {
subscriptionTitle: 'Take over annual subscription',
subscriptionButtonText: 'Transfer subscription',
subscriptionText: ({usersCount, finalCount}) =>
- `Taking over this workspace will merge its associated annual subscription with your current subscription. This will increase your subscription size by ${usersCount} users making your new subscription size ${finalCount}. Would you like to continue?`,
+ `Taking over this workspace will merge its annual subscription with your current subscription. This will increase your subscription size by ${usersCount} members making your new subscription size ${finalCount}. Would you like to continue?`,
duplicateSubscriptionTitle: 'Duplicate subscription alert',
duplicateSubscriptionButtonText: 'Continue',
duplicateSubscriptionText: ({email, workspaceName}) =>
@@ -2720,7 +2880,7 @@ export default {
hasFailedSettlementsTitle: 'Cannot transfer ownership',
hasFailedSettlementsButtonText: 'Got it',
hasFailedSettlementsText: ({email}) =>
- `You cannot take over billing because ${email} has an overdue expensify Expensify Card settlement. Please advise them to reach out to concierge@expensify.com to resolve the issue. Then, you can take over billing for this workspace.`,
+ `You can't take over billing because ${email} has an overdue expensify Expensify Card settlement. Please ask them to reach out to concierge@expensify.com to resolve the issue. Then, you can take over billing for this workspace.`,
failedToClearBalanceTitle: 'Failed to clear balance',
failedToClearBalanceButtonText: 'OK',
failedToClearBalanceText: 'We were unable to clear the balance. Please try again later.',
@@ -2781,14 +2941,14 @@ export default {
createRoom: 'Create room',
roomAlreadyExistsError: 'A room with this name already exists.',
roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} is a default room on all workspaces. Please choose another name.`,
- roomNameInvalidError: 'Room names can only include lowercase letters, numbers and hyphens.',
+ roomNameInvalidError: 'Room names can only include lowercase letters, numbers, and hyphens.',
pleaseEnterRoomName: 'Please enter a room name.',
pleaseSelectWorkspace: 'Please select a workspace.',
renamedRoomAction: ({oldName, newName}: RenamedRoomActionParams) => ` renamed this room from ${oldName} to ${newName}`,
roomRenamedTo: ({newName}: RoomRenamedToParams) => `Room renamed to ${newName}`,
social: 'social',
selectAWorkspace: 'Select a workspace',
- growlMessageOnRenameError: 'Unable to rename policy room, please check your connection and try again.',
+ growlMessageOnRenameError: 'Unable to rename workspace room. Please check your connection and try again.',
visibilityOptions: {
restricted: 'Workspace', // the translation for "restricted" visibility is actually workspace. This is so we can display restricted visibility rooms as "workspace" without having to change what's stored.
private: 'Private',
@@ -2798,8 +2958,8 @@ export default {
},
},
roomMembersPage: {
- memberNotFound: 'Member not found. To invite a new member to the room, please use the Invite button above.',
- notAuthorized: `You do not have access to this page. Are you trying to join the room? Please reach out to a member of this room so they can add you as a member! Something else? Reach out to ${CONST.EMAIL.CONCIERGE}`,
+ memberNotFound: 'Member not found. To invite a new member to the room, please use the invite button above.',
+ notAuthorized: `You don't have access to this page. If you're trying to join this room, just ask a room member to add you. Something else? Reach out to ${CONST.EMAIL.CONCIERGE}`,
removeMembersPrompt: 'Are you sure you want to remove the selected members from the room?',
error: {
genericAdd: 'There was a problem adding this room member.',
@@ -2826,18 +2986,18 @@ export default {
completed: 'marked as complete',
canceled: 'deleted task',
reopened: 'marked as incomplete',
- error: 'You do not have the permission to do the requested action.',
+ error: "You don't have permission to take the requested action.",
},
markAsComplete: 'Mark as complete',
markAsIncomplete: 'Mark as incomplete',
- assigneeError: 'There was an error assigning this task, please try another assignee.',
- genericCreateTaskFailureMessage: 'Unexpected error create task, please try again later.',
+ assigneeError: 'There was an error assigning this task. Please try another assignee.',
+ genericCreateTaskFailureMessage: 'There was an error creating this task. Please try again later.',
deleteTask: 'Delete task',
- deleteConfirmation: 'Are you sure that you want to delete this task?',
+ deleteConfirmation: 'Are you sure you want to delete this task?',
},
statementPage: {
title: (year, monthName) => `${monthName} ${year} statement`,
- generatingPDF: "We're generating your PDF right now. Please come back later!",
+ generatingPDF: "We're generating your PDF right now. Please check back soon!",
},
keyboardShortcutsPage: {
title: 'Keyboard shortcuts',
@@ -2868,7 +3028,7 @@ export default {
genericErrorPage: {
title: 'Uh-oh, something went wrong!',
body: {
- helpTextMobile: 'Please try closing and reopening the app or switching to',
+ helpTextMobile: 'Please close and reopen the app, or switch to',
helpTextWeb: 'web.',
helpTextConcierge: 'If the problem persists, reach out to',
},
@@ -2881,12 +3041,12 @@ export default {
qrMessage: 'Check your photos or downloads folder for a copy of your QR code. Protip: Add it to a presentation for your audience to scan and connect with you directly.',
},
generalError: {
- title: 'Attachment Error',
- message: 'Attachment cannot be downloaded.',
+ title: 'Attachment error',
+ message: "Attachment can't be downloaded.",
},
permissionError: {
title: 'Storage access',
- message: "Expensify can't save attachments without storage access. Tap Settings to update permissions.",
+ message: "Expensify can't save attachments without storage access. Tap settings to update permissions.",
},
},
desktopApplicationMenu: {
@@ -2942,27 +3102,55 @@ export default {
},
checkForUpdatesModal: {
available: {
- title: 'Update Available',
+ title: 'Update available',
message: ({isSilentUpdating}: {isSilentUpdating: boolean}) =>
`The new version will be available shortly.${!isSilentUpdating ? " We'll notify you when we're ready to update." : ''}`,
soundsGood: 'Sounds good',
},
notAvailable: {
- title: 'Update Not Available',
- message: 'There is no update available as of now! Check again at a later time.',
+ title: 'Update unavailable',
+ message: "There's no update available right now. Please check back later!",
okay: 'Okay',
},
error: {
- title: 'Update Check Failed.',
- message: "We couldn't look for an update. Please check again in a bit!.",
+ title: 'Update check failed.',
+ message: "We couldn't check for an update. Please try again in a bit.",
},
},
report: {
- genericCreateReportFailureMessage: 'Unexpected error creating this chat, please try again later.',
- genericAddCommentFailureMessage: 'Unexpected error while posting the comment, please try again later.',
- genericUpdateReportFieldFailureMessage: 'Unexpected error while updating the field, please try again later.',
- genericUpdateReporNameEditFailureMessage: 'Unexpected error while renaming the report, please try again later.',
+ genericCreateReportFailureMessage: 'Unexpected error creating this chat. Please try again later.',
+ genericAddCommentFailureMessage: 'Unexpected error posting the comment. Please try again later.',
+ genericUpdateReportFieldFailureMessage: 'Unexpected error updating the field. Please try again later.',
+ genericUpdateReporNameEditFailureMessage: 'Unexpected error renaming the report. Please try again later.',
noActivityYet: 'No activity yet',
+ actions: {
+ type: {
+ changeField: ({oldValue, newValue, fieldName}: ChangeFieldParams) => `changed ${fieldName} from ${oldValue} to ${newValue}`,
+ changeFieldEmpty: ({newValue, fieldName}: ChangeFieldParams) => `changed ${fieldName} to ${newValue}`,
+ changePolicy: ({fromPolicy, toPolicy}: ChangePolicyParams) => `changed policy from ${fromPolicy} to ${toPolicy}`,
+ changeType: ({oldType, newType}: ChangeTypeParams) => `changed type from ${oldType} to ${newType}`,
+ delegateSubmit: ({delegateUser, originalManager}: DelegateSubmitParams) => `sent this report to ${delegateUser} since ${originalManager} is on vacation`,
+ exportedToCSV: `exported this report to CSV`,
+ exportedToIntegration: ({label}: ExportedToIntegrationParams) => `exported this report to ${label}`,
+ forwarded: ({amount, currency}: ForwardedParams) => `approved ${currency}${amount}`,
+ integrationsMessage: ({errorMessage, label}: IntegrationsMessageParams) => `failed to export this report to ${label}. ${errorMessage}`,
+ managerAttachReceipt: `added a receipt`,
+ managerDetachReceipt: `removed the receipt`,
+ markedReimbursed: ({amount, currency}: MarkedReimbursedParams) => `paid ${currency}${amount} elsewhere`,
+ markedReimbursedFromIntegration: ({amount, currency}: MarkReimbursedFromIntegrationParams) => `paid ${currency}${amount} via integration`,
+ outdatedBankAccount: `couldn’t process the payment due to a problem with the payer’s bank account`,
+ reimbursementACHBounce: `couldn’t process the payment, as the payer doesn’t have sufficient funds`,
+ reimbursementACHCancelled: `canceled the payment`,
+ reimbursementAccountChanged: `couldn’t process the payment, as the payer changed bank accounts`,
+ reimbursementDelayed: `processed the payment but it’s delayed by 1-2 more business days`,
+ selectedForRandomAudit: `[randomly selected](https://help.expensify.com/articles/expensify-classic/reports/Set-a-random-report-audit-schedule) for review`,
+ share: ({to}: ShareParams) => `invited user ${to}`,
+ unshare: ({to}: UnshareParams) => `removed user ${to}`,
+ stripePaid: ({amount, currency}: StripePaidParams) => `paid ${currency}${amount}`,
+ takeControl: `took control`,
+ unapproved: ({amount, currency}: UnapprovedParams) => `unapproved ${currency}${amount}`,
+ },
+ },
},
chronos: {
oooEventSummaryFullDay: ({summary, dayCount, date}: OOOEventSummaryFullDayParams) => `${summary} for ${dayCount} ${dayCount === 1 ? 'day' : 'days'} until ${date}`,
@@ -3121,8 +3309,8 @@ export default {
reasonTitle: 'Why do you need a new card?',
cardDamaged: 'My card was damaged',
cardLostOrStolen: 'My card was lost or stolen',
- confirmAddressTitle: "Please confirm the address below is where you'd like us to send your new card.",
- cardDamagedInfo: 'Your new card will arrive in 2-3 business days, and your existing card will continue to work until you activate your new one.',
+ confirmAddressTitle: 'Please confirm the mailing address for your new card.',
+ cardDamagedInfo: 'Your new card will arrive in 2-3 business days. Your current card will continue to work until you activate your new one.',
cardLostOrStolenInfo: 'Your current card will be permanently deactivated as soon as your order is placed. Most cards arrive in a few business days.',
address: 'Address',
deactivateCardButton: 'Deactivate card',
@@ -3276,6 +3464,55 @@ export default {
subscription: {
mobileReducedFunctionalityMessage: 'You can’t make changes to your subscription in the mobile app.',
billingBanner: {
+ policyOwnerAmountOwed: {
+ title: 'Your payment info is outdated',
+ subtitle: ({date}) => `Update your payment card by ${date} to continue using all of your favorite features.`,
+ },
+ policyOwnerAmountOwedOverdue: {
+ title: 'Your payment info is outdated',
+ subtitle: 'Please update your payment information.',
+ },
+ policyOwnerUnderInvoicing: {
+ title: 'Your payment info is outdated',
+ subtitle: ({date}) => `Your payment is past due. Please pay your invoice by ${date} to avoid service interruption.`,
+ },
+ policyOwnerUnderInvoicingOverdue: {
+ title: 'Your payment info is outdated',
+ subtitle: 'Your payment is past due. Please pay your invoice.',
+ },
+ billingDisputePending: {
+ title: 'Your card couldn’t be charged',
+ subtitle: ({amountOwed, cardEnding}) =>
+ `You disputed the ${amountOwed} charge on the card ending in ${cardEnding}. Your account will be locked until the dispute is resolved with your bank.`,
+ },
+ cardAuthenticationRequired: {
+ title: 'Your card couldn’t be charged',
+ subtitle: ({cardEnding}) =>
+ `Your payment card hasn’t been fully authenticated. Please complete the authentication process to activate your payment card ending in ${cardEnding}.`,
+ },
+ insufficientFunds: {
+ title: 'Your card couldn’t be charged',
+ subtitle: ({amountOwed}) =>
+ `Your payment card was declined due to insufficient funds. Please retry or add a new payment card to clear your ${amountOwed} outstanding balance.`,
+ },
+ cardExpired: {
+ title: 'Your card couldn’t be charged',
+ subtitle: ({amountOwed}) => `Your payment card expired. Please add a new payment card to clear your ${amountOwed} outstanding balance.`,
+ },
+ cardExpireSoon: {
+ title: 'Your card is expiring soon',
+ subtitle: 'Your payment card will expire at the end of this month. Click the three-dot menu below to update it and continue using all your favorite features.',
+ },
+ retryBillingSuccess: {
+ title: 'Success!',
+ subtitle: 'Your card has been billed successfully.',
+ },
+ retryBillingError: {
+ title: 'Your card couldn’t be charged',
+ subtitle: 'Before retrying, please call your bank directly to authorize Expensify charges and remove any holds. Otherwise, try adding a different payment card.',
+ },
+ cardOnDispute: ({amountOwed, cardEnding}) =>
+ `You disputed the ${amountOwed} charge on the card ending in ${cardEnding}. Your account will be locked until the dispute is resolved with your bank.`,
preTrial: {
title: 'Start a free trial',
subtitle: 'To get started, ',
@@ -3293,6 +3530,7 @@ export default {
changeCurrency: 'Change payment currency',
cardNotFound: 'No payment card added',
retryPaymentButton: 'Retry payment',
+ viewPaymentHistory: 'View payment history',
},
yourPlan: {
title: 'Your plan',
@@ -3360,7 +3598,7 @@ export default {
title: 'Subscription settings',
autoRenew: 'Auto-renew',
autoIncrease: 'Auto-increase annual seats',
- saveUpTo: ({amountSaved}) => `Save up to $${amountSaved}/month per active member`,
+ saveUpTo: ({amountWithCurrency}) => `Save up to ${amountWithCurrency}/month per active member`,
automaticallyIncrease:
'Automatically increase your annual seats to accommodate for active members that exceed your subscription size. Note: This will extend your annual subscription end date.',
disableAutoRenew: 'Disable auto-renew',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 8572a21d6bd5..cd9a60e695f0 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -11,10 +11,14 @@ import type {
BeginningOfChatHistoryAnnounceRoomPartTwo,
BeginningOfChatHistoryDomainRoomPartOneParams,
CanceledRequestParams,
+ ChangeFieldParams,
+ ChangePolicyParams,
+ ChangeTypeParams,
CharacterLimitParams,
ConfirmThatParams,
DateShouldBeAfterParams,
DateShouldBeBeforeParams,
+ DelegateSubmitParams,
DeleteActionParams,
DeleteConfirmationParams,
DidSplitAmountMessageParams,
@@ -23,15 +27,20 @@ import type {
ElectronicFundsParams,
EnglishTranslation,
EnterMagicCodeParams,
+ ExportedToIntegrationParams,
FormattedMaxLengthParams,
+ ForwardedParams,
GoBackMessageParams,
GoToRoomParams,
InstantSummaryParams,
+ IntegrationsMessageParams,
LocalTimeParams,
LoggedInAsParams,
LogSizeParams,
ManagerApprovedAmountParams,
ManagerApprovedParams,
+ MarkedReimbursedParams,
+ MarkReimbursedFromIntegrationParams,
NoLongerHaveAccessParams,
NotAllowedExtensionParams,
NotYouParams,
@@ -49,6 +58,7 @@ import type {
PaySomeoneParams,
ReimbursementRateParams,
RemovedTheRequestParams,
+ RemoveMembersWarningPrompt,
RenamedRoomActionParams,
ReportArchiveReasonsClosedParams,
ReportArchiveReasonsMergedParams,
@@ -64,16 +74,20 @@ import type {
SetTheRequestParams,
SettledAfterAddedBankAccountParams,
SettleExpensifyCardParams,
+ ShareParams,
SignUpNewFaceCodeParams,
SizeExceededParams,
SplitAmountParams,
StepCounterParams,
+ StripePaidParams,
TaskCreatedActionParams,
TermsParams,
ThreadRequestReportNameParams,
ThreadSentMoneyReportNameParams,
ToValidateLoginParams,
TransferParams,
+ UnapprovedParams,
+ UnshareParams,
UntilTimeParams,
UpdatedTheDistanceParams,
UpdatedTheRequestParams,
@@ -264,7 +278,7 @@ export default {
your: 'tu',
conciergeHelp: 'Por favor, contacta con Concierge para obtener ayuda.',
youAppearToBeOffline: 'Parece que estás desconectado.',
- thisFeatureRequiresInternet: 'Esta función requiere una conexión a Internet activa para ser utilizada.',
+ thisFeatureRequiresInternet: 'Esta función requiere una conexión a Internet activa.',
attachementWillBeAvailableOnceBackOnline: 'El archivo adjunto estará disponible cuando vuelvas a estar en línea.',
areYouSure: '¿Estás seguro?',
verify: 'Verifique',
@@ -330,15 +344,17 @@ export default {
shared: 'Compartidos',
drafts: 'Borradores',
finished: 'Finalizados',
+ companyID: 'Empresa ID',
+ userID: 'Usuario ID',
disable: 'Deshabilitar',
},
connectionComplete: {
- title: 'Conexión Completa',
+ title: 'Conexión completa',
supportingText: 'Ya puedes cerrar esta página y volver a la App de Expensify.',
},
location: {
useCurrent: 'Usar ubicación actual',
- notFound: 'No pudimos encontrar tu ubicación, inténtalo de nuevo o introduce una dirección manualmente.',
+ notFound: 'No pudimos encontrar tu ubicación. Inténtalo de nuevo o introduce una dirección manualmente.',
permissionDenied: 'Parece que has denegado el permiso a tu ubicación.',
please: 'Por favor,',
allowPermission: 'habilita el permiso de ubicación en la configuración',
@@ -349,7 +365,7 @@ export default {
},
attachmentPicker: {
cameraPermissionRequired: 'Permiso para acceder a la cámara',
- expensifyDoesntHaveAccessToCamera: 'Expensify no puede tomar fotos sin acceso a la cámara. Haz click en Configuración para actualizar los permisos.',
+ expensifyDoesntHaveAccessToCamera: 'Expensify no puede tomar fotos sin acceso a la cámara. Haz click en configuración para actualizar los permisos.',
attachmentError: 'Error al adjuntar archivo',
errorWhileSelectingAttachment: 'Ha ocurrido un error al seleccionar un archivo adjunto. Por favor, inténtalo de nuevo.',
errorWhileSelectingCorruptedAttachment: 'Ha ocurrido un error al seleccionar un archivo adjunto corrupto. Por favor, inténtalo con otro archivo.',
@@ -421,7 +437,7 @@ export default {
welcomeText: {
getStarted: 'Comience a continuación.',
anotherLoginPageIsOpen: 'Otra página de inicio de sesión está abierta.',
- anotherLoginPageIsOpenExplanation: 'Ha abierto la página de inicio de sesión en una pestaña separada, inicie sesión desde esa pestaña específica.',
+ anotherLoginPageIsOpenExplanation: 'Ha abierto la página de inicio de sesión en una pestaña separada. Inicie sesión desde esa pestaña específica.',
welcome: '¡Bienvenido!',
welcomeWithoutExclamation: 'Bienvenido',
phrase2: 'El dinero habla. Y ahora que chat y pagos están en un mismo lugar, es también fácil.',
@@ -447,7 +463,7 @@ export default {
},
samlSignIn: {
welcomeSAMLEnabled: 'Continua iniciando sesión con el inicio de sesión único:',
- orContinueWithMagicCode: 'O, opcionalmente, tu empresa te permite iniciar sesión con un código mágico',
+ orContinueWithMagicCode: 'También puedes iniciar sesión con un código mágico',
useSingleSignOn: 'Usar el inicio de sesión único',
useMagicCode: 'Usar código mágico',
launching: 'Cargando...',
@@ -544,7 +560,7 @@ export default {
reportTypingIndicator: {
isTyping: 'está escribiendo...',
areTyping: 'están escribiendo...',
- multipleUsers: 'Varios usuarios',
+ multipleUsers: 'Varios miembros',
},
reportArchiveReasons: {
[CONST.REPORT.ARCHIVE_REASON.DEFAULT]: 'Esta sala de chat ha sido eliminada.',
@@ -596,7 +612,7 @@ export default {
takePhoto: 'Haz una foto',
cameraAccess: 'Se requiere acceso a la cámara para hacer fotos de los recibos.',
cameraErrorTitle: 'Error en la cámara',
- cameraErrorMessage: 'Se produjo un error al hacer una foto, Por favor, inténtalo de nuevo.',
+ cameraErrorMessage: 'Se produjo un error al hacer una foto. Por favor, inténtalo de nuevo.',
dropTitle: 'Suéltalo',
dropMessage: 'Suelta tu archivo aquí',
flash: 'flash',
@@ -652,15 +668,15 @@ export default {
canceled: 'Canceló',
posted: 'Contabilizado',
deleteReceipt: 'Eliminar recibo',
- pendingMatchWithCreditCard: 'Recibo pendiente de adjuntar con la tarjeta de crédito.',
- pendingMatchWithCreditCardDescription: 'Recibo pendiente de adjuntar con tarjeta de crédito. Marca como efectivo para ignorar y solicitar pago.',
+ pendingMatchWithCreditCard: 'Recibo pendiente de adjuntar con la transacción de la tarjeta',
+ pendingMatchWithCreditCardDescription: 'Recibo pendiente de adjuntar con la transacción de la tarjeta. Márcalo como efectivo para cancelar.',
markAsCash: 'Marcar como efectivo',
routePending: 'Ruta pendiente...',
receiptIssuesFound: (count: number) => `${count === 1 ? 'Problema encontrado' : 'Problemas encontrados'}`,
fieldPending: 'Pendiente...',
receiptScanning: 'Escaneando recibo...',
- receiptScanInProgress: 'Escaneado de recibo en proceso.',
- receiptScanInProgressDescription: 'Escaneado de recibo en proceso. Vuelva a comprobar más tarde o introduzca los detalles ahora.',
+ receiptScanInProgress: 'Escaneado de recibo en proceso',
+ receiptScanInProgressDescription: 'Escaneado de recibo en proceso. Vuelve a comprobarlo más tarde o introduce los detalles ahora.',
defaultRate: 'Tasa predeterminada',
receiptMissingDetails: 'Recibo con campos vacíos',
missingAmount: 'Falta importe',
@@ -668,7 +684,7 @@ export default {
receiptStatusTitle: 'Escaneando…',
receiptStatusText: 'Solo tú puedes ver este recibo cuando se está escaneando. Vuelve más tarde o introduce los detalles ahora.',
receiptScanningFailed: 'El escaneo de recibo ha fallado. Introduce los detalles manualmente.',
- transactionPendingDescription: 'Transacción pendiente. La transacción tarda unos días en contabilizarse desde la fecha en que se utilizó la tarjeta.',
+ transactionPendingDescription: 'Transacción pendiente. Puede tardar unos días en contabilizarse.',
expenseCount: ({count, scanningReceipts = 0, pendingReceipts = 0}: RequestCountParams) =>
`${count} ${Str.pluralize('gasto', 'gastos', count)}${scanningReceipts > 0 ? `, ${scanningReceipts} escaneando` : ''}${
pendingReceipts > 0 ? `, ${pendingReceipts} pendiente` : ''
@@ -683,7 +699,7 @@ export default {
settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Pagar ${formattedAmount}`,
settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} como negocio` : `Pagar como empresa`),
payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} de otra forma` : `Pagar de otra forma`),
- nextStep: 'Pasos Siguientes',
+ nextStep: 'Pasos siguientes',
finished: 'Finalizado',
sendInvoice: ({amount}: RequestAmountParams) => `Enviar factura de ${amount}`,
submitAmount: ({amount}: RequestAmountParams) => `solicitar ${amount}`,
@@ -705,7 +721,7 @@ export default {
waitingOnBankAccount: ({submitterDisplayName}: WaitingOnBankAccountParams) => `inició el pago, pero no se procesará hasta que ${submitterDisplayName} añada una cuenta bancaria`,
adminCanceledRequest: ({manager, amount}: AdminCanceledRequestParams) => `${manager ? `${manager}: ` : ''}canceló el pago de ${amount}.`,
canceledRequest: ({amount, submitterDisplayName}: CanceledRequestParams) =>
- `canceló el pago ${amount}, porque ${submitterDisplayName} no habilitó tu billetera Expensify en un plazo de 30 días.`,
+ `canceló el pago ${amount}, porque ${submitterDisplayName} no habilitó tu Billetera Expensify en un plazo de 30 días.`,
settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) =>
`${submitterDisplayName} añadió una cuenta bancaria. El pago de ${amount} se ha realizado.`,
paidElsewhereWithAmount: ({payer, amount}: PaidElsewhereWithAmountParams) => `${payer ? `${payer} ` : ''}pagó ${amount} de otra forma`,
@@ -718,26 +734,26 @@ export default {
`estableció la distancia a ${newDistanceToDisplay}, lo que estableció el importe a ${newAmountToDisplay}`,
removedTheRequest: ({valueName, oldValueToDisplay}: RemovedTheRequestParams) => `${valueName === 'comerciante' ? 'el' : 'la'} ${valueName} (previamente ${oldValueToDisplay})`,
updatedTheRequest: ({valueName, newValueToDisplay, oldValueToDisplay}: UpdatedTheRequestParams) =>
- `${valueName === 'comerciante' ? 'el' : 'la'} ${valueName} a ${newValueToDisplay} (previamente ${oldValueToDisplay})`,
+ `${valueName === 'comerciante' || valueName === 'importe' ? 'el' : 'la'} ${valueName} a ${newValueToDisplay} (previamente ${oldValueToDisplay})`,
updatedTheDistance: ({newDistanceToDisplay, oldDistanceToDisplay, newAmountToDisplay, oldAmountToDisplay}: UpdatedTheDistanceParams) =>
`cambió la distancia a ${newDistanceToDisplay} (previamente ${oldDistanceToDisplay}), lo que cambió el importe a ${newAmountToDisplay} (previamente ${oldAmountToDisplay})`,
threadExpenseReportName: ({formattedAmount, comment}: ThreadRequestReportNameParams) => `${comment ? `${formattedAmount} para ${comment}` : `Gasto de ${formattedAmount}`}`,
threadTrackReportName: ({formattedAmount, comment}: ThreadRequestReportNameParams) => `Seguimiento ${formattedAmount} ${comment ? `para ${comment}` : ''}`,
threadPaySomeoneReportName: ({formattedAmount, comment}: ThreadSentMoneyReportNameParams) => `${formattedAmount} enviado${comment ? ` para ${comment}` : ''}`,
- tagSelection: 'Selecciona una etiqueta para organizar mejor tu dinero.',
- categorySelection: 'Seleccione una categoría para organizar mejor tu dinero.',
+ tagSelection: 'Selecciona una etiqueta para organizar mejor tus gastos.',
+ categorySelection: 'Selecciona una categoría para organizar mejor tus gastos.',
error: {
- invalidCategoryLength: 'El largo de la categoría escogida excede el máximo permitido (255). Por favor, escoge otra categoría o acorta la categoría primero.',
+ invalidCategoryLength: 'La longitud de la categoría escogida excede el máximo permitido (255). Por favor, escoge otra categoría o acorta la categoría primero.',
invalidAmount: 'Por favor, ingresa un importe válido antes de continuar.',
invalidTaxAmount: ({amount}: RequestAmountParams) => `El importe máximo del impuesto es ${amount}`,
invalidSplit: 'La suma de las partes debe ser igual al importe total.',
invalidSplitParticipants: 'Introduce un importe superior a cero para al menos dos participantes.',
- other: 'Error inesperado, por favor inténtalo más tarde.',
- genericHoldExpenseFailureMessage: 'Error inesperado al bloquear el gasto, por favor inténtalo de nuevo más tarde.',
- genericUnholdExpenseFailureMessage: 'Error inesperado al desbloquear el gasto, por favor inténtalo de nuevo más tarde.',
+ other: 'Error inesperado. Por favor, inténtalo más tarde.',
+ genericHoldExpenseFailureMessage: 'Error inesperado al bloquear el gasto. Por favor, inténtalo de nuevo más tarde.',
+ genericUnholdExpenseFailureMessage: 'Error inesperado al desbloquear el gasto. Por favor, inténtalo de nuevo más tarde.',
genericCreateFailureMessage: 'Error inesperado al enviar este gasto. Por favor, inténtalo más tarde.',
- genericCreateInvoiceFailureMessage: 'Error inesperado al enviar la factura, inténtalo de nuevo más tarde.',
- receiptDeleteFailureError: 'Error inesperado al borrar este recibo. Vuelve a intentarlo más tarde.',
+ genericCreateInvoiceFailureMessage: 'Error inesperado al enviar la factura. Por favor, inténtalo de nuevo más tarde.',
+ receiptDeleteFailureError: 'Error inesperado al borrar este recibo. Por favor, vuelve a intentarlo más tarde.',
// eslint-disable-next-line rulesdir/use-periods-for-error-messages
receiptFailureMessage: 'El recibo no se subió. ',
// eslint-disable-next-line rulesdir/use-periods-for-error-messages
@@ -748,11 +764,11 @@ export default {
genericSmartscanFailureMessage: 'La transacción tiene campos vacíos.',
duplicateWaypointsErrorMessage: 'Por favor, elimina los puntos de ruta duplicados.',
atLeastTwoDifferentWaypoints: 'Por favor, introduce al menos dos direcciones diferentes.',
- splitExpenseMultipleParticipantsErrorMessage: 'Solo puedes dividir un gasto entre un único espacio de trabajo o con usuarios individuales. Por favor, actualiza tu selección.',
+ splitExpenseMultipleParticipantsErrorMessage: 'Solo puedes dividir un gasto entre un único espacio de trabajo o con miembros individuales. Por favor, actualiza tu selección.',
invalidMerchant: 'Por favor, introduce un comerciante correcto.',
},
- waitingOnEnabledWallet: ({submitterDisplayName}: WaitingOnBankAccountParams) => `inició el pago, pero no se procesará hasta que ${submitterDisplayName} active tu billetera`,
- enableWallet: 'Habilitar Billetera',
+ waitingOnEnabledWallet: ({submitterDisplayName}: WaitingOnBankAccountParams) => `inició el pago, pero no se procesará hasta que ${submitterDisplayName} active su billetera`,
+ enableWallet: 'Habilitar billetera',
holdExpense: 'Bloquear gasto',
unholdExpense: 'Desbloquear gasto',
heldExpense: 'bloqueó este gasto',
@@ -761,7 +777,8 @@ export default {
reason: 'Razón',
holdReasonRequired: 'Se requiere una razón para bloquear.',
expenseOnHold: 'Este gasto está bloqueado. Revisa los comentarios para saber como proceder.',
- expenseDuplicate: 'Esta solicitud tiene los mismos detalles que otra. Revise los duplicados para eliminar la retención.',
+ expensesOnHold: 'Todos los gastos quedaron bloqueados. Revisa los comentarios para saber como proceder.',
+ expenseDuplicate: 'Esta solicitud tiene los mismos detalles que otra. Revisa los duplicados para eliminar el bloqueo.',
reviewDuplicates: 'Revisar duplicados',
keepAll: 'Mantener todos',
confirmApprove: 'Confirmar importe a aprobar',
@@ -770,20 +787,20 @@ export default {
confirmPayAmount: 'Paga lo que no está bloqueado, o paga todos los gastos por cuenta propia.',
payOnly: 'Solo pagar',
approveOnly: 'Solo aprobar',
- hold: 'Bloqueada',
- unhold: 'Desbloqueada',
+ hold: 'Bloquear',
+ unhold: 'Desbloquear',
holdEducationalTitle: 'Este gasto está',
whatIsHoldTitle: '¿Qué es Bloquear?',
whatIsHoldExplain: 'Bloquear es nuestra forma de agilizar la colaboración financiera. ¡"Rechazar" es tan duro!',
holdIsTemporaryTitle: 'Bloquear suele ser temporal',
holdIsTemporaryExplain: 'Se utiliza bloquear para aclarar confusión o aclarar un detalle importante antes del pago, no es permanente.',
deleteHoldTitle: 'Eliminar lo que no se pagará',
- deleteHoldExplain: 'En el raro caso de que algo se bloquear y no se pague, la persona que solicita el pago debe eliminarlo.',
+ deleteHoldExplain: 'En el raro caso de que algo se bloquee y no se pague, la persona que solicita el pago debe eliminarlo.',
set: 'estableció',
changed: 'cambió',
removed: 'eliminó',
transactionPending: 'Transacción pendiente.',
- chooseARate: ({unit}: ReimbursementRateParams) => `Seleccione una tasa de reembolso del espacio de trabajo por ${unit}`,
+ chooseARate: ({unit}: ReimbursementRateParams) => `Selecciona una tasa de reembolso por ${unit} del espacio de trabajo`,
},
notificationPreferencesPage: {
header: 'Preferencias de avisos',
@@ -805,7 +822,7 @@ export default {
editImage: 'Editar foto',
viewPhoto: 'Ver foto',
imageUploadFailed: 'Error al cargar la imagen',
- deleteWorkspaceError: 'Lo sentimos, hubo un problema eliminando el avatar de tu espacio de trabajo.',
+ deleteWorkspaceError: 'Lo sentimos, hubo un problema eliminando el avatar de tu espacio de trabajo',
sizeExceeded: ({maxUploadSizeInMB}: SizeExceededParams) => `La imagen supera el tamaño máximo de ${maxUploadSizeInMB}MB.`,
resolutionConstraints: ({minHeightInPx, minWidthInPx, maxHeightInPx, maxWidthInPx}: ResolutionConstraintsParams) =>
`Por favor, elige una imagen más grande que ${minHeightInPx}x${minWidthInPx} píxeles y más pequeña que ${maxHeightInPx}x${maxWidthInPx} píxeles.`,
@@ -830,7 +847,7 @@ export default {
subtitle: 'Estos detalles se muestran en tu perfil público, a disposición de los demás.',
},
privateSection: {
- title: 'Privada',
+ title: 'Privado',
subtitle: 'Estos detalles se utilizan para viajes y pagos. Nunca se mostrarán en tu perfil público.',
},
},
@@ -857,7 +874,7 @@ export default {
enterMagicCode: ({contactMethod}: EnterMagicCodeParams) => `Por favor, introduce el código mágico enviado a ${contactMethod}`,
setAsDefault: 'Establecer como predeterminado',
yourDefaultContactMethod:
- 'Este es tu método de contacto predeterminado. No podrás eliminarlo hasta que añadas otro método de contacto y lo marques como predeterminado pulsando "Establecer como predeterminado".',
+ 'Este es tu método de contacto predeterminado. Antes de poder eliminarlo, tendrás que elegir otro método de contacto y haz clic en "Establecer como predeterminado".',
removeContactMethod: 'Eliminar método de contacto',
removeAreYouSure: '¿Estás seguro de que quieres eliminar este método de contacto? Esta acción no se puede deshacer.',
failedNewContact: 'Hubo un error al añadir este método de contacto.',
@@ -997,7 +1014,7 @@ export default {
changingYourPasswordPrompt: 'El cambio de contraseña va a afectar tanto a la cuenta de Expensify.com como la de Nuevo Expensify.',
currentPassword: 'Contraseña actual',
newPassword: 'Nueva contraseña',
- newPasswordPrompt: 'La nueva contraseña debe ser diferente de la antigua, tener al menos 8 caracteres, 1 letra mayúscula, 1 letra minúscula y 1 número.',
+ newPasswordPrompt: 'La nueva contraseña debe ser diferente de la antigua y contener al menos 8 caracteres, 1 letra mayúscula, 1 letra minúscula y 1 número.',
},
twoFactorAuth: {
headerTitle: 'Autenticación de dos factores',
@@ -1052,6 +1069,18 @@ export default {
genericFailureMessage: 'Las notas privadas no han podido ser guardadas.',
},
},
+ billingCurrency: {
+ error: {
+ securityCode: 'Por favor, introduce un código de seguridad válido.',
+ },
+ securityCode: 'Código de seguridad',
+ changePaymentCurrency: 'Cambiar moneda de facturación',
+ changeBillingCurrency: 'Cambiar la moneda de pago',
+ paymentCurrency: 'Moneda de pago',
+ note: 'Nota: Cambiar tu moneda de pago puede afectar cuánto pagarás por Expensify. Consulta nuestra',
+ noteLink: 'página de precios',
+ noteDetails: 'para conocer todos los detalles.',
+ },
addDebitCardPage: {
addADebitCard: 'Añadir una tarjeta de débito',
nameOnCard: 'Nombre en la tarjeta',
@@ -1071,7 +1100,7 @@ export default {
addressStreet: 'Por favor, introduce una dirección de facturación válida que no sea un apartado postal.',
addressState: 'Por favor, selecciona un estado.',
addressCity: 'Por favor, introduce una ciudad.',
- genericFailureMessage: 'Se produjo un error al añadir tu tarjeta. Vuelva a intentarlo.',
+ genericFailureMessage: 'Se produjo un error al añadir tu tarjeta. Por favor, vuelva a intentarlo.',
password: 'Por favor, introduce tu contraseña de Expensify.',
},
},
@@ -1094,7 +1123,7 @@ export default {
addressStreet: 'Por favor, introduce una dirección de facturación válida que no sea un apartado postal.',
addressState: 'Por favor, selecciona un estado.',
addressCity: 'Por favor, introduce una ciudad.',
- genericFailureMessage: 'Se produjo un error al añadir tu tarjeta. Vuelva a intentarlo.',
+ genericFailureMessage: 'Se produjo un error al añadir tu tarjeta. Por favor, vuelva a intentarlo.',
password: 'Por favor, introduce tu contraseña de Expensify.',
},
},
@@ -1119,20 +1148,20 @@ export default {
expensifyWallet: 'Billetera Expensify',
sendAndReceiveMoney: 'Envía y recibe dinero desde tu Billetera Expensify.',
enableWalletToSendAndReceiveMoney: 'Habilita tu Billetera Expensify para comenzar a enviar y recibir dinero con amigos',
- enableWallet: 'Habilitar Billetera',
+ enableWallet: 'Habilitar billetera',
bankAccounts: 'Cuentas bancarias',
addBankAccountToSendAndReceive: 'Añade una cuenta bancaria para enviar y recibir pagos directamente en la aplicación.',
addBankAccount: 'Añadir cuenta bancaria',
assignedCards: 'Tarjetas asignadas',
assignedCardsDescription: 'Son tarjetas asignadas por un administrador del espacio de trabajo para gestionar los gastos de la empresa.',
expensifyCard: 'Tarjeta Expensify',
- walletActivationPending: 'Estamos revisando tu información, por favor vuelve en unos minutos.',
+ walletActivationPending: 'Estamos revisando tu información. Por favor, vuelve en unos minutos.',
walletActivationFailed: 'Lamentablemente, no podemos activar tu billetera en este momento. Chatea con Concierge para obtener más ayuda.',
- addYourBankAccount: 'Añadir tu cuenta bancaria.',
+ addYourBankAccount: 'Añadir tu cuenta bancaria',
addBankAccountBody: 'Conectemos tu cuenta bancaria a Expensify para que sea más fácil que nunca enviar y recibir pagos directamente en la aplicación.',
- chooseYourBankAccount: 'Elige tu cuenta bancaria.',
+ chooseYourBankAccount: 'Elige tu cuenta bancaria',
chooseAccountBody: 'Asegúrese de elegir el adecuado.',
- confirmYourBankAccount: 'Confirma tu cuenta bancaria.',
+ confirmYourBankAccount: 'Confirma tu cuenta bancaria',
},
cardPage: {
expensifyCard: 'Tarjeta Expensify',
@@ -1295,7 +1324,7 @@ export default {
priorityModePage: {
priorityMode: 'Modo prioridad',
explainerText:
- 'Elige si deseas mostrar por defecto todos los chats ordenados desde el más reciente y con los elementos anclados en la parte superior, o elige el modo #concentración, con los elementos no leídos anclados en la parte superior y ordenados alfabéticamente.',
+ 'Elige #concentración si deseas enfocarte sólo en los chats no leídos y en los anclados, o mostrarlo todo con los chats más recientes y los anclados en la parte superior.',
priorityModes: {
default: {
label: 'Más recientes',
@@ -1321,7 +1350,7 @@ export default {
groupChat: {
groupMembersListTitle: 'Directorio de los miembros del grupo.',
lastMemberTitle: '¡Atención!',
- lastMemberWarning: 'Ya que eres la última persona aquí, si te vas, este chat quedará inaccesible para todos los usuarios. ¿Estás seguro de que quieres salir del chat?',
+ lastMemberWarning: 'Ya que eres la última persona aquí, si te vas, este chat quedará inaccesible para todos los miembros. ¿Estás seguro de que quieres salir del chat?',
defaultReportName: ({displayName}: {displayName: string}) => `Chat de group de ${displayName}`,
},
languagePage: {
@@ -1401,6 +1430,12 @@ export default {
notYou: ({user}: NotYouParams) => `¿No eres ${user}?`,
},
onboarding: {
+ welcome: '¡Bienvenido!',
+ explanationModal: {
+ title: 'Bienvenido a Expensify',
+ description: 'Recibir pagos es tan fácil como mandar un mensaje',
+ secondaryDescription: 'Para volver a Expensify Classic, simplemente haz click en tu foto de perfil > Ir a Expensify Classic.',
+ },
welcomeVideo: {
title: 'Bienvenido a Expensify',
description: 'Una aplicación para gestionar todos tus gastos de empresa y personales en un chat. Pensada para tu empresa, tu equipo y tus amigos.',
@@ -1581,7 +1616,7 @@ export default {
phrase1: '¡Un momento! Primero necesitas validar tu cuenta. Para hacerlo, ',
phrase2: 'vuelve a iniciar sesión con un código mágico',
phrase3: 'o',
- phrase4: 'verifique tu cuenta aquí',
+ phrase4: 'verifica aquí tu cuenta',
},
hasPhoneLoginError:
'Para añadir una cuenta bancaria verificada, asegúrate de que tu nombre de usuario principal sea un correo electrónico válido y vuelve a intentarlo. Puedes añadir tu número de teléfono como nombre de usuario secundario.',
@@ -1647,7 +1682,7 @@ export default {
userIsAlreadyMember: ({login, name}: UserIsAlreadyMemberParams) => `${login} ya es miembro de ${name}`,
},
onfidoStep: {
- acceptTerms: 'Al continuar con la solicitud para activar tu billetera Expensify, confirma que ha leído, comprende y acepta ',
+ acceptTerms: 'Al continuar con la solicitud para activar tu Billetera Expensify, confirma que ha leído, comprende y acepta ',
facialScan: 'Política y lanzamiento de la exploración facial de Onfido',
tryAgain: 'Intentar otra vez',
verifyIdentity: 'Verificar identidad',
@@ -1669,7 +1704,7 @@ export default {
},
additionalDetailsStep: {
headerTitle: 'Detalles adicionales',
- helpText: 'Necesitamos confirmar la siguiente información antes de que puedas enviar y recibir dinero desde tu Billetera.',
+ helpText: 'Necesitamos confirmar la siguiente información antes de que puedas enviar y recibir dinero desde tu billetera.',
helpTextIdologyQuestions: 'Tenemos que preguntarte unas preguntas más para terminar de verificar tu identidad',
helpLink: 'Obtén más información sobre por qué necesitamos esto.',
legalFirstNameLabel: 'Primer nombre legal',
@@ -1680,7 +1715,7 @@ export default {
needSSNFull9: 'Estamos teniendo problemas para verificar tu número de seguridad social. Introduce los 9 dígitos del número de seguridad social.',
weCouldNotVerify: 'No se pudo verificar',
pleaseFixIt: 'Corrige esta información antes de continuar.',
- failedKYCTextBefore: 'No se ha podido verificar correctamente tu identidad. Vuelve a intentarlo más tarde y comunicate con ',
+ failedKYCTextBefore: 'No se ha podido verificar correctamente tu identidad. Vuelve a intentarlo más tarde o comunicate con ',
failedKYCTextAfter: ' si tienes alguna pregunta.',
},
termsStep: {
@@ -1700,7 +1735,7 @@ export default {
checkTheBoxes: 'Por favor, marca las siguientes casillas.',
agreeToTerms: 'Debes aceptar los términos y condiciones para continuar.',
shortTermsForm: {
- expensifyPaymentsAccount: ({walletProgram}: WalletProgramParams) => `La billetera Expensify es emitida por ${walletProgram}.`,
+ expensifyPaymentsAccount: ({walletProgram}: WalletProgramParams) => `La Billetera Expensify es emitida por ${walletProgram}.`,
perPurchase: 'Por compra',
atmWithdrawal: 'Retiro en cajeros automáticos',
cashReload: 'Recarga de efectivo',
@@ -1720,7 +1755,7 @@ export default {
electronicFundsInstantFeeMin: ({amount}: TermsParams) => `(mínimo ${amount})`,
},
longTermsForm: {
- listOfAllFees: 'Una lista de todas las tarifas de la billetera Expensify',
+ listOfAllFees: 'Una lista de todas las tarifas de la Billetera Expensify',
typeOfFeeHeader: 'Tipo de tarifa',
feeAmountHeader: 'Importe de la tarifa',
moreDetailsHeader: 'Más detalles',
@@ -1733,11 +1768,11 @@ export default {
sendingFundsTitle: 'Enviar fondos a otro titular de cuenta',
sendingFundsDetails: 'No se aplica ningún cargo por enviar fondos a otro titular de cuenta utilizando tu saldo cuenta bancaria o tarjeta de débito',
electronicFundsStandardDetails:
- 'No hay cargo por transferir fondos desde tu billetera Expensify ' +
+ 'No hay cargo por transferir fondos desde tu Billetera Expensify ' +
'a tu cuenta bancaria utilizando la opción estándar. Esta transferencia generalmente se completa en' +
'1-3 días laborables.',
electronicFundsInstantDetails: ({percentage, amount}: ElectronicFundsParams) =>
- 'Hay una tarifa para transferir fondos desde tu billetera Expensify a ' +
+ 'Hay una tarifa para transferir fondos desde tu Billetera Expensify a ' +
'la tarjeta de débito vinculada utilizando la opción de transferencia instantánea. Esta transferencia ' +
`generalmente se completa dentro de varios minutos. La tarifa es el ${percentage}% del importe de la ` +
`transferencia (con una tarifa mínima de ${amount}). `,
@@ -1760,7 +1795,7 @@ export default {
activateStep: {
headerTitle: 'Habilitar pagos',
activatedTitle: '¡Billetera activada!',
- activatedMessage: 'Felicidades, tu Billetera está configurada y lista para hacer pagos.',
+ activatedMessage: 'Felicidades, tu billetera está configurada y lista para hacer pagos.',
checkBackLaterTitle: 'Un momento...',
checkBackLaterMessage: 'Todavía estamos revisando tu información. Por favor, vuelve más tarde.',
continueToPayment: 'Continuar al pago',
@@ -1796,15 +1831,15 @@ export default {
},
personalInfoStep: {
personalInfo: 'Información Personal',
- enterYourLegalFirstAndLast: 'Introduce tu nombre y apellidos',
+ enterYourLegalFirstAndLast: '¿Cuál es tu nombre legal?',
legalFirstName: 'Nombre',
legalLastName: 'Apellidos',
legalName: 'Nombre legal',
- enterYourDateOfBirth: 'Introduce tu fecha de nacimiento',
- enterTheLast4: 'Introduce los últimos 4 dígitos de tu número de la seguridad social',
- dontWorry: 'No te preocupes, no hacemos ninguna verificación de crédito',
+ enterYourDateOfBirth: '¿Cuál es tu fecha de nacimiento?',
+ enterTheLast4: '¿Cuáles son los últimos 4 dígitos de tu número de la seguridad social?',
+ dontWorry: 'No te preocupes, no hacemos verificaciones de crédito personales.',
last4SSN: 'Últimos 4 dígitos de tu número de la seguridad social',
- enterYourAddress: 'Introduce tu dirección',
+ enterYourAddress: '¿Cuál es tu dirección?',
address: 'Dirección',
letsDoubleCheck: 'Revisemos que todo esté bien',
byAddingThisBankAccount: 'Añadiendo esta cuenta bancaria, confirmas que has leído, entendido y aceptado',
@@ -1819,16 +1854,16 @@ export default {
},
businessInfoStep: {
businessInfo: 'Información de la empresa',
- enterTheNameOfYourBusiness: 'Introduce el nombre de tu empresa.',
+ enterTheNameOfYourBusiness: '¿Cuál es el nombre de tu empresa?',
businessName: 'Nombre de la empresa',
- enterYourCompanysTaxIdNumber: 'Introduce el número de identificación fiscal.',
+ enterYourCompanysTaxIdNumber: '¿Cuál es el número de identificación fiscal?',
taxIDNumber: 'Número de identificación fiscal',
taxIDNumberPlaceholder: '9 dígitos',
- enterYourCompanysWebsite: 'Introduce la página web de tu empresa.',
+ enterYourCompanysWebsite: '¿Cuál es la página web de tu empresa?',
companyWebsite: 'Página web de la empresa',
- enterYourCompanysPhoneNumber: 'Introduce el número de teléfono de tu empresa.',
- enterYourCompanysAddress: 'Introduce la dirección de tu empresa.',
- selectYourCompanysType: 'Selecciona el tipo de empresa.',
+ enterYourCompanysPhoneNumber: '¿Cuál es el número de teléfono de tu empresa?',
+ enterYourCompanysAddress: '¿Cuál es la dirección de tu empresa?',
+ selectYourCompanysType: '¿Cuál es el tipo de empresa?',
companyType: 'Tipo de empresa',
incorporationType: {
LLC: 'SRL',
@@ -1838,11 +1873,11 @@ export default {
SOLE_PROPRIETORSHIP: 'Empresa individual',
OTHER: 'Otros',
},
- selectYourCompanysIncorporationDate: 'Selecciona la fecha de constitución de la empresa.',
+ selectYourCompanysIncorporationDate: '¿Cuál es la fecha de constitución de la empresa?',
incorporationDate: 'Fecha de constitución',
incorporationDatePlaceholder: 'Fecha de inicio (yyyy-mm-dd)',
incorporationState: 'Estado en el que se constituyó',
- pleaseSelectTheStateYourCompanyWasIncorporatedIn: 'Selecciona el estado en el que se constituyó la empresa.',
+ pleaseSelectTheStateYourCompanyWasIncorporatedIn: '¿Cuál es el estado en el que se constituyó la empresa?',
letsDoubleCheck: 'Verifiquemos que todo esté correcto',
companyAddress: 'Dirección de la empresa',
listOfRestrictedBusinesses: 'lista de negocios restringidos',
@@ -1854,14 +1889,14 @@ export default {
areThereMoreIndividualsWhoOwn25percent: '¿Hay más personas que posean el 25% o más de',
regulationRequiresUsToVerifyTheIdentity: 'La ley nos exige verificar la identidad de cualquier persona que posea más del 25% de la empresa.',
companyOwner: 'Dueño de la empresa',
- enterLegalFirstAndLastName: 'Introduce el nombre y apellidos legales del dueño.',
+ enterLegalFirstAndLastName: '¿Cuál es el nombre legal del dueño?',
legalFirstName: 'Nombre legal',
legalLastName: 'Apellidos legales',
- enterTheDateOfBirthOfTheOwner: 'Introduce la fecha de nacimiento del dueño.',
- enterTheLast4: 'Introduce los últimos 4 dígitos del número de la seguridad social del dueño.',
+ enterTheDateOfBirthOfTheOwner: '¿Cuál es la fecha de nacimiento del dueño?',
+ enterTheLast4: '¿Cuáles son los últimos 4 dígitos del número de la seguridad social del dueño?',
last4SSN: 'Últimos 4 dígitos del número de la seguridad social',
dontWorry: 'No te preocupes, ¡no realizamos verificaciones de crédito personales!',
- enterTheOwnersAddress: 'Introduce la dirección del dueño.',
+ enterTheOwnersAddress: '¿Cuál es la dirección del dueño?',
letsDoubleCheck: 'Vamos a verificar que todo esté correcto.',
legalName: 'Nombre legal',
address: 'Dirección',
@@ -1872,17 +1907,15 @@ export default {
headerTitle: 'Validar cuenta bancaria',
buttonText: 'Finalizar configuración',
maxAttemptsReached: 'Se ha inhabilitado la validación de esta cuenta bancaria debido a demasiados intentos incorrectos.',
- description:
- 'Uno o dos días después de añadir tu cuenta a Expensify, te enviaremos tres (3) transacciones a tu cuenta. Tienen un nombre de comerciante similar a "Expensify, Inc. Validation".',
+ description: 'Enviaremos tres (3) pequeñas transacciones a tu cuenta bancaria a nombre de "Expensify, Inc. Validation" dentro de los próximos 1-2 días laborables.',
descriptionCTA: 'Introduce el importe de cada transacción en los campos siguientes. Ejemplo: 1.51.',
reviewingInfo: '¡Gracias! Estamos revisando tu información y nos comunicaremos contigo en breve. Consulta el chat con Concierge ',
forNextStep: ' para conocer los próximos pasos para terminar de configurar tu cuenta bancaria.',
letsChatCTA: 'Sí, vamos a chatear',
- letsChatText: 'Gracias. Necesitamos tu ayuda para verificar la información, pero podemos hacerlo rápidamente a través del chat. ¿Estás listo?',
+ letsChatText: '¡Ya casi estamos! Necesitamos tu ayuda para verificar unos últimos datos a través del chat. ¿Estás listo?',
letsChatTitle: '¡Vamos a chatear!',
enable2FATitle: 'Evita fraudes, activa la autenticación de dos factores!',
- enable2FAText:
- 'Tu seguridad es importante para nosotros. Por favor, configura ahora la autenticación de dos factores. Eso nos permitirá disputar las transacciones de la Tarjeta Expensify y reducirá tu riesgo de fraude.',
+ enable2FAText: 'Tu seguridad es importante para nosotros. Por favor, configura ahora la autenticación de dos factores para añadir una capa adicional de protección a tu cuenta.',
secureYourAccount: 'Asegura tu cuenta',
},
beneficialOwnersStep: {
@@ -1904,7 +1937,7 @@ export default {
completeVerification: 'Completar la verificación',
confirmAgreements: 'Por favor, confirma los acuerdos siguientes.',
certifyTrueAndAccurate: 'Certifico que la información dada es verdadera y precisa',
- certifyTrueAndAccurateError: 'Debe certificar que la información es verdadera y precisa',
+ certifyTrueAndAccurateError: 'Por favor, certifica que la información es verdadera y exacta',
isAuthorizedToUseBankAccount: 'Estoy autorizado para usar la cuenta bancaria de mi empresa para gastos de empresa',
isAuthorizedToUseBankAccountError: 'Debes ser el responsable oficial con autorización para operar la cuenta bancaria de la empresa.',
termsAndConditions: 'Términos y Condiciones',
@@ -1916,17 +1949,15 @@ export default {
validateButtonText: 'Validar',
validationInputLabel: 'Transacción',
maxAttemptsReached: 'La validación de esta cuenta bancaria se ha desactivado debido a demasiados intentos incorrectos.',
- description:
- 'Un día o dos después de añadir tu cuenta a Expensify, te enviaremos tres (3) transacciones a tu cuenta. Tienen un nombre de comerciante similar a "Expensify, Inc. Validation".',
+ description: 'Enviaremos tres (3) pequeñas transacciones a tu cuenta bancaria a nombre de "Expensify, Inc. Validation" dentro de los próximos 1-2 días laborables.',
descriptionCTA: 'Introduce el importe de cada transacción en los campos siguientes. Ejemplo: 1.51.',
reviewingInfo: '¡Gracias! Estamos revisando tu información y nos comunicaremos contigo en breve. Consulta el chat con Concierge ',
forNextSteps: ' para conocer los próximos pasos para terminar de configurar tu cuenta bancaria.',
letsChatCTA: 'Sí, vamos a chatear',
- letsChatText: 'Gracias. Necesitamos tu ayuda para verificar la información, pero podemos resolverlo rápidamente a través del chat. ¿Estás Listo?',
+ letsChatText: '¡Ya casi estamos! Necesitamos tu ayuda para verificar unos últimos datos a través del chat. ¿Estás listo?',
letsChatTitle: '¡Vamos a chatear!',
enable2FATitle: '¡Evita fraudes, activa la autenticación de dos factores!',
- enable2FAText:
- 'Tu seguridad es importante para nosotros. Por favor, configura ahora la autenticación de dos factores. Eso nos permitirá disputar las transacciones de la Tarjeta Expensify y reducirá tu riesgo de fraude.',
+ enable2FAText: 'Tu seguridad es importante para nosotros. Por favor, configura ahora la autenticación de dos factores para añadir una capa adicional de protección a tu cuenta.',
secureYourAccount: 'Asegura tu cuenta',
},
reimbursementAccountLoadingAnimation: {
@@ -1985,6 +2016,7 @@ export default {
bills: 'Pagar facturas',
invoices: 'Enviar facturas',
travel: 'Viajes',
+ expensifyCard: 'Tarjeta Expensify',
members: 'Miembros',
accounting: 'Contabilidad',
plan: 'Plan',
@@ -1999,8 +2031,8 @@ export default {
settlementFrequency: 'Frecuencia de liquidación',
deleteConfirmation: '¿Estás seguro de que quieres eliminar este espacio de trabajo?',
unavailable: 'Espacio de trabajo no disponible',
- memberNotFound: 'Miembro no encontrado. Para invitar a un nuevo miembro al espacio de trabajo, por favor, utiliza el botón Invitar que está arriba.',
- notAuthorized: `No tienes acceso a esta página. ¿Estás tratando de unirte al espacio de trabajo? Comunícate con el propietario de este espacio de trabajo para que pueda añadirte como miembro. ¿Necesitas algo más? Comunícate con ${CONST.EMAIL.CONCIERGE}`,
+ memberNotFound: 'Miembro no encontrado. Para invitar a un nuevo miembro al espacio de trabajo, por favor, utiliza el botón invitar que está arriba.',
+ notAuthorized: `No tienes acceso a esta página. Si estás intentando unirte a este espacio de trabajo, pide al dueño del espacio de trabajo que te añada como miembro. ¿Necesitas algo más? Comunícate con ${CONST.EMAIL.CONCIERGE}`,
goToRoom: ({roomName}: GoToRoomParams) => `Ir a la sala ${roomName}`,
workspaceName: 'Nombre del espacio de trabajo',
workspaceOwner: 'Dueño',
@@ -2029,13 +2061,10 @@ export default {
taxesJournalEntrySwitchNote: 'QuickBooks Online no permite impuestos en los asientos contables. Por favor, cambia la opción de exportación a factura de proveedor o cheque.',
locationsAdditionalDescription:
'QuickBooks Online no permite lugares en facturas de proveedores o cheques. Como tienes activadas los lugares en tu espacio de trabajo, estas opciones de exportación no están disponibles.',
- export: 'Exportar',
- exportAs: 'Exportar cómo',
exportExpenses: 'Exportar gastos de bolsillo como',
exportInvoices: 'Exportar facturas a',
exportCompany: 'Exportar tarjetas de empresa como',
exportDescription: 'Configura cómo se exportan los datos de Expensify a QuickBooks Online.',
- preferredExporter: 'Exportador preferido',
date: 'Fecha de exportación',
deepDiveExpensifyCard: 'Las transacciones de la Tarjeta Expensify se exportan automáticamente a una "Cuenta de Responsabilidad de la Tarjeta Expensify" creada con',
deepDiveExpensifyCardIntegration: 'nuestra integración.',
@@ -2060,23 +2089,18 @@ export default {
},
receivable: 'Cuentas por cobrar', // This is an account name that will come directly from QBO, so I don't know why we need a translation for it. It should take whatever the name of the account is in QBO. Leaving this note for CS.
archive: 'Archivo de cuentas por cobrar', // This is an account name that will come directly from QBO, so I don't know why we need a translation for it. It should take whatever the name of the account is in QBO. Leaving this note for CS.
- exportInvoicesDescription: 'Las facturas se exportarán a esta cuenta en QuickBooks Online.',
+ exportInvoicesDescription: 'Usa esta cuenta al exportar facturas a QuickBooks Online.',
exportCompanyCardsDescription: 'Establece cómo se exportan las compras con tarjeta de empresa a QuickBooks Online.',
account: 'Cuenta',
- accountDescription: 'Elige dónde contabilizar las compensaciones de entradas a los asientos contables.',
+ accountDescription: 'Elige dónde contabilizar los asientos contables.',
vendor: 'Proveedor',
- defaultVendor: 'Proveedor predeterminado',
defaultVendorDescription: 'Establece un proveedor predeterminado que se aplicará a todas las transacciones con tarjeta de crédito al momento de exportarlas.',
accountsPayable: 'Cuentas por pagar',
accountsPayableDescription: 'Elige dónde crear las facturas de proveedores.',
bankAccount: 'Cuenta bancaria',
bankAccountDescription: 'Elige desde dónde enviar los cheques.',
- optionBelow: 'Elija una opción a continuación:',
companyCardsLocationEnabledDescription:
'QuickBooks Online no permite lugares en las exportaciones de facturas de proveedores. Como tienes activadas los lugares en tu espacio de trabajo, esta opción de exportación no está disponible.',
- exportPreferredExporterNote:
- 'Puede ser cualquier administrador del espacio de trabajo, pero debe ser un administrador de dominio si configura diferentes cuentas de exportación para tarjetas de empresa individuales en la configuración del dominio.',
- exportPreferredExporterSubNote: 'Una vez configurado, el exportador preferido verá los informes para exportar en tu cuenta.',
exportOutOfPocketExpensesDescription: 'Establezca cómo se exportan los gastos de bolsillo a QuickBooks Online.',
exportCheckDescription: 'Crearemos un cheque desglosado para cada informe de Expensify y lo enviaremos desde la cuenta bancaria a continuación.',
exportJournalEntryDescription: 'Crearemos una entrada contable desglosada para cada informe de Expensify y lo contabilizaremos en la cuenta a continuación.',
@@ -2093,7 +2117,7 @@ export default {
advancedConfig: {
advanced: 'Avanzado',
autoSync: 'Autosincronización',
- autoSyncDescription: 'Sincroniza QuickBooks Online y Expensify automáticamente, todos los días.',
+ autoSyncDescription: 'Expensify se sincronizará automáticamente con QuickBooks Online todos los días.',
inviteEmployees: 'Invitar empleados',
inviteEmployeesDescription: 'Importe los registros de los empleados de Quickbooks Online e invítelos a este espacio de trabajo.',
createEntities: 'Crear entidades automáticamente',
@@ -2103,8 +2127,8 @@ export default {
'Cada vez que se pague un informe utilizando Expensify ACH, se creará el correspondiente pago de la factura en la cuenta de Quickbooks Online indicadas a continuación.',
qboBillPaymentAccount: 'Cuenta de pago de las facturas de QuickBooks',
qboInvoiceCollectionAccount: 'Cuenta de cobro de las facturas QuickBooks',
- accountSelectDescription: 'Elige una cuenta bancaria para los reembolsos y crearemos el pago en QuickBooks Online.',
- invoiceAccountSelectorDescription: 'Una vez que una factura se marca como pagada en Expensify y se exporta a QuickBooks Online, aparecerá contra la cuenta a continuación.',
+ accountSelectDescription: 'Elige desde dónde pagar las facturas y crearemos el pago en QuickBooks Online.',
+ invoiceAccountSelectorDescription: 'Elige dónde recibir los pagos de facturas y crearemos el pago en QuickBooks Online.',
},
accounts: {
[CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.DEBIT_CARD]: 'Tarjeta de débito',
@@ -2120,10 +2144,8 @@ export default {
[`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}Description`]:
'Crearemos una factura de proveedor desglosada para cada informe de Expensify con la fecha del último gasto, y la añadiremos a la cuenta a continuación. Si este periodo está cerrado, lo contabilizaremos en el día 1 del siguiente periodo abierto.',
- [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.DEBIT_CARD}AccountDescription`]:
- 'Las transacciones con tarjeta de débito se exportarán a la cuenta bancaria que aparece a continuación.',
- [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD}AccountDescription`]:
- 'Las transacciones con tarjeta de crédito se exportarán a la cuenta bancaria que aparece a continuación.',
+ [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.DEBIT_CARD}AccountDescription`]: 'Elige dónde exportar las transacciones con tarjeta de débito.',
+ [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD}AccountDescription`]: 'Elige dónde exportar las transacciones con tarjeta de crédito.',
[`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}AccountDescription`]: 'Selecciona el proveedor que se aplicará a todas las transacciones con tarjeta de crédito.',
[`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}Error`]:
@@ -2156,7 +2178,6 @@ export default {
default: 'Contacto de Xero por defecto',
tag: 'Etiquetas',
},
- export: 'Exportar',
exportDescription: 'Configura cómo se exportan los datos de Expensify a Xero.',
exportCompanyCard: 'Exportar gastos de la tarjeta de empresa como',
purchaseBill: 'Factura de compra',
@@ -2165,7 +2186,6 @@ export default {
bankTransactions: 'Transacciones bancarias',
xeroBankAccount: 'Cuenta bancaria de Xero',
xeroBankAccountDescription: 'Elige dónde se contabilizarán los gastos como transacciones bancarias.',
- preferredExporter: 'Exportador preferido',
exportExpenses: 'Exportar gastos por cuenta propia como',
exportExpensesDescription: 'Los informes se exportarán como una factura de compra utilizando la fecha y el estado que seleccione a continuación',
purchaseBillDate: 'Fecha de la factura de compra',
@@ -2175,49 +2195,148 @@ export default {
advancedConfig: {
advanced: 'Avanzado',
autoSync: 'Autosincronización',
- autoSyncDescription: 'Sincroniza Xero y Expensify automáticamente, todos los días.',
+ autoSyncDescription: 'Expensify se sincronizará automáticamente con Xero todos los días.',
purchaseBillStatusTitle: 'Estado de la factura de compra',
reimbursedReports: 'Sincronizar informes reembolsados',
reimbursedReportsDescription:
'Cada vez que se pague un informe utilizando Expensify ACH, se creará el correspondiente pago de la factura en la cuenta de Xero indicadas a continuación.',
xeroBillPaymentAccount: 'Cuenta de pago de las facturas de Xero',
xeroInvoiceCollectionAccount: 'Cuenta de cobro de las facturas Xero',
- invoiceAccountSelectorDescription: 'Una vez que una factura se marca como pagada en Expensify y se exporta a Xero, aparecerá contra la cuenta a continuación.',
- xeroBillPaymentAccountDescription: 'Elige una cuenta bancaria para los reembolsos y crearemos el pago en Xero.',
+ xeroBillPaymentAccountDescription: 'Elige desde dónde pagar las facturas y crearemos el pago en Xero.',
+ invoiceAccountSelectorDescription: 'Elige dónde recibir los pagos de facturas y crearemos el pago en Xero.',
},
exportDate: {
- label: 'Fecha de exportación',
- description: 'Usa esta fecha al exportar informe a Xero.',
+ label: 'Fecha de la factura de compra',
+ description: 'Usa esta fecha al exportar el informe a Xero.',
values: {
[CONST.XERO_EXPORT_DATE.LAST_EXPENSE]: {
label: 'Fecha del último gasto',
- description: 'Fecha del gasto mas reciente en el informe',
+ description: 'Fecha del gasto mas reciente en el informe.',
},
[CONST.XERO_EXPORT_DATE.REPORT_EXPORTED]: {
label: 'Fecha de exportación',
- description: 'Fecha de exportación del informe a Xero',
+ description: 'Fecha de exportación del informe a Xero.',
},
[CONST.XERO_EXPORT_DATE.REPORT_SUBMITTED]: {
label: 'Fecha de envío',
- description: 'Fecha en la que el informe se envió para su aprobación',
+ description: 'Fecha en la que el informe se envió para su aprobación.',
},
},
},
invoiceStatus: {
label: 'Estado de la factura de compra',
- description: 'Elige un estado para las facturas de compra exportadas a Xero.',
+ description: 'Usa este estado al exportar facturas de compra a Xero.',
values: {
[CONST.XERO_CONFIG.INVOICE_STATUS.DRAFT]: 'Borrador',
[CONST.XERO_CONFIG.INVOICE_STATUS.AWAITING_APPROVAL]: 'Pendiente de aprobación',
[CONST.XERO_CONFIG.INVOICE_STATUS.AWAITING_PAYMENT]: 'Pendiente de pago',
},
},
- exportPreferredExporterNote:
- 'Puede ser cualquier administrador del espacio de trabajo, pero debe ser un administrador de dominio si configura diferentes cuentas de exportación para tarjetas de empresa individuales en la configuración del dominio.',
- exportPreferredExporterSubNote: 'Una vez configurado, el exportador preferido verá los informes para exportar en su cuenta.',
noAccountsFound: 'No se ha encontrado ninguna cuenta',
noAccountsFoundDescription: 'Añade la cuenta en Xero y sincroniza de nuevo la conexión.',
},
+ netsuite: {
+ subsidiary: 'Subsidiaria',
+ subsidiarySelectDescription: 'Elige la subsidiaria de NetSuite de la que deseas importar datos.',
+ exportDescription: 'Configura cómo se exportan los datos de Expensify a NetSuite.',
+ exportReimbursable: 'Exportar gastos reembolsables como',
+ exportNonReimbursable: 'Exportar gastos no reembolsables como',
+ exportInvoices: 'Exportar facturas a',
+ journalEntriesTaxPostingAccount: 'Cuenta de registro de impuestos de asientos contables',
+ journalEntriesProvTaxPostingAccount: 'Cuenta de registro de impuestos provinciales de asientos contables',
+ foreignCurrencyAmount: 'Exportar importe en moneda extranjera',
+ exportToNextOpenPeriod: 'Exportar al siguiente período abierto',
+ nonReimbursableJournalPostingAccount: 'Cuenta de registro de diario no reembolsable',
+ reimbursableJournalPostingAccount: 'Cuenta de registro de diario reembolsable',
+ journalPostingPreference: {
+ label: 'Preferencia de registro de asientos contables',
+ values: {
+ [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Entrada única y detallada para cada informe',
+ [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Entrada única para cada gasto individual',
+ },
+ },
+ invoiceItem: {
+ label: 'Artículo de la factura',
+ values: {
+ [CONST.NETSUITE_INVOICE_ITEM_PREFERENCE.CREATE]: {
+ label: 'Crear uno para mí',
+ description: "Crearemos un 'Artículo de línea de factura de Expensify' para ti al exportar (si aún no existe).",
+ },
+ [CONST.NETSUITE_INVOICE_ITEM_PREFERENCE.SELECT]: {
+ label: 'Seleccionar existente',
+ description: 'Asociaremos las facturas de Expensify al artículo seleccionado a continuación.',
+ },
+ },
+ },
+ exportDate: {
+ label: 'Fecha de exportación',
+ description: 'Usa esta fecha al exportar informe a NetSuite.',
+ values: {
+ [CONST.NETSUITE_EXPORT_DATE.LAST_EXPENSE]: {
+ label: 'Fecha del último gasto',
+ description: 'Fecha del gasto mas reciente en el informe.',
+ },
+ [CONST.NETSUITE_EXPORT_DATE.EXPORTED]: {
+ label: 'Fecha de exportación',
+ description: 'Fecha de exportación del informe a NetSuite.',
+ },
+ [CONST.NETSUITE_EXPORT_DATE.SUBMITTED]: {
+ label: 'Fecha de envío',
+ description: 'Fecha en la que el informe se envió para su aprobación.',
+ },
+ },
+ },
+ exportDestination: {
+ values: {
+ [CONST.NETSUITE_EXPORT_DESTINATION.EXPENSE_REPORT]: {
+ label: 'Informes de gastos',
+ reimbursableDescription: 'Los gastos reembolsables se exportarán como informes de gastos a NetSuite.',
+ nonReimbursableDescription: 'Los gastos no reembolsables se exportarán como informes de gastos a NetSuite.',
+ },
+ [CONST.NETSUITE_EXPORT_DESTINATION.VENDOR_BILL]: {
+ label: 'Facturas de proveedores',
+ reimbursableDescription:
+ 'Los gastos reembolsables se exportarán como facturas pagaderas al proveedor especificado en NetSuite.\n' +
+ '\n' +
+ 'Si deseas establecer un proveedor específico para cada tarjeta, ve a *Configuraciones > Dominios > Tarjetas de Empresa*.',
+ nonReimbursableDescription:
+ 'Los gastos no reembolsables se exportarán como facturas pagaderas al proveedor especificado en NetSuite.\n' +
+ '\n' +
+ 'Si deseas establecer un proveedor específico para cada tarjeta, ve a *Configuraciones > Dominios > Tarjetas de Empresa*.',
+ },
+ [CONST.NETSUITE_EXPORT_DESTINATION.JOURNAL_ENTRY]: {
+ label: 'Asientos contables',
+ reimbursableDescription:
+ 'Los gastos reembolsables se exportarán como asientos contables a la cuenta especificada en NetSuite.\n' +
+ '\n' +
+ 'Si deseas establecer un proveedor específico para cada tarjeta, ve a *Configuraciones > Dominios > Tarjetas de Empresa*.',
+ nonReimbursableDescription:
+ 'Los gastos no reembolsables se exportarán como asientos contables a la cuenta especificada en NetSuite.\n' +
+ '\n' +
+ 'Si deseas establecer un proveedor específico para cada tarjeta, ve a *Configuraciones > Dominios > Tarjetas de Empresa*.',
+ },
+ },
+ },
+ noAccountsFound: 'No se han encontrado cuentas',
+ noAccountsFoundDescription: 'Añade la cuenta en NetSuite y sincroniza la conexión de nuevo.',
+ noVendorsFound: 'No se han encontrado proveedores',
+ noVendorsFoundDescription: 'Añade proveedores en NetSuite y sincroniza la conexión de nuevo.',
+ noItemsFound: 'No se han encontrado artículos de factura',
+ noItemsFoundDescription: 'Añade artículos de factura en NetSuite y sincroniza la conexión de nuevo.',
+ noSubsidiariesFound: 'No se ha encontrado subsidiarias',
+ noSubsidiariesFoundDescription: 'Añade la subsidiaria en NetSuite y sincroniza de nuevo la conexión.',
+ },
+ intacct: {
+ sageIntacctSetup: 'Sage Intacct configuración',
+ prerequisitesTitle: 'Antes de conectar...',
+ downloadExpensifyPackage: 'Descargar el paquete Expensify para Sage Intacct',
+ followSteps: 'Siga los pasos de nuestras instrucciones Cómo: Instrucciones para conectarse a Sage Intacct',
+ enterCredentials: 'Introduzca sus credenciales de Sage Intacct',
+ createNewConnection: 'Crear una nueva conexión',
+ reuseExistingConnection: 'Reutilizar la conexión existente',
+ existingConnections: 'Conexiones existentes',
+ sageIntacctLastSync: (formattedDate: string) => `Sage Intacct - Última sincronización ${formattedDate}`,
+ },
type: {
free: 'Gratis',
control: 'Control',
@@ -2264,6 +2383,13 @@ export default {
title: 'Integrar',
subtitle: 'Conecta Expensify a otros productos financieros populares.',
},
+ expensifyCard: {
+ title: 'Tarjeta Expensify',
+ subtitle: 'Obtén información y control sobre tus gastos',
+ disableCardTitle: 'Deshabilitar la Tarjeta Expensify',
+ disableCardPrompt: 'No puedes deshabilitar la Tarjeta Expensify porque ya está en uso. Por favor, contacta con Concierge para conocer los pasos a seguir.',
+ disableCardButton: 'Chatear con Concierge',
+ },
distanceRates: {
title: 'Tasas de distancia',
subtitle: 'Añade, actualiza y haz cumplir las tasas.',
@@ -2333,7 +2459,7 @@ export default {
deleteFailureMessage: 'Se ha producido un error al intentar eliminar la etiqueta. Por favor, inténtalo más tarde.',
tagRequiredError: 'Lo nombre de la etiqueta es obligatorio.',
existingTagError: 'Ya existe una etiqueta con este nombre.',
- genericFailureMessage: 'Se produjo un error al actualizar la etiqueta, inténtelo nuevamente.',
+ genericFailureMessage: 'Se produjo un error al actualizar la etiqueta. Por favor, inténtelo nuevamente.',
importedFromAccountingSoftware: 'Etiquetas importadas desde',
},
taxes: {
@@ -2388,8 +2514,10 @@ export default {
getTheExpensifyCardAndMore: 'Consigue la Tarjeta Expensify y más',
},
people: {
- genericFailureMessage: 'Se ha producido un error al intentar eliminar a un usuario del espacio de trabajo. Por favor, inténtalo más tarde.',
+ genericFailureMessage: 'Se ha producido un error al intentar eliminar a un miembro del espacio de trabajo. Por favor, inténtalo más tarde.',
removeMembersPrompt: '¿Estás seguro de que deseas eliminar a estos miembros?',
+ removeMembersWarningPrompt: ({memberName, ownerName}: RemoveMembersWarningPrompt) =>
+ `${memberName} es un aprobador en este espacio de trabajo. Cuando lo elimine de este espacio de trabajo, los sustituiremos en el flujo de trabajo de aprobación por el propietario del espacio de trabajo, ${ownerName}`,
removeMembersTitle: 'Eliminar miembros',
removeMemberButtonTitle: 'Quitar del espacio de trabajo',
removeMemberGroupButtonTitle: 'Quitar del grupo',
@@ -2404,7 +2532,7 @@ export default {
cannotRemove: 'No puedes eliminarte ni a ti mismo ni al dueño del espacio de trabajo.',
genericRemove: 'Ha ocurrido un problema al eliminar al miembro del espacio de trabajo.',
},
- addedWithPrimary: 'Se agregaron algunos usuarios con sus nombres de usuario principales.',
+ addedWithPrimary: 'Se agregaron algunos miembros con sus nombres de usuario principales.',
invitedBySecondaryLogin: ({secondaryLogin}) => `Agregado por nombre de usuario secundario ${secondaryLogin}.`,
membersListTitle: 'Directorio de todos los miembros del espacio de trabajo.',
},
@@ -2414,31 +2542,29 @@ export default {
subtitle: 'Conecta a tu sistema de contabilidad para codificar transacciones con tu plan de cuentas, auto-cotejar pagos, y mantener tus finanzas sincronizadas.',
qbo: 'Quickbooks Online',
xero: 'Xero',
+ netsuite: 'NetSuite',
+ intacct: 'Sage Intacct',
setup: 'Configurar',
- lastSync: 'Recién sincronizado',
+ lastSync: (relativeDate: string) => `Recién sincronizado ${relativeDate}`,
import: 'Importar',
export: 'Exportar',
advanced: 'Avanzado',
other: 'Otras integraciones',
syncNow: 'Sincronizar ahora',
disconnect: 'Desconectar',
- disconnectTitle: (currentIntegration?: ConnectionName): string => {
- switch (currentIntegration) {
- case CONST.POLICY.CONNECTIONS.NAME.QBO:
- return 'Desconectar QuickBooks Online';
- case CONST.POLICY.CONNECTIONS.NAME.XERO:
- return 'Desconectar Xero';
- default: {
- return 'Desconectar integración';
- }
- }
+ disconnectTitle: (integration?: ConnectionName): string => {
+ const integrationName = integration && CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[integration] ? CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[integration] : 'integración';
+ return `Desconectar ${integrationName}`;
},
+ connectTitle: (integrationToConnect: ConnectionName): string => `Conectar ${CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[integrationToConnect] ?? 'accounting integration'}`,
syncError: (integration?: ConnectionName): string => {
switch (integration) {
case CONST.POLICY.CONNECTIONS.NAME.QBO:
return 'No se puede conectar a QuickBooks Online.';
case CONST.POLICY.CONNECTIONS.NAME.XERO:
- return 'No se puede conectar a Xero';
+ return 'No se puede conectar a Xero.';
+ case CONST.POLICY.CONNECTIONS.NAME.NETSUITE:
+ return 'No se puede conectar a NetSuite.';
default: {
return 'No se ha podido conectar a la integración.';
}
@@ -2448,34 +2574,24 @@ export default {
taxes: 'Impuestos',
imported: 'Importado',
notImported: 'No importado',
- importAsCategory: 'Importado, mostrado as categoría',
+ importAsCategory: 'Importado como categorías',
importTypes: {
[CONST.INTEGRATION_ENTITY_MAP_TYPES.IMPORTED]: 'Importado',
- [CONST.INTEGRATION_ENTITY_MAP_TYPES.TAG]: 'Importado, mostrado como etiqueta',
+ [CONST.INTEGRATION_ENTITY_MAP_TYPES.TAG]: 'Importado como etiquetas',
[CONST.INTEGRATION_ENTITY_MAP_TYPES.DEFAULT]: 'Importado',
[CONST.INTEGRATION_ENTITY_MAP_TYPES.NOT_IMPORTED]: 'No importado',
[CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE]: 'No importado',
- [CONST.INTEGRATION_ENTITY_MAP_TYPES.REPORT_FIELD]: 'Importado, mostrado como campo de informe',
+ [CONST.INTEGRATION_ENTITY_MAP_TYPES.REPORT_FIELD]: 'Importado como campos de informe',
},
- disconnectPrompt: (integrationToConnect?: ConnectionName, currentIntegration?: ConnectionName): string => {
- switch (integrationToConnect) {
- case CONST.POLICY.CONNECTIONS.NAME.QBO:
- return '¿Estás seguro de que quieres desconectar Xero para configurar QuickBooks Online?';
- case CONST.POLICY.CONNECTIONS.NAME.XERO:
- return '¿Estás seguro de que quieres desconectar QuickBooks Online para configurar Xero?';
- default: {
- switch (currentIntegration) {
- case CONST.POLICY.CONNECTIONS.NAME.QBO:
- return '¿Estás seguro de que quieres desconectar QuickBooks Online?';
- case CONST.POLICY.CONNECTIONS.NAME.XERO:
- return '¿Estás seguro de que quieres desconectar Xero?';
- default: {
- return '¿Estás seguro de que quieres desconectar integración?';
- }
- }
- }
- }
+ disconnectPrompt: (currentIntegration?: ConnectionName): string => {
+ const integrationName =
+ currentIntegration && CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[currentIntegration] ? CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[currentIntegration] : 'integración';
+ return `¿Estás seguro de que quieres desconectar ${integrationName}?`;
},
+ connectPrompt: (integrationToConnect: ConnectionName): string =>
+ `¿Estás seguro de que quieres conectar a ${
+ CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[integrationToConnect] ?? 'esta integración contable'
+ }? Esto eliminará cualquier conexión contable existente.`,
enterCredentials: 'Ingresa tus credenciales',
connections: {
syncStageName: (stage: PolicyConnectionSyncStage) => {
@@ -2483,6 +2599,8 @@ export default {
case 'quickbooksOnlineImportCustomers':
return 'Importando clientes';
case 'quickbooksOnlineImportEmployees':
+ case 'netSuiteSyncImportEmployees':
+ case 'intacctImportEmployees':
return 'Importando empleados';
case 'quickbooksOnlineImportAccounts':
return 'Importando cuentas';
@@ -2493,6 +2611,7 @@ export default {
case 'quickbooksOnlineImportProcessing':
return 'Procesando datos importados';
case 'quickbooksOnlineSyncBillPayments':
+ case 'intacctImportSyncBillPayments':
return 'Sincronizando reportes reembolsados y facturas pagadas';
case 'quickbooksOnlineSyncTaxCodes':
return 'Importando tipos de impuestos';
@@ -2507,6 +2626,8 @@ export default {
case 'quickbooksOnlineSyncTitle':
return 'Sincronizando datos desde QuickBooks Online';
case 'quickbooksOnlineSyncLoadData':
+ case 'xeroSyncStep':
+ case 'intacctImportData':
return 'Cargando datos';
case 'quickbooksOnlineSyncApplyCategories':
return 'Actualizando categorías';
@@ -2536,8 +2657,6 @@ export default {
return 'Comprobando la conexión a Xero';
case 'xeroSyncTitle':
return 'Sincronizando los datos de Xero';
- case 'xeroSyncStep':
- return 'Cargando datos';
case 'netSuiteSyncConnection':
return 'Iniciando conexión a NetSuite';
case 'netSuiteSyncCustomers':
@@ -2556,8 +2675,6 @@ export default {
return 'Sincronizando divisas';
case 'netSuiteSyncCategories':
return 'Sincronizando categorías';
- case 'netSuiteSyncImportEmployees':
- return 'Importando empleados';
case 'netSuiteSyncReportFields':
return 'Importando datos como campos de informe de Expensify';
case 'netSuiteSyncTags':
@@ -2568,26 +2685,66 @@ export default {
return 'Marcando informes de Expensify como reembolsados';
case 'netSuiteSyncExpensifyReimbursedReports':
return 'Marcando facturas y recibos de NetSuite como pagados';
+ case 'intacctCheckConnection':
+ return 'Comprobando la conexión a Sage Intacct';
+ case 'intacctImportDimensions':
+ return 'Importando dimensiones';
+ case 'intacctImportTitle':
+ return 'Importando datos desde Sage Intacct';
default: {
return `Translation missing for stage: ${stage}`;
}
}
},
},
+ preferredExporter: 'Exportador preferido',
+ exportPreferredExporterNote:
+ 'Puede ser cualquier administrador del espacio de trabajo, pero debe ser un administrador de dominio si configura diferentes cuentas de exportación para tarjetas de empresa individuales en la configuración del dominio.',
+ exportPreferredExporterSubNote: 'Una vez configurado, el exportador preferido verá los informes para exportar en tu cuenta.',
+ exportAs: 'Exportar cómo',
+ defaultVendor: 'Proveedor predeterminado',
},
card: {
header: 'Desbloquea Tarjetas Expensify gratis',
headerWithEcard: '¡Tus tarjetas están listas!',
- noVBACopy: 'Conecta una cuenta bancaria para emitir tarjetas Expensify a los miembros de tu espacio de trabajo y accede a estos increíbles beneficios y más:',
+ noVBACopy: 'Conecta una cuenta bancaria para emitir Tarjetas Expensify a los miembros de tu espacio de trabajo y acceder a estos increíbles beneficios y más:',
VBANoECardCopy:
- 'Añade tu correo electrónico de trabajo para emitir Tarjetas Expensify ilimitadas para los miembros de tu espacio de trabajo y acceder a todas estas increíbles ventajas:',
+ 'Añade tu correo electrónico de trabajo para emitir Tarjetas Expensify ilimitadas a los miembros de tu espacio de trabajo y acceder a todas estas increíbles ventajas:',
VBAWithECardCopy: 'Acceda a estos increíbles beneficios y más:',
benefit1: 'Devolución de dinero en cada compra en Estados Unidos',
- benefit2: 'Tarjetas digitales y físicas',
+ benefit2: 'Tarjetas virtuales y físicas ilimitadas',
benefit3: 'Sin responsabilidad personal',
benefit4: 'Límites personalizables',
addWorkEmail: 'Añadir correo electrónico de trabajo',
checkingDomain: '¡Un momento! Estamos todavía trabajando para habilitar tu Tarjeta Expensify. Vuelve aquí en unos minutos.',
+ issueCard: 'Emitir tarjeta',
+ issueNewCard: {
+ whoNeedsCard: '¿Quién necesita una tarjeta?',
+ findMember: 'Buscar miembro',
+ chooseCardType: 'Elegir un tipo de tarjeta',
+ physicalCard: 'Tarjeta física',
+ physicalCardDescription: 'Ideal para los consumidores habituales',
+ virtualCard: 'Tarjeta virtual',
+ virtualCardDescription: 'Instantáneo y flexible',
+ chooseLimitType: 'Elegir un tipo de límite',
+ smartLimit: 'Límite inteligente',
+ smartLimitDescription: 'Gasta hasta una determinada cantidad antes de requerir aprobación',
+ monthly: 'Mensual',
+ monthlyDescription: 'Gasta hasta una determinada cantidad al mes',
+ fixedAmount: 'Cantidad fija',
+ fixedAmountDescription: 'Gasta hasta una determinada cantidad una vez',
+ setLimit: 'Establecer un límite',
+ giveItName: 'Dale un nombre',
+ giveItNameInstruction: 'Hazlo lo suficientemente único como para distinguirlo de los demás. Los casos de uso específicos son aún mejores.',
+ cardName: 'Nombre de la tarjeta',
+ letsDoubleCheck: 'Vuelve a comprobar que todo parece correcto. ',
+ willBeReady: 'Esta tarjeta estará lista para su uso inmediato.',
+ cardholder: 'Titular de la tarjeta',
+ cardType: 'Tipo de tarjeta',
+ limit: 'Limite',
+ limitType: 'Tipo de limite',
+ name: 'Nombre',
+ },
},
reimburse: {
captureReceipts: 'Captura recibos',
@@ -2601,7 +2758,7 @@ export default {
trackDistanceChooseUnit: 'Elige una unidad predeterminada de medida.',
unlockNextDayReimbursements: 'Desbloquea reembolsos diarios',
captureNoVBACopyBeforeEmail: 'Pide a los miembros de tu espacio de trabajo que envíen recibos a ',
- captureNoVBACopyAfterEmail: ' y descarga la App de Expensify para controlar tus gastos en efectivo sobre la marcha.',
+ captureNoVBACopyAfterEmail: ' y descarga la app de Expensify para controlar tus gastos en efectivo sobre la marcha.',
unlockNoVBACopy: 'Conecta una cuenta bancaria para reembolsar online a los miembros de tu espacio de trabajo.',
fastReimbursementsVBACopy: '¡Todo listo para reembolsar recibos desde tu cuenta bancaria!',
updateCustomUnitError: 'Los cambios no han podido ser guardados. El espacio de trabajo ha sido modificado mientras estabas desconectado. Por favor, inténtalo de nuevo.',
@@ -2623,7 +2780,7 @@ export default {
invoiceFirstSectionCopy: 'Envía facturas detalladas y profesionales directamente a tus clientes desde la app de Expensify.',
viewAllInvoices: 'Ver facturas emitidas',
unlockOnlineInvoiceCollection: 'Desbloquea el cobro de facturas online',
- unlockNoVBACopy: 'Conecta tu cuenta bancaria para recibir pagos online de facturas - por transferencia o con tarjeta - directamente en tu cuenta.',
+ unlockNoVBACopy: 'Conecta tu cuenta bancaria para recibir pagos de facturas online por transferencia o con tarjeta.',
moneyBackInAFlash: '¡Tu dinero de vuelta en un momento!',
unlockVBACopy: '¡Todo listo para recibir pagos por transferencia o con tarjeta!',
viewUnpaidInvoices: 'Ver facturas emitidas pendientes',
@@ -2649,10 +2806,10 @@ export default {
member: 'Invitar miembros',
members: 'Invitar miembros',
invitePeople: 'Invitar nuevos miembros',
- genericFailureMessage: 'Se produjo un error al invitar al usuario al espacio de trabajo. Vuelva a intentarlo..',
+ genericFailureMessage: 'Se produjo un error al invitar al miembro al espacio de trabajo. Vuelva a intentarlo..',
pleaseEnterValidLogin: `Asegúrese de que el correo electrónico o el número de teléfono sean válidos (p. ej. ${CONST.EXAMPLE_PHONE_NUMBER}).`,
- user: 'usuario',
- users: 'usuarios',
+ user: 'miembro',
+ users: 'miembros',
invited: 'invitó',
removed: 'eliminó',
leftWorkspace: 'salió del espacio de trabajo',
@@ -2664,7 +2821,7 @@ export default {
inviteMessagePrompt: 'Añadir un mensaje para hacer tu invitación destacar',
personalMessagePrompt: 'Mensaje',
inviteNoMembersError: 'Por favor, selecciona al menos un miembro a invitar.',
- genericFailureMessage: 'Se produjo un error al invitar al usuario al espacio de trabajo. Vuelva a intentarlo..',
+ genericFailureMessage: 'Se produjo un error al invitar al miembro al espacio de trabajo. Por favor, vuelva a intentarlo..',
},
distanceRates: {
oopsNotSoFast: 'Ups! No tan rápido...',
@@ -2701,14 +2858,13 @@ export default {
},
bankAccount: {
continueWithSetup: 'Continuar con la configuración',
- youreAlmostDone:
- 'Casi has acabado de configurar tu cuenta bancaria, que te permitirá emitir tarjetas corporativas, reembolsar gastos y cobrar pagar facturas, todo desde la misma cuenta bancaria.',
+ youreAlmostDone: 'Casi has acabado de configurar tu cuenta bancaria, que te permitirá emitir tarjetas corporativas, reembolsar gastos y cobrar pagar facturas.',
streamlinePayments: 'Optimiza pagos',
oneMoreThing: '¡Una cosa más!',
allSet: '¡Todo listo!',
accountDescriptionNoCards:
- 'Esta cuenta bancaria se utilizará para reembolsar gastos y cobrar y pagar facturas, todo desde la misma cuenta.\n\nPor favor, añade un correo electrónico de trabajo como tu nombre de usuario secundario para activar la Tarjeta Expensify.',
- accountDescriptionWithCards: 'Esta cuenta bancaria se utilizará para emitir tarjetas corporativas, reembolsar gastos y cobrar y pagar facturas, todo desde la misma cuenta.',
+ 'Esta cuenta bancaria se utilizará para reembolsar gastos y cobrar y pagar facturas.\n\nPor favor, añade un correo electrónico de trabajo como tu nombre de usuario secundario para activar la Tarjeta Expensify.',
+ accountDescriptionWithCards: 'Esta cuenta bancaria se utilizará para emitir tarjetas corporativas, reembolsar gastos y cobrar y pagar facturas.',
addWorkEmail: 'Añadir correo electrónico de trabajo',
letsFinishInChat: '¡Continuemos en el chat!',
almostDone: '¡Casi listo!',
@@ -2750,7 +2906,7 @@ export default {
subscriptionTitle: 'Asumir la suscripción anual',
subscriptionButtonText: 'Transferir suscripción',
subscriptionText: ({usersCount, finalCount}) =>
- `Al hacerse cargo de este espacio de trabajo se fusionará tu suscripción anual asociada con tu suscripción actual. Esto aumentará el tamaño de tu suscripción en ${usersCount} usuarios, lo que hará que tu nuevo tamaño de suscripción sea ${finalCount}. ¿Te gustaria continuar?`,
+ `Al hacerse cargo de este espacio de trabajo se fusionará tu suscripción anual asociada con tu suscripción actual. Esto aumentará el tamaño de tu suscripción en ${usersCount} miembros, lo que hará que tu nuevo tamaño de suscripción sea ${finalCount}. ¿Te gustaria continuar?`,
duplicateSubscriptionTitle: 'Alerta de suscripción duplicada',
duplicateSubscriptionButtonText: 'Continuar',
duplicateSubscriptionText: ({email, workspaceName}) =>
@@ -2827,7 +2983,7 @@ export default {
roomRenamedTo: ({newName}: RoomRenamedToParams) => `Sala renombrada a ${newName}`,
social: 'social',
selectAWorkspace: 'Seleccionar un espacio de trabajo',
- growlMessageOnRenameError: 'No se ha podido cambiar el nombre del espacio de trabajo, por favor, comprueba tu conexión e inténtalo de nuevo.',
+ growlMessageOnRenameError: 'No se ha podido cambiar el nombre del espacio de trabajo. Por favor, comprueba tu conexión e inténtalo de nuevo.',
visibilityOptions: {
restricted: 'Espacio de trabajo', // the translation for "restricted" visibility is actually workspace. This is so we can display restricted visibility rooms as "workspace" without having to change what's stored.
private: 'Privada',
@@ -2837,8 +2993,8 @@ export default {
},
},
roomMembersPage: {
- memberNotFound: 'Miembro no encontrado. Para invitar a un nuevo miembro a la sala de chat, por favor, utiliza el botón Invitar que está más arriba.',
- notAuthorized: `No tienes acceso a esta página. ¿Estás tratando de unirte a la sala de chat? Comunícate con el propietario de esta sala de chat para que pueda añadirte como miembro. ¿Necesitas algo más? Comunícate con ${CONST.EMAIL.CONCIERGE}`,
+ memberNotFound: 'Miembro no encontrado. Para invitar a un nuevo miembro a la sala de chat, por favor, utiliza el botón invitar que está más arriba.',
+ notAuthorized: `No tienes acceso a esta página. Si estás intentando unirte a esta sala, pide a un miembro de la sala que te añada. ¿Necesitas algo más? Comunícate con ${CONST.EMAIL.CONCIERGE}`,
removeMembersPrompt: '¿Estás seguro de que quieres eliminar a los miembros seleccionados de la sala de chat?',
error: {
genericAdd: 'Hubo un problema al añadir este miembro a la sala de chat.',
@@ -2858,7 +3014,7 @@ export default {
task: 'Tarea',
title: 'Título',
description: 'Descripción',
- assignee: 'Usuario asignado',
+ assignee: 'Miembro asignado',
completed: 'Completada',
messages: {
created: ({title}: TaskCreatedActionParams) => `tarea para ${title}`,
@@ -2869,8 +3025,8 @@ export default {
},
markAsComplete: 'Marcar como completada',
markAsIncomplete: 'Marcar como incompleta',
- assigneeError: 'Hubo un error al asignar esta tarea, inténtalo con otro usuario.',
- genericCreateTaskFailureMessage: 'Error inesperado al crear el tarea, por favor, inténtalo más tarde.',
+ assigneeError: 'Hubo un error al asignar esta tarea. Por favor, inténtalo con otro miembro.',
+ genericCreateTaskFailureMessage: 'Error inesperado al crear el tarea. Por favor, inténtalo más tarde.',
deleteTask: 'Eliminar tarea',
deleteConfirmation: '¿Estás seguro de que quieres eliminar esta tarea?',
},
@@ -2926,7 +3082,7 @@ export default {
},
permissionError: {
title: 'Permiso para acceder al almacenamiento',
- message: 'Expensify no puede guardar los archivos adjuntos sin permiso para acceder al almacenamiento. Haz click en Configuración para actualizar los permisos.',
+ message: 'Expensify no puede guardar los archivos adjuntos sin permiso para acceder al almacenamiento. Haz click en configuración para actualizar los permisos.',
},
},
desktopApplicationMenu: {
@@ -3001,8 +3157,36 @@ export default {
genericCreateReportFailureMessage: 'Error inesperado al crear el chat. Por favor, inténtalo más tarde.',
genericAddCommentFailureMessage: 'Error inesperado al añadir el comentario. Por favor, inténtalo más tarde.',
genericUpdateReportFieldFailureMessage: 'Error inesperado al actualizar el campo. Por favor, inténtalo más tarde.',
- genericUpdateReporNameEditFailureMessage: 'Error inesperado al cambiar el nombre del informe. Vuelva a intentarlo más tarde.',
+ genericUpdateReporNameEditFailureMessage: 'Error inesperado al cambiar el nombre del informe. Por favor, intentarlo más tarde.',
noActivityYet: 'Sin actividad todavía',
+ actions: {
+ type: {
+ changeField: ({oldValue, newValue, fieldName}: ChangeFieldParams) => `cambió ${fieldName} de ${oldValue} a ${newValue}`,
+ changeFieldEmpty: ({newValue, fieldName}: ChangeFieldParams) => `cambió ${fieldName} a ${newValue}`,
+ changePolicy: ({fromPolicy, toPolicy}: ChangePolicyParams) => `cambió policy de ${fromPolicy} a ${toPolicy}`,
+ changeType: ({oldType, newType}: ChangeTypeParams) => `cambió type de ${oldType} a ${newType}`,
+ delegateSubmit: ({delegateUser, originalManager}: DelegateSubmitParams) => `envié este informe a ${delegateUser} ya que ${originalManager} está de vacaciones`,
+ exportedToCSV: `exportó este informe a CSV`,
+ exportedToIntegration: ({label}: ExportedToIntegrationParams) => `exportó este informe a ${label}`,
+ forwarded: ({amount, currency}: ForwardedParams) => `aprobado ${currency}${amount}`,
+ integrationsMessage: ({errorMessage, label}: IntegrationsMessageParams) => `no se pudo exportar este informe a ${label}. ${errorMessage}`,
+ managerAttachReceipt: `agregó un recibo`,
+ managerDetachReceipt: `quitó el recibo`,
+ markedReimbursed: ({amount, currency}: MarkedReimbursedParams) => `pagó ${currency}${amount} en otro lugar`,
+ markedReimbursedFromIntegration: ({amount, currency}: MarkReimbursedFromIntegrationParams) => `pagó ${currency}${amount} mediante integración`,
+ outdatedBankAccount: `no se pudo procesar el pago debido a un problema con la cuenta bancaria del pagador`,
+ reimbursementACHBounce: `no se pudo procesar el pago porque el pagador no tiene fondos suficientes`,
+ reimbursementACHCancelled: `canceled the payment`,
+ reimbursementAccountChanged: `no se pudo procesar el pago porque el pagador cambió de cuenta bancaria`,
+ reimbursementDelayed: `procesó el pago pero se retrasó entre 1 y 2 días hábiles más`,
+ selectedForRandomAudit: `[seleccionado al azar](https://help.expensify.com/articles/expensify-classic/reports/Set-a-random-report-audit-schedule) para revisión`,
+ share: ({to}: ShareParams) => `usuario invitado ${to}`,
+ unshare: ({to}: UnshareParams) => `usuario eliminado ${to}`,
+ stripePaid: ({amount, currency}: StripePaidParams) => `pagado ${currency}${amount}`,
+ takeControl: `tomó el control`,
+ unapproved: ({amount, currency}: UnapprovedParams) => `no aprobado ${currency}${amount}`,
+ },
+ },
},
chronos: {
oooEventSummaryFullDay: ({summary, dayCount, date}: OOOEventSummaryFullDayParams) => `${summary} por ${dayCount} ${dayCount === 1 ? 'día' : 'días'} hasta el ${date}`,
@@ -3622,8 +3806,8 @@ export default {
reasonTitle: '¿Por qué necesitas una tarjeta nueva?',
cardDamaged: 'Mi tarjeta está dañada',
cardLostOrStolen: 'He perdido o me han robado la tarjeta',
- confirmAddressTitle: 'Confirma que la dirección que aparece a continuación es a la que deseas que te enviemos tu nueva tarjeta.',
- cardDamagedInfo: 'La nueva tarjeta te llegará en 2-3 días laborables y la tarjeta actual seguirá funcionando hasta que actives la nueva.',
+ confirmAddressTitle: 'Por favor, confirma la dirección postal de tu nueva tarjeta.',
+ cardDamagedInfo: 'La nueva tarjeta te llegará en 2-3 días laborables. La tarjeta actual seguirá funcionando hasta que actives la nueva.',
cardLostOrStolenInfo: 'La tarjeta actual se desactivará permanentemente en cuanto realices el pedido. La mayoría de las tarjetas llegan en pocos días laborables.',
address: 'Dirección',
deactivateCardButton: 'Desactivar tarjeta',
@@ -3727,14 +3911,14 @@ export default {
taxRateChanged: 'La tasa de impuesto fue modificada',
taxRequired: 'Falta la tasa de impuesto',
keepThisOne: 'Mantener éste',
- hold: 'Bloqueada',
+ hold: 'Bloqueado',
},
violationDismissal: {
rter: {
manual: 'marcó el recibo como pagado en efectivo.',
},
duplicatedTransaction: {
- manual: 'resuelto el duplicado',
+ manual: 'resolvió el duplicado',
},
},
videoPlayer: {
@@ -3780,6 +3964,57 @@ export default {
subscription: {
mobileReducedFunctionalityMessage: 'No puedes hacer cambios en tu suscripción en la aplicación móvil.',
billingBanner: {
+ policyOwnerAmountOwed: {
+ title: 'Tu información de pago está desactualizada',
+ subtitle: ({date}) => `Actualiza tu tarjeta de pago antes del ${date} para continuar utilizando todas tus herramientas favoritas`,
+ },
+ policyOwnerAmountOwedOverdue: {
+ title: 'Tu información de pago está desactualizada',
+ subtitle: 'Por favor, actualiza tu información de pago.',
+ },
+ policyOwnerUnderInvoicing: {
+ title: 'Tu información de pago está desactualizada',
+ subtitle: ({date}) => `Tu pago está vencido. Por favor, paga tu factura antes del ${date} para evitar la interrupción del servicio.`,
+ },
+ policyOwnerUnderInvoicingOverdue: {
+ title: 'Tu información de pago está desactualizada',
+ subtitle: 'Tu pago está vencido. Por favor, paga tu factura.',
+ },
+ billingDisputePending: {
+ title: 'No se ha podido realizar el cobro a tu tarjeta',
+ subtitle: ({amountOwed, cardEnding}) =>
+ `Has impugnado el cargo ${amountOwed} en la tarjeta terminada en ${cardEnding}. Tu cuenta estará bloqueada hasta que se resuelva la disputa con tu banco.`,
+ },
+ cardAuthenticationRequired: {
+ title: 'No se ha podido realizar el cobro a tu tarjeta',
+ subtitle: ({cardEnding}) =>
+ `Tu tarjeta de pago no ha sido autenticada completamente. Por favor, completa el proceso de autenticación para activar tu tarjeta de pago que termina en ${cardEnding}.`,
+ },
+ insufficientFunds: {
+ title: 'No se ha podido realizar el cobro a tu tarjeta',
+ subtitle: ({amountOwed}) =>
+ `Tu tarjeta de pago fue rechazada por falta de fondos. Vuelve a intentarlo o añade una nueva tarjeta de pago para liquidar tu saldo pendiente de ${amountOwed}.`,
+ },
+ cardExpired: {
+ title: 'No se ha podido realizar el cobro a tu tarjeta',
+ subtitle: ({amountOwed}) => `Tu tarjeta de pago ha expirado. Por favor, añade una nueva tarjeta de pago para liquidar tu saldo pendiente de ${amountOwed}.`,
+ },
+ cardExpireSoon: {
+ title: 'Tu tarjeta caducará pronto',
+ subtitle:
+ 'Tu tarjeta de pago caducará a finales de este mes. Haz clic en el menú de tres puntos que aparece a continuación para actualizarla y continuar utilizando todas tus herramientas favoritas.',
+ },
+ retryBillingSuccess: {
+ title: 'Éxito!',
+ subtitle: 'Tu tarjeta fue facturada correctamente.',
+ },
+ retryBillingError: {
+ title: 'No se ha podido realizar el cobro a tu tarjeta',
+ subtitle:
+ 'Antes de volver a intentarlo, llama directamente a tu banco para que autorice los cargos de Expensify y elimine las retenciones. De lo contrario, añade una tarjeta de pago diferente.',
+ },
+ cardOnDispute: ({amountOwed, cardEnding}) =>
+ `Has impugnado el cargo ${amountOwed} en la tarjeta terminada en ${cardEnding}. Tu cuenta estará bloqueada hasta que se resuelva la disputa con tu banco.`,
preTrial: {
title: 'Iniciar una prueba gratuita',
subtitle: 'Para empezar, ',
@@ -3797,6 +4032,7 @@ export default {
changeCurrency: 'Cambiar moneda de pago',
cardNotFound: 'No se ha añadido ninguna tarjeta de pago',
retryPaymentButton: 'Reintentar el pago',
+ viewPaymentHistory: 'Ver historial de pagos',
},
yourPlan: {
title: 'Tu plan',
@@ -3864,7 +4100,7 @@ export default {
title: 'Configuración de suscripción',
autoRenew: 'Auto-renovación',
autoIncrease: 'Auto-incremento',
- saveUpTo: ({amountSaved}) => `Ahorre hasta $${amountSaved} al mes por miembro activo`,
+ saveUpTo: ({amountWithCurrency}) => `Ahorre hasta ${amountWithCurrency} al mes por miembro activo`,
automaticallyIncrease:
'Aumenta automáticamente tus plazas anuales para dar lugar a los miembros activos que superen el tamaño de tu suscripción. Nota: Esto ampliará la fecha de finalización de tu suscripción anual.',
disableAutoRenew: 'Desactivar auto-renovación',
diff --git a/src/languages/types.ts b/src/languages/types.ts
index de9b1d2dadeb..eb90f2d9e0b2 100644
--- a/src/languages/types.ts
+++ b/src/languages/types.ts
@@ -298,6 +298,36 @@ type DistanceRateOperationsParams = {count: number};
type ReimbursementRateParams = {unit: Unit};
+type ChangeFieldParams = {oldValue?: string; newValue: string; fieldName: string};
+
+type ChangePolicyParams = {fromPolicy: string; toPolicy: string};
+
+type ChangeTypeParams = {oldType: string; newType: string};
+
+type DelegateSubmitParams = {delegateUser: string; originalManager: string};
+
+type ExportedToIntegrationParams = {label: string};
+
+type ForwardedParams = {amount: string; currency: string};
+
+type IntegrationsMessageParams = {errorMessage: string; label: string};
+
+type MarkedReimbursedParams = {amount: string; currency: string};
+
+type MarkReimbursedFromIntegrationParams = {amount: string; currency: string};
+
+type ShareParams = {to: string};
+
+type UnshareParams = {to: string};
+
+type StripePaidParams = {amount: string; currency: string};
+
+type UnapprovedParams = {amount: string; currency: string};
+type RemoveMembersWarningPrompt = {
+ memberName: string;
+ ownerName: string;
+};
+
export type {
AddressLineParams,
AdminCanceledRequestParams,
@@ -402,4 +432,18 @@ export type {
WelcomeNoteParams,
WelcomeToRoomParams,
ZipCodeExampleFormatParams,
+ ChangeFieldParams,
+ ChangePolicyParams,
+ ChangeTypeParams,
+ ExportedToIntegrationParams,
+ DelegateSubmitParams,
+ ForwardedParams,
+ IntegrationsMessageParams,
+ MarkedReimbursedParams,
+ MarkReimbursedFromIntegrationParams,
+ ShareParams,
+ UnshareParams,
+ StripePaidParams,
+ UnapprovedParams,
+ RemoveMembersWarningPrompt,
};
diff --git a/src/libs/API/parameters/AddPaymentCardParams.ts b/src/libs/API/parameters/AddPaymentCardParams.ts
index 1c9b1fc4fa30..3a59c678ac4f 100644
--- a/src/libs/API/parameters/AddPaymentCardParams.ts
+++ b/src/libs/API/parameters/AddPaymentCardParams.ts
@@ -8,7 +8,7 @@ type AddPaymentCardParams = {
cardCVV: string;
addressName: string;
addressZip: string;
- currency: ValueOf;
+ currency: ValueOf;
isP2PDebitCard: boolean;
};
export default AddPaymentCardParams;
diff --git a/src/libs/API/parameters/ConnectPolicyToSageIntacctParams.ts b/src/libs/API/parameters/ConnectPolicyToSageIntacctParams.ts
new file mode 100644
index 000000000000..3b5cfc973e4d
--- /dev/null
+++ b/src/libs/API/parameters/ConnectPolicyToSageIntacctParams.ts
@@ -0,0 +1,8 @@
+type ConnectPolicyToSageIntacctParams = {
+ policyID: string;
+ intacctCompanyID: string;
+ intacctUserID: string;
+ intacctPassword: string;
+};
+
+export default ConnectPolicyToSageIntacctParams;
diff --git a/src/libs/API/parameters/EnablePolicyExpensifyCardsParams.ts b/src/libs/API/parameters/EnablePolicyExpensifyCardsParams.ts
new file mode 100644
index 000000000000..e918683ffd1f
--- /dev/null
+++ b/src/libs/API/parameters/EnablePolicyExpensifyCardsParams.ts
@@ -0,0 +1,7 @@
+type EnablePolicyExpensifyCardsParams = {
+ authToken: string;
+ policyID: string;
+ enabled: boolean;
+};
+
+export default EnablePolicyExpensifyCardsParams;
diff --git a/src/libs/API/parameters/OpenProfileParams.ts b/src/libs/API/parameters/OpenProfileParams.ts
deleted file mode 100644
index f42ea8234fc8..000000000000
--- a/src/libs/API/parameters/OpenProfileParams.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-type OpenProfileParams = {
- timezone: string;
-};
-
-export default OpenProfileParams;
diff --git a/src/libs/API/parameters/UpdateBillingCurrencyParams.ts b/src/libs/API/parameters/UpdateBillingCurrencyParams.ts
new file mode 100644
index 000000000000..0ab3dc9665a5
--- /dev/null
+++ b/src/libs/API/parameters/UpdateBillingCurrencyParams.ts
@@ -0,0 +1,9 @@
+import type {ValueOf} from 'type-fest';
+import type CONST from '@src/CONST';
+
+type UpdateBillingCurrencyParams = {
+ currency: ValueOf;
+ cardCVV: string;
+};
+
+export default UpdateBillingCurrencyParams;
diff --git a/src/libs/API/parameters/UpdateNetSuiteGenericTypeParams.ts b/src/libs/API/parameters/UpdateNetSuiteGenericTypeParams.ts
new file mode 100644
index 000000000000..3834dfbf7e66
--- /dev/null
+++ b/src/libs/API/parameters/UpdateNetSuiteGenericTypeParams.ts
@@ -0,0 +1,7 @@
+type UpdateNetSuiteGenericTypeParams = {
+ [K2 in K]: Type;
+} & {
+ policyID: string;
+};
+
+export default UpdateNetSuiteGenericTypeParams;
diff --git a/src/libs/API/parameters/UpdateNetSuiteSubsidiaryParams.ts b/src/libs/API/parameters/UpdateNetSuiteSubsidiaryParams.ts
new file mode 100644
index 000000000000..15353589663a
--- /dev/null
+++ b/src/libs/API/parameters/UpdateNetSuiteSubsidiaryParams.ts
@@ -0,0 +1,7 @@
+type UpdateNetSuiteSubsidiaryParams = {
+ policyID: string;
+ subsidiary: string;
+ subsidiaryID: string;
+};
+
+export default UpdateNetSuiteSubsidiaryParams;
diff --git a/src/libs/API/parameters/index.ts b/src/libs/API/parameters/index.ts
index 269821318889..ef44ce06bced 100644
--- a/src/libs/API/parameters/index.ts
+++ b/src/libs/API/parameters/index.ts
@@ -32,7 +32,6 @@ export type {default as OpenAppParams} from './OpenAppParams';
export type {default as OpenOldDotLinkParams} from './OpenOldDotLinkParams';
export type {default as OpenPlaidBankAccountSelectorParams} from './OpenPlaidBankAccountSelectorParams';
export type {default as OpenPlaidBankLoginParams} from './OpenPlaidBankLoginParams';
-export type {default as OpenProfileParams} from './OpenProfileParams';
export type {default as OpenPublicProfilePageParams} from './OpenPublicProfilePageParams';
export type {default as OpenReimbursementAccountPageParams} from './OpenReimbursementAccountPageParams';
export type {default as OpenReportParams} from './OpenReportParams';
@@ -97,6 +96,7 @@ export type {default as UpdateRoomVisibilityParams} from './UpdateRoomVisibility
export type {default as UpdateReportWriteCapabilityParams} from './UpdateReportWriteCapabilityParams';
export type {default as AddWorkspaceRoomParams} from './AddWorkspaceRoomParams';
export type {default as UpdatePolicyRoomNameParams} from './UpdatePolicyRoomNameParams';
+export type {default as UpdateBillingCurrencyParams} from './UpdateBillingCurrencyParams';
export type {default as AddEmojiReactionParams} from './AddEmojiReactionParams';
export type {default as RemoveEmojiReactionParams} from './RemoveEmojiReactionParams';
export type {default as LeaveRoomParams} from './LeaveRoomParams';
@@ -122,6 +122,7 @@ export type {default as AddMembersToWorkspaceParams} from './AddMembersToWorkspa
export type {default as DeleteMembersFromWorkspaceParams} from './DeleteMembersFromWorkspaceParams';
export type {default as OpenWorkspaceParams} from './OpenWorkspaceParams';
export type {default as OpenWorkspaceViewParams} from './OpenWorkspaceViewParams';
+export type {default as ConnectPolicyToSageIntacctParams} from './ConnectPolicyToSageIntacctParams';
export type {default as OpenWorkspaceReimburseViewParams} from './OpenWorkspaceReimburseViewParams';
export type {default as OpenWorkspaceInvitePageParams} from './OpenWorkspaceInvitePageParams';
export type {default as OpenWorkspaceMembersPageParams} from './OpenWorkspaceMembersPageParams';
@@ -182,6 +183,7 @@ export type {default as EnablePolicyTagsParams} from './EnablePolicyTagsParams';
export type {default as SetPolicyTagsEnabled} from './SetPolicyTagsEnabled';
export type {default as EnablePolicyWorkflowsParams} from './EnablePolicyWorkflowsParams';
export type {default as EnablePolicyReportFieldsParams} from './EnablePolicyReportFieldsParams';
+export type {default as EnablePolicyExpensifyCardsParams} from './EnablePolicyExpensifyCardsParams';
export type {default as AcceptJoinRequestParams} from './AcceptJoinRequest';
export type {default as DeclineJoinRequestParams} from './DeclineJoinRequest';
export type {default as JoinPolicyInviteLinkParams} from './JoinPolicyInviteLink';
@@ -233,3 +235,5 @@ export type {default as UpdateSubscriptionAutoRenewParams} from './UpdateSubscri
export type {default as UpdateSubscriptionAddNewUsersAutomaticallyParams} from './UpdateSubscriptionAddNewUsersAutomaticallyParams';
export type {default as GenerateSpotnanaTokenParams} from './GenerateSpotnanaTokenParams';
export type {default as UpdateSubscriptionSizeParams} from './UpdateSubscriptionSizeParams';
+export type {default as UpdateNetSuiteSubsidiaryParams} from './UpdateNetSuiteSubsidiaryParams';
+export type {default as UpdateNetSuiteGenericTypeParams} from './UpdateNetSuiteGenericTypeParams';
diff --git a/src/libs/API/types.ts b/src/libs/API/types.ts
index c5057d5c8d7c..062f0e915873 100644
--- a/src/libs/API/types.ts
+++ b/src/libs/API/types.ts
@@ -17,7 +17,6 @@ const WRITE_COMMANDS = {
UPDATE_PREFERRED_LOCALE: 'UpdatePreferredLocale',
OPEN_APP: 'OpenApp',
RECONNECT_APP: 'ReconnectApp',
- OPEN_PROFILE: 'OpenProfile',
HANDLE_RESTRICTED_EVENT: 'HandleRestrictedEvent',
OPEN_REPORT: 'OpenReport',
DELETE_PAYMENT_BANK_ACCOUNT: 'DeletePaymentBankAccount',
@@ -143,6 +142,7 @@ const WRITE_COMMANDS = {
REOPEN_TASK: 'ReopenTask',
COMPLETE_TASK: 'CompleteTask',
COMPLETE_GUIDED_SETUP: 'CompleteGuidedSetup',
+ COMPLETE_HYBRID_APP_ONBOARDING: 'CompleteHybridAppOnboarding',
SET_NAME_VALUE_PAIR: 'SetNameValuePair',
SET_REPORT_FIELD: 'Report_SetFields',
DELETE_REPORT_FIELD: 'RemoveReportField',
@@ -159,6 +159,7 @@ const WRITE_COMMANDS = {
UPDATE_MONEY_REQUEST_DESCRIPTION: 'UpdateMoneyRequestDescription',
UPDATE_MONEY_REQUEST_AMOUNT_AND_CURRENCY: 'UpdateMoneyRequestAmountAndCurrency',
HOLD_MONEY_REQUEST: 'HoldRequest',
+ UPDATE_BILLING_CARD_CURRENCY: 'UpdateBillingCardCurrency',
UNHOLD_MONEY_REQUEST: 'UnHoldRequest',
UPDATE_DISTANCE_REQUEST: 'UpdateDistanceRequest',
REQUEST_MONEY: 'RequestMoney',
@@ -187,6 +188,7 @@ const WRITE_COMMANDS = {
ENABLE_POLICY_TAXES: 'EnablePolicyTaxes',
ENABLE_POLICY_WORKFLOWS: 'EnablePolicyWorkflows',
ENABLE_POLICY_REPORT_FIELDS: 'EnablePolicyReportFields',
+ ENABLE_POLICY_EXPENSIFY_CARDS: 'EnablePolicyExpensifyCards',
SET_POLICY_TAXES_CURRENCY_DEFAULT: 'SetPolicyCurrencyDefaultTax',
SET_POLICY_TAXES_FOREIGN_CURRENCY_DEFAULT: 'SetPolicyForeignCurrencyDefaultTax',
SET_POLICY_CUSTOM_TAX_NAME: 'SetPolicyCustomTaxName',
@@ -227,6 +229,23 @@ const WRITE_COMMANDS = {
UPDATE_SUBSCRIPTION_AUTO_RENEW: 'UpdateSubscriptionAutoRenew',
UPDATE_SUBSCRIPTION_ADD_NEW_USERS_AUTOMATICALLY: 'UpdateSubscriptionAddNewUsersAutomatically',
UPDATE_SUBSCRIPTION_SIZE: 'UpdateSubscriptionSize',
+ UPDATE_NETSUITE_SUBSIDIARY: 'UpdateNetSuiteSubsidiary',
+ UPDATE_NETSUITE_EXPORTER: 'UpdateNetSuiteExporter',
+ UPDATE_NETSUITE_EXPORT_DATE: 'UpdateNetSuiteExportDate',
+ UPDATE_NETSUITE_REIMBURSABLE_EXPENSES_EXPORT_DESTINATION: 'UpdateNetSuiteReimbursableExpensesExportDestination',
+ UPDATE_NETSUITE_NONREIMBURSABLE_EXPENSES_EXPORT_DESTINATION: 'UpdateNetSuiteNonreimbursableExpensesExportDestination',
+ UPDATE_NETSUITE_DEFAULT_VENDOR: 'UpdateNetSuiteDefaultVendor',
+ UPDATE_NETSUITE_REIMBURSABLE_PAYABLE_ACCOUNT: 'UpdateNetSuiteReimbursablePayableAccount',
+ UPDATE_NETSUITE_PAYABLE_ACCT: 'UpdateNetSuitePayableAcct',
+ UPDATE_NETSUITE_JOURNAL_POSTING_PREFERENCE: 'UpdateNetSuiteJournalPostingPreference',
+ UPDATE_NETSUITE_RECEIVABLE_ACCOUNT: 'UpdateNetSuiteReceivableAccount',
+ UPDATE_NETSUITE_INVOICE_ITEM_PREFERENCE: 'UpdateNetSuiteInvoiceItemPreference',
+ UPDATE_NETSUITE_INVOICE_ITEM: 'UpdateNetSuiteInvoiceItem',
+ UPDATE_NETSUITE_PROVINCIAL_TAX_POSTING_ACCOUNT: 'UpdateNetSuiteProvincialTaxPostingAccount',
+ UPDATE_NETSUITE_TAX_POSTING_ACCOUNT: 'UpdateNetSuiteTaxPostingAccount',
+ UPDATE_NETSUITE_ALLOW_FOREIGN_CURRENCY: 'UpdateNetSuiteAllowForeignCurrency',
+ UPDATE_NETSUITE_EXPORT_TO_NEXT_OPEN_PERIOD: 'UpdateNetSuiteExportToNextOpenPeriod',
+ CONNECT_POLICY_TO_SAGE_INTACCT: 'ConnectPolicyToSageIntacct',
} as const;
type WriteCommand = ValueOf;
@@ -236,7 +255,6 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.UPDATE_PREFERRED_LOCALE]: Parameters.UpdatePreferredLocaleParams;
[WRITE_COMMANDS.RECONNECT_APP]: Parameters.ReconnectAppParams;
[WRITE_COMMANDS.OPEN_APP]: Parameters.OpenAppParams;
- [WRITE_COMMANDS.OPEN_PROFILE]: Parameters.OpenProfileParams;
[WRITE_COMMANDS.HANDLE_RESTRICTED_EVENT]: Parameters.HandleRestrictedEventParams;
[WRITE_COMMANDS.OPEN_REPORT]: Parameters.OpenReportParams;
[WRITE_COMMANDS.DELETE_PAYMENT_BANK_ACCOUNT]: Parameters.DeletePaymentBankAccountParams;
@@ -262,7 +280,7 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.UPDATE_AUTOMATIC_TIMEZONE]: Parameters.UpdateAutomaticTimezoneParams;
[WRITE_COMMANDS.UPDATE_SELECTED_TIMEZONE]: Parameters.UpdateSelectedTimezoneParams;
[WRITE_COMMANDS.UPDATE_USER_AVATAR]: Parameters.UpdateUserAvatarParams;
- [WRITE_COMMANDS.DELETE_USER_AVATAR]: EmptyObject;
+ [WRITE_COMMANDS.DELETE_USER_AVATAR]: null;
[WRITE_COMMANDS.REFER_TEACHERS_UNITE_VOLUNTEER]: Parameters.ReferTeachersUniteVolunteerParams;
[WRITE_COMMANDS.ADD_SCHOOL_PRINCIPAL]: Parameters.AddSchoolPrincipalParams;
[WRITE_COMMANDS.CLOSE_ACCOUNT]: Parameters.CloseAccountParams;
@@ -278,7 +296,7 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.SET_CONTACT_METHOD_AS_DEFAULT]: Parameters.SetContactMethodAsDefaultParams;
[WRITE_COMMANDS.UPDATE_THEME]: Parameters.UpdateThemeParams;
[WRITE_COMMANDS.UPDATE_STATUS]: Parameters.UpdateStatusParams;
- [WRITE_COMMANDS.CLEAR_STATUS]: EmptyObject;
+ [WRITE_COMMANDS.CLEAR_STATUS]: null;
[WRITE_COMMANDS.UPDATE_PERSONAL_DETAILS_FOR_WALLET]: Parameters.UpdatePersonalDetailsForWalletParams;
[WRITE_COMMANDS.VERIFY_IDENTITY]: Parameters.VerifyIdentityParams;
[WRITE_COMMANDS.ACCEPT_WALLET_TERMS]: Parameters.AcceptWalletTermsParams;
@@ -293,8 +311,8 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.SIGN_IN_USER_WITH_LINK]: Parameters.SignInUserWithLinkParams;
[WRITE_COMMANDS.REQUEST_UNLINK_VALIDATION_LINK]: Parameters.RequestUnlinkValidationLinkParams;
[WRITE_COMMANDS.UNLINK_LOGIN]: Parameters.UnlinkLoginParams;
- [WRITE_COMMANDS.ENABLE_TWO_FACTOR_AUTH]: EmptyObject;
- [WRITE_COMMANDS.DISABLE_TWO_FACTOR_AUTH]: EmptyObject;
+ [WRITE_COMMANDS.ENABLE_TWO_FACTOR_AUTH]: null;
+ [WRITE_COMMANDS.DISABLE_TWO_FACTOR_AUTH]: null;
[WRITE_COMMANDS.TWO_FACTOR_AUTH_VALIDATE]: Parameters.ValidateTwoFactorAuthParams;
[WRITE_COMMANDS.ADD_COMMENT]: Parameters.AddCommentOrAttachementParams;
[WRITE_COMMANDS.ADD_ATTACHMENT]: Parameters.AddCommentOrAttachementParams;
@@ -362,6 +380,7 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.REOPEN_TASK]: Parameters.ReopenTaskParams;
[WRITE_COMMANDS.COMPLETE_TASK]: Parameters.CompleteTaskParams;
[WRITE_COMMANDS.COMPLETE_GUIDED_SETUP]: Parameters.CompleteGuidedSetupParams;
+ [WRITE_COMMANDS.COMPLETE_HYBRID_APP_ONBOARDING]: EmptyObject;
[WRITE_COMMANDS.SET_NAME_VALUE_PAIR]: Parameters.SetNameValuePairParams;
[WRITE_COMMANDS.SET_REPORT_FIELD]: Parameters.SetReportFieldParams;
[WRITE_COMMANDS.SET_REPORT_NAME]: Parameters.SetReportNameParams;
@@ -412,6 +431,7 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.ENABLE_POLICY_TAXES]: Parameters.EnablePolicyTaxesParams;
[WRITE_COMMANDS.ENABLE_POLICY_WORKFLOWS]: Parameters.EnablePolicyWorkflowsParams;
[WRITE_COMMANDS.ENABLE_POLICY_REPORT_FIELDS]: Parameters.EnablePolicyReportFieldsParams;
+ [WRITE_COMMANDS.ENABLE_POLICY_EXPENSIFY_CARDS]: Parameters.EnablePolicyExpensifyCardsParams;
[WRITE_COMMANDS.JOIN_POLICY_VIA_INVITE_LINK]: Parameters.JoinPolicyInviteLinkParams;
[WRITE_COMMANDS.ACCEPT_JOIN_REQUEST]: Parameters.AcceptJoinRequestParams;
[WRITE_COMMANDS.DECLINE_JOIN_REQUEST]: Parameters.DeclineJoinRequestParams;
@@ -430,7 +450,6 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.SET_POLICY_DISTANCE_RATES_DEFAULT_CATEGORY]: Parameters.SetPolicyDistanceRatesDefaultCategoryParams;
[WRITE_COMMANDS.ENABLE_DISTANCE_REQUEST_TAX]: Parameters.SetPolicyDistanceRatesDefaultCategoryParams;
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
[WRITE_COMMANDS.UPDATE_POLICY_CONNECTION_CONFIG]: Parameters.UpdatePolicyConnectionConfigParams;
[WRITE_COMMANDS.UPDATE_MANY_POLICY_CONNECTION_CONFIGS]: Parameters.UpdateManyPolicyConnectionConfigurationsParams;
[WRITE_COMMANDS.REMOVE_POLICY_CONNECTION]: Parameters.RemovePolicyConnectionParams;
@@ -440,12 +459,13 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.SET_POLICY_DISTANCE_RATES_ENABLED]: Parameters.SetPolicyDistanceRatesEnabledParams;
[WRITE_COMMANDS.DELETE_POLICY_DISTANCE_RATES]: Parameters.DeletePolicyDistanceRatesParams;
[WRITE_COMMANDS.DISMISS_TRACK_EXPENSE_ACTIONABLE_WHISPER]: Parameters.DismissTrackExpenseActionableWhisperParams;
+ [WRITE_COMMANDS.UPDATE_BILLING_CARD_CURRENCY]: Parameters.UpdateBillingCurrencyParams;
[WRITE_COMMANDS.CONVERT_TRACKED_EXPENSE_TO_REQUEST]: Parameters.ConvertTrackedExpenseToRequestParams;
[WRITE_COMMANDS.CATEGORIZE_TRACKED_EXPENSE]: Parameters.CategorizeTrackedExpenseParams;
[WRITE_COMMANDS.SHARE_TRACKED_EXPENSE]: Parameters.ShareTrackedExpenseParams;
[WRITE_COMMANDS.LEAVE_POLICY]: Parameters.LeavePolicyParams;
[WRITE_COMMANDS.DISMISS_VIOLATION]: Parameters.DismissViolationParams;
- [WRITE_COMMANDS.ACCEPT_SPOTNANA_TERMS]: EmptyObject;
+ [WRITE_COMMANDS.ACCEPT_SPOTNANA_TERMS]: null;
[WRITE_COMMANDS.SEND_INVOICE]: Parameters.SendInvoiceParams;
[WRITE_COMMANDS.PAY_INVOICE]: Parameters.PayInvoiceParams;
[WRITE_COMMANDS.MARK_AS_CASH]: Parameters.MarkAsCashParams;
@@ -455,6 +475,25 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.UPDATE_SUBSCRIPTION_AUTO_RENEW]: Parameters.UpdateSubscriptionAutoRenewParams;
[WRITE_COMMANDS.UPDATE_SUBSCRIPTION_ADD_NEW_USERS_AUTOMATICALLY]: Parameters.UpdateSubscriptionAddNewUsersAutomaticallyParams;
[WRITE_COMMANDS.UPDATE_SUBSCRIPTION_SIZE]: Parameters.UpdateSubscriptionSizeParams;
+ [WRITE_COMMANDS.CONNECT_POLICY_TO_SAGE_INTACCT]: Parameters.ConnectPolicyToSageIntacctParams;
+
+ // Netsuite parameters
+ [WRITE_COMMANDS.UPDATE_NETSUITE_SUBSIDIARY]: Parameters.UpdateNetSuiteSubsidiaryParams;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_EXPORTER]: Parameters.UpdateNetSuiteGenericTypeParams<'email', string>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_EXPORT_DATE]: Parameters.UpdateNetSuiteGenericTypeParams<'value', ValueOf>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_REIMBURSABLE_EXPENSES_EXPORT_DESTINATION]: Parameters.UpdateNetSuiteGenericTypeParams<'value', ValueOf>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_NONREIMBURSABLE_EXPENSES_EXPORT_DESTINATION]: Parameters.UpdateNetSuiteGenericTypeParams<'value', ValueOf>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_DEFAULT_VENDOR]: Parameters.UpdateNetSuiteGenericTypeParams<'vendorID', string>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_REIMBURSABLE_PAYABLE_ACCOUNT]: Parameters.UpdateNetSuiteGenericTypeParams<'bankAccountID', string>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_PAYABLE_ACCT]: Parameters.UpdateNetSuiteGenericTypeParams<'bankAccountID', string>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_JOURNAL_POSTING_PREFERENCE]: Parameters.UpdateNetSuiteGenericTypeParams<'value', ValueOf>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_RECEIVABLE_ACCOUNT]: Parameters.UpdateNetSuiteGenericTypeParams<'bankAccountID', string>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_INVOICE_ITEM_PREFERENCE]: Parameters.UpdateNetSuiteGenericTypeParams<'value', ValueOf>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_INVOICE_ITEM]: Parameters.UpdateNetSuiteGenericTypeParams<'itemID', string>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_PROVINCIAL_TAX_POSTING_ACCOUNT]: Parameters.UpdateNetSuiteGenericTypeParams<'bankAccountID', string>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_TAX_POSTING_ACCOUNT]: Parameters.UpdateNetSuiteGenericTypeParams<'bankAccountID', string>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_ALLOW_FOREIGN_CURRENCY]: Parameters.UpdateNetSuiteGenericTypeParams<'enabled', boolean>;
+ [WRITE_COMMANDS.UPDATE_NETSUITE_EXPORT_TO_NEXT_OPEN_PERIOD]: Parameters.UpdateNetSuiteGenericTypeParams<'enabled', boolean>;
};
const READ_COMMANDS = {
@@ -514,9 +553,9 @@ type ReadCommandParameters = {
[READ_COMMANDS.SYNC_POLICY_TO_XERO]: Parameters.SyncPolicyToXeroParams;
[READ_COMMANDS.OPEN_REIMBURSEMENT_ACCOUNT_PAGE]: Parameters.OpenReimbursementAccountPageParams;
[READ_COMMANDS.OPEN_WORKSPACE_VIEW]: Parameters.OpenWorkspaceViewParams;
- [READ_COMMANDS.GET_MAPBOX_ACCESS_TOKEN]: EmptyObject;
- [READ_COMMANDS.OPEN_PAYMENTS_PAGE]: EmptyObject;
- [READ_COMMANDS.OPEN_PERSONAL_DETAILS]: EmptyObject;
+ [READ_COMMANDS.GET_MAPBOX_ACCESS_TOKEN]: null;
+ [READ_COMMANDS.OPEN_PAYMENTS_PAGE]: null;
+ [READ_COMMANDS.OPEN_PERSONAL_DETAILS]: null;
[READ_COMMANDS.OPEN_PUBLIC_PROFILE_PAGE]: Parameters.OpenPublicProfilePageParams;
[READ_COMMANDS.OPEN_PLAID_BANK_LOGIN]: Parameters.OpenPlaidBankLoginParams;
[READ_COMMANDS.OPEN_PLAID_BANK_ACCOUNT_SELECTOR]: Parameters.OpenPlaidBankAccountSelectorParams;
@@ -531,9 +570,9 @@ type ReadCommandParameters = {
[READ_COMMANDS.GET_ROUTE]: Parameters.GetRouteParams;
[READ_COMMANDS.GET_ROUTE_FOR_DRAFT]: Parameters.GetRouteParams;
[READ_COMMANDS.GET_STATEMENT_PDF]: Parameters.GetStatementPDFParams;
- [READ_COMMANDS.OPEN_ONFIDO_FLOW]: EmptyObject;
- [READ_COMMANDS.OPEN_INITIAL_SETTINGS_PAGE]: EmptyObject;
- [READ_COMMANDS.OPEN_ENABLE_PAYMENTS_PAGE]: EmptyObject;
+ [READ_COMMANDS.OPEN_ONFIDO_FLOW]: null;
+ [READ_COMMANDS.OPEN_INITIAL_SETTINGS_PAGE]: null;
+ [READ_COMMANDS.OPEN_ENABLE_PAYMENTS_PAGE]: null;
[READ_COMMANDS.BEGIN_SIGNIN]: Parameters.BeginSignInParams;
[READ_COMMANDS.SIGN_IN_WITH_SHORT_LIVED_AUTH_TOKEN]: Parameters.SignInWithShortLivedAuthTokenParams;
[READ_COMMANDS.SIGN_IN_WITH_SUPPORT_AUTH_TOKEN]: Parameters.SignInWithSupportAuthTokenParams;
@@ -556,14 +595,17 @@ type ReadCommandParameters = {
};
const SIDE_EFFECT_REQUEST_COMMANDS = {
+ ACCEPT_SPOTNANA_TERMS: 'AcceptSpotnanaTerms',
AUTHENTICATE_PUSHER: 'AuthenticatePusher',
- OPEN_REPORT: 'OpenReport',
- OPEN_OLD_DOT_LINK: 'OpenOldDotLink',
- REVEAL_EXPENSIFY_CARD_DETAILS: 'RevealExpensifyCardDetails',
+ GENERATE_SPOTNANA_TOKEN: 'GenerateSpotnanaToken',
GET_MISSING_ONYX_MESSAGES: 'GetMissingOnyxMessages',
JOIN_POLICY_VIA_INVITE_LINK: 'JoinWorkspaceViaInviteLink',
+ OPEN_OLD_DOT_LINK: 'OpenOldDotLink',
+ OPEN_REPORT: 'OpenReport',
RECONNECT_APP: 'ReconnectApp',
- GENERATE_SPOTNANA_TOKEN: 'GenerateSpotnanaToken',
+ ADD_PAYMENT_CARD_GBR: 'AddPaymentCardGBP',
+ REVEAL_EXPENSIFY_CARD_DETAILS: 'RevealExpensifyCardDetails',
+ SWITCH_TO_OLD_DOT: 'SwitchToOldDot',
} as const;
type SideEffectRequestCommand = ValueOf;
@@ -577,6 +619,8 @@ type SideEffectRequestCommandParameters = {
[SIDE_EFFECT_REQUEST_COMMANDS.JOIN_POLICY_VIA_INVITE_LINK]: Parameters.JoinPolicyInviteLinkParams;
[SIDE_EFFECT_REQUEST_COMMANDS.RECONNECT_APP]: Parameters.ReconnectAppParams;
[SIDE_EFFECT_REQUEST_COMMANDS.GENERATE_SPOTNANA_TOKEN]: Parameters.GenerateSpotnanaTokenParams;
+ [SIDE_EFFECT_REQUEST_COMMANDS.ADD_PAYMENT_CARD_GBR]: Parameters.AddPaymentCardParams;
+ [SIDE_EFFECT_REQUEST_COMMANDS.ACCEPT_SPOTNANA_TERMS]: null;
};
type ApiRequestCommandParameters = WriteCommandParameters & ReadCommandParameters & SideEffectRequestCommandParameters;
diff --git a/src/libs/DateUtils.ts b/src/libs/DateUtils.ts
index 467c4b27bc11..f538e5e719e2 100644
--- a/src/libs/DateUtils.ts
+++ b/src/libs/DateUtils.ts
@@ -137,7 +137,15 @@ function getLocalDateFromDatetime(locale: Locale, datetime?: string, currentSele
}
return res;
}
- const parsedDatetime = new Date(`${datetime}Z`);
+ let parsedDatetime;
+ try {
+ // in some cases we cannot add 'Z' to the date string
+ parsedDatetime = new Date(`${datetime}Z`);
+ parsedDatetime.toISOString(); // we need to call toISOString because it throws RangeError in case of an invalid date
+ } catch (e) {
+ parsedDatetime = new Date(datetime);
+ }
+
return utcToZonedTime(parsedDatetime, currentSelectedTimezone);
}
diff --git a/src/libs/DistanceRequestUtils.ts b/src/libs/DistanceRequestUtils.ts
index 17a933766a69..dda5427e9c9f 100644
--- a/src/libs/DistanceRequestUtils.ts
+++ b/src/libs/DistanceRequestUtils.ts
@@ -7,7 +7,6 @@ import ONYXKEYS from '@src/ONYXKEYS';
import type {LastSelectedDistanceRates, OnyxInputOrEntry, Report} from '@src/types/onyx';
import type {Unit} from '@src/types/onyx/Policy';
import type Policy from '@src/types/onyx/Policy';
-import type {EmptyObject} from '@src/types/utils/EmptyObject';
import {isEmptyObject} from '@src/types/utils/EmptyObject';
import * as CurrencyUtils from './CurrencyUtils';
import * as PolicyUtils from './PolicyUtils';
@@ -78,7 +77,7 @@ function getMileageRates(policy: OnyxInputOrEntry, includeDisabledRates
* @returns [currency] - The currency associated with the rate.
* @returns [unit] - The unit of measurement for the distance.
*/
-function getDefaultMileageRate(policy: OnyxInputOrEntry | EmptyObject): MileageRate | undefined {
+function getDefaultMileageRate(policy: OnyxInputOrEntry): MileageRate | undefined {
if (isEmptyObject(policy) || !policy?.customUnits) {
return undefined;
}
diff --git a/src/libs/E2E/reactNativeLaunchingTest.ts b/src/libs/E2E/reactNativeLaunchingTest.ts
index 46922091497c..f952998f0aad 100644
--- a/src/libs/E2E/reactNativeLaunchingTest.ts
+++ b/src/libs/E2E/reactNativeLaunchingTest.ts
@@ -66,7 +66,7 @@ E2EClient.getTestConfig()
branch: Config.E2E_BRANCH,
name: config.name,
error: `Test '${config.name}' not found`,
- isCritical: false,
+ isCritical: false,
});
}
diff --git a/src/libs/E2E/tests/appStartTimeTest.e2e.ts b/src/libs/E2E/tests/appStartTimeTest.e2e.ts
index 321fc3773d51..188dd65c85e9 100644
--- a/src/libs/E2E/tests/appStartTimeTest.e2e.ts
+++ b/src/libs/E2E/tests/appStartTimeTest.e2e.ts
@@ -26,7 +26,8 @@ const test = () => {
E2EClient.submitTestResults({
branch: Config.E2E_BRANCH,
name: `App start ${metric.name}`,
- duration: metric.duration,
+ metric: metric.duration,
+ unit: 'ms',
}),
),
)
diff --git a/src/libs/E2E/tests/chatOpeningTest.e2e.ts b/src/libs/E2E/tests/chatOpeningTest.e2e.ts
index 8e43c4ece564..8e2a0a81da7d 100644
--- a/src/libs/E2E/tests/chatOpeningTest.e2e.ts
+++ b/src/libs/E2E/tests/chatOpeningTest.e2e.ts
@@ -49,7 +49,8 @@ const test = (config: NativeConfig) => {
E2EClient.submitTestResults({
branch: Config.E2E_BRANCH,
name: 'Chat opening',
- duration: entry.duration,
+ metric: entry.duration,
+ unit: 'ms',
})
.then(() => {
console.debug('[E2E] Done with chat opening, exiting…');
@@ -64,7 +65,8 @@ const test = (config: NativeConfig) => {
E2EClient.submitTestResults({
branch: Config.E2E_BRANCH,
name: 'Chat TTI',
- duration: entry.duration,
+ metric: entry.duration,
+ unit: 'ms',
})
.then(() => {
console.debug('[E2E] Done with chat TTI tracking, exiting…');
diff --git a/src/libs/E2E/tests/linkingTest.e2e.ts b/src/libs/E2E/tests/linkingTest.e2e.ts
index a3449ce5010b..7e6c7ea697ba 100644
--- a/src/libs/E2E/tests/linkingTest.e2e.ts
+++ b/src/libs/E2E/tests/linkingTest.e2e.ts
@@ -75,7 +75,8 @@ const test = (config: NativeConfig) => {
E2EClient.submitTestResults({
branch: Config.E2E_BRANCH,
name: 'Comment linking',
- duration: entry.duration,
+ metric: entry.duration,
+ unit: 'ms',
});
switchReportResolve();
diff --git a/src/libs/E2E/tests/openChatFinderPageTest.e2e.ts b/src/libs/E2E/tests/openChatFinderPageTest.e2e.ts
index 4ac7995b914f..c6aead2d5336 100644
--- a/src/libs/E2E/tests/openChatFinderPageTest.e2e.ts
+++ b/src/libs/E2E/tests/openChatFinderPageTest.e2e.ts
@@ -44,7 +44,8 @@ const test = () => {
E2EClient.submitTestResults({
branch: Config.E2E_BRANCH,
name: 'Open Chat Finder Page TTI',
- duration: entry.duration,
+ metric: entry.duration,
+ unit: 'ms',
})
.then(() => {
openSearchPageResolve();
@@ -59,7 +60,8 @@ const test = () => {
E2EClient.submitTestResults({
branch: Config.E2E_BRANCH,
name: 'Load Search Options',
- duration: entry.duration,
+ metric: entry.duration,
+ unit: 'ms',
})
.then(() => {
loadSearchOptionsResolve();
diff --git a/src/libs/E2E/tests/reportTypingTest.e2e.ts b/src/libs/E2E/tests/reportTypingTest.e2e.ts
index 817bda941611..9624d7ab992b 100644
--- a/src/libs/E2E/tests/reportTypingTest.e2e.ts
+++ b/src/libs/E2E/tests/reportTypingTest.e2e.ts
@@ -53,7 +53,8 @@ const test = (config: NativeConfig) => {
E2EClient.submitTestResults({
branch: Config.E2E_BRANCH,
name: 'Composer typing rerender count',
- renderCount: rerenderCount,
+ metric: rerenderCount,
+ unit: 'renders',
}).then(E2EClient.submitTestDone);
}, 3000);
})
diff --git a/src/libs/E2E/types.ts b/src/libs/E2E/types.ts
index fdbc01872cb3..8640c76e631e 100644
--- a/src/libs/E2E/types.ts
+++ b/src/libs/E2E/types.ts
@@ -33,6 +33,8 @@ type TestModule = {default: Test};
type Tests = Record, Test>;
+type Unit = 'ms' | 'MB' | '%' | 'renders' | 'FPS';
+
type TestResult = {
/** Name of the test */
name: string;
@@ -40,8 +42,8 @@ type TestResult = {
/** The branch where test were running */
branch?: string;
- /** Duration in milliseconds */
- duration?: number;
+ /** The numeric value of the measurement */
+ metric?: number;
/** Optional, if set indicates that the test run failed and has no valid results. */
error?: string;
@@ -52,8 +54,8 @@ type TestResult = {
*/
isCritical?: boolean;
- /** Render count */
- renderCount?: number;
+ /** The unit of the measurement */
+ unit?: Unit;
};
-export type {SigninParams, IsE2ETestSession, NetworkCacheMap, NetworkCacheEntry, TestConfig, TestResult, TestModule, Tests};
+export type {SigninParams, IsE2ETestSession, NetworkCacheMap, NetworkCacheEntry, TestConfig, TestResult, TestModule, Tests, Unit};
diff --git a/src/libs/LoginUtils.ts b/src/libs/LoginUtils.ts
index ded60ab3e800..191fd72db4e9 100644
--- a/src/libs/LoginUtils.ts
+++ b/src/libs/LoginUtils.ts
@@ -21,7 +21,14 @@ function getPhoneNumberWithoutSpecialChars(phone: string): string {
* Append user country code to the phone number
*/
function appendCountryCode(phone: string): string {
- return phone.startsWith('+') ? phone : `+${countryCodeByIP}${phone}`;
+ if (phone.startsWith('+')) {
+ return phone;
+ }
+ const phoneWithCountryCode = `+${countryCodeByIP}${phone}`;
+ if (parsePhoneNumber(phoneWithCountryCode).possible) {
+ return phoneWithCountryCode;
+ }
+ return `+${phone}`;
}
/**
diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx
index a185145aadce..4bf7e208590a 100644
--- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx
+++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx
@@ -2,7 +2,9 @@ import React, {memo, useEffect, useMemo, useRef} from 'react';
import {View} from 'react-native';
import type {OnyxEntry} from 'react-native-onyx';
import Onyx, {withOnyx} from 'react-native-onyx';
+import type {ValueOf} from 'type-fest';
import OptionsListContextProvider from '@components/OptionListContextProvider';
+import useLastAccessedReportID from '@hooks/useLastAccessedReportID';
import useOnboardingLayout from '@hooks/useOnboardingLayout';
import useStyleUtils from '@hooks/useStyleUtils';
import useThemeStyles from '@hooks/useThemeStyles';
@@ -14,7 +16,7 @@ import Log from '@libs/Log';
import getCurrentUrl from '@libs/Navigation/currentUrl';
import getOnboardingModalScreenOptions from '@libs/Navigation/getOnboardingModalScreenOptions';
import Navigation from '@libs/Navigation/Navigation';
-import type {AuthScreensParamList} from '@libs/Navigation/types';
+import type {AuthScreensParamList, CentralPaneName, CentralPaneScreensParamList} from '@libs/Navigation/types';
import NetworkConnection from '@libs/NetworkConnection';
import * as Pusher from '@libs/Pusher/pusher';
import PusherConnectionManager from '@libs/PusherConnectionManager';
@@ -42,11 +44,12 @@ import SCREENS from '@src/SCREENS';
import type * as OnyxTypes from '@src/types/onyx';
import type {SelectedTimezone, Timezone} from '@src/types/onyx/PersonalDetails';
import type ReactComponentModule from '@src/types/utils/ReactComponentModule';
+import CENTRAL_PANE_SCREENS from './CENTRAL_PANE_SCREENS';
import createCustomStackNavigator from './createCustomStackNavigator';
import defaultScreenOptions from './defaultScreenOptions';
import getRootNavigatorScreenOptions from './getRootNavigatorScreenOptions';
import BottomTabNavigator from './Navigators/BottomTabNavigator';
-import CentralPaneNavigator from './Navigators/CentralPaneNavigator';
+import ExplanationModalNavigator from './Navigators/ExplanationModalNavigator';
import FeatureTrainingModalNavigator from './Navigators/FeatureTrainingModalNavigator';
import FullScreenNavigator from './Navigators/FullScreenNavigator';
import LeftModalNavigator from './Navigators/LeftModalNavigator';
@@ -75,6 +78,26 @@ const loadReportAvatar = () => require('../../../pages/Rep
const loadReceiptView = () => require('../../../pages/TransactionReceiptPage').default;
const loadWorkspaceJoinUser = () => require('@pages/workspace/WorkspaceJoinUserPage').default;
+function shouldOpenOnAdminRoom() {
+ const url = getCurrentUrl();
+ return url ? new URL(url).searchParams.get('openOnAdminRoom') === 'true' : false;
+}
+
+function getCentralPaneScreenInitialParams(screenName: CentralPaneName, lastAccessedReportID?: string): Partial> {
+ if (screenName === SCREENS.SEARCH.CENTRAL_PANE) {
+ return {sortBy: CONST.SEARCH.TABLE_COLUMNS.DATE, sortOrder: CONST.SEARCH.SORT_ORDER.DESC};
+ }
+
+ if (screenName === SCREENS.REPORT) {
+ return {
+ openOnAdminRoom: shouldOpenOnAdminRoom() ? true : undefined,
+ reportID: lastAccessedReportID,
+ };
+ }
+
+ return undefined;
+}
+
let timezone: Timezone | null;
let currentAccountID = -1;
let isLoadingApp = false;
@@ -175,6 +198,7 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie
const StyleUtils = useStyleUtils();
const {isSmallScreenWidth} = useWindowDimensions();
const {shouldUseNarrowLayout} = useOnboardingLayout();
+ const lastAccessedReportID = useLastAccessedReportID(shouldOpenOnAdminRoom());
const screenOptions = getRootNavigatorScreenOptions(isSmallScreenWidth, styles, StyleUtils);
const onboardingModalScreenOptions = useMemo(() => screenOptions.onboardingModalNavigator(shouldUseNarrowLayout), [screenOptions, shouldUseNarrowLayout]);
const onboardingScreenOptions = useMemo(
@@ -298,20 +322,26 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
+ const CentralPaneScreenOptions = {
+ headerShown: false,
+ title: 'New Expensify',
+
+ // Prevent unnecessary scrolling
+ cardStyle: styles.cardStyleNavigator,
+ };
+
return (
-
+
-
+
+ {Object.entries(CENTRAL_PANE_SCREENS).map(([screenName, componentGetter]) => {
+ const centralPaneName = screenName as CentralPaneName;
+ return (
+
+ );
+ })}
diff --git a/src/libs/Navigation/AppNavigator/CENTRAL_PANE_SCREENS.tsx b/src/libs/Navigation/AppNavigator/CENTRAL_PANE_SCREENS.tsx
new file mode 100644
index 000000000000..5bbe2046040a
--- /dev/null
+++ b/src/libs/Navigation/AppNavigator/CENTRAL_PANE_SCREENS.tsx
@@ -0,0 +1,22 @@
+import type {CentralPaneName} from '@libs/Navigation/types';
+import withPrepareCentralPaneScreen from '@src/components/withPrepareCentralPaneScreen';
+import SCREENS from '@src/SCREENS';
+import type ReactComponentModule from '@src/types/utils/ReactComponentModule';
+
+type Screens = Partial React.ComponentType>>;
+
+const CENTRAL_PANE_SCREENS = {
+ [SCREENS.SETTINGS.WORKSPACES]: withPrepareCentralPaneScreen(() => require('../../../pages/workspace/WorkspacesListPage').default),
+ [SCREENS.SETTINGS.PREFERENCES.ROOT]: withPrepareCentralPaneScreen(() => require('../../../pages/settings/Preferences/PreferencesPage').default),
+ [SCREENS.SETTINGS.SECURITY]: withPrepareCentralPaneScreen(() => require('../../../pages/settings/Security/SecuritySettingsPage').default),
+ [SCREENS.SETTINGS.PROFILE.ROOT]: withPrepareCentralPaneScreen(() => require('../../../pages/settings/Profile/ProfilePage').default),
+ [SCREENS.SETTINGS.WALLET.ROOT]: withPrepareCentralPaneScreen(() => require('../../../pages/settings/Wallet/WalletPage').default),
+ [SCREENS.SETTINGS.ABOUT]: withPrepareCentralPaneScreen(() => require('../../../pages/settings/AboutPage/AboutPage').default),
+ [SCREENS.SETTINGS.TROUBLESHOOT]: withPrepareCentralPaneScreen(() => require('../../../pages/settings/Troubleshoot/TroubleshootPage').default),
+ [SCREENS.SETTINGS.SAVE_THE_WORLD]: withPrepareCentralPaneScreen(() => require('../../../pages/TeachersUnite/SaveTheWorldPage').default),
+ [SCREENS.SETTINGS.SUBSCRIPTION.ROOT]: withPrepareCentralPaneScreen(() => require('../../../pages/settings/Subscription/SubscriptionSettingsPage').default),
+ [SCREENS.SEARCH.CENTRAL_PANE]: withPrepareCentralPaneScreen(() => require('../../../pages/Search/SearchPage').default),
+ [SCREENS.REPORT]: withPrepareCentralPaneScreen(() => require('../../../pages/home/ReportScreen').default),
+} satisfies Screens;
+
+export default CENTRAL_PANE_SCREENS;
diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx
index 64f253f7aeea..417bc4e8b983 100644
--- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx
+++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx
@@ -318,14 +318,48 @@ const SettingsModalStackNavigator = createModalStackNavigator('../../../../pages/workspace/accounting/xero/export/XeroPreferredExporterSelectPage').default,
[SCREENS.WORKSPACE.ACCOUNTING.XERO_BILL_PAYMENT_ACCOUNT_SELECTOR]: () =>
require('../../../../pages/workspace/accounting/xero/advanced/XeroBillPaymentAccountSelectorPage').default,
+
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_SUBSIDIARY_SELECTOR]: () => require('../../../../pages/workspace/accounting/netsuite/NetSuiteSubsidiarySelector').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT]: () => require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteExportConfigurationPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_PREFERRED_EXPORTER_SELECT]: () =>
+ require('../../../../pages/workspace/accounting/netsuite/export/NetSuitePreferredExporterSelectPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_DATE_SELECT]: () => require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteDateSelectPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES]: () => require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_DESTINATION_SELECT]: () =>
+ require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesDestinationSelectPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_VENDOR_SELECT]: () =>
+ require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesVendorSelectPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_PAYABLE_ACCOUNT_SELECT]: () =>
+ require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesPayableAccountSelectPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_JOURNAL_POSTING_PREFERENCE_SELECT]: () =>
+ require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesJournalPostingPreferenceSelectPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_RECEIVABLE_ACCOUNT_SELECT]: () =>
+ require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteReceivableAccountSelectPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT]: () =>
+ require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemPreferenceSelectPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_INVOICE_ITEM_SELECT]: () =>
+ require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemSelectPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_TAX_POSTING_ACCOUNT_SELECT]: () =>
+ require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteTaxPostingAccountSelectPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_PROVINCIAL_TAX_POSTING_ACCOUNT_SELECT]: () =>
+ require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteProvincialTaxPostingAccountSelectPage').default,
+
+ [SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_PREREQUISITES]: () => require('../../../../pages/workspace/accounting/intacct/IntacctPrerequisitesPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.ENTER_SAGE_INTACCT_CREDENTIALS]: () =>
+ require('../../../../pages/workspace/accounting/intacct/EnterSageIntacctCredentialsPage').default,
+ [SCREENS.WORKSPACE.ACCOUNTING.EXISTING_SAGE_INTACCT_CONNECTIONS]: () => require('../../../../pages/workspace/accounting/intacct/ExistingConnectionsPage').default,
[SCREENS.WORKSPACE.WORKFLOWS_AUTO_REPORTING_FREQUENCY]: () => require('../../../../pages/workspace/workflows/WorkspaceAutoReportingFrequencyPage').default,
[SCREENS.WORKSPACE.WORKFLOWS_AUTO_REPORTING_MONTHLY_OFFSET]: () => require('../../../../pages/workspace/workflows/WorkspaceAutoReportingMonthlyOffsetPage').default,
[SCREENS.WORKSPACE.TAX_EDIT]: () => require('../../../../pages/workspace/taxes/WorkspaceEditTaxPage').default,
[SCREENS.WORKSPACE.TAX_NAME]: () => require('../../../../pages/workspace/taxes/NamePage').default,
[SCREENS.WORKSPACE.TAX_VALUE]: () => require('../../../../pages/workspace/taxes/ValuePage').default,
[SCREENS.WORKSPACE.TAX_CREATE]: () => require('../../../../pages/workspace/taxes/WorkspaceCreateTaxPage').default,
+ [SCREENS.WORKSPACE.EXPENSIFY_CARD_ISSUE_NEW]: () => require('../../../../pages/workspace/card/issueNew/IssueNewCardPage').default,
[SCREENS.SETTINGS.SAVE_THE_WORLD]: () => require('../../../../pages/TeachersUnite/SaveTheWorldPage').default,
- [SCREENS.SETTINGS.SUBSCRIPTION.ADD_PAYMENT_CARD]: () => require('../../../../pages/settings/Subscription/PaymentCard/AddPaymentCard').default,
+ [SCREENS.SETTINGS.SUBSCRIPTION.CHANGE_PAYMENT_CURRENCY]: () => require('../../../../pages/settings/PaymentCard/ChangeCurrency').default,
+ [SCREENS.SETTINGS.SUBSCRIPTION.CHANGE_BILLING_CURRENCY]: () => require('../../../../pages/settings/Subscription/PaymentCard/ChangeBillingCurrency').default,
+ [SCREENS.SETTINGS.SUBSCRIPTION.ADD_PAYMENT_CARD]: () => require('../../../../pages/settings/Subscription/PaymentCard').default,
+ [SCREENS.SETTINGS.ADD_PAYMENT_CARD_CHANGE_CURRENCY]: () => require('../../../../pages/settings/PaymentCard/ChangeCurrency').default,
});
const EnablePaymentsStackNavigator = createModalStackNavigator({
diff --git a/src/libs/Navigation/AppNavigator/Navigators/ActiveRouteContext.ts b/src/libs/Navigation/AppNavigator/Navigators/ActiveRouteContext.ts
index 6d0de3211e7c..c319aeca3e04 100644
--- a/src/libs/Navigation/AppNavigator/Navigators/ActiveRouteContext.ts
+++ b/src/libs/Navigation/AppNavigator/Navigators/ActiveRouteContext.ts
@@ -1,6 +1,6 @@
import React from 'react';
-import type {CentralPaneNavigatorParamList, NavigationPartialRoute} from '@libs/Navigation/types';
+import type {AuthScreensParamList, NavigationPartialRoute} from '@libs/Navigation/types';
-const ActiveRouteContext = React.createContext | undefined>(undefined);
+const ActiveRouteContext = React.createContext | undefined>(undefined);
export default ActiveRouteContext;
diff --git a/src/libs/Navigation/AppNavigator/Navigators/CentralPaneNavigator/BaseCentralPaneNavigator.tsx b/src/libs/Navigation/AppNavigator/Navigators/CentralPaneNavigator/BaseCentralPaneNavigator.tsx
deleted file mode 100644
index 5c833a603fb7..000000000000
--- a/src/libs/Navigation/AppNavigator/Navigators/CentralPaneNavigator/BaseCentralPaneNavigator.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import {createStackNavigator} from '@react-navigation/stack';
-import React from 'react';
-import useThemeStyles from '@hooks/useThemeStyles';
-import ReportScreenWrapper from '@libs/Navigation/AppNavigator/ReportScreenWrapper';
-import getCurrentUrl from '@libs/Navigation/currentUrl';
-import type {CentralPaneNavigatorParamList} from '@navigation/types';
-import SearchPage from '@pages/Search/SearchPage';
-import CONST from '@src/CONST';
-import SCREENS from '@src/SCREENS';
-import type ReactComponentModule from '@src/types/utils/ReactComponentModule';
-
-const Stack = createStackNavigator();
-
-const url = getCurrentUrl();
-const openOnAdminRoom = url ? new URL(url).searchParams.get('openOnAdminRoom') : undefined;
-
-type Screens = Partial React.ComponentType>>;
-
-const settingsScreens = {
- [SCREENS.SETTINGS.WORKSPACES]: () => require('../../../../../pages/workspace/WorkspacesListPage').default,
- [SCREENS.SETTINGS.PREFERENCES.ROOT]: () => require('../../../../../pages/settings/Preferences/PreferencesPage').default,
- [SCREENS.SETTINGS.SECURITY]: () => require('../../../../../pages/settings/Security/SecuritySettingsPage').default,
- [SCREENS.SETTINGS.PROFILE.ROOT]: () => require('../../../../../pages/settings/Profile/ProfilePage').default,
- [SCREENS.SETTINGS.WALLET.ROOT]: () => require('../../../../../pages/settings/Wallet/WalletPage').default,
- [SCREENS.SETTINGS.ABOUT]: () => require('../../../../../pages/settings/AboutPage/AboutPage').default,
- [SCREENS.SETTINGS.TROUBLESHOOT]: () => require('../../../../../pages/settings/Troubleshoot/TroubleshootPage').default,
- [SCREENS.SETTINGS.SAVE_THE_WORLD]: () => require('../../../../../pages/TeachersUnite/SaveTheWorldPage').default,
- [SCREENS.SETTINGS.SUBSCRIPTION.ROOT]: () => require('../../../../../pages/settings/Subscription/SubscriptionSettingsPage').default,
-} satisfies Screens;
-
-function BaseCentralPaneNavigator() {
- const styles = useThemeStyles();
- const options = {
- headerShown: false,
- title: 'New Expensify',
-
- // Prevent unnecessary scrolling
- cardStyle: styles.cardStyleNavigator,
- };
-
- return (
-
-
-
-
- {Object.entries(settingsScreens).map(([screenName, componentGetter]) => (
-
- ))}
-
- );
-}
-
-export default BaseCentralPaneNavigator;
diff --git a/src/libs/Navigation/AppNavigator/Navigators/CentralPaneNavigator/index.native.tsx b/src/libs/Navigation/AppNavigator/Navigators/CentralPaneNavigator/index.native.tsx
deleted file mode 100644
index 45ab2f070717..000000000000
--- a/src/libs/Navigation/AppNavigator/Navigators/CentralPaneNavigator/index.native.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import React from 'react';
-import FreezeWrapper from '@libs/Navigation/FreezeWrapper';
-import BaseCentralPaneNavigator from './BaseCentralPaneNavigator';
-
-function CentralPaneNavigator() {
- return (
-
-
-
- );
-}
-
-export default CentralPaneNavigator;
diff --git a/src/libs/Navigation/AppNavigator/Navigators/CentralPaneNavigator/index.tsx b/src/libs/Navigation/AppNavigator/Navigators/CentralPaneNavigator/index.tsx
deleted file mode 100644
index 711dd468c77d..000000000000
--- a/src/libs/Navigation/AppNavigator/Navigators/CentralPaneNavigator/index.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react';
-import BaseCentralPaneNavigator from './BaseCentralPaneNavigator';
-
-// We don't need to use freeze wraper on web because we don't render all report routes anyway.
-// You can see this optimalization in the customStackNavigator.
-function CentralPaneNavigator() {
- return ;
-}
-
-export default CentralPaneNavigator;
diff --git a/src/libs/Navigation/AppNavigator/Navigators/ExplanationModalNavigator.tsx b/src/libs/Navigation/AppNavigator/Navigators/ExplanationModalNavigator.tsx
new file mode 100644
index 000000000000..f4136bb8783a
--- /dev/null
+++ b/src/libs/Navigation/AppNavigator/Navigators/ExplanationModalNavigator.tsx
@@ -0,0 +1,28 @@
+import {createStackNavigator} from '@react-navigation/stack';
+import React from 'react';
+import {View} from 'react-native';
+import NoDropZone from '@components/DragAndDrop/NoDropZone';
+import ExplanationModal from '@components/ExplanationModal';
+import type {ExplanationModalNavigatorParamList} from '@libs/Navigation/types';
+import SCREENS from '@src/SCREENS';
+
+const Stack = createStackNavigator();
+
+function ExplanationModalNavigator() {
+ return (
+
+
+
+
+
+
+
+ );
+}
+
+ExplanationModalNavigator.displayName = 'ExplanationModalNavigator';
+
+export default ExplanationModalNavigator;
diff --git a/src/libs/Navigation/AppNavigator/Navigators/FullScreenNavigator.tsx b/src/libs/Navigation/AppNavigator/Navigators/FullScreenNavigator.tsx
index 82c5c3fcd855..748d92b49a1c 100644
--- a/src/libs/Navigation/AppNavigator/Navigators/FullScreenNavigator.tsx
+++ b/src/libs/Navigation/AppNavigator/Navigators/FullScreenNavigator.tsx
@@ -31,6 +31,7 @@ const CENTRAL_PANE_WORKSPACE_SCREENS = {
[SCREENS.WORKSPACE.TAGS]: () => require('../../../../pages/workspace/tags/WorkspaceTagsPage').default,
[SCREENS.WORKSPACE.TAXES]: () => require('../../../../pages/workspace/taxes/WorkspaceTaxesPage').default,
[SCREENS.WORKSPACE.REPORT_FIELDS]: () => require('../../../../pages/workspace/reportFields/WorkspaceReportFieldsPage').default,
+ [SCREENS.WORKSPACE.EXPENSIFY_CARD]: () => require('../../../../pages/workspace/expensifyCard/WorkspaceExpensifyCardPage').default,
[SCREENS.WORKSPACE.DISTANCE_RATES]: () => require('../../../../pages/workspace/distanceRates/PolicyDistanceRatesPage').default,
} satisfies Screens;
diff --git a/src/libs/Navigation/AppNavigator/ReportScreenIDSetter.ts b/src/libs/Navigation/AppNavigator/ReportScreenIDSetter.ts
deleted file mode 100644
index 5306f6b55054..000000000000
--- a/src/libs/Navigation/AppNavigator/ReportScreenIDSetter.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-import {useEffect} from 'react';
-import type {OnyxCollection, OnyxEntry} from 'react-native-onyx';
-import {useOnyx} from 'react-native-onyx';
-import useActiveWorkspace from '@hooks/useActiveWorkspace';
-import usePermissions from '@hooks/usePermissions';
-import {getPolicyEmployeeListByIdWithoutCurrentUser} from '@libs/PolicyUtils';
-import * as ReportUtils from '@libs/ReportUtils';
-import ONYXKEYS from '@src/ONYXKEYS';
-import type {Policy, Report, ReportMetadata} from '@src/types/onyx';
-import type {ReportScreenWrapperProps} from './ReportScreenWrapper';
-
-type ReportScreenIDSetterProps = ReportScreenWrapperProps;
-
-/**
- * Get the most recently accessed report for the user
- */
-const getLastAccessedReportID = (
- reports: OnyxCollection,
- ignoreDefaultRooms: boolean,
- policies: OnyxCollection,
- isFirstTimeNewExpensifyUser: OnyxEntry,
- openOnAdminRoom: boolean,
- reportMetadata: OnyxCollection,
- policyID?: string,
- policyMemberAccountIDs?: number[],
-): string | undefined => {
- const lastReport = ReportUtils.findLastAccessedReport(
- reports,
- ignoreDefaultRooms,
- policies,
- !!isFirstTimeNewExpensifyUser,
- openOnAdminRoom,
- reportMetadata,
- policyID,
- policyMemberAccountIDs,
- );
- return lastReport?.reportID;
-};
-
-// This wrapper is responsible for opening the last accessed report if there is no reportID specified in the route params
-function ReportScreenIDSetter({route, navigation}: ReportScreenIDSetterProps) {
- const {canUseDefaultRooms} = usePermissions();
- const {activeWorkspaceID} = useActiveWorkspace();
-
- const [reports] = useOnyx(ONYXKEYS.COLLECTION.REPORT, {allowStaleData: true});
- const [policies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {allowStaleData: true});
- const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST);
- const [isFirstTimeNewExpensifyUser] = useOnyx(ONYXKEYS.NVP_IS_FIRST_TIME_NEW_EXPENSIFY_USER, {initialValue: false});
- const [reportMetadata] = useOnyx(ONYXKEYS.COLLECTION.REPORT_METADATA, {allowStaleData: true});
- const [accountID] = useOnyx(ONYXKEYS.SESSION, {selector: (session) => session?.accountID});
-
- useEffect(() => {
- // Don't update if there is a reportID in the params already
- if (route?.params?.reportID) {
- const reportActionID = route?.params?.reportActionID;
- const regexValidReportActionID = new RegExp(/^\d*$/);
- if (reportActionID && !regexValidReportActionID.test(reportActionID)) {
- navigation.setParams({reportActionID: ''});
- }
- return;
- }
-
- const policyMemberAccountIDs = getPolicyEmployeeListByIdWithoutCurrentUser(policies, activeWorkspaceID, accountID);
-
- // If there is no reportID in route, try to find last accessed and use it for setParams
- const reportID = getLastAccessedReportID(
- reports,
- !canUseDefaultRooms,
- policies,
- isFirstTimeNewExpensifyUser,
- !!reports?.params?.openOnAdminRoom,
- reportMetadata,
- activeWorkspaceID,
- policyMemberAccountIDs,
- );
-
- // It's possible that reports aren't fully loaded yet
- // in that case the reportID is undefined
- if (reportID) {
- navigation.setParams({reportID: String(reportID)});
- }
- }, [route, navigation, reports, canUseDefaultRooms, policies, isFirstTimeNewExpensifyUser, reportMetadata, activeWorkspaceID, personalDetails, accountID]);
-
- // The ReportScreen without the reportID set will display a skeleton
- // until the reportID is loaded and set in the route param
- return null;
-}
-
-ReportScreenIDSetter.displayName = 'ReportScreenIDSetter';
-
-export default ReportScreenIDSetter;
diff --git a/src/libs/Navigation/AppNavigator/ReportScreenWrapper.tsx b/src/libs/Navigation/AppNavigator/ReportScreenWrapper.tsx
deleted file mode 100644
index 5d710afa69e9..000000000000
--- a/src/libs/Navigation/AppNavigator/ReportScreenWrapper.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import type {StackScreenProps} from '@react-navigation/stack';
-import React from 'react';
-import type {CentralPaneNavigatorParamList} from '@navigation/types';
-import ReportScreen from '@pages/home/ReportScreen';
-import type SCREENS from '@src/SCREENS';
-import ReportScreenIDSetter from './ReportScreenIDSetter';
-
-type ReportScreenWrapperProps = StackScreenProps;
-
-function ReportScreenWrapper({route, navigation}: ReportScreenWrapperProps) {
- // The ReportScreen without the reportID set will display a skeleton
- // until the reportID is loaded and set in the route param
- return (
- <>
-
-
- >
- );
-}
-
-ReportScreenWrapper.displayName = 'ReportScreenWrapper';
-
-export default ReportScreenWrapper;
-export type {ReportScreenWrapperProps};
diff --git a/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar/index.tsx b/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar/index.tsx
index 79cb33ef9b39..2474c4f35a61 100644
--- a/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar/index.tsx
+++ b/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar/index.tsx
@@ -1,6 +1,6 @@
import {useNavigation, useNavigationState} from '@react-navigation/native';
import React, {memo, useCallback, useEffect} from 'react';
-import {View} from 'react-native';
+import {NativeModules, View} from 'react-native';
import type {OnyxEntry} from 'react-native-onyx';
import {withOnyx} from 'react-native-onyx';
import Icon from '@components/Icon';
@@ -17,6 +17,7 @@ import getTopmostBottomTabRoute from '@libs/Navigation/getTopmostBottomTabRoute'
import getTopmostCentralPaneRoute from '@libs/Navigation/getTopmostCentralPaneRoute';
import Navigation from '@libs/Navigation/Navigation';
import type {RootStackParamList, State} from '@libs/Navigation/types';
+import isCentralPaneName from '@libs/NavigationUtils';
import {getChatTabBrickRoad} from '@libs/WorkspacesSettingsUtils';
import BottomTabAvatar from '@pages/home/sidebar/BottomTabAvatar';
import BottomTabBarFloatingActionButton from '@pages/home/sidebar/BottomTabBarFloatingActionButton';
@@ -47,7 +48,12 @@ function BottomTabBar({isLoadingApp = false}: PurposeForUsingExpensifyModalProps
const currentRoute = routes?.[navigationState?.index ?? 0];
// When we are redirected to the Settings tab from the OldDot, we don't want to call the Welcome.show() method.
// To prevent this, the value of the bottomTabRoute?.name is checked here
- if (!!(currentRoute && currentRoute.name !== NAVIGATORS.BOTTOM_TAB_NAVIGATOR && currentRoute.name !== NAVIGATORS.CENTRAL_PANE_NAVIGATOR) || Session.isAnonymousUser()) {
+ if (!!(currentRoute && currentRoute.name !== NAVIGATORS.BOTTOM_TAB_NAVIGATOR && !isCentralPaneName(currentRoute.name)) || Session.isAnonymousUser()) {
+ return;
+ }
+
+ // HybridApp has own entry point when we decide whether to display onboarding and explanation modal.
+ if (NativeModules.HybridAppModule) {
return;
}
@@ -70,9 +76,12 @@ function BottomTabBar({isLoadingApp = false}: PurposeForUsingExpensifyModalProps
const chatTabBrickRoad = getChatTabBrickRoad(activeWorkspaceID);
const navigateToChats = useCallback(() => {
+ if (currentTabName === SCREENS.HOME) {
+ return;
+ }
const route = activeWorkspaceID ? (`/w/${activeWorkspaceID}/home` as Route) : ROUTES.HOME;
Navigation.navigate(route);
- }, [activeWorkspaceID]);
+ }, [activeWorkspaceID, currentTabName]);
return (
@@ -100,6 +109,9 @@ function BottomTabBar({isLoadingApp = false}: PurposeForUsingExpensifyModalProps
{
+ if (currentTabName === SCREENS.SEARCH.BOTTOM_TAB || currentTabName === SCREENS.SEARCH.CENTRAL_PANE) {
+ return;
+ }
interceptAnonymousUser(() => Navigation.navigate(ROUTES.SEARCH.getRoute(CONST.SEARCH.TAB.ALL)));
}}
role={CONST.ROLE.BUTTON}
diff --git a/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar/index.website.tsx b/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar/index.website.tsx
index 699ebebbc66c..ecacedde16dd 100644
--- a/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar/index.website.tsx
+++ b/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar/index.website.tsx
@@ -17,6 +17,7 @@ import getTopmostBottomTabRoute from '@libs/Navigation/getTopmostBottomTabRoute'
import getTopmostCentralPaneRoute from '@libs/Navigation/getTopmostCentralPaneRoute';
import Navigation from '@libs/Navigation/Navigation';
import type {RootStackParamList, State} from '@libs/Navigation/types';
+import isCentralPaneName from '@libs/NavigationUtils';
import {getChatTabBrickRoad} from '@libs/WorkspacesSettingsUtils';
import BottomTabAvatar from '@pages/home/sidebar/BottomTabAvatar';
import BottomTabBarFloatingActionButton from '@pages/home/sidebar/BottomTabBarFloatingActionButton';
@@ -48,7 +49,7 @@ function BottomTabBar({isLoadingApp = false}: PurposeForUsingExpensifyModalProps
const currentRoute = routes?.[navigationState?.index ?? 0];
// When we are redirected to the Settings tab from the OldDot, we don't want to call the Welcome.show() method.
// To prevent this, the value of the bottomTabRoute?.name is checked here
- if (!!(currentRoute && currentRoute.name !== NAVIGATORS.BOTTOM_TAB_NAVIGATOR && currentRoute.name !== NAVIGATORS.CENTRAL_PANE_NAVIGATOR) || Session.isAnonymousUser()) {
+ if (!!(currentRoute && currentRoute.name !== NAVIGATORS.BOTTOM_TAB_NAVIGATOR && !isCentralPaneName(currentRoute.name)) || Session.isAnonymousUser()) {
return;
}
@@ -71,9 +72,12 @@ function BottomTabBar({isLoadingApp = false}: PurposeForUsingExpensifyModalProps
const chatTabBrickRoad = getChatTabBrickRoad(activeWorkspaceID);
const navigateToChats = useCallback(() => {
+ if (currentTabName === SCREENS.HOME) {
+ return;
+ }
const route = activeWorkspaceID ? (`/w/${activeWorkspaceID}/home` as Route) : ROUTES.HOME;
Navigation.navigate(route);
- }, [activeWorkspaceID]);
+ }, [activeWorkspaceID, currentTabName]);
return (
@@ -101,6 +105,9 @@ function BottomTabBar({isLoadingApp = false}: PurposeForUsingExpensifyModalProps
{
+ if (currentTabName === SCREENS.SEARCH.BOTTOM_TAB || currentTabName === SCREENS.SEARCH.CENTRAL_PANE) {
+ return;
+ }
interceptAnonymousUser(() => Navigation.navigate(ROUTES.SEARCH.getRoute(CONST.SEARCH.TAB.ALL)));
}}
role={CONST.ROLE.BUTTON}
diff --git a/src/libs/Navigation/AppNavigator/createCustomStackNavigator/CustomRouter.ts b/src/libs/Navigation/AppNavigator/createCustomStackNavigator/CustomRouter.ts
index 504803026994..fa7e8a55d1fc 100644
--- a/src/libs/Navigation/AppNavigator/createCustomStackNavigator/CustomRouter.ts
+++ b/src/libs/Navigation/AppNavigator/createCustomStackNavigator/CustomRouter.ts
@@ -7,6 +7,7 @@ import getTopmostCentralPaneRoute from '@libs/Navigation/getTopmostCentralPaneRo
import linkingConfig from '@libs/Navigation/linkingConfig';
import getAdaptedStateFromPath from '@libs/Navigation/linkingConfig/getAdaptedStateFromPath';
import type {NavigationPartialRoute, RootStackParamList, State} from '@libs/Navigation/types';
+import isCentralPaneName from '@libs/NavigationUtils';
import NAVIGATORS from '@src/NAVIGATORS';
import SCREENS from '@src/SCREENS';
import type {ResponsiveStackNavigatorRouterOptions} from './types';
@@ -66,8 +67,8 @@ function compareAndAdaptState(state: StackNavigationState) {
return;
}
- const topmostCentralPaneRoute = state.routes.filter((route) => route.name === NAVIGATORS.CENTRAL_PANE_NAVIGATOR).at(-1);
- const templateCentralPaneRoute = templateState.routes.find((route) => route.name === NAVIGATORS.CENTRAL_PANE_NAVIGATOR);
+ const topmostCentralPaneRoute = state.routes.filter((route) => isCentralPaneName(route.name)).at(-1);
+ const templateCentralPaneRoute = templateState.routes.find((route) => isCentralPaneName(route.name));
const topmostCentralPaneRouteExtracted = getTopmostCentralPaneRoute(state);
const templateCentralPaneRouteExtracted = getTopmostCentralPaneRoute(templateState as State);
diff --git a/src/libs/Navigation/AppNavigator/createCustomStackNavigator/index.tsx b/src/libs/Navigation/AppNavigator/createCustomStackNavigator/index.tsx
index 46c2d914c94a..84123dbfa569 100644
--- a/src/libs/Navigation/AppNavigator/createCustomStackNavigator/index.tsx
+++ b/src/libs/Navigation/AppNavigator/createCustomStackNavigator/index.tsx
@@ -9,7 +9,7 @@ import useWindowDimensions from '@hooks/useWindowDimensions';
import getTopmostCentralPaneRoute from '@libs/Navigation/getTopmostCentralPaneRoute';
import navigationRef from '@libs/Navigation/navigationRef';
import type {RootStackParamList, State} from '@libs/Navigation/types';
-import NAVIGATORS from '@src/NAVIGATORS';
+import isCentralPaneName from '@libs/NavigationUtils';
import SCREENS from '@src/SCREENS';
import CustomRouter from './CustomRouter';
import type {ResponsiveStackNavigatorProps, ResponsiveStackNavigatorRouterOptions} from './types';
@@ -21,7 +21,7 @@ function reduceCentralPaneRoutes(routes: Routes): Routes {
const reverseRoutes = [...routes].reverse();
reverseRoutes.forEach((route) => {
- if (route.name === NAVIGATORS.CENTRAL_PANE_NAVIGATOR) {
+ if (isCentralPaneName(route.name)) {
// Remove all central pane routes except the last 3. This will improve performance.
if (count < 3) {
result.push(route);
@@ -61,20 +61,32 @@ function ResponsiveStackNavigator(props: ResponsiveStackNavigatorProps) {
const {stateToRender, searchRoute} = useMemo(() => {
const routes = reduceCentralPaneRoutes(state.routes);
- // On narrow layout, if we are on /search route we want to hide the search central pane route.
if (isSmallScreenWidth) {
const isSearchCentralPane = (route: RouteProp) => getTopmostCentralPaneRoute({routes: [route]} as State)?.name === SCREENS.SEARCH.CENTRAL_PANE;
const lastRoute = routes[routes.length - 1];
const lastSearchCentralPane = isSearchCentralPane(lastRoute) ? lastRoute : undefined;
const filteredRoutes = routes.filter((route) => !isSearchCentralPane(route));
+
+ // On narrow layout, if we are on /search route we want to hide all central pane routes and show only the bottom tab navigator.
+ if (lastSearchCentralPane) {
+ return {
+ stateToRender: {
+ ...state,
+ index: 0,
+ routes: [filteredRoutes[0]],
+ },
+ searchRoute: lastSearchCentralPane,
+ };
+ }
+
return {
stateToRender: {
...state,
index: filteredRoutes.length - 1,
routes: filteredRoutes,
},
- searchRoute: lastSearchCentralPane,
+ searchRoute: undefined,
};
}
diff --git a/src/libs/Navigation/AppNavigator/getActionsFromPartialDiff.ts b/src/libs/Navigation/AppNavigator/getActionsFromPartialDiff.ts
index 1d0e90c041be..9685f4fc0339 100644
--- a/src/libs/Navigation/AppNavigator/getActionsFromPartialDiff.ts
+++ b/src/libs/Navigation/AppNavigator/getActionsFromPartialDiff.ts
@@ -22,12 +22,7 @@ function getActionsFromPartialDiff(diff: GetPartialStateDiffReturnType): Navigat
if (centralPaneDiff) {
// In this case we have to wrap the inner central pane route with central pane navigator.
- actions.push(
- StackActions.push(NAVIGATORS.CENTRAL_PANE_NAVIGATOR, {
- screen: centralPaneDiff.name,
- params: centralPaneDiff.params,
- }),
- );
+ actions.push(StackActions.push(centralPaneDiff.name, centralPaneDiff.params));
}
if (fullScreenDiff) {
diff --git a/src/libs/Navigation/Navigation.ts b/src/libs/Navigation/Navigation.ts
index 6389876a1858..5a7182405681 100644
--- a/src/libs/Navigation/Navigation.ts
+++ b/src/libs/Navigation/Navigation.ts
@@ -1,9 +1,10 @@
import {findFocusedRoute} from '@react-navigation/core';
import type {EventArg, NavigationContainerEventMap} from '@react-navigation/native';
import {CommonActions, getPathFromState, StackActions} from '@react-navigation/native';
-import type {OnyxCollection} from 'react-native-onyx';
+import type {OnyxCollection, OnyxEntry} from 'react-native-onyx';
import Onyx from 'react-native-onyx';
import Log from '@libs/Log';
+import isCentralPaneName from '@libs/NavigationUtils';
import * as ReportUtils from '@libs/ReportUtils';
import CONST from '@src/CONST';
import NAVIGATORS from '@src/NAVIGATORS';
@@ -12,10 +13,10 @@ import type {HybridAppRoute, Route} from '@src/ROUTES';
import ROUTES, {HYBRID_APP_ROUTES} from '@src/ROUTES';
import {PROTECTED_SCREENS} from '@src/SCREENS';
import type {Report} from '@src/types/onyx';
-import type {EmptyObject} from '@src/types/utils/EmptyObject';
import originalCloseRHPFlow from './closeRHPFlow';
import originalDismissModal from './dismissModal';
import originalDismissModalWithReport from './dismissModalWithReport';
+import getTopmostCentralPaneRoute from './getTopmostCentralPaneRoute';
import originalGetTopmostReportActionId from './getTopmostReportActionID';
import originalGetTopmostReportId from './getTopmostReportId';
import linkingConfig from './linkingConfig';
@@ -23,7 +24,7 @@ import linkTo from './linkTo';
import navigationRef from './navigationRef';
import setNavigationActionToMicrotaskQueue from './setNavigationActionToMicrotaskQueue';
import switchPolicyID from './switchPolicyID';
-import type {NavigationStateRoute, State, StateOrRoute, SwitchPolicyIDParams} from './types';
+import type {NavigationStateRoute, RootStackParamList, State, StateOrRoute, SwitchPolicyIDParams} from './types';
let resolveNavigationIsReadyPromise: () => void;
const navigationIsReadyPromise = new Promise((resolve) => {
@@ -77,7 +78,7 @@ const closeRHPFlow = (ref = navigationRef) => originalCloseRHPFlow(ref);
// Re-exporting the dismissModalWithReport here to fill in default value for navigationRef. The dismissModalWithReport isn't defined in this file to avoid cyclic dependencies.
// This method is needed because it allows to dismiss the modal and then open the report. Within this method is checked whether the report belongs to a specific workspace. Sometimes the report we want to check, hasn't been added to the Onyx yet.
// Then we can pass the report as a param without getting it from the Onyx.
-const dismissModalWithReport = (report: Report | EmptyObject, ref = navigationRef) => originalDismissModalWithReport(report, ref);
+const dismissModalWithReport = (report: OnyxEntry, ref = navigationRef) => originalDismissModalWithReport(report, ref);
/** Method for finding on which index in stack we are. */
function getActiveRouteIndex(stateOrRoute: StateOrRoute, index?: number): number | undefined {
@@ -230,7 +231,7 @@ function goBack(fallbackRoute?: Route, shouldEnforceFallback = false, shouldPopT
return;
}
- const isCentralPaneFocused = findFocusedRoute(navigationRef.current.getState())?.name === NAVIGATORS.CENTRAL_PANE_NAVIGATOR;
+ const isCentralPaneFocused = isCentralPaneName(findFocusedRoute(navigationRef.current.getState())?.name);
const distanceFromPathInRootNavigator = getDistanceFromPathInRootNavigator(fallbackRoute ?? '');
// Allow CentralPane to use UP with fallback route if the path is not found in root navigator.
@@ -365,6 +366,10 @@ function navigateWithSwitchPolicyID(params: SwitchPolicyIDParams) {
return switchPolicyID(navigationRef.current, params);
}
+function getTopMostCentralPaneRouteFromRootState() {
+ return getTopmostCentralPaneRoute(navigationRef.getRootState() as State);
+}
+
export default {
setShouldPopAllStateOnUP,
navigate,
@@ -386,6 +391,7 @@ export default {
resetToHome,
closeRHPFlow,
setNavigationActionToMicrotaskQueue,
+ getTopMostCentralPaneRouteFromRootState,
};
export {navigationRef};
diff --git a/src/libs/Navigation/NavigationRoot.tsx b/src/libs/Navigation/NavigationRoot.tsx
index eaaf5eae12c0..dd3a2890d0ec 100644
--- a/src/libs/Navigation/NavigationRoot.tsx
+++ b/src/libs/Navigation/NavigationRoot.tsx
@@ -1,6 +1,7 @@
import type {NavigationState} from '@react-navigation/native';
import {DefaultTheme, findFocusedRoute, NavigationContainer} from '@react-navigation/native';
import React, {useContext, useEffect, useMemo, useRef} from 'react';
+import HybridAppMiddleware from '@components/HybridAppMiddleware';
import {ScrollOffsetContext} from '@components/ScrollOffsetContextProvider';
import useActiveWorkspace from '@hooks/useActiveWorkspace';
import useCurrentReportID from '@hooks/useCurrentReportID';
@@ -152,7 +153,10 @@ function NavigationRoot({authenticated, lastVisitedPath, initialUrl, onReady}: N
enabled: false,
}}
>
-
+ {/* HybridAppMiddleware needs to have access to navigation ref and SplashScreenHidden context */}
+
+
+
);
}
diff --git a/src/libs/Navigation/dismissModalWithReport.ts b/src/libs/Navigation/dismissModalWithReport.ts
index fe6fd288a2f9..1bb939f5230f 100644
--- a/src/libs/Navigation/dismissModalWithReport.ts
+++ b/src/libs/Navigation/dismissModalWithReport.ts
@@ -2,14 +2,15 @@ import {getActionFromState} from '@react-navigation/core';
import type {NavigationContainerRef} from '@react-navigation/native';
import {StackActions} from '@react-navigation/native';
import {findLastIndex} from 'lodash';
+import type {OnyxEntry} from 'react-native-onyx';
import Log from '@libs/Log';
+import isCentralPaneName from '@libs/NavigationUtils';
import getPolicyEmployeeAccountIDs from '@libs/PolicyEmployeeListUtils';
import {doesReportBelongToWorkspace} from '@libs/ReportUtils';
import NAVIGATORS from '@src/NAVIGATORS';
import ROUTES from '@src/ROUTES';
import SCREENS from '@src/SCREENS';
import type {Report} from '@src/types/onyx';
-import type {EmptyObject} from '@src/types/utils/EmptyObject';
import {isEmptyObject} from '@src/types/utils/EmptyObject';
import getPolicyIDFromState from './getPolicyIDFromState';
import getStateFromPath from './getStateFromPath';
@@ -25,7 +26,7 @@ import type {RootStackParamList, StackNavigationAction, State} from './types';
*
* @param targetReportID - The reportID to navigate to after dismissing the modal
*/
-function dismissModalWithReport(targetReport: Report | EmptyObject, navigationRef: NavigationContainerRef) {
+function dismissModalWithReport(targetReport: OnyxEntry, navigationRef: NavigationContainerRef) {
if (!navigationRef.isReady()) {
return;
}
@@ -44,8 +45,8 @@ function dismissModalWithReport(targetReport: Report | EmptyObject, navigationRe
case SCREENS.REPORT_AVATAR:
case SCREENS.CONCIERGE:
// If we are not in the target report, we need to navigate to it after dismissing the modal
- if (targetReport.reportID !== getTopmostReportId(state)) {
- const reportState = getStateFromPath(ROUTES.REPORT_WITH_ID.getRoute(targetReport.reportID));
+ if (targetReport?.reportID !== getTopmostReportId(state)) {
+ const reportState = getStateFromPath(ROUTES.REPORT_WITH_ID.getRoute(targetReport?.reportID ?? '-1'));
const policyID = getPolicyIDFromState(state as State);
const policyMemberAccountIDs = getPolicyEmployeeAccountIDs(policyID);
const shouldOpenAllWorkspace = isEmptyObject(targetReport) ? true : !doesReportBelongToWorkspace(targetReport, policyMemberAccountIDs, policyID);
@@ -64,7 +65,7 @@ function dismissModalWithReport(targetReport: Report | EmptyObject, navigationRe
// If not-found page is in the route stack, we need to close it
} else if (state.routes.some((route) => route.name === SCREENS.NOT_FOUND)) {
const lastRouteIndex = state.routes.length - 1;
- const centralRouteIndex = findLastIndex(state.routes, (route) => route.name === NAVIGATORS.CENTRAL_PANE_NAVIGATOR);
+ const centralRouteIndex = findLastIndex(state.routes, (route) => isCentralPaneName(route.name));
navigationRef.dispatch({...StackActions.pop(lastRouteIndex - centralRouteIndex), target: state.key});
} else {
navigationRef.dispatch({...StackActions.pop(), target: state.key});
diff --git a/src/libs/Navigation/getTopmostCentralPaneRoute.ts b/src/libs/Navigation/getTopmostCentralPaneRoute.ts
index 934cca1a673e..977f23cd3cd7 100644
--- a/src/libs/Navigation/getTopmostCentralPaneRoute.ts
+++ b/src/libs/Navigation/getTopmostCentralPaneRoute.ts
@@ -1,4 +1,4 @@
-import NAVIGATORS from '@src/NAVIGATORS';
+import isCentralPaneName from '@libs/NavigationUtils';
import type {CentralPaneName, NavigationPartialRoute, RootStackParamList, State} from './types';
// Get the name of topmost central pane route in the navigation stack.
@@ -7,24 +7,13 @@ function getTopmostCentralPaneRoute(state: State): Navigatio
return;
}
- const topmostCentralPane = state.routes.filter((route) => route.name === NAVIGATORS.CENTRAL_PANE_NAVIGATOR).at(-1);
+ const topmostCentralPane = state.routes.filter((route) => isCentralPaneName(route.name)).at(-1);
if (!topmostCentralPane) {
return;
}
- if (!!topmostCentralPane.params && 'screen' in topmostCentralPane.params) {
- return {name: topmostCentralPane.params.screen as CentralPaneName, params: topmostCentralPane.params.params};
- }
-
- if (!topmostCentralPane.state) {
- return;
- }
-
- // There will be at least one route in the central pane navigator.
- const {name, params} = topmostCentralPane.state.routes.at(-1) as NavigationPartialRoute;
-
- return {name, params};
+ return topmostCentralPane as NavigationPartialRoute;
}
export default getTopmostCentralPaneRoute;
diff --git a/src/libs/Navigation/getTopmostReportActionID.ts b/src/libs/Navigation/getTopmostReportActionID.ts
index a1527a5f36b8..ade982c87b7d 100644
--- a/src/libs/Navigation/getTopmostReportActionID.ts
+++ b/src/libs/Navigation/getTopmostReportActionID.ts
@@ -1,5 +1,5 @@
import type {NavigationState, PartialState} from '@react-navigation/native';
-import NAVIGATORS from '@src/NAVIGATORS';
+import isCentralPaneName from '@libs/NavigationUtils';
import SCREENS from '@src/SCREENS';
import type {RootStackParamList} from './types';
@@ -16,12 +16,12 @@ function getTopmostReportActionID(state: NavigationState | NavigationState route.name === NAVIGATORS.CENTRAL_PANE_NAVIGATOR).at(-1);
+ const topmostCentralPane = state.routes.filter((route) => isCentralPaneName(route.name)).at(-1);
if (!topmostCentralPane) {
return;
}
- const directReportParams = topmostCentralPane.params && 'params' in topmostCentralPane.params && topmostCentralPane?.params?.params;
+ const directReportParams = topmostCentralPane.params;
const directReportActionIDParam = directReportParams && 'reportActionID' in directReportParams && directReportParams?.reportActionID;
if (!topmostCentralPane.state && !directReportActionIDParam) {
diff --git a/src/libs/Navigation/getTopmostReportId.ts b/src/libs/Navigation/getTopmostReportId.ts
index aac8e7654865..19bf24f1ba74 100644
--- a/src/libs/Navigation/getTopmostReportId.ts
+++ b/src/libs/Navigation/getTopmostReportId.ts
@@ -1,5 +1,5 @@
import type {NavigationState, PartialState} from '@react-navigation/native';
-import NAVIGATORS from '@src/NAVIGATORS';
+import isCentralPaneName from '@libs/NavigationUtils';
import SCREENS from '@src/SCREENS';
import type {RootStackParamList} from './types';
@@ -16,12 +16,12 @@ function getTopmostReportId(state: NavigationState | NavigationState route.name === NAVIGATORS.CENTRAL_PANE_NAVIGATOR).at(-1);
+ const topmostCentralPane = state.routes?.filter((route) => isCentralPaneName(route.name)).at(-1);
if (!topmostCentralPane) {
return;
}
- const directReportParams = topmostCentralPane.params && 'params' in topmostCentralPane.params && topmostCentralPane?.params?.params;
+ const directReportParams = topmostCentralPane.params;
const directReportIdParam = directReportParams && 'reportID' in directReportParams && directReportParams?.reportID;
if (!topmostCentralPane.state && !directReportIdParam) {
diff --git a/src/libs/Navigation/linkTo/index.ts b/src/libs/Navigation/linkTo/index.ts
index c0085651fdd1..3c4608d6b5de 100644
--- a/src/libs/Navigation/linkTo/index.ts
+++ b/src/libs/Navigation/linkTo/index.ts
@@ -4,6 +4,7 @@ import {findFocusedRoute} from '@react-navigation/native';
import {omitBy} from 'lodash';
import getIsNarrowLayout from '@libs/getIsNarrowLayout';
import extractPolicyIDsFromState from '@libs/Navigation/linkingConfig/extractPolicyIDsFromState';
+import isCentralPaneName from '@libs/NavigationUtils';
import shallowCompare from '@libs/ObjectUtils';
import {extractPolicyIDFromPath, getPathWithoutPolicyID} from '@libs/PolicyUtils';
import getActionsFromPartialDiff from '@navigation/AppNavigator/getActionsFromPartialDiff';
@@ -45,7 +46,6 @@ export default function linkTo(navigation: NavigationContainerRef;
const stateFromPath = getStateFromPath(pathWithoutPolicyID) as PartialState>;
-
// Creating path with /w/ included if necessary.
const topmostCentralPaneRoute = getTopmostCentralPaneRoute(rootState);
const policyIDs = !!topmostCentralPaneRoute?.params && 'policyIDs' in topmostCentralPaneRoute.params ? (topmostCentralPaneRoute?.params?.policyIDs as string) : '';
@@ -72,21 +72,25 @@ export default function linkTo(navigation: NavigationContainerRef | undefined, (value) => value === undefined),
- omitBy(actionParams?.params as Record | undefined, (value) => value === undefined),
+ omitBy(targetParams as Record | undefined, (value) => value === undefined),
);
// If this action is navigating to the report screen and the top most navigator is different from the one we want to navigate - PUSH the new screen to the top of the stack by default
- if (action.payload.name === NAVIGATORS.CENTRAL_PANE_NAVIGATOR && (isTargetScreenDifferentThanCurrent || areParamsDifferent)) {
+ if (isCentralPaneName(action.payload.name) && (isTargetScreenDifferentThanCurrent || areParamsDifferent)) {
// We need to push a tab if the tab doesn't match the central pane route that we are going to push.
const topmostBottomTabRoute = getTopmostBottomTabRoute(rootState);
const policyIDsFromState = extractPolicyIDsFromState(stateFromPath);
@@ -110,8 +114,8 @@ export default function linkTo(navigation: NavigationContainerRef).policyIDs = policyID;
+ if (targetName === SCREENS.SEARCH.CENTRAL_PANE && targetParams && policyID) {
+ (targetParams as Record).policyIDs = policyID;
}
// If the type is UP, we deeplinked into one of the RHP flows and we want to replace the current screen with the previous one in the flow
@@ -161,11 +165,8 @@ export default function linkTo(navigation: NavigationContainerRef> =
[SCREENS.SETTINGS.SAVE_THE_WORLD]: [SCREENS.I_KNOW_A_TEACHER, SCREENS.INTRO_SCHOOL_PRINCIPAL, SCREENS.I_AM_A_TEACHER],
[SCREENS.SETTINGS.TROUBLESHOOT]: [SCREENS.SETTINGS.CONSOLE],
[SCREENS.SEARCH.CENTRAL_PANE]: [SCREENS.SEARCH.REPORT_RHP],
- [SCREENS.SETTINGS.SUBSCRIPTION.ROOT]: [SCREENS.SETTINGS.SUBSCRIPTION.ADD_PAYMENT_CARD, SCREENS.SETTINGS.SUBSCRIPTION.SIZE, SCREENS.SETTINGS.SUBSCRIPTION.DISABLE_AUTO_RENEW_SURVEY],
+ [SCREENS.SETTINGS.SUBSCRIPTION.ROOT]: [
+ SCREENS.SETTINGS.SUBSCRIPTION.ADD_PAYMENT_CARD,
+ SCREENS.SETTINGS.SUBSCRIPTION.SIZE,
+ SCREENS.SETTINGS.SUBSCRIPTION.DISABLE_AUTO_RENEW_SURVEY,
+ SCREENS.SETTINGS.SUBSCRIPTION.CHANGE_BILLING_CURRENCY,
+ SCREENS.SETTINGS.SUBSCRIPTION.CHANGE_PAYMENT_CURRENCY,
+ ],
};
export default CENTRAL_PANE_TO_RHP_MAPPING;
diff --git a/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts b/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts
index f2897587a043..32b5eb15812d 100755
--- a/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts
+++ b/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts
@@ -11,6 +11,7 @@ const FULL_SCREEN_TO_RHP_MAPPING: Partial> = {
SCREENS.WORKSPACE.OWNER_CHANGE_CHECK,
SCREENS.WORKSPACE.OWNER_CHANGE_SUCCESS,
SCREENS.WORKSPACE.OWNER_CHANGE_ERROR,
+ SCREENS.WORKSPACE.OWNER_CHANGE_ERROR,
],
[SCREENS.WORKSPACE.WORKFLOWS]: [
SCREENS.WORKSPACE.WORKFLOWS_APPROVER,
@@ -54,6 +55,23 @@ const FULL_SCREEN_TO_RHP_MAPPING: Partial> = {
SCREENS.WORKSPACE.ACCOUNTING.XERO_EXPORT_PREFERRED_EXPORTER_SELECT,
SCREENS.WORKSPACE.ACCOUNTING.XERO_BILL_PAYMENT_ACCOUNT_SELECTOR,
SCREENS.WORKSPACE.ACCOUNTING.XERO_EXPORT_BANK_ACCOUNT_SELECT,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_SUBSIDIARY_SELECTOR,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_PREFERRED_EXPORTER_SELECT,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_DATE_SELECT,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_DESTINATION_SELECT,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_VENDOR_SELECT,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_PAYABLE_ACCOUNT_SELECT,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_JOURNAL_POSTING_PREFERENCE_SELECT,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_RECEIVABLE_ACCOUNT_SELECT,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_INVOICE_ITEM_SELECT,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_TAX_POSTING_ACCOUNT_SELECT,
+ SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_PROVINCIAL_TAX_POSTING_ACCOUNT_SELECT,
+ SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_PREREQUISITES,
+ SCREENS.WORKSPACE.ACCOUNTING.ENTER_SAGE_INTACCT_CREDENTIALS,
+ SCREENS.WORKSPACE.ACCOUNTING.EXISTING_SAGE_INTACCT_CONNECTIONS,
],
[SCREENS.WORKSPACE.TAXES]: [
SCREENS.WORKSPACE.TAXES_SETTINGS,
@@ -84,6 +102,7 @@ const FULL_SCREEN_TO_RHP_MAPPING: Partial> = {
SCREENS.WORKSPACE.DISTANCE_RATE_DETAILS,
],
[SCREENS.WORKSPACE.REPORT_FIELDS]: [],
+ [SCREENS.WORKSPACE.EXPENSIFY_CARD]: [],
};
export default FULL_SCREEN_TO_RHP_MAPPING;
diff --git a/src/libs/Navigation/linkingConfig/TAB_TO_CENTRAL_PANE_MAPPING.ts b/src/libs/Navigation/linkingConfig/TAB_TO_CENTRAL_PANE_MAPPING.ts
index 15b83314e84e..a68959ae7d0f 100755
--- a/src/libs/Navigation/linkingConfig/TAB_TO_CENTRAL_PANE_MAPPING.ts
+++ b/src/libs/Navigation/linkingConfig/TAB_TO_CENTRAL_PANE_MAPPING.ts
@@ -19,9 +19,9 @@ const TAB_TO_CENTRAL_PANE_MAPPING: Record = {
const generateCentralPaneToTabMapping = (): Record => {
const mapping: Record = {} as Record;
- for (const [tabName, centralPaneNames] of Object.entries(TAB_TO_CENTRAL_PANE_MAPPING)) {
- for (const centralPaneName of centralPaneNames) {
- mapping[centralPaneName] = tabName as BottomTabName;
+ for (const [tabName, CentralPaneNames] of Object.entries(TAB_TO_CENTRAL_PANE_MAPPING)) {
+ for (const CentralPaneName of CentralPaneNames) {
+ mapping[CentralPaneName] = tabName as BottomTabName;
}
}
return mapping;
diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts
index 1b01d515c557..08274ab4c143 100644
--- a/src/libs/Navigation/linkingConfig/config.ts
+++ b/src/libs/Navigation/linkingConfig/config.ts
@@ -25,6 +25,35 @@ const config: LinkingOptions['config'] = {
[SCREENS.REPORT_AVATAR]: ROUTES.REPORT_AVATAR.route,
[SCREENS.TRANSACTION_RECEIPT]: ROUTES.TRANSACTION_RECEIPT.route,
[SCREENS.WORKSPACE_JOIN_USER]: ROUTES.WORKSPACE_JOIN_USER.route,
+ [SCREENS.REPORT]: ROUTES.REPORT_WITH_ID.route,
+ [SCREENS.SETTINGS.PROFILE.ROOT]: {
+ path: ROUTES.SETTINGS_PROFILE,
+ exact: true,
+ },
+ [SCREENS.SETTINGS.PREFERENCES.ROOT]: {
+ path: ROUTES.SETTINGS_PREFERENCES,
+ exact: true,
+ },
+ [SCREENS.SETTINGS.SECURITY]: {
+ path: ROUTES.SETTINGS_SECURITY,
+ exact: true,
+ },
+ [SCREENS.SETTINGS.WALLET.ROOT]: {
+ path: ROUTES.SETTINGS_WALLET,
+ exact: true,
+ },
+ [SCREENS.SETTINGS.ABOUT]: {
+ path: ROUTES.SETTINGS_ABOUT,
+ exact: true,
+ },
+ [SCREENS.SETTINGS.TROUBLESHOOT]: {
+ path: ROUTES.SETTINGS_TROUBLESHOOT,
+ exact: true,
+ },
+ [SCREENS.SETTINGS.WORKSPACES]: ROUTES.SETTINGS_WORKSPACES,
+ [SCREENS.SEARCH.CENTRAL_PANE]: ROUTES.SEARCH.route,
+ [SCREENS.SETTINGS.SAVE_THE_WORLD]: ROUTES.SETTINGS_SAVE_THE_WORLD,
+ [SCREENS.SETTINGS.SUBSCRIPTION.ROOT]: ROUTES.SETTINGS_SUBSCRIPTION,
// Sidebar
[NAVIGATORS.BOTTOM_TAB_NAVIGATOR]: {
@@ -38,39 +67,6 @@ const config: LinkingOptions['config'] = {
},
},
- [NAVIGATORS.CENTRAL_PANE_NAVIGATOR]: {
- screens: {
- [SCREENS.REPORT]: ROUTES.REPORT_WITH_ID.route,
- [SCREENS.SETTINGS.PROFILE.ROOT]: {
- path: ROUTES.SETTINGS_PROFILE,
- exact: true,
- },
- [SCREENS.SETTINGS.PREFERENCES.ROOT]: {
- path: ROUTES.SETTINGS_PREFERENCES,
- exact: true,
- },
- [SCREENS.SETTINGS.SECURITY]: {
- path: ROUTES.SETTINGS_SECURITY,
- exact: true,
- },
- [SCREENS.SETTINGS.WALLET.ROOT]: {
- path: ROUTES.SETTINGS_WALLET,
- exact: true,
- },
- [SCREENS.SETTINGS.ABOUT]: {
- path: ROUTES.SETTINGS_ABOUT,
- exact: true,
- },
- [SCREENS.SETTINGS.TROUBLESHOOT]: {
- path: ROUTES.SETTINGS_TROUBLESHOOT,
- exact: true,
- },
- [SCREENS.SETTINGS.WORKSPACES]: ROUTES.SETTINGS_WORKSPACES,
- [SCREENS.SEARCH.CENTRAL_PANE]: ROUTES.SEARCH.route,
- [SCREENS.SETTINGS.SAVE_THE_WORLD]: ROUTES.SETTINGS_SAVE_THE_WORLD,
- [SCREENS.SETTINGS.SUBSCRIPTION.ROOT]: ROUTES.SETTINGS_SUBSCRIPTION,
- },
- },
[SCREENS.NOT_FOUND]: '*',
[NAVIGATORS.LEFT_MODAL_NAVIGATOR]: {
screens: {
@@ -96,6 +92,14 @@ const config: LinkingOptions['config'] = {
},
},
},
+ [NAVIGATORS.EXPLANATION_MODAL_NAVIGATOR]: {
+ screens: {
+ [SCREENS.EXPLANATION_MODAL.ROOT]: {
+ path: ROUTES.EXPLANATION_MODAL_ROOT,
+ exact: true,
+ },
+ },
+ },
[NAVIGATORS.ONBOARDING_MODAL_NAVIGATOR]: {
path: ROUTES.ONBOARDING_ROOT,
initialRouteName: SCREENS.ONBOARDING.PURPOSE,
@@ -130,6 +134,18 @@ const config: LinkingOptions['config'] = {
path: ROUTES.SETTINGS_SUBSCRIPTION_ADD_PAYMENT_CARD,
exact: true,
},
+ [SCREENS.SETTINGS.SUBSCRIPTION.CHANGE_BILLING_CURRENCY]: {
+ path: ROUTES.SETTINGS_SUBSCRIPTION_CHANGE_BILLING_CURRENCY,
+ exact: true,
+ },
+ [SCREENS.SETTINGS.SUBSCRIPTION.CHANGE_PAYMENT_CURRENCY]: {
+ path: ROUTES.SETTINGS_SUBSCRIPTION_CHANGE_PAYMENT_CURRENCY,
+ exact: true,
+ },
+ [SCREENS.SETTINGS.ADD_PAYMENT_CARD_CHANGE_CURRENCY]: {
+ path: ROUTES.SETTINGS_CHANGE_CURRENCY,
+ exact: true,
+ },
[SCREENS.SETTINGS.PREFERENCES.THEME]: {
path: ROUTES.SETTINGS_THEME,
exact: true,
@@ -337,6 +353,49 @@ const config: LinkingOptions['config'] = {
[SCREENS.WORKSPACE.ACCOUNTING.XERO_INVOICE_ACCOUNT_SELECTOR]: {path: ROUTES.POLICY_ACCOUNTING_XERO_INVOICE_SELECTOR.route},
[SCREENS.WORKSPACE.ACCOUNTING.XERO_EXPORT_PREFERRED_EXPORTER_SELECT]: {path: ROUTES.POLICY_ACCOUNTING_XERO_PREFERRED_EXPORTER_SELECT.route},
[SCREENS.WORKSPACE.ACCOUNTING.XERO_BILL_PAYMENT_ACCOUNT_SELECTOR]: {path: ROUTES.POLICY_ACCOUNTING_XERO_BILL_PAYMENT_ACCOUNT_SELECTOR.route},
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_SUBSIDIARY_SELECTOR]: {path: ROUTES.POLICY_ACCOUNTING_NETSUITE_SUBSIDIARY_SELECTOR.route},
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT]: {
+ path: ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT.route,
+ },
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_PREFERRED_EXPORTER_SELECT]: {
+ path: ROUTES.POLICY_ACCOUNTING_NETSUITE_PREFERRED_EXPORTER_SELECT.route,
+ },
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_DATE_SELECT]: {
+ path: ROUTES.POLICY_ACCOUNTING_NETSUITE_DATE_SELECT.route,
+ },
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES]: {
+ path: ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES.route,
+ },
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_DESTINATION_SELECT]: {
+ path: ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES_DESTINATION_SELECT.route,
+ },
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_VENDOR_SELECT]: {
+ path: ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES_VENDOR_SELECT.route,
+ },
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_PAYABLE_ACCOUNT_SELECT]: {
+ path: ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES_PAYABLE_ACCOUNT_SELECT.route,
+ },
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_JOURNAL_POSTING_PREFERENCE_SELECT]: {
+ path: ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES_JOURNAL_POSTING_PREFERENCE_SELECT.route,
+ },
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_RECEIVABLE_ACCOUNT_SELECT]: {
+ path: ROUTES.POLICY_ACCOUNTING_NETSUITE_RECEIVABLE_ACCOUNT_SELECT.route,
+ },
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT]: {
+ path: ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT.route,
+ },
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_INVOICE_ITEM_SELECT]: {
+ path: ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_SELECT.route,
+ },
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_TAX_POSTING_ACCOUNT_SELECT]: {
+ path: ROUTES.POLICY_ACCOUNTING_NETSUITE_TAX_POSTING_ACCOUNT_SELECT.route,
+ },
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_PROVINCIAL_TAX_POSTING_ACCOUNT_SELECT]: {
+ path: ROUTES.POLICY_ACCOUNTING_NETSUITE_PROVINCIAL_TAX_POSTING_ACCOUNT_SELECT.route,
+ },
+ [SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_PREREQUISITES]: {path: ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_PREREQUISITES.route},
+ [SCREENS.WORKSPACE.ACCOUNTING.ENTER_SAGE_INTACCT_CREDENTIALS]: {path: ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_ENTER_CREDENTIALS.route},
+ [SCREENS.WORKSPACE.ACCOUNTING.EXISTING_SAGE_INTACCT_CONNECTIONS]: {path: ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_EXISTING_CONNECTIONS.route},
[SCREENS.WORKSPACE.DESCRIPTION]: {
path: ROUTES.WORKSPACE_PROFILE_DESCRIPTION.route,
},
@@ -349,6 +408,9 @@ const config: LinkingOptions['config'] = {
[SCREENS.WORKSPACE.SHARE]: {
path: ROUTES.WORKSPACE_PROFILE_SHARE.route,
},
+ [SCREENS.WORKSPACE.EXPENSIFY_CARD_ISSUE_NEW]: {
+ path: ROUTES.WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW,
+ },
[SCREENS.WORKSPACE.RATE_AND_UNIT]: {
path: ROUTES.WORKSPACE_RATE_AND_UNIT.route,
},
@@ -801,6 +863,9 @@ const config: LinkingOptions['config'] = {
[SCREENS.WORKSPACE.REPORT_FIELDS]: {
path: ROUTES.WORKSPACE_REPORT_FIELDS.route,
},
+ [SCREENS.WORKSPACE.EXPENSIFY_CARD]: {
+ path: ROUTES.WORKSPACE_EXPENSIFY_CARD.route,
+ },
[SCREENS.WORKSPACE.DISTANCE_RATES]: {
path: ROUTES.WORKSPACE_DISTANCE_RATES.route,
},
diff --git a/src/libs/Navigation/linkingConfig/getAdaptedStateFromPath.ts b/src/libs/Navigation/linkingConfig/getAdaptedStateFromPath.ts
index 1a41aca8b255..17ea0e17d1b9 100644
--- a/src/libs/Navigation/linkingConfig/getAdaptedStateFromPath.ts
+++ b/src/libs/Navigation/linkingConfig/getAdaptedStateFromPath.ts
@@ -4,6 +4,7 @@ import type {TupleToUnion} from 'type-fest';
import {isAnonymousUser} from '@libs/actions/Session';
import getIsNarrowLayout from '@libs/getIsNarrowLayout';
import type {BottomTabName, CentralPaneName, FullScreenName, NavigationPartialRoute, RootStackParamList} from '@libs/Navigation/types';
+import isCentralPaneName from '@libs/NavigationUtils';
import {extractPolicyIDFromPath, getPathWithoutPolicyID} from '@libs/PolicyUtils';
import CONST from '@src/CONST';
import NAVIGATORS from '@src/NAVIGATORS';
@@ -69,13 +70,6 @@ function createBottomTabNavigator(route: NavigationPartialRoute,
};
}
-function createCentralPaneNavigator(route: NavigationPartialRoute): NavigationPartialRoute {
- return {
- name: NAVIGATORS.CENTRAL_PANE_NAVIGATOR,
- state: getRoutesWithIndex([route]),
- };
-}
-
function createFullScreenNavigator(route?: NavigationPartialRoute): NavigationPartialRoute {
const routes = [];
@@ -99,9 +93,7 @@ function createFullScreenNavigator(route?: NavigationPartialRoute | undefined {
+function getMatchingRootRouteForRHPRoute(route: NavigationPartialRoute): NavigationPartialRoute | undefined {
// Check for backTo param. One screen with different backTo value may need diferent screens visible under the overlay.
if (route.params && 'backTo' in route.params && typeof route.params.backTo === 'string') {
const stateForBackTo = getStateFromPath(route.params.backTo, config);
@@ -111,7 +103,7 @@ function getMatchingRootRouteForRHPRoute(
const centralPaneOrFullScreenNavigator = stateForBackTo.routes.find(
// eslint-disable-next-line @typescript-eslint/no-shadow
- (route) => route.name === NAVIGATORS.CENTRAL_PANE_NAVIGATOR || route.name === NAVIGATORS.FULL_SCREEN_NAVIGATOR,
+ (route) => isCentralPaneName(route.name) || route.name === NAVIGATORS.FULL_SCREEN_NAVIGATOR,
);
// If there is rhpNavigator in the state generated for backTo url, we want to get root route matching to this rhp screen.
@@ -125,7 +117,7 @@ function getMatchingRootRouteForRHPRoute(
// If we know that backTo targets the root route (central pane or full screen) we want to use it.
if (centralPaneOrFullScreenNavigator && centralPaneOrFullScreenNavigator.state) {
- return centralPaneOrFullScreenNavigator as NavigationPartialRoute;
+ return centralPaneOrFullScreenNavigator as NavigationPartialRoute;
}
}
}
@@ -137,7 +129,7 @@ function getMatchingRootRouteForRHPRoute(
if (centralPaneName === SCREENS.SEARCH.CENTRAL_PANE) {
delete (params as Record)?.reportID;
}
- return createCentralPaneNavigator({name: centralPaneName as CentralPaneName, params});
+ return {name: centralPaneName as CentralPaneName, params};
}
}
@@ -158,7 +150,7 @@ function getAdaptedState(state: PartialState
// We need to check what is defined to know what we need to add.
const bottomTabNavigator = state.routes.find((route) => route.name === NAVIGATORS.BOTTOM_TAB_NAVIGATOR);
- const centralPaneNavigator = state.routes.find((route) => route.name === NAVIGATORS.CENTRAL_PANE_NAVIGATOR);
+ const centralPaneNavigator = state.routes.find((route) => isCentralPaneName(route.name));
const fullScreenNavigator = state.routes.find((route) => route.name === NAVIGATORS.FULL_SCREEN_NAVIGATOR);
const rhpNavigator = state.routes.find((route) => route.name === NAVIGATORS.RIGHT_MODAL_NAVIGATOR);
const lhpNavigator = state.routes.find((route) => route.name === NAVIGATORS.LEFT_MODAL_NAVIGATOR);
@@ -190,7 +182,7 @@ function getAdaptedState(state: PartialState
metainfo.isCentralPaneAndBottomTabMandatory = false;
metainfo.isFullScreenNavigatorMandatory = false;
// If matchingRootRoute is undefined and it's a narrow layout, don't add a report screen under the RHP.
- matchingRootRoute = matchingRootRoute ?? (!isNarrowLayout ? createCentralPaneNavigator({name: SCREENS.REPORT}) : undefined);
+ matchingRootRoute = matchingRootRoute ?? (!isNarrowLayout ? {name: SCREENS.REPORT} : undefined);
}
// If the root route is type of FullScreenNavigator, the default bottom tab will be added.
@@ -199,7 +191,7 @@ function getAdaptedState(state: PartialState
// When we open a screen in RHP from FullScreenNavigator, we need to add the appropriate screen in CentralPane.
// Then, when we close FullScreenNavigator, we will be redirected to the correct page in CentralPane.
if (matchingRootRoute?.name === NAVIGATORS.FULL_SCREEN_NAVIGATOR) {
- routes.push(createCentralPaneNavigator({name: SCREENS.SETTINGS.WORKSPACES}));
+ routes.push({name: SCREENS.SETTINGS.WORKSPACES});
}
if (matchingRootRoute && (!isNarrowLayout || !isRHPScreenOpenedFromLHN)) {
@@ -232,11 +224,9 @@ function getAdaptedState(state: PartialState
),
);
if (!isNarrowLayout) {
- routes.push(
- createCentralPaneNavigator({
- name: SCREENS.REPORT,
- }),
- );
+ routes.push({
+ name: SCREENS.REPORT,
+ });
}
// Separate ifs are necessary for typescript to see that we are not pushing undefined to the array.
@@ -277,11 +267,9 @@ function getAdaptedState(state: PartialState
),
);
- routes.push(
- createCentralPaneNavigator({
- name: SCREENS.SETTINGS.WORKSPACES,
- }),
- );
+ routes.push({
+ name: SCREENS.SETTINGS.WORKSPACES,
+ });
routes.push(fullScreenNavigator);
@@ -316,7 +304,7 @@ function getAdaptedState(state: PartialState
const matchingBottomTabRoute = getMatchingBottomTabRouteForState(state);
routes.push(createBottomTabNavigator(matchingBottomTabRoute, policyID));
if (!isNarrowLayout) {
- routes.push(createCentralPaneNavigator({name: SCREENS.REPORT, params: {reportID: reportAttachments.params?.reportID ?? '-1'}}));
+ routes.push({name: SCREENS.REPORT, params: {reportID: reportAttachments.params?.reportID ?? '-1'}});
}
routes.push(reportAttachments);
@@ -344,11 +332,11 @@ function getAdaptedState(state: PartialState
const routes = [...state.routes];
const matchingCentralPaneRoute = getMatchingCentralPaneRouteForState(state);
if (matchingCentralPaneRoute) {
- routes.push(createCentralPaneNavigator(matchingCentralPaneRoute));
+ routes.push(matchingCentralPaneRoute);
} else {
// If there is no matching central pane, we want to add the default one.
metainfo.isCentralPaneAndBottomTabMandatory = false;
- routes.push(createCentralPaneNavigator({name: SCREENS.REPORT}));
+ routes.push({name: SCREENS.REPORT});
}
return {
diff --git a/src/libs/Navigation/linkingConfig/getMatchingCentralPaneRouteForState.ts b/src/libs/Navigation/linkingConfig/getMatchingCentralPaneRouteForState.ts
index 51cb9e3aa9a5..0788f9309853 100644
--- a/src/libs/Navigation/linkingConfig/getMatchingCentralPaneRouteForState.ts
+++ b/src/libs/Navigation/linkingConfig/getMatchingCentralPaneRouteForState.ts
@@ -1,5 +1,5 @@
import getTopmostBottomTabRoute from '@libs/Navigation/getTopmostBottomTabRoute';
-import type {CentralPaneName, CentralPaneNavigatorParamList, NavigationPartialRoute, RootStackParamList, State} from '@libs/Navigation/types';
+import type {AuthScreensParamList, CentralPaneName, NavigationPartialRoute, RootStackParamList, State} from '@libs/Navigation/types';
import NAVIGATORS from '@src/NAVIGATORS';
import SCREENS from '@src/SCREENS';
import TAB_TO_CENTRAL_PANE_MAPPING from './TAB_TO_CENTRAL_PANE_MAPPING';
@@ -48,7 +48,7 @@ function hasRouteMatchingPolicyID(route: NavigationPartialRoute
}
// Get already opened settings screen within the policy
-function getAlreadyOpenedSettingsScreen(rootState?: State, policyID?: string): keyof CentralPaneNavigatorParamList | undefined {
+function getAlreadyOpenedSettingsScreen(rootState?: State, policyID?: string): keyof AuthScreensParamList | undefined {
if (!rootState) {
return undefined;
}
@@ -57,7 +57,7 @@ function getAlreadyOpenedSettingsScreen(rootState?: State, policyID?: string): k
// A screen from the navigation state can be pushed to the navigation state again only if it has a matching policyID with the currently selected workspace.
// Otherwise, when we switch the workspace, we want to display the initial screen in the settings tab.
const alreadyOpenedSettingsTab = rootState.routes
- .filter((item) => item.params && 'screen' in item.params && TAB_TO_CENTRAL_PANE_MAPPING[SCREENS.SETTINGS.ROOT].includes(item.params.screen as keyof CentralPaneNavigatorParamList))
+ .filter((item) => item.params && 'screen' in item.params && TAB_TO_CENTRAL_PANE_MAPPING[SCREENS.SETTINGS.ROOT].includes(item.name as CentralPaneName))
.at(-1);
if (!hasRouteMatchingPolicyID(alreadyOpenedSettingsTab as NavigationPartialRoute, policyID)) {
@@ -65,7 +65,7 @@ function getAlreadyOpenedSettingsScreen(rootState?: State, policyID?: string): k
}
const settingsScreen =
- alreadyOpenedSettingsTab?.params && 'screen' in alreadyOpenedSettingsTab.params ? (alreadyOpenedSettingsTab?.params?.screen as keyof CentralPaneNavigatorParamList) : undefined;
+ alreadyOpenedSettingsTab?.params && 'screen' in alreadyOpenedSettingsTab.params ? (alreadyOpenedSettingsTab?.params?.screen as keyof AuthScreensParamList) : undefined;
return settingsScreen;
}
@@ -84,7 +84,7 @@ function getMatchingCentralPaneRouteForState(state: State, r
// When we go back to the settings tab without switching the workspace id, we want to return to the previously opened screen
const policyID = topmostBottomTabRoute?.params && 'policyID' in topmostBottomTabRoute.params ? (topmostBottomTabRoute.params.policyID as string) : undefined;
const screen = getAlreadyOpenedSettingsScreen(rootState, policyID) ?? centralPaneName;
- return {name: screen, params: topmostBottomTabRoute.params};
+ return {name: screen as CentralPaneName, params: topmostBottomTabRoute.params};
}
if (topmostBottomTabRoute.name === SCREENS.HOME) {
diff --git a/src/libs/Navigation/setupCustomAndroidBackHandler/index.android.ts b/src/libs/Navigation/setupCustomAndroidBackHandler/index.android.ts
index 3690614faf6f..10aa8b99a484 100644
--- a/src/libs/Navigation/setupCustomAndroidBackHandler/index.android.ts
+++ b/src/libs/Navigation/setupCustomAndroidBackHandler/index.android.ts
@@ -47,7 +47,7 @@ function setupCustomAndroidBackHandler() {
(!centralPaneRouteAfterPop || centralPaneRouteAfterPop.name !== SCREENS.SEARCH.CENTRAL_PANE)
) {
const {policyID, ...restParams} = bottomTabRoutes[bottomTabRoutes.length - 2].params as SearchPageProps['route']['params'];
- navigationRef.dispatch({...StackActions.push(NAVIGATORS.CENTRAL_PANE_NAVIGATOR, {screen: SCREENS.SEARCH.CENTRAL_PANE, params: {...restParams, policyIDs: policyID}})});
+ navigationRef.dispatch({...StackActions.push(SCREENS.SEARCH.CENTRAL_PANE, {...restParams, policyIDs: policyID})});
}
return true;
@@ -59,7 +59,7 @@ function setupCustomAndroidBackHandler() {
// In that case we have to push the proper one.
if (bottomTabRoutes && bottomTabRoutes?.length >= 2 && bottomTabRoutes[bottomTabRoutes.length - 2].name === SCREENS.SEARCH.BOTTOM_TAB && rootState.routes.length === 1) {
const {policyID, ...restParams} = bottomTabRoutes[bottomTabRoutes.length - 2].params as SearchPageProps['route']['params'];
- navigationRef.dispatch({...StackActions.push(NAVIGATORS.CENTRAL_PANE_NAVIGATOR, {screen: SCREENS.SEARCH.CENTRAL_PANE, params: {...restParams, policyIDs: policyID}})});
+ navigationRef.dispatch({...StackActions.push(SCREENS.SEARCH.CENTRAL_PANE, {...restParams, policyIDs: policyID})});
navigationRef.dispatch({...StackActions.pop(), target: bottomTabRoute?.state?.key});
return true;
}
diff --git a/src/libs/Navigation/switchPolicyID.ts b/src/libs/Navigation/switchPolicyID.ts
index ffaaf8daa081..59461bfc3c8f 100644
--- a/src/libs/Navigation/switchPolicyID.ts
+++ b/src/libs/Navigation/switchPolicyID.ts
@@ -3,8 +3,8 @@ import type {NavigationAction, NavigationContainerRef, NavigationState, PartialS
import {getPathFromState} from '@react-navigation/native';
import type {Writable} from 'type-fest';
import getIsNarrowLayout from '@libs/getIsNarrowLayout';
+import isCentralPaneName from '@libs/NavigationUtils';
import CONST from '@src/CONST';
-import NAVIGATORS from '@src/NAVIGATORS';
import type {Route} from '@src/ROUTES';
import ROUTES from '@src/ROUTES';
import SCREENS from '@src/SCREENS';
@@ -32,25 +32,32 @@ function getActionForBottomTabNavigator(action: StackNavigationAction, state: Na
return;
}
- const params = action.payload.params as ActionPayloadParams;
- let payloadParams = params?.params as Record;
- let screen = params.screen;
+ let name;
+ let params: Record;
+ if (isCentralPaneName(action.payload.name)) {
+ name = action.payload.name;
+ params = action.payload.params;
+ } else {
+ const actionPayloadParams = action.payload.params as ActionPayloadParams;
+ name = actionPayloadParams.screen;
+ params = actionPayloadParams?.params as Record;
+ }
- if (screen === SCREENS.SEARCH.CENTRAL_PANE) {
- screen = SCREENS.SEARCH.BOTTOM_TAB;
+ if (name === SCREENS.SEARCH.CENTRAL_PANE) {
+ name = SCREENS.SEARCH.BOTTOM_TAB;
}
- if (!payloadParams) {
- payloadParams = {policyID};
+ if (!params) {
+ params = {policyID};
} else {
- payloadParams.policyID = policyID;
+ params.policyID = policyID;
}
return {
type: CONST.NAVIGATION.ACTION_TYPE.PUSH,
payload: {
- name: screen,
- params: payloadParams,
+ name,
+ params,
},
target: bottomTabNavigatorRoute.state.key,
};
@@ -100,7 +107,6 @@ export default function switchPolicyID(navigation: NavigationContainerRef = PartialRoute = NavigationState | PartialState>;
-type CentralPaneNavigatorParamList = {
+type BackToParams = {
+ backTo?: Routes;
+};
+
+type CentralPaneScreensParamList = {
[SCREENS.REPORT]: {
reportActionID: string;
reportID: string;
@@ -74,10 +78,6 @@ type CentralPaneNavigatorParamList = {
[SCREENS.SETTINGS.SUBSCRIPTION.ROOT]: undefined;
};
-type BackToParams = {
- backTo?: Routes;
-};
-
type SettingsNavigatorParamList = {
[SCREENS.SETTINGS.SHARE_CODE]: undefined;
[SCREENS.SETTINGS.PROFILE.ROOT]: undefined;
@@ -254,6 +254,8 @@ type SettingsNavigatorParamList = {
canChangeSize: 0 | 1;
};
[SCREENS.SETTINGS.SUBSCRIPTION.ADD_PAYMENT_CARD]: undefined;
+ [SCREENS.SETTINGS.SUBSCRIPTION.CHANGE_BILLING_CURRENCY]: undefined;
+ [SCREENS.SETTINGS.SUBSCRIPTION.CHANGE_PAYMENT_CURRENCY]: undefined;
[SCREENS.WORKSPACE.TAXES_SETTINGS]: {
policyID: string;
};
@@ -385,6 +387,62 @@ type SettingsNavigatorParamList = {
[SCREENS.WORKSPACE.ACCOUNTING.XERO_BILL_PAYMENT_ACCOUNT_SELECTOR]: {
policyID: string;
};
+ [SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_PREREQUISITES]: {
+ policyID: string;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.ENTER_SAGE_INTACCT_CREDENTIALS]: {
+ policyID: string;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.EXISTING_SAGE_INTACCT_CONNECTIONS]: {
+ policyID: string;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_SUBSIDIARY_SELECTOR]: {
+ policyID: string;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT]: {
+ policyID: string;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_PREFERRED_EXPORTER_SELECT]: {
+ policyID: string;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_DATE_SELECT]: {
+ policyID: string;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES]: {
+ policyID: string;
+ expenseType: ValueOf;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_DESTINATION_SELECT]: {
+ policyID: string;
+ expenseType: ValueOf;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_VENDOR_SELECT]: {
+ policyID: string;
+ expenseType: ValueOf;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_PAYABLE_ACCOUNT_SELECT]: {
+ policyID: string;
+ expenseType: ValueOf;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT_EXPENSES_JOURNAL_POSTING_PREFERENCE_SELECT]: {
+ policyID: string;
+ expenseType: ValueOf;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_RECEIVABLE_ACCOUNT_SELECT]: {
+ policyID: string;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT]: {
+ policyID: string;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_INVOICE_ITEM_SELECT]: {
+ policyID: string;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_TAX_POSTING_ACCOUNT_SELECT]: {
+ policyID: string;
+ };
+ [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_PROVINCIAL_TAX_POSTING_ACCOUNT_SELECT]: {
+ policyID: string;
+ };
[SCREENS.GET_ASSISTANCE]: {
backTo: Routes;
};
@@ -798,6 +856,9 @@ type FullScreenNavigatorParamList = {
[SCREENS.WORKSPACE.WORKFLOWS]: {
policyID: string;
};
+ [SCREENS.WORKSPACE.EXPENSIFY_CARD]: {
+ policyID: string;
+ };
[SCREENS.WORKSPACE.WORKFLOWS_APPROVER]: {
policyID: string;
};
@@ -867,6 +928,10 @@ type WelcomeVideoModalNavigatorParamList = {
[SCREENS.WELCOME_VIDEO.ROOT]: undefined;
};
+type ExplanationModalNavigatorParamList = {
+ [SCREENS.EXPLANATION_MODAL.ROOT]: undefined;
+};
+
type BottomTabNavigatorParamList = {
[SCREENS.HOME]: {policyID?: string};
[SCREENS.SEARCH.BOTTOM_TAB]: {
@@ -910,42 +975,43 @@ type PublicScreensParamList = SharedScreensParamList & {
[SCREENS.CONNECTION_COMPLETE]: undefined;
};
-type AuthScreensParamList = SharedScreensParamList & {
- [NAVIGATORS.CENTRAL_PANE_NAVIGATOR]: NavigatorScreenParams;
- [SCREENS.CONCIERGE]: undefined;
- [SCREENS.ATTACHMENTS]: {
- reportID: string;
- source: string;
- type: ValueOf;
- accountID: string;
+type AuthScreensParamList = CentralPaneScreensParamList &
+ SharedScreensParamList & {
+ [SCREENS.CONCIERGE]: undefined;
+ [SCREENS.ATTACHMENTS]: {
+ reportID: string;
+ source: string;
+ type: ValueOf;
+ accountID: string;
+ };
+ [SCREENS.PROFILE_AVATAR]: {
+ accountID: string;
+ };
+ [SCREENS.WORKSPACE_AVATAR]: {
+ policyID: string;
+ };
+ [SCREENS.WORKSPACE_JOIN_USER]: {
+ policyID: string;
+ email: string;
+ };
+ [SCREENS.REPORT_AVATAR]: {
+ reportID: string;
+ };
+ [SCREENS.NOT_FOUND]: undefined;
+ [NAVIGATORS.LEFT_MODAL_NAVIGATOR]: NavigatorScreenParams;
+ [NAVIGATORS.RIGHT_MODAL_NAVIGATOR]: NavigatorScreenParams;
+ [NAVIGATORS.FULL_SCREEN_NAVIGATOR]: NavigatorScreenParams;
+ [NAVIGATORS.ONBOARDING_MODAL_NAVIGATOR]: NavigatorScreenParams;
+ [NAVIGATORS.FEATURE_TRANING_MODAL_NAVIGATOR]: NavigatorScreenParams;
+ [NAVIGATORS.WELCOME_VIDEO_MODAL_NAVIGATOR]: NavigatorScreenParams;
+ [NAVIGATORS.EXPLANATION_MODAL_NAVIGATOR]: NavigatorScreenParams;
+ [SCREENS.DESKTOP_SIGN_IN_REDIRECT]: undefined;
+ [SCREENS.TRANSACTION_RECEIPT]: {
+ reportID: string;
+ transactionID: string;
+ };
+ [SCREENS.CONNECTION_COMPLETE]: undefined;
};
- [SCREENS.PROFILE_AVATAR]: {
- accountID: string;
- };
- [SCREENS.WORKSPACE_AVATAR]: {
- policyID: string;
- };
- [SCREENS.WORKSPACE_JOIN_USER]: {
- policyID: string;
- email: string;
- };
- [SCREENS.REPORT_AVATAR]: {
- reportID: string;
- };
- [SCREENS.NOT_FOUND]: undefined;
- [NAVIGATORS.LEFT_MODAL_NAVIGATOR]: NavigatorScreenParams;
- [NAVIGATORS.RIGHT_MODAL_NAVIGATOR]: NavigatorScreenParams;
- [NAVIGATORS.FULL_SCREEN_NAVIGATOR]: NavigatorScreenParams;
- [NAVIGATORS.ONBOARDING_MODAL_NAVIGATOR]: NavigatorScreenParams;
- [NAVIGATORS.FEATURE_TRANING_MODAL_NAVIGATOR]: NavigatorScreenParams;
- [NAVIGATORS.WELCOME_VIDEO_MODAL_NAVIGATOR]: NavigatorScreenParams;
- [SCREENS.DESKTOP_SIGN_IN_REDIRECT]: undefined;
- [SCREENS.TRANSACTION_RECEIPT]: {
- reportID: string;
- transactionID: string;
- };
- [SCREENS.CONNECTION_COMPLETE]: undefined;
-};
type SearchReportParamList = {
[SCREENS.SEARCH.REPORT_RHP]: {
@@ -964,10 +1030,10 @@ type RootStackParamList = PublicScreensParamList & AuthScreensParamList & LeftMo
type BottomTabName = keyof BottomTabNavigatorParamList;
-type CentralPaneName = keyof CentralPaneNavigatorParamList;
-
type FullScreenName = keyof FullScreenNavigatorParamList;
+type CentralPaneName = keyof CentralPaneScreensParamList;
+
type SwitchPolicyIDParams = {
policyID?: string;
route?: Routes;
@@ -977,14 +1043,15 @@ type SwitchPolicyIDParams = {
export type {
AddPersonalBankAccountNavigatorParamList,
AuthScreensParamList,
+ CentralPaneScreensParamList,
+ CentralPaneName,
BackToParams,
BottomTabName,
BottomTabNavigatorParamList,
- CentralPaneName,
- CentralPaneNavigatorParamList,
DetailsNavigatorParamList,
EditRequestNavigatorParamList,
EnablePaymentsNavigatorParamList,
+ ExplanationModalNavigatorParamList,
FlagCommentNavigatorParamList,
FullScreenName,
FullScreenNavigatorParamList,
diff --git a/src/libs/NavigationUtils.ts b/src/libs/NavigationUtils.ts
new file mode 100644
index 000000000000..4fdc03c3d334
--- /dev/null
+++ b/src/libs/NavigationUtils.ts
@@ -0,0 +1,26 @@
+import SCREENS from '@src/SCREENS';
+import type {CentralPaneName} from './Navigation/types';
+
+const CENTRAL_PANE_SCREEN_NAMES = new Set([
+ SCREENS.SETTINGS.WORKSPACES,
+ SCREENS.SETTINGS.PREFERENCES.ROOT,
+ SCREENS.SETTINGS.SECURITY,
+ SCREENS.SETTINGS.PROFILE.ROOT,
+ SCREENS.SETTINGS.WALLET.ROOT,
+ SCREENS.SETTINGS.ABOUT,
+ SCREENS.SETTINGS.TROUBLESHOOT,
+ SCREENS.SETTINGS.SAVE_THE_WORLD,
+ SCREENS.SETTINGS.SUBSCRIPTION.ROOT,
+ SCREENS.SEARCH.CENTRAL_PANE,
+ SCREENS.REPORT,
+]);
+
+function isCentralPaneName(screen: string | undefined): screen is CentralPaneName {
+ if (!screen) {
+ return false;
+ }
+
+ return CENTRAL_PANE_SCREEN_NAMES.has(screen as CentralPaneName);
+}
+
+export default isCentralPaneName;
diff --git a/src/libs/NextStepUtils.ts b/src/libs/NextStepUtils.ts
index 484104ebb881..0ac2878b6857 100644
--- a/src/libs/NextStepUtils.ts
+++ b/src/libs/NextStepUtils.ts
@@ -1,14 +1,13 @@
import {format, lastDayOfMonth, setDate} from 'date-fns';
import {Str} from 'expensify-common';
import Onyx from 'react-native-onyx';
-import type {OnyxCollection} from 'react-native-onyx';
+import type {OnyxCollection, OnyxEntry} from 'react-native-onyx';
import type {ValueOf} from 'type-fest';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {Policy, Report, ReportNextStep} from '@src/types/onyx';
import type {Message} from '@src/types/onyx/ReportNextStep';
import type DeepValueOf from '@src/types/utils/DeepValueOf';
-import type {EmptyObject} from '@src/types/utils/EmptyObject';
import DateUtils from './DateUtils';
import EmailUtils from './EmailUtils';
import * as PersonalDetailsUtils from './PersonalDetailsUtils';
@@ -73,16 +72,12 @@ type BuildNextStepParameters = {
* @param parameters.isPaidWithExpensify - Whether a report has been paid with Expensify or outside
* @returns nextStep
*/
-function buildNextStep(
- report: Report | EmptyObject,
- predictedNextStatus: ValueOf,
- {isPaidWithExpensify}: BuildNextStepParameters = {},
-): ReportNextStep | null {
+function buildNextStep(report: OnyxEntry, predictedNextStatus: ValueOf, {isPaidWithExpensify}: BuildNextStepParameters = {}): ReportNextStep | null {
if (!ReportUtils.isExpenseReport(report)) {
return null;
}
- const {policyID = '', ownerAccountID = -1, managerID = -1} = report;
+ const {policyID = '', ownerAccountID = -1, managerID = -1} = report ?? {};
const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${policyID}`] ?? ({} as Policy);
const {harvesting, preventSelfApproval, autoReportingFrequency, autoReportingOffset} = policy;
const submitToAccountID = PolicyUtils.getSubmitToAccountID(policy, ownerAccountID);
@@ -282,7 +277,7 @@ function buildNextStep(
accountID: currentUserAccountID,
email: currentUserEmail,
},
- report as Report,
+ report,
)
) {
optimisticNextStep = {
diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts
index 077fb5b72102..4ad79c30e86d 100644
--- a/src/libs/OptionsListUtils.ts
+++ b/src/libs/OptionsListUtils.ts
@@ -36,7 +36,6 @@ import type {
import type {Participant} from '@src/types/onyx/IOU';
import type * as OnyxCommon from '@src/types/onyx/OnyxCommon';
import type DeepValueOf from '@src/types/utils/DeepValueOf';
-import type {EmptyObject} from '@src/types/utils/EmptyObject';
import {isEmptyObject} from '@src/types/utils/EmptyObject';
import times from '@src/utils/times';
import Timing from './actions/Timing';
@@ -298,7 +297,7 @@ Onyx.connect({
const transactionThreadReportID = ReportActionUtils.getOneTransactionThreadReportID(reportID, actions[reportActions[0]]);
if (transactionThreadReportID) {
const transactionThreadReportActionsArray = Object.values(actions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionThreadReportID}`] ?? {});
- sortedReportActions = ReportActionUtils.getCombinedReportActions(reportActionsArray, transactionThreadReportActionsArray, reportID);
+ sortedReportActions = ReportActionUtils.getCombinedReportActions(sortedReportActions, transactionThreadReportID, transactionThreadReportActionsArray, reportID);
}
lastReportActions[reportID] = sortedReportActions[0];
@@ -1101,7 +1100,7 @@ function getCategoryOptionTree(options: Record | Category[], i
keyForList: searchText,
searchText,
tooltipText: optionName,
- isDisabled: isChild ? !option.enabled || option.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE : true,
+ isDisabled: isChild ? !option.enabled || option.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE : !selectedOptionsName.includes(searchText),
isSelected: isChild ? !!option.isSelected : selectedOptionsName.includes(searchText),
pendingAction: option.pendingAction,
});
@@ -1741,6 +1740,26 @@ function getUserToInviteOption({
return userToInvite;
}
+/**
+ * Check whether report has violations
+ */
+function shouldShowViolations(report: Report, betas: OnyxEntry, transactionViolations: OnyxCollection) {
+ if (!Permissions.canUseViolations(betas)) {
+ return false;
+ }
+ const {parentReportID, parentReportActionID} = report ?? {};
+ const canGetParentReport = parentReportID && parentReportActionID && allReportActions;
+ if (!canGetParentReport) {
+ return false;
+ }
+ const parentReportActions = allReportActions ? allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${parentReportID}`] ?? {} : {};
+ const parentReportAction = parentReportActions[parentReportActionID] ?? null;
+ if (!parentReportAction) {
+ return false;
+ }
+ return ReportUtils.shouldDisplayTransactionThreadViolations(report, transactionViolations, parentReportAction);
+}
+
/**
* filter options based on specific conditions
*/
@@ -1848,13 +1867,7 @@ function getOptions(
// Filter out all the reports that shouldn't be displayed
const filteredReportOptions = options.reports.filter((option) => {
const report = option.item;
-
- const {parentReportID, parentReportActionID} = report ?? {};
- const canGetParentReport = parentReportID && parentReportActionID && allReportActions;
- const parentReportActions = allReportActions ? allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${parentReportID}`] ?? {} : {};
- const parentReportAction = canGetParentReport ? parentReportActions[parentReportActionID] ?? null : null;
- const doesReportHaveViolations =
- (betas?.includes(CONST.BETAS.VIOLATIONS) && ReportUtils.doesTransactionThreadHaveViolations(report, transactionViolations, parentReportAction)) ?? false;
+ const doesReportHaveViolations = shouldShowViolations(report, betas, transactionViolations);
return ReportUtils.shouldReportBeInOptionList({
report,
@@ -2139,23 +2152,23 @@ function getShareLogOptions(options: OptionList, searchValue = '', betas: Beta[]
/**
* Build the IOUConfirmation options for showing the payee personalDetail
*/
-function getIOUConfirmationOptionsFromPayeePersonalDetail(personalDetail: PersonalDetails | EmptyObject, amountText?: string): PayeePersonalDetails {
- const formattedLogin = LocalePhoneNumber.formatPhoneNumber(personalDetail.login ?? '');
+function getIOUConfirmationOptionsFromPayeePersonalDetail(personalDetail: OnyxEntry, amountText?: string): PayeePersonalDetails {
+ const formattedLogin = LocalePhoneNumber.formatPhoneNumber(personalDetail?.login ?? '');
return {
text: PersonalDetailsUtils.getDisplayNameOrDefault(personalDetail, formattedLogin),
alternateText: formattedLogin || PersonalDetailsUtils.getDisplayNameOrDefault(personalDetail, '', false),
icons: [
{
- source: personalDetail.avatar ?? FallbackAvatar,
- name: personalDetail.login ?? '',
+ source: personalDetail?.avatar ?? FallbackAvatar,
+ name: personalDetail?.login ?? '',
type: CONST.ICON_TYPE_AVATAR,
- id: personalDetail.accountID,
+ id: personalDetail?.accountID,
},
],
descriptiveText: amountText ?? '',
- login: personalDetail.login ?? '',
- accountID: personalDetail.accountID,
- keyForList: String(personalDetail.accountID),
+ login: personalDetail?.login ?? '',
+ accountID: personalDetail?.accountID ?? -1,
+ keyForList: String(personalDetail?.accountID ?? -1),
};
}
@@ -2582,6 +2595,7 @@ export {
getFirstKeyForList,
canCreateOptimisticPersonalDetailOption,
getUserToInviteOption,
+ shouldShowViolations,
};
export type {MemberForList, CategorySection, CategoryTreeSection, Options, OptionList, SearchOption, PayeePersonalDetails, Category, Tax, TaxRatesOption, Option, OptionTree};
diff --git a/src/libs/Permissions.ts b/src/libs/Permissions.ts
index 79936d498280..fb4c99b3d465 100644
--- a/src/libs/Permissions.ts
+++ b/src/libs/Permissions.ts
@@ -52,6 +52,10 @@ function canUseWorkspaceFeeds(betas: OnyxEntry): boolean {
return !!betas?.includes(CONST.BETAS.WORKSPACE_FEEDS) || canUseAllBetas(betas);
}
+function canUseNetSuiteUSATax(betas: OnyxEntry): boolean {
+ return !!betas?.includes(CONST.BETAS.NETSUITE_USA_TAX) || canUseAllBetas(betas);
+}
+
/**
* Link previews are temporarily disabled.
*/
@@ -72,4 +76,5 @@ export default {
canUseNetSuiteIntegration,
canUseReportFieldsFeature,
canUseWorkspaceFeeds,
+ canUseNetSuiteUSATax,
};
diff --git a/src/libs/PersonalDetailsUtils.ts b/src/libs/PersonalDetailsUtils.ts
index 9a35dfc41b72..8ba468e87ed0 100644
--- a/src/libs/PersonalDetailsUtils.ts
+++ b/src/libs/PersonalDetailsUtils.ts
@@ -1,7 +1,6 @@
import {Str} from 'expensify-common';
import type {OnyxEntry, OnyxUpdate} from 'react-native-onyx';
import Onyx from 'react-native-onyx';
-import type {CurrentUserPersonalDetails} from '@components/withCurrentUserPersonalDetails';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {OnyxInputOrEntry, PersonalDetails, PersonalDetailsList, PrivatePersonalDetails} from '@src/types/onyx';
@@ -272,7 +271,7 @@ function createDisplayName(login: string, passedPersonalDetails: Pick;
Onyx.connect({
@@ -93,16 +97,16 @@ function getNumericValue(value: number | string, toLocaleDigit: (arg: string) =>
/**
* Retrieves the distance custom unit object for the given policy
*/
-function getCustomUnit(policy: OnyxEntry | EmptyObject) {
+function getCustomUnit(policy: OnyxEntry): CustomUnit | undefined {
return Object.values(policy?.customUnits ?? {}).find((unit) => unit.name === CONST.CUSTOM_UNITS.NAME_DISTANCE);
}
/**
* Retrieves custom unit rate object from the given customUnitRateID
*/
-function getCustomUnitRate(policy: OnyxEntry | EmptyObject, customUnitRateID: string): Rate | EmptyObject {
+function getCustomUnitRate(policy: OnyxEntry, customUnitRateID: string): Rate | undefined {
const distanceUnit = getCustomUnit(policy);
- return distanceUnit?.rates[customUnitRateID] ?? {};
+ return distanceUnit?.rates[customUnitRateID];
}
function getRateDisplayValue(value: number, toLocaleDigit: (arg: string) => string): string {
@@ -150,26 +154,26 @@ function isExpensifyTeam(email: string | undefined): boolean {
/**
* Checks if the current user is an admin of the policy.
*/
-const isPolicyAdmin = (policy: OnyxInputOrEntry | EmptyObject, currentUserLogin?: string): boolean =>
+const isPolicyAdmin = (policy: OnyxInputOrEntry, currentUserLogin?: string): boolean =>
(policy?.role ?? (currentUserLogin && policy?.employeeList?.[currentUserLogin]?.role)) === CONST.POLICY.ROLE.ADMIN;
/**
* Checks if the current user is an user of the policy.
*/
-const isPolicyUser = (policy: OnyxInputOrEntry | EmptyObject, currentUserLogin?: string): boolean =>
+const isPolicyUser = (policy: OnyxInputOrEntry, currentUserLogin?: string): boolean =>
(policy?.role ?? (currentUserLogin && policy?.employeeList?.[currentUserLogin]?.role)) === CONST.POLICY.ROLE.USER;
/**
* Checks if the policy is a free group policy.
*/
-const isFreeGroupPolicy = (policy: OnyxEntry | EmptyObject): boolean => policy?.type === CONST.POLICY.TYPE.FREE;
+const isFreeGroupPolicy = (policy: OnyxEntry): boolean => policy?.type === CONST.POLICY.TYPE.FREE;
const isPolicyEmployee = (policyID: string, policies: OnyxCollection): boolean => Object.values(policies ?? {}).some((policy) => policy?.id === policyID);
/**
* Checks if the current user is an owner (creator) of the policy.
*/
-const isPolicyOwner = (policy: OnyxInputOrEntry | EmptyObject, currentUserAccountID: number): boolean => policy?.ownerAccountID === currentUserAccountID;
+const isPolicyOwner = (policy: OnyxInputOrEntry, currentUserAccountID: number): boolean => policy?.ownerAccountID === currentUserAccountID;
/**
* Create an object mapping member emails to their accountIDs. Filter for members without errors if includeMemberWithErrors is false, and get the login email from the personalDetail object using the accountID.
@@ -294,7 +298,7 @@ function isPendingDeletePolicy(policy: OnyxEntry): boolean {
return policy?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE;
}
-function isPaidGroupPolicy(policy: OnyxEntry | EmptyObject): boolean {
+function isPaidGroupPolicy(policy: OnyxEntry): boolean {
return policy?.type === CONST.POLICY.TYPE.TEAM || policy?.type === CONST.POLICY.TYPE.CORPORATE;
}
@@ -311,14 +315,14 @@ function isTaxTrackingEnabled(isPolicyExpenseChat: boolean, policy: OnyxEntry | EmptyObject): boolean {
+function isInstantSubmitEnabled(policy: OnyxInputOrEntry): boolean {
return policy?.type === CONST.POLICY.TYPE.FREE || (policy?.autoReporting === true && policy?.autoReportingFrequency === CONST.POLICY.AUTO_REPORTING_FREQUENCIES.INSTANT);
}
/**
* Checks if policy's approval mode is "optional", a.k.a. "Submit & Close"
*/
-function isSubmitAndClose(policy: OnyxInputOrEntry | EmptyObject): boolean {
+function isSubmitAndClose(policy: OnyxInputOrEntry): boolean {
return policy?.approvalMode === CONST.POLICY.APPROVAL_MODE.OPTIONAL;
}
@@ -361,7 +365,7 @@ function canEditTaxRate(policy: Policy, taxID: string): boolean {
return policy.taxRates?.defaultExternalID !== taxID;
}
-function isPolicyFeatureEnabled(policy: OnyxEntry | EmptyObject, featureName: PolicyFeatureName): boolean {
+function isPolicyFeatureEnabled(policy: OnyxEntry, featureName: PolicyFeatureName): boolean {
if (featureName === CONST.POLICY.MORE_FEATURES.ARE_TAXES_ENABLED) {
return !!policy?.tax?.trackingEnabled;
}
@@ -369,7 +373,7 @@ function isPolicyFeatureEnabled(policy: OnyxEntry | EmptyObject, feature
return !!policy?.[featureName];
}
-function getApprovalWorkflow(policy: OnyxEntry | EmptyObject): ValueOf {
+function getApprovalWorkflow(policy: OnyxEntry