intlayer-editor 8.4.6 → 8.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ import { a as __toESM } from "./chunk-C0u3WHrm.js";
3
3
  import { t as require_react } from "./react-BI_C_976.js";
4
4
  import { t as require_jsx_runtime } from "./jsx-runtime-BkWmzJHO.js";
5
5
  import { t as __vitePreload } from "./preload-helper-B4JcPOPd.js";
6
- import { t as CodeDefault } from "./index-rstO1N02.js";
6
+ import { t as CodeDefault } from "./index-3RB3SZoe.js";
7
7
  //#region ../@intlayer/design-system/dist/esm/components/IDE/CodeBlockShiki.mjs
8
8
  var import_react = /* @__PURE__ */ __toESM(require_react(), 1);
9
9
  var import_jsx_runtime = require_jsx_runtime();
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-BRt2VivO.js","assets/chunk-C0u3WHrm.js","assets/markdown-BxFWgS_U.js","assets/html-CC2iD1GB.js","assets/react-BI_C_976.js","assets/CodeBlockShiki-Der7XgxP.js","assets/preload-helper-B4JcPOPd.js","assets/jsx-runtime-BkWmzJHO.js","assets/dist-B9LA40uC.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-BRt2VivO.js","assets/chunk-C0u3WHrm.js","assets/markdown-CKVmpT1j.js","assets/html-CC2iD1GB.js","assets/react-BI_C_976.js","assets/CodeBlockShiki-CBpFC0wa.js","assets/preload-helper-B4JcPOPd.js","assets/jsx-runtime-BkWmzJHO.js","assets/dist-B9LA40uC.js"])))=>i.map(i=>d[i]);
2
2
  import { a as __toESM, i as __toCommonJS, n as __esmMin, r as __exportAll, t as __commonJSMin } from "./chunk-C0u3WHrm.js";
3
3
  import { t as require_react } from "./react-BI_C_976.js";
4
4
  import { t as require_jsx_runtime } from "./jsx-runtime-BkWmzJHO.js";
@@ -9570,7 +9570,7 @@ var configuration_default = {
9570
9570
  },
9571
9571
  metadata: {
9572
9572
  "name": "Intlayer",
9573
- "version": "8.4.6",
9573
+ "version": "8.4.8",
9574
9574
  "doc": "https://intlayer.org/docs"
9575
9575
  }
9576
9576
  };
@@ -10278,7 +10278,7 @@ var _getMarkdownMetadata = null;
10278
10278
  __vitePreload(() => import("./markdown-BRt2VivO.js").then((n) => n.t).then((m) => {
10279
10279
  _getMarkdownMetadata = m.getMarkdownMetadata;
10280
10280
  }), __vite__mapDeps([0,1]));
10281
- var LazyMarkdownRendererPlugin = (0, import_react.lazy)(() => __vitePreload(() => import("./markdown-BxFWgS_U.js").then((m) => ({ default: m.MarkdownRendererPlugin })), __vite__mapDeps([2,1,0])));
10281
+ var LazyMarkdownRendererPlugin = (0, import_react.lazy)(() => __vitePreload(() => import("./markdown-CKVmpT1j.js").then((m) => ({ default: m.MarkdownRendererPlugin })), __vite__mapDeps([2,1,0])));
10282
10282
  var LazyHTMLRendererPlugin = (0, import_react.lazy)(() => __vitePreload(() => import("./html-CC2iD1GB.js").then((m) => ({ default: m.HTMLRendererPlugin })), __vite__mapDeps([3,1,4])));
10283
10283
  /** Translation plugin. Replaces node with a locale string if nodeType = Translation. */
10284
10284
  var intlayerNodePlugins = {
@@ -28355,7 +28355,7 @@ var CodeDefault = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
28355
28355
  }, `line-${index}-${line.slice(0, 10)}`)) : children })
28356
28356
  })
28357
28357
  });
28358
- var CodeBlockShiki = (0, import_react.lazy)(() => __vitePreload(() => import("./CodeBlockShiki-Der7XgxP.js").then((mod) => ({ default: mod.CodeBlockShiki })), __vite__mapDeps([5,1,6,7,4])));
28358
+ var CodeBlockShiki = (0, import_react.lazy)(() => __vitePreload(() => import("./CodeBlockShiki-CBpFC0wa.js").then((mod) => ({ default: mod.CodeBlockShiki })), __vite__mapDeps([5,1,6,7,4])));
28359
28359
  var CodeBlock = ({ className, onChange, isEditable, children, lang, isDarkMode, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28360
28360
  className: cn$2("flex w-full min-w-0 max-w-full overflow-x-auto", className),
28361
28361
  ...props,
@@ -32912,7 +32912,7 @@ var isZeroValueString = (v) => /^0[^.\s]+$/u.test(v);
32912
32912
  //#endregion
32913
32913
  //#region ../../node_modules/.bun/motion-utils@12.36.0/node_modules/motion-utils/dist/es/memo.mjs
32914
32914
  /* @__NO_SIDE_EFFECTS__ */
32915
- function memo(callback) {
32915
+ function memo$1(callback) {
32916
32916
  let result;
32917
32917
  return () => {
32918
32918
  if (result === void 0) result = callback();
@@ -34783,7 +34783,7 @@ var supportsFlags = {};
34783
34783
  //#endregion
34784
34784
  //#region ../../node_modules/.bun/motion-dom@12.38.0/node_modules/motion-dom/dist/es/utils/supports/memo.mjs
34785
34785
  function memoSupports(callback, supportsFlag) {
34786
- const memoized = /* @__PURE__ */ memo(callback);
34786
+ const memoized = /* @__PURE__ */ memo$1(callback);
34787
34787
  return () => supportsFlags[supportsFlag] ?? memoized();
34788
34788
  }
34789
34789
  //#endregion
@@ -35194,7 +35194,7 @@ var colorProperties = new Set([
35194
35194
  "borderBottomColor",
35195
35195
  "borderLeftColor"
35196
35196
  ]);
35197
- var supportsWaapi = /* @__PURE__ */ memo(() => Object.hasOwnProperty.call(Element.prototype, "animate"));
35197
+ var supportsWaapi = /* @__PURE__ */ memo$1(() => Object.hasOwnProperty.call(Element.prototype, "animate"));
35198
35198
  function supportsBrowserAnimation(options) {
35199
35199
  const { motionValue, name, repeatDelay, repeatType, damping, type, keyframes } = options;
35200
35200
  /**
@@ -42896,20 +42896,26 @@ var StrongRenderer = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("str
42896
42896
  className: "text-text",
42897
42897
  ...props
42898
42898
  });
42899
+ var MemoizedCodeBlock = (0, import_react.memo)(({ className, children, isDarkMode, ...rest }) => {
42900
+ const content = String(children ?? "").replace(/\n$/, "");
42901
+ if (!!!className) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", {
42902
+ className: "rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm",
42903
+ children: content.replace(/&(?:amp;)?#(\d+);/g, (_, code) => String.fromCharCode(parseInt(code, 10)))
42904
+ });
42905
+ const language = className?.replace(/lang(?:uage)?-/, "") || "plaintext";
42906
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Code, {
42907
+ ...rest,
42908
+ language,
42909
+ showHeader: true,
42910
+ isDarkMode,
42911
+ children: content
42912
+ });
42913
+ }, (prevProps, nextProps) => prevProps.children === nextProps.children && prevProps.className === nextProps.className && prevProps.isDarkMode === nextProps.isDarkMode);
42899
42914
  var createCodeRenderer = (isDarkMode) => {
42900
- return ({ className, children, ...rest }) => {
42901
- const content = String(children ?? "").replace(/\n$/, "");
42902
- if (!!!className) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", {
42903
- className: "rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm",
42904
- children: content
42905
- });
42906
- const language = className?.replace(/lang(?:uage)?-/, "") || "plaintext";
42907
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Code, {
42908
- ...rest,
42909
- language,
42910
- showHeader: true,
42911
- isDarkMode,
42912
- children: content
42915
+ return function CodeWrapper(props) {
42916
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MemoizedCodeBlock, {
42917
+ ...props,
42918
+ isDarkMode
42913
42919
  });
42914
42920
  };
42915
42921
  };
@@ -42943,10 +42949,7 @@ var createLinkRenderer = (locale) => {
42943
42949
  });
42944
42950
  };
42945
42951
  var PreRenderer = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: props.children });
42946
- var TableRenderer = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Table, {
42947
- isRollable: true,
42948
- ...props
42949
- });
42952
+ var TableRenderer = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Table, { ...props });
42950
42953
  var ThRenderer = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", {
42951
42954
  className: cn$2("border-neutral border-b bg-neutral/10 p-4", className),
42952
42955
  ...props
@@ -43356,6 +43359,106 @@ var renameKey = (obj, oldKey, newKey) => {
43356
43359
  return newObj;
43357
43360
  };
43358
43361
  //#endregion
43362
+ //#region ../@intlayer/design-system/dist/esm/components/ContentEditor/ContentEditorInput.mjs
43363
+ /**
43364
+ * ContentEditorInput Component
43365
+ *
43366
+ * An inline editing component for single-line text input with validation,
43367
+ * cancel/save functionality, and support for additional action buttons.
43368
+ *
43369
+ * ## Features
43370
+ * - **Inline Input Editing**: Edit single-line content with immediate feedback
43371
+ * - **Validation Support**: Optional content validation with visual feedback
43372
+ * - **Action Buttons**: Built-in save/cancel with support for additional buttons
43373
+ * - **Keyboard Shortcuts**: Enter to save, Escape to cancel
43374
+ * - **Accessibility**: Full ARIA support and keyboard navigation
43375
+ * - **State Management**: Handles editing states and validation
43376
+ *
43377
+ * ## Accessibility
43378
+ * - Proper ARIA labels and descriptions for all controls
43379
+ * - Keyboard navigation (Tab, Enter, Escape)
43380
+ * - Screen reader support for validation states
43381
+ * - Focus management and visual indicators
43382
+ *
43383
+ * @param children - Current input value
43384
+ * @param onContentChange - Callback when content is saved
43385
+ * @param disabled - Whether the editor is disabled
43386
+ * @param validate - Optional validation function
43387
+ * @param additionalButtons - Extra buttons to display
43388
+ * @param props - Additional Input component props
43389
+ */
43390
+ var ContentEditorInput$1 = ({ children, onContentChange, disabled, validate, additionalButtons, ...props }) => {
43391
+ const [newValue, setNewValue] = (0, import_react.useState)(children);
43392
+ const [resetIncrementor, setResetIncrementor] = (0, import_react.useState)(0);
43393
+ const isEdited = newValue !== children;
43394
+ const handleCancel = () => {
43395
+ setNewValue(children);
43396
+ setResetIncrementor((prev) => prev + 1);
43397
+ };
43398
+ const handleValid = () => {
43399
+ onContentChange(newValue);
43400
+ };
43401
+ const handleOnContentChange = (e) => {
43402
+ setNewValue(e.currentTarget.value);
43403
+ };
43404
+ const handleKeyDown = (e) => {
43405
+ if (e.key === "Enter" && !disabled && isValid) {
43406
+ e.preventDefault();
43407
+ handleValid();
43408
+ } else if (e.key === "Escape") {
43409
+ e.preventDefault();
43410
+ handleCancel();
43411
+ }
43412
+ };
43413
+ (0, import_react.useEffect)(() => {
43414
+ setNewValue(children);
43415
+ setResetIncrementor((prev) => prev + 1);
43416
+ }, [children]);
43417
+ const isValid = validate?.(newValue) ?? true;
43418
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
43419
+ className: "flex size-full flex-col items-center justify-between gap-2",
43420
+ role: "group",
43421
+ "aria-label": "Content editor input",
43422
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Input, {
43423
+ onChange: handleOnContentChange,
43424
+ onKeyDown: handleKeyDown,
43425
+ "aria-label": "Editable input value",
43426
+ "aria-describedby": isEdited || additionalButtons ? "content-editor-input-actions" : void 0,
43427
+ "aria-invalid": !isValid,
43428
+ variant: InputVariant.INVISIBLE,
43429
+ className: "size-full",
43430
+ defaultValue: children,
43431
+ disabled,
43432
+ ...props
43433
+ }, resetIncrementor), (isEdited || additionalButtons) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
43434
+ id: "content-editor-input-actions",
43435
+ className: "flex w-full items-center justify-end gap-2",
43436
+ role: "group",
43437
+ "aria-label": "Edit actions",
43438
+ children: [isEdited && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button, {
43439
+ Icon: Check,
43440
+ label: `Save changes${!isValid ? " (invalid content)" : ""}`,
43441
+ variant: ButtonVariant.HOVERABLE,
43442
+ color: ButtonColor.TEXT,
43443
+ size: ButtonSize.ICON_SM,
43444
+ className: "cursor-pointer hover:scale-110",
43445
+ disabled: disabled || !isValid,
43446
+ onClick: handleValid,
43447
+ "aria-describedby": !isValid ? "validation-error" : void 0
43448
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button, {
43449
+ Icon: X$1,
43450
+ label: "Cancel changes",
43451
+ variant: ButtonVariant.HOVERABLE,
43452
+ size: ButtonSize.ICON_SM,
43453
+ color: ButtonColor.TEXT,
43454
+ className: "cursor-pointer hover:scale-110",
43455
+ onClick: handleCancel,
43456
+ disabled
43457
+ })] }), additionalButtons]
43458
+ })]
43459
+ }, String(children));
43460
+ };
43461
+ //#endregion
43359
43462
  //#region ../../node_modules/.bun/@tanstack+query-core@5.91.2/node_modules/@tanstack/query-core/build/modern/subscribable.js
43360
43463
  var Subscribable = class {
43361
43464
  constructor() {
@@ -46540,8 +46643,8 @@ var getSearchAPI = (authAPIOptions = {}, intlayerConfig) => {
46540
46643
  };
46541
46644
  //#endregion
46542
46645
  //#region ../@intlayer/api/dist/esm/getIntlayerAPI/stripe.mjs
46543
- var getStripeAPI = (authAPIOptions = {}, intlayerConfig) => {
46544
- const STRIPE_API_ROUTE = `${intlayerConfig.editor.backendURL}/api/stripe`;
46646
+ var getStripeAPI = (authAPIOptions = {}, intlayerConfig = configuration_default) => {
46647
+ const STRIPE_API_ROUTE = `${intlayerConfig?.editor?.backendURL}/api/stripe`;
46545
46648
  /**
46546
46649
  * Get a pricing plan calculated for a given promotion code.
46547
46650
  * @param body - Pricing plan body.
@@ -49164,106 +49267,6 @@ var useWriteDictionary = () => {
49164
49267
  });
49165
49268
  };
49166
49269
  //#endregion
49167
- //#region ../@intlayer/design-system/dist/esm/components/ContentEditor/ContentEditorInput.mjs
49168
- /**
49169
- * ContentEditorInput Component
49170
- *
49171
- * An inline editing component for single-line text input with validation,
49172
- * cancel/save functionality, and support for additional action buttons.
49173
- *
49174
- * ## Features
49175
- * - **Inline Input Editing**: Edit single-line content with immediate feedback
49176
- * - **Validation Support**: Optional content validation with visual feedback
49177
- * - **Action Buttons**: Built-in save/cancel with support for additional buttons
49178
- * - **Keyboard Shortcuts**: Enter to save, Escape to cancel
49179
- * - **Accessibility**: Full ARIA support and keyboard navigation
49180
- * - **State Management**: Handles editing states and validation
49181
- *
49182
- * ## Accessibility
49183
- * - Proper ARIA labels and descriptions for all controls
49184
- * - Keyboard navigation (Tab, Enter, Escape)
49185
- * - Screen reader support for validation states
49186
- * - Focus management and visual indicators
49187
- *
49188
- * @param children - Current input value
49189
- * @param onContentChange - Callback when content is saved
49190
- * @param disabled - Whether the editor is disabled
49191
- * @param validate - Optional validation function
49192
- * @param additionalButtons - Extra buttons to display
49193
- * @param props - Additional Input component props
49194
- */
49195
- var ContentEditorInput$1 = ({ children, onContentChange, disabled, validate, additionalButtons, ...props }) => {
49196
- const [newValue, setNewValue] = (0, import_react.useState)(children);
49197
- const [resetIncrementor, setResetIncrementor] = (0, import_react.useState)(0);
49198
- const isEdited = newValue !== children;
49199
- const handleCancel = () => {
49200
- setNewValue(children);
49201
- setResetIncrementor((prev) => prev + 1);
49202
- };
49203
- const handleValid = () => {
49204
- onContentChange(newValue);
49205
- };
49206
- const handleOnContentChange = (e) => {
49207
- setNewValue(e.currentTarget.value);
49208
- };
49209
- const handleKeyDown = (e) => {
49210
- if (e.key === "Enter" && !disabled && isValid) {
49211
- e.preventDefault();
49212
- handleValid();
49213
- } else if (e.key === "Escape") {
49214
- e.preventDefault();
49215
- handleCancel();
49216
- }
49217
- };
49218
- (0, import_react.useEffect)(() => {
49219
- setNewValue(children);
49220
- setResetIncrementor((prev) => prev + 1);
49221
- }, [children]);
49222
- const isValid = validate?.(newValue) ?? true;
49223
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
49224
- className: "flex size-full flex-col items-center justify-between gap-2",
49225
- role: "group",
49226
- "aria-label": "Content editor input",
49227
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Input, {
49228
- onChange: handleOnContentChange,
49229
- onKeyDown: handleKeyDown,
49230
- "aria-label": "Editable input value",
49231
- "aria-describedby": isEdited || additionalButtons ? "content-editor-input-actions" : void 0,
49232
- "aria-invalid": !isValid,
49233
- variant: InputVariant.INVISIBLE,
49234
- className: "size-full",
49235
- defaultValue: children,
49236
- disabled,
49237
- ...props
49238
- }, resetIncrementor), (isEdited || additionalButtons) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
49239
- id: "content-editor-input-actions",
49240
- className: "flex w-full items-center justify-end gap-2",
49241
- role: "group",
49242
- "aria-label": "Edit actions",
49243
- children: [isEdited && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button, {
49244
- Icon: Check,
49245
- label: `Save changes${!isValid ? " (invalid content)" : ""}`,
49246
- variant: ButtonVariant.HOVERABLE,
49247
- color: ButtonColor.TEXT,
49248
- size: ButtonSize.ICON_SM,
49249
- className: "cursor-pointer hover:scale-110",
49250
- disabled: disabled || !isValid,
49251
- onClick: handleValid,
49252
- "aria-describedby": !isValid ? "validation-error" : void 0
49253
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button, {
49254
- Icon: X$1,
49255
- label: "Cancel changes",
49256
- variant: ButtonVariant.HOVERABLE,
49257
- size: ButtonSize.ICON_SM,
49258
- color: ButtonColor.TEXT,
49259
- className: "cursor-pointer hover:scale-110",
49260
- onClick: handleCancel,
49261
- disabled
49262
- })] }), additionalButtons]
49263
- })]
49264
- }, String(children));
49265
- };
49266
- //#endregion
49267
49270
  //#region ../@intlayer/design-system/dist/esm/hooks/useUser/index.mjs
49268
49271
  var useUser = () => {
49269
49272
  const { session, revalidateSession, setSession } = useAuth();
@@ -1,6 +1,6 @@
1
1
  import "./chunk-C0u3WHrm.js";
2
2
  import "./markdown-BRt2VivO.js";
3
- import { r as useMarkdownContext } from "./index-rstO1N02.js";
3
+ import { r as useMarkdownContext } from "./index-3RB3SZoe.js";
4
4
  //#region ../react-intlayer/dist/esm/markdown/MarkdownRendererPlugin.mjs
5
5
  var MarkdownRendererPlugin = (props) => {
6
6
  const { children, options, components } = props;
@@ -5,7 +5,7 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>Intlayer Editor</title>
8
- <script type="module" crossorigin src="/assets/index-rstO1N02.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-3RB3SZoe.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-C0u3WHrm.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-B4JcPOPd.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-BkWmzJHO.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intlayer-editor",
3
- "version": "8.4.6",
3
+ "version": "8.4.8",
4
4
  "private": false,
5
5
  "description": "Integrate the Intlayer visual editor into your Intlayer projects, enabling CMS-like content management with multilingual support.",
6
6
  "keywords": [
@@ -93,17 +93,17 @@
93
93
  "@fastify/formbody": "8.0.2",
94
94
  "@fastify/helmet": "13.0.2",
95
95
  "@fastify/static": "9.0.0",
96
- "@intlayer/chokidar": "8.4.6",
97
- "@intlayer/config": "8.4.6",
98
- "@intlayer/unmerged-dictionaries-entry": "8.4.6",
96
+ "@intlayer/chokidar": "8.4.8",
97
+ "@intlayer/config": "8.4.8",
98
+ "@intlayer/unmerged-dictionaries-entry": "8.4.8",
99
99
  "fastify": "5.8.2",
100
- "fastify-intlayer": "8.4.6",
100
+ "fastify-intlayer": "8.4.8",
101
101
  "mime": "4.1.0"
102
102
  },
103
103
  "devDependencies": {
104
- "@intlayer/design-system": "8.4.6",
105
- "@intlayer/editor-react": "8.4.6",
106
- "@intlayer/types": "8.4.6",
104
+ "@intlayer/design-system": "8.4.8",
105
+ "@intlayer/editor-react": "8.4.8",
106
+ "@intlayer/types": "8.4.8",
107
107
  "@tailwindcss/vite": "4.2.2",
108
108
  "@tanstack/react-query": "5.91.3",
109
109
  "@types/node": "25.5.0",
@@ -117,18 +117,18 @@
117
117
  "framer-motion": "12.38.0",
118
118
  "fuse.js": "7.1.0",
119
119
  "globals": "17.4.0",
120
- "intlayer": "8.4.6",
120
+ "intlayer": "8.4.8",
121
121
  "lucide-react": "0.577.0",
122
122
  "react": "19.2.4",
123
123
  "react-dom": "19.2.4",
124
- "react-intlayer": "8.4.6",
124
+ "react-intlayer": "8.4.8",
125
125
  "react-router-dom": "7.13.1",
126
126
  "tailwind-merge": "3.5.0",
127
127
  "tailwindcss": "4.2.2",
128
128
  "tsdown": "0.21.4",
129
129
  "typescript": "5.9.3",
130
130
  "vite": "8.0.1",
131
- "vite-intlayer": "8.4.6",
131
+ "vite-intlayer": "8.4.8",
132
132
  "vitest": "4.1.0"
133
133
  },
134
134
  "engines": {