@fluxo-dev/shell 25.3.8 โ†’ 25.4.0

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.
package/index.esm.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import React__default, { useState, useEffect, Suspense, useRef, useCallback as useCallback$1, forwardRef, createElement as createElement$2, useMemo as useMemo$1, useContext, createContext, useLayoutEffect, memo, isValidElement, cloneElement, useImperativeHandle, lazy } from 'react';
3
+ import React__default, { useState, useEffect, Suspense, useRef, useCallback as useCallback$1, forwardRef, createElement as createElement$2, useContext, useMemo as useMemo$1, createContext, useLayoutEffect, memo, isValidElement, cloneElement, useImperativeHandle, lazy } from 'react';
4
4
  import { useSelector, connect, Provider } from 'react-redux';
5
- import { Navigate, Outlet, useNavigate, useLocation, Link, useOutlet, matchPath, Route, useSearchParams, createBrowserRouter, RouterProvider } from 'react-router-dom';
6
- import { useFlxNavigate, DataCard, SessionIdContext, TabActiveContext, IconFactory, ShellConfigProvider, useShellLayout, ShellPage, NoData, ConfirmModal, CronGenerator, Datagrid, RichTextEditorInput, ErrorPage as ErrorPage$1, FlxRoutes, WaitData } from '@fluxo-dev/ui-components';
5
+ import { Navigate, Outlet, useNavigate, useLocation, Link, useOutlet, matchPath, useSearchParams, createBrowserRouter, RouterProvider } from 'react-router-dom';
6
+ import { useFlxNavigate, DataCard, SessionIdContext, TabActiveContext, IconFactory, ShellConfigProvider, useShellLayout, ShellPage, NoData, ConfirmModal, CronGenerator, Datagrid, RichTextEditorInput, ErrorPage as ErrorPage$1, WaitData } from '@fluxo-dev/ui-components';
7
7
  import { ModuleLoader } from '@fluxo-dev/shell-mfe';
8
8
  import { Text, Box, TextInput, Popover, Stack, UnstyledButton, Group, Highlight, ActionIcon, useMantineTheme, AppShell, Burger, Badge, Drawer, NavLink, Avatar, Center, Button, Divider, Modal, FocusTrap, Tabs, ScrollArea, ThemeIcon, Tooltip, Anchor, Space, useMantineColorScheme, Collapse, Menu, rem, Loader, Overlay, Grid, PasswordInput, Paper, Alert, Title, Card, ColorSwatch, FileButton, NumberInput, ColorInput, Checkbox, Switch, Select, Radio, LoadingOverlay, Chip, Image as Image$1, Table, SegmentedControl, MultiSelect, Code, Portal, useDirection, px as px$1, parseThemeColor, rgba as rgba$1, Breadcrumbs, TagsInput, Textarea, Accordion, useCombobox, Combobox, InputBase, Slider, MantineProvider } from '@mantine/core';
9
9
  import { MinimalStateViewer, RavifyProvider, JobsViewer } from '@fluxo-dev/shell-ravify';
@@ -11170,8 +11170,8 @@ const createReactComponent = (type, iconName, iconNamePascal, iconNode) => {
11170
11170
  */
11171
11171
 
11172
11172
 
11173
- const __iconNode$1B = [["path", { "d": "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 8v4", "key": "svg-1" }], ["path", { "d": "M12 16h.01", "key": "svg-2" }]];
11174
- const IconAlertCircle = createReactComponent("outline", "alert-circle", "AlertCircle", __iconNode$1B);
11173
+ const __iconNode$1H = [["path", { "d": "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 8v4", "key": "svg-1" }], ["path", { "d": "M12 16h.01", "key": "svg-2" }]];
11174
+ const IconAlertCircle = createReactComponent("outline", "alert-circle", "AlertCircle", __iconNode$1H);
11175
11175
 
11176
11176
  /**
11177
11177
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11181,8 +11181,8 @@ const IconAlertCircle = createReactComponent("outline", "alert-circle", "AlertCi
11181
11181
  */
11182
11182
 
11183
11183
 
11184
- const __iconNode$1A = [["path", { "d": "M12 9v4", "key": "svg-0" }], ["path", { "d": "M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0z", "key": "svg-1" }], ["path", { "d": "M12 16h.01", "key": "svg-2" }]];
11185
- const IconAlertTriangle = createReactComponent("outline", "alert-triangle", "AlertTriangle", __iconNode$1A);
11184
+ const __iconNode$1G = [["path", { "d": "M12.802 2.165l5.575 2.389c.48 .206 .863 .589 1.07 1.07l2.388 5.574c.22 .512 .22 1.092 0 1.604l-2.389 5.575c-.206 .48 -.589 .863 -1.07 1.07l-5.574 2.388c-.512 .22 -1.092 .22 -1.604 0l-5.575 -2.389a2.036 2.036 0 0 1 -1.07 -1.07l-2.388 -5.574a2.036 2.036 0 0 1 0 -1.604l2.389 -5.575c.206 -.48 .589 -.863 1.07 -1.07l5.574 -2.388a2.036 2.036 0 0 1 1.604 0z", "key": "svg-0" }], ["path", { "d": "M12 8v4", "key": "svg-1" }], ["path", { "d": "M12 16h.01", "key": "svg-2" }]];
11185
+ const IconAlertOctagon = createReactComponent("outline", "alert-octagon", "AlertOctagon", __iconNode$1G);
11186
11186
 
11187
11187
  /**
11188
11188
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11192,8 +11192,8 @@ const IconAlertTriangle = createReactComponent("outline", "alert-triangle", "Ale
11192
11192
  */
11193
11193
 
11194
11194
 
11195
- const __iconNode$1z = [["path", { "d": "M4 13h5", "key": "svg-0" }], ["path", { "d": "M12 16v-8h3a2 2 0 0 1 2 2v1a2 2 0 0 1 -2 2h-3", "key": "svg-1" }], ["path", { "d": "M20 8v8", "key": "svg-2" }], ["path", { "d": "M9 16v-5.5a2.5 2.5 0 0 0 -5 0v5.5", "key": "svg-3" }]];
11196
- const IconApi = createReactComponent("outline", "api", "Api", __iconNode$1z);
11195
+ const __iconNode$1F = [["path", { "d": "M12 9v4", "key": "svg-0" }], ["path", { "d": "M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0z", "key": "svg-1" }], ["path", { "d": "M12 16h.01", "key": "svg-2" }]];
11196
+ const IconAlertTriangle = createReactComponent("outline", "alert-triangle", "AlertTriangle", __iconNode$1F);
11197
11197
 
11198
11198
  /**
11199
11199
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11203,8 +11203,8 @@ const IconApi = createReactComponent("outline", "api", "Api", __iconNode$1z);
11203
11203
  */
11204
11204
 
11205
11205
 
11206
- const __iconNode$1y = [["path", { "d": "M4 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z", "key": "svg-0" }], ["path", { "d": "M4 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z", "key": "svg-1" }], ["path", { "d": "M14 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z", "key": "svg-2" }], ["path", { "d": "M14 7l6 0", "key": "svg-3" }], ["path", { "d": "M17 4l0 6", "key": "svg-4" }]];
11207
- const IconApps = createReactComponent("outline", "apps", "Apps", __iconNode$1y);
11206
+ const __iconNode$1E = [["path", { "d": "M4 13h5", "key": "svg-0" }], ["path", { "d": "M12 16v-8h3a2 2 0 0 1 2 2v1a2 2 0 0 1 -2 2h-3", "key": "svg-1" }], ["path", { "d": "M20 8v8", "key": "svg-2" }], ["path", { "d": "M9 16v-5.5a2.5 2.5 0 0 0 -5 0v5.5", "key": "svg-3" }]];
11207
+ const IconApi = createReactComponent("outline", "api", "Api", __iconNode$1E);
11208
11208
 
11209
11209
  /**
11210
11210
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11214,8 +11214,8 @@ const IconApps = createReactComponent("outline", "apps", "Apps", __iconNode$1y);
11214
11214
  */
11215
11215
 
11216
11216
 
11217
- const __iconNode$1x = [["path", { "d": "M12 5l0 14", "key": "svg-0" }], ["path", { "d": "M18 13l-6 6", "key": "svg-1" }], ["path", { "d": "M6 13l6 6", "key": "svg-2" }]];
11218
- const IconArrowDown = createReactComponent("outline", "arrow-down", "ArrowDown", __iconNode$1x);
11217
+ const __iconNode$1D = [["path", { "d": "M4 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z", "key": "svg-0" }], ["path", { "d": "M4 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z", "key": "svg-1" }], ["path", { "d": "M14 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z", "key": "svg-2" }], ["path", { "d": "M14 7l6 0", "key": "svg-3" }], ["path", { "d": "M17 4l0 6", "key": "svg-4" }]];
11218
+ const IconApps = createReactComponent("outline", "apps", "Apps", __iconNode$1D);
11219
11219
 
11220
11220
  /**
11221
11221
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11225,8 +11225,8 @@ const IconArrowDown = createReactComponent("outline", "arrow-down", "ArrowDown",
11225
11225
  */
11226
11226
 
11227
11227
 
11228
- const __iconNode$1w = [["path", { "d": "M5 12l14 0", "key": "svg-0" }], ["path", { "d": "M5 12l6 6", "key": "svg-1" }], ["path", { "d": "M5 12l6 -6", "key": "svg-2" }]];
11229
- const IconArrowLeft = createReactComponent("outline", "arrow-left", "ArrowLeft", __iconNode$1w);
11228
+ const __iconNode$1C = [["path", { "d": "M12 5l0 14", "key": "svg-0" }], ["path", { "d": "M18 13l-6 6", "key": "svg-1" }], ["path", { "d": "M6 13l6 6", "key": "svg-2" }]];
11229
+ const IconArrowDown = createReactComponent("outline", "arrow-down", "ArrowDown", __iconNode$1C);
11230
11230
 
11231
11231
  /**
11232
11232
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11236,8 +11236,8 @@ const IconArrowLeft = createReactComponent("outline", "arrow-left", "ArrowLeft",
11236
11236
  */
11237
11237
 
11238
11238
 
11239
- const __iconNode$1v = [["path", { "d": "M5 12l14 0", "key": "svg-0" }], ["path", { "d": "M13 18l6 -6", "key": "svg-1" }], ["path", { "d": "M13 6l6 6", "key": "svg-2" }]];
11240
- const IconArrowRight = createReactComponent("outline", "arrow-right", "ArrowRight", __iconNode$1v);
11239
+ const __iconNode$1B = [["path", { "d": "M5 12l14 0", "key": "svg-0" }], ["path", { "d": "M5 12l6 6", "key": "svg-1" }], ["path", { "d": "M5 12l6 -6", "key": "svg-2" }]];
11240
+ const IconArrowLeft = createReactComponent("outline", "arrow-left", "ArrowLeft", __iconNode$1B);
11241
11241
 
11242
11242
  /**
11243
11243
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11247,8 +11247,8 @@ const IconArrowRight = createReactComponent("outline", "arrow-right", "ArrowRigh
11247
11247
  */
11248
11248
 
11249
11249
 
11250
- const __iconNode$1u = [["path", { "d": "M12 5l0 14", "key": "svg-0" }], ["path", { "d": "M18 11l-6 -6", "key": "svg-1" }], ["path", { "d": "M6 11l6 -6", "key": "svg-2" }]];
11251
- const IconArrowUp = createReactComponent("outline", "arrow-up", "ArrowUp", __iconNode$1u);
11250
+ const __iconNode$1A = [["path", { "d": "M5 12l14 0", "key": "svg-0" }], ["path", { "d": "M13 18l6 -6", "key": "svg-1" }], ["path", { "d": "M13 6l6 6", "key": "svg-2" }]];
11251
+ const IconArrowRight = createReactComponent("outline", "arrow-right", "ArrowRight", __iconNode$1A);
11252
11252
 
11253
11253
  /**
11254
11254
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11258,8 +11258,8 @@ const IconArrowUp = createReactComponent("outline", "arrow-up", "ArrowUp", __ico
11258
11258
  */
11259
11259
 
11260
11260
 
11261
- const __iconNode$1t = [["path", { "d": "M12 12m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0", "key": "svg-0" }], ["path", { "d": "M16 12v1.5a2.5 2.5 0 0 0 5 0v-1.5a9 9 0 1 0 -5.5 8.28", "key": "svg-1" }]];
11262
- const IconAt = createReactComponent("outline", "at", "At", __iconNode$1t);
11261
+ const __iconNode$1z = [["path", { "d": "M12 5l0 14", "key": "svg-0" }], ["path", { "d": "M18 11l-6 -6", "key": "svg-1" }], ["path", { "d": "M6 11l6 -6", "key": "svg-2" }]];
11262
+ const IconArrowUp = createReactComponent("outline", "arrow-up", "ArrowUp", __iconNode$1z);
11263
11263
 
11264
11264
  /**
11265
11265
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11269,8 +11269,8 @@ const IconAt = createReactComponent("outline", "at", "At", __iconNode$1t);
11269
11269
  */
11270
11270
 
11271
11271
 
11272
- const __iconNode$1s = [["path", { "d": "M8 8h8v8h-8z", "key": "svg-0" }], ["path", { "d": "M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z", "key": "svg-1" }], ["path", { "d": "M16 16l3.3 3.3", "key": "svg-2" }], ["path", { "d": "M16 8l3.3 -3.3", "key": "svg-3" }], ["path", { "d": "M8 8l-3.3 -3.3", "key": "svg-4" }], ["path", { "d": "M8 16l-3.3 3.3", "key": "svg-5" }]];
11273
- const IconBoxModel = createReactComponent("outline", "box-model", "BoxModel", __iconNode$1s);
11272
+ const __iconNode$1y = [["path", { "d": "M12 12m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0", "key": "svg-0" }], ["path", { "d": "M16 12v1.5a2.5 2.5 0 0 0 5 0v-1.5a9 9 0 1 0 -5.5 8.28", "key": "svg-1" }]];
11273
+ const IconAt = createReactComponent("outline", "at", "At", __iconNode$1y);
11274
11274
 
11275
11275
  /**
11276
11276
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11280,8 +11280,8 @@ const IconBoxModel = createReactComponent("outline", "box-model", "BoxModel", __
11280
11280
  */
11281
11281
 
11282
11282
 
11283
- const __iconNode$1r = [["path", { "d": "M7 3m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z", "key": "svg-0" }], ["path", { "d": "M17 17v2a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-10a2 2 0 0 1 2 -2h2", "key": "svg-1" }]];
11284
- const IconBoxMultiple = createReactComponent("outline", "box-multiple", "BoxMultiple", __iconNode$1r);
11283
+ const __iconNode$1x = [["path", { "d": "M10 5a2 2 0 1 1 4 0a7 7 0 0 1 4 6v3a4 4 0 0 0 2 3h-16a4 4 0 0 0 2 -3v-3a7 7 0 0 1 4 -6", "key": "svg-0" }], ["path", { "d": "M9 17v1a3 3 0 0 0 6 0v-1", "key": "svg-1" }]];
11284
+ const IconBell = createReactComponent("outline", "bell", "Bell", __iconNode$1x);
11285
11285
 
11286
11286
  /**
11287
11287
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11291,8 +11291,8 @@ const IconBoxMultiple = createReactComponent("outline", "box-multiple", "BoxMult
11291
11291
  */
11292
11292
 
11293
11293
 
11294
- const __iconNode$1q = [["path", { "d": "M15.5 13a3.5 3.5 0 0 0 -3.5 3.5v1a3.5 3.5 0 0 0 7 0v-1.8", "key": "svg-0" }], ["path", { "d": "M8.5 13a3.5 3.5 0 0 1 3.5 3.5v1a3.5 3.5 0 0 1 -7 0v-1.8", "key": "svg-1" }], ["path", { "d": "M17.5 16a3.5 3.5 0 0 0 0 -7h-.5", "key": "svg-2" }], ["path", { "d": "M19 9.3v-2.8a3.5 3.5 0 0 0 -7 0", "key": "svg-3" }], ["path", { "d": "M6.5 16a3.5 3.5 0 0 1 0 -7h.5", "key": "svg-4" }], ["path", { "d": "M5 9.3v-2.8a3.5 3.5 0 0 1 7 0v10", "key": "svg-5" }]];
11295
- const IconBrain = createReactComponent("outline", "brain", "Brain", __iconNode$1q);
11294
+ const __iconNode$1w = [["path", { "d": "M8 8h8v8h-8z", "key": "svg-0" }], ["path", { "d": "M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z", "key": "svg-1" }], ["path", { "d": "M16 16l3.3 3.3", "key": "svg-2" }], ["path", { "d": "M16 8l3.3 -3.3", "key": "svg-3" }], ["path", { "d": "M8 8l-3.3 -3.3", "key": "svg-4" }], ["path", { "d": "M8 16l-3.3 3.3", "key": "svg-5" }]];
11295
+ const IconBoxModel = createReactComponent("outline", "box-model", "BoxModel", __iconNode$1w);
11296
11296
 
11297
11297
  /**
11298
11298
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11302,8 +11302,8 @@ const IconBrain = createReactComponent("outline", "brain", "Brain", __iconNode$1
11302
11302
  */
11303
11303
 
11304
11304
 
11305
- const __iconNode$1p = [["path", { "d": "M11.217 19.384a3.501 3.501 0 0 0 6.783 -1.217v-5.167l-6 -3.35", "key": "svg-0" }], ["path", { "d": "M5.214 15.014a3.501 3.501 0 0 0 4.446 5.266l4.34 -2.534v-6.946", "key": "svg-1" }], ["path", { "d": "M6 7.63c-1.391 -.236 -2.787 .395 -3.534 1.689a3.474 3.474 0 0 0 1.271 4.745l4.263 2.514l6 -3.348", "key": "svg-2" }], ["path", { "d": "M12.783 4.616a3.501 3.501 0 0 0 -6.783 1.217v5.067l6 3.45", "key": "svg-3" }], ["path", { "d": "M18.786 8.986a3.501 3.501 0 0 0 -4.446 -5.266l-4.34 2.534v6.946", "key": "svg-4" }], ["path", { "d": "M18 16.302c1.391 .236 2.787 -.395 3.534 -1.689a3.474 3.474 0 0 0 -1.271 -4.745l-4.308 -2.514l-5.955 3.42", "key": "svg-5" }]];
11306
- const IconBrandOpenai = createReactComponent("outline", "brand-openai", "BrandOpenai", __iconNode$1p);
11305
+ const __iconNode$1v = [["path", { "d": "M7 3m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z", "key": "svg-0" }], ["path", { "d": "M17 17v2a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-10a2 2 0 0 1 2 -2h2", "key": "svg-1" }]];
11306
+ const IconBoxMultiple = createReactComponent("outline", "box-multiple", "BoxMultiple", __iconNode$1v);
11307
11307
 
11308
11308
  /**
11309
11309
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11313,8 +11313,8 @@ const IconBrandOpenai = createReactComponent("outline", "brand-openai", "BrandOp
11313
11313
  */
11314
11314
 
11315
11315
 
11316
- const __iconNode$1o = [["path", { "d": "M9 9v-1a3 3 0 0 1 6 0v1", "key": "svg-0" }], ["path", { "d": "M8 9h8a6 6 0 0 1 1 3v3a5 5 0 0 1 -10 0v-3a6 6 0 0 1 1 -3", "key": "svg-1" }], ["path", { "d": "M3 13l4 0", "key": "svg-2" }], ["path", { "d": "M17 13l4 0", "key": "svg-3" }], ["path", { "d": "M12 20l0 -6", "key": "svg-4" }], ["path", { "d": "M4 19l3.35 -2", "key": "svg-5" }], ["path", { "d": "M20 19l-3.35 -2", "key": "svg-6" }], ["path", { "d": "M4 7l3.75 2.4", "key": "svg-7" }], ["path", { "d": "M20 7l-3.75 2.4", "key": "svg-8" }]];
11317
- const IconBug = createReactComponent("outline", "bug", "Bug", __iconNode$1o);
11316
+ const __iconNode$1u = [["path", { "d": "M15.5 13a3.5 3.5 0 0 0 -3.5 3.5v1a3.5 3.5 0 0 0 7 0v-1.8", "key": "svg-0" }], ["path", { "d": "M8.5 13a3.5 3.5 0 0 1 3.5 3.5v1a3.5 3.5 0 0 1 -7 0v-1.8", "key": "svg-1" }], ["path", { "d": "M17.5 16a3.5 3.5 0 0 0 0 -7h-.5", "key": "svg-2" }], ["path", { "d": "M19 9.3v-2.8a3.5 3.5 0 0 0 -7 0", "key": "svg-3" }], ["path", { "d": "M6.5 16a3.5 3.5 0 0 1 0 -7h.5", "key": "svg-4" }], ["path", { "d": "M5 9.3v-2.8a3.5 3.5 0 0 1 7 0v10", "key": "svg-5" }]];
11317
+ const IconBrain = createReactComponent("outline", "brain", "Brain", __iconNode$1u);
11318
11318
 
11319
11319
  /**
11320
11320
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11324,8 +11324,8 @@ const IconBug = createReactComponent("outline", "bug", "Bug", __iconNode$1o);
11324
11324
  */
11325
11325
 
11326
11326
 
11327
- const __iconNode$1n = [["path", { "d": "M3 21l18 0", "key": "svg-0" }], ["path", { "d": "M9 8l1 0", "key": "svg-1" }], ["path", { "d": "M9 12l1 0", "key": "svg-2" }], ["path", { "d": "M9 16l1 0", "key": "svg-3" }], ["path", { "d": "M14 8l1 0", "key": "svg-4" }], ["path", { "d": "M14 12l1 0", "key": "svg-5" }], ["path", { "d": "M14 16l1 0", "key": "svg-6" }], ["path", { "d": "M5 21v-16a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v16", "key": "svg-7" }]];
11328
- const IconBuilding = createReactComponent("outline", "building", "Building", __iconNode$1n);
11327
+ const __iconNode$1t = [["path", { "d": "M11.217 19.384a3.501 3.501 0 0 0 6.783 -1.217v-5.167l-6 -3.35", "key": "svg-0" }], ["path", { "d": "M5.214 15.014a3.501 3.501 0 0 0 4.446 5.266l4.34 -2.534v-6.946", "key": "svg-1" }], ["path", { "d": "M6 7.63c-1.391 -.236 -2.787 .395 -3.534 1.689a3.474 3.474 0 0 0 1.271 4.745l4.263 2.514l6 -3.348", "key": "svg-2" }], ["path", { "d": "M12.783 4.616a3.501 3.501 0 0 0 -6.783 1.217v5.067l6 3.45", "key": "svg-3" }], ["path", { "d": "M18.786 8.986a3.501 3.501 0 0 0 -4.446 -5.266l-4.34 2.534v6.946", "key": "svg-4" }], ["path", { "d": "M18 16.302c1.391 .236 2.787 -.395 3.534 -1.689a3.474 3.474 0 0 0 -1.271 -4.745l-4.308 -2.514l-5.955 3.42", "key": "svg-5" }]];
11328
+ const IconBrandOpenai = createReactComponent("outline", "brand-openai", "BrandOpenai", __iconNode$1t);
11329
11329
 
11330
11330
  /**
11331
11331
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11335,8 +11335,8 @@ const IconBuilding = createReactComponent("outline", "building", "Building", __i
11335
11335
  */
11336
11336
 
11337
11337
 
11338
- const __iconNode$1m = [["path", { "d": "M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z", "key": "svg-0" }], ["path", { "d": "M16 3v4", "key": "svg-1" }], ["path", { "d": "M8 3v4", "key": "svg-2" }], ["path", { "d": "M4 11h16", "key": "svg-3" }], ["path", { "d": "M11 15h1", "key": "svg-4" }], ["path", { "d": "M12 15v3", "key": "svg-5" }]];
11339
- const IconCalendar = createReactComponent("outline", "calendar", "Calendar", __iconNode$1m);
11338
+ const __iconNode$1s = [["path", { "d": "M18.364 19.364a9 9 0 1 0 -12.728 0", "key": "svg-0" }], ["path", { "d": "M15.536 16.536a5 5 0 1 0 -7.072 0", "key": "svg-1" }], ["path", { "d": "M12 13m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-2" }]];
11339
+ const IconBroadcast = createReactComponent("outline", "broadcast", "Broadcast", __iconNode$1s);
11340
11340
 
11341
11341
  /**
11342
11342
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11346,8 +11346,8 @@ const IconCalendar = createReactComponent("outline", "calendar", "Calendar", __i
11346
11346
  */
11347
11347
 
11348
11348
 
11349
- const __iconNode$1l = [["path", { "d": "M4 4h6v6h-6z", "key": "svg-0" }], ["path", { "d": "M14 4h6v6h-6z", "key": "svg-1" }], ["path", { "d": "M4 14h6v6h-6z", "key": "svg-2" }], ["path", { "d": "M17 17m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0", "key": "svg-3" }]];
11350
- const IconCategory = createReactComponent("outline", "category", "Category", __iconNode$1l);
11349
+ const __iconNode$1r = [["path", { "d": "M9 9v-1a3 3 0 0 1 6 0v1", "key": "svg-0" }], ["path", { "d": "M8 9h8a6 6 0 0 1 1 3v3a5 5 0 0 1 -10 0v-3a6 6 0 0 1 1 -3", "key": "svg-1" }], ["path", { "d": "M3 13l4 0", "key": "svg-2" }], ["path", { "d": "M17 13l4 0", "key": "svg-3" }], ["path", { "d": "M12 20l0 -6", "key": "svg-4" }], ["path", { "d": "M4 19l3.35 -2", "key": "svg-5" }], ["path", { "d": "M20 19l-3.35 -2", "key": "svg-6" }], ["path", { "d": "M4 7l3.75 2.4", "key": "svg-7" }], ["path", { "d": "M20 7l-3.75 2.4", "key": "svg-8" }]];
11350
+ const IconBug = createReactComponent("outline", "bug", "Bug", __iconNode$1r);
11351
11351
 
11352
11352
  /**
11353
11353
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11357,8 +11357,8 @@ const IconCategory = createReactComponent("outline", "category", "Category", __i
11357
11357
  */
11358
11358
 
11359
11359
 
11360
- const __iconNode$1k = [["path", { "d": "M5 12l5 5l10 -10", "key": "svg-0" }]];
11361
- const IconCheck = createReactComponent("outline", "check", "Check", __iconNode$1k);
11360
+ const __iconNode$1q = [["path", { "d": "M3 21l18 0", "key": "svg-0" }], ["path", { "d": "M9 8l1 0", "key": "svg-1" }], ["path", { "d": "M9 12l1 0", "key": "svg-2" }], ["path", { "d": "M9 16l1 0", "key": "svg-3" }], ["path", { "d": "M14 8l1 0", "key": "svg-4" }], ["path", { "d": "M14 12l1 0", "key": "svg-5" }], ["path", { "d": "M14 16l1 0", "key": "svg-6" }], ["path", { "d": "M5 21v-16a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v16", "key": "svg-7" }]];
11361
+ const IconBuilding = createReactComponent("outline", "building", "Building", __iconNode$1q);
11362
11362
 
11363
11363
  /**
11364
11364
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11368,8 +11368,8 @@ const IconCheck = createReactComponent("outline", "check", "Check", __iconNode$1
11368
11368
  */
11369
11369
 
11370
11370
 
11371
- const __iconNode$1j = [["path", { "d": "M7 12l5 5l10 -10", "key": "svg-0" }], ["path", { "d": "M2 12l5 5m5 -5l5 -5", "key": "svg-1" }]];
11372
- const IconChecks = createReactComponent("outline", "checks", "Checks", __iconNode$1j);
11371
+ const __iconNode$1p = [["path", { "d": "M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z", "key": "svg-0" }], ["path", { "d": "M16 3v4", "key": "svg-1" }], ["path", { "d": "M8 3v4", "key": "svg-2" }], ["path", { "d": "M4 11h16", "key": "svg-3" }], ["path", { "d": "M11 15h1", "key": "svg-4" }], ["path", { "d": "M12 15v3", "key": "svg-5" }]];
11372
+ const IconCalendar = createReactComponent("outline", "calendar", "Calendar", __iconNode$1p);
11373
11373
 
11374
11374
  /**
11375
11375
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11379,8 +11379,8 @@ const IconChecks = createReactComponent("outline", "checks", "Checks", __iconNod
11379
11379
  */
11380
11380
 
11381
11381
 
11382
- const __iconNode$1i = [["path", { "d": "M6 9l6 6l6 -6", "key": "svg-0" }]];
11383
- const IconChevronDown = createReactComponent("outline", "chevron-down", "ChevronDown", __iconNode$1i);
11382
+ const __iconNode$1o = [["path", { "d": "M4 4h6v6h-6z", "key": "svg-0" }], ["path", { "d": "M14 4h6v6h-6z", "key": "svg-1" }], ["path", { "d": "M4 14h6v6h-6z", "key": "svg-2" }], ["path", { "d": "M17 17m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0", "key": "svg-3" }]];
11383
+ const IconCategory = createReactComponent("outline", "category", "Category", __iconNode$1o);
11384
11384
 
11385
11385
  /**
11386
11386
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11390,8 +11390,8 @@ const IconChevronDown = createReactComponent("outline", "chevron-down", "Chevron
11390
11390
  */
11391
11391
 
11392
11392
 
11393
- const __iconNode$1h = [["path", { "d": "M15 6l-6 6l6 6", "key": "svg-0" }]];
11394
- const IconChevronLeft = createReactComponent("outline", "chevron-left", "ChevronLeft", __iconNode$1h);
11393
+ const __iconNode$1n = [["path", { "d": "M5 12l5 5l10 -10", "key": "svg-0" }]];
11394
+ const IconCheck = createReactComponent("outline", "check", "Check", __iconNode$1n);
11395
11395
 
11396
11396
  /**
11397
11397
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11401,8 +11401,8 @@ const IconChevronLeft = createReactComponent("outline", "chevron-left", "Chevron
11401
11401
  */
11402
11402
 
11403
11403
 
11404
- const __iconNode$1g = [["path", { "d": "M9 6l6 6l-6 6", "key": "svg-0" }]];
11405
- const IconChevronRight = createReactComponent("outline", "chevron-right", "ChevronRight", __iconNode$1g);
11404
+ const __iconNode$1m = [["path", { "d": "M7 12l5 5l10 -10", "key": "svg-0" }], ["path", { "d": "M2 12l5 5m5 -5l5 -5", "key": "svg-1" }]];
11405
+ const IconChecks = createReactComponent("outline", "checks", "Checks", __iconNode$1m);
11406
11406
 
11407
11407
  /**
11408
11408
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11412,8 +11412,8 @@ const IconChevronRight = createReactComponent("outline", "chevron-right", "Chevr
11412
11412
  */
11413
11413
 
11414
11414
 
11415
- const __iconNode$1f = [["path", { "d": "M6 15l6 -6l6 6", "key": "svg-0" }]];
11416
- const IconChevronUp = createReactComponent("outline", "chevron-up", "ChevronUp", __iconNode$1f);
11415
+ const __iconNode$1l = [["path", { "d": "M6 9l6 6l6 -6", "key": "svg-0" }]];
11416
+ const IconChevronDown = createReactComponent("outline", "chevron-down", "ChevronDown", __iconNode$1l);
11417
11417
 
11418
11418
  /**
11419
11419
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11423,8 +11423,8 @@ const IconChevronUp = createReactComponent("outline", "chevron-up", "ChevronUp",
11423
11423
  */
11424
11424
 
11425
11425
 
11426
- const __iconNode$1e = [["path", { "d": "M20.042 16.045a9 9 0 0 0 -12.087 -12.087m-2.318 1.677a9 9 0 1 0 12.725 12.73", "key": "svg-0" }], ["path", { "d": "M3 3l18 18", "key": "svg-1" }]];
11427
- const IconCircleOff = createReactComponent("outline", "circle-off", "CircleOff", __iconNode$1e);
11426
+ const __iconNode$1k = [["path", { "d": "M15 6l-6 6l6 6", "key": "svg-0" }]];
11427
+ const IconChevronLeft = createReactComponent("outline", "chevron-left", "ChevronLeft", __iconNode$1k);
11428
11428
 
11429
11429
  /**
11430
11430
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11434,8 +11434,8 @@ const IconCircleOff = createReactComponent("outline", "circle-off", "CircleOff",
11434
11434
  */
11435
11435
 
11436
11436
 
11437
- const __iconNode$1d = [["path", { "d": "M8 6h12", "key": "svg-0" }], ["path", { "d": "M6 12h12", "key": "svg-1" }], ["path", { "d": "M4 18h12", "key": "svg-2" }]];
11438
- const IconClearAll = createReactComponent("outline", "clear-all", "ClearAll", __iconNode$1d);
11437
+ const __iconNode$1j = [["path", { "d": "M9 6l6 6l-6 6", "key": "svg-0" }]];
11438
+ const IconChevronRight = createReactComponent("outline", "chevron-right", "ChevronRight", __iconNode$1j);
11439
11439
 
11440
11440
  /**
11441
11441
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11445,8 +11445,8 @@ const IconClearAll = createReactComponent("outline", "clear-all", "ClearAll", __
11445
11445
  */
11446
11446
 
11447
11447
 
11448
- const __iconNode$1c = [["path", { "d": "M9.58 5.548c.24 -.11 .492 -.207 .752 -.286c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.913 0 3.464 1.56 3.464 3.486c0 .957 -.383 1.824 -1.003 2.454m-2.997 1.033h-11.343c-2.572 -.004 -4.657 -2.011 -4.657 -4.487c0 -2.475 2.085 -4.482 4.657 -4.482c.13 -.582 .37 -1.128 .7 -1.62", "key": "svg-0" }], ["path", { "d": "M3 3l18 18", "key": "svg-1" }]];
11449
- const IconCloudOff = createReactComponent("outline", "cloud-off", "CloudOff", __iconNode$1c);
11448
+ const __iconNode$1i = [["path", { "d": "M6 15l6 -6l6 6", "key": "svg-0" }]];
11449
+ const IconChevronUp = createReactComponent("outline", "chevron-up", "ChevronUp", __iconNode$1i);
11450
11450
 
11451
11451
  /**
11452
11452
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11456,8 +11456,8 @@ const IconCloudOff = createReactComponent("outline", "cloud-off", "CloudOff", __
11456
11456
  */
11457
11457
 
11458
11458
 
11459
- const __iconNode$1b = [["path", { "d": "M6.657 18c-2.572 0 -4.657 -2.007 -4.657 -4.483c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.913 0 3.464 1.56 3.464 3.486c0 1.927 -1.551 3.487 -3.465 3.487h-11.878", "key": "svg-0" }]];
11460
- const IconCloud = createReactComponent("outline", "cloud", "Cloud", __iconNode$1b);
11459
+ const __iconNode$1h = [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M9 12l2 2l4 -4", "key": "svg-1" }]];
11460
+ const IconCircleCheck = createReactComponent("outline", "circle-check", "CircleCheck", __iconNode$1h);
11461
11461
 
11462
11462
  /**
11463
11463
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11467,8 +11467,8 @@ const IconCloud = createReactComponent("outline", "cloud", "Cloud", __iconNode$1
11467
11467
  */
11468
11468
 
11469
11469
 
11470
- const __iconNode$1a = [["path", { "d": "M7 8l-4 4l4 4", "key": "svg-0" }], ["path", { "d": "M17 8l4 4l-4 4", "key": "svg-1" }], ["path", { "d": "M14 4l-4 16", "key": "svg-2" }]];
11471
- const IconCode = createReactComponent("outline", "code", "Code", __iconNode$1a);
11470
+ const __iconNode$1g = [["path", { "d": "M20.042 16.045a9 9 0 0 0 -12.087 -12.087m-2.318 1.677a9 9 0 1 0 12.725 12.73", "key": "svg-0" }], ["path", { "d": "M3 3l18 18", "key": "svg-1" }]];
11471
+ const IconCircleOff = createReactComponent("outline", "circle-off", "CircleOff", __iconNode$1g);
11472
11472
 
11473
11473
  /**
11474
11474
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11478,8 +11478,8 @@ const IconCode = createReactComponent("outline", "code", "Code", __iconNode$1a);
11478
11478
  */
11479
11479
 
11480
11480
 
11481
- const __iconNode$19 = [["path", { "d": "M7 7m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z", "key": "svg-0" }], ["path", { "d": "M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1", "key": "svg-1" }]];
11482
- const IconCopy = createReactComponent("outline", "copy", "Copy", __iconNode$19);
11481
+ const __iconNode$1f = [["path", { "d": "M8 6h12", "key": "svg-0" }], ["path", { "d": "M6 12h12", "key": "svg-1" }], ["path", { "d": "M4 18h12", "key": "svg-2" }]];
11482
+ const IconClearAll = createReactComponent("outline", "clear-all", "ClearAll", __iconNode$1f);
11483
11483
 
11484
11484
  /**
11485
11485
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11489,8 +11489,8 @@ const IconCopy = createReactComponent("outline", "copy", "Copy", __iconNode$19);
11489
11489
  */
11490
11490
 
11491
11491
 
11492
- const __iconNode$18 = [["path", { "d": "M12 13m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-0" }], ["path", { "d": "M13.45 11.55l2.05 -2.05", "key": "svg-1" }], ["path", { "d": "M6.4 20a9 9 0 1 1 11.2 0z", "key": "svg-2" }]];
11493
- const IconDashboard = createReactComponent("outline", "dashboard", "Dashboard", __iconNode$18);
11492
+ const __iconNode$1e = [["path", { "d": "M9.58 5.548c.24 -.11 .492 -.207 .752 -.286c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.913 0 3.464 1.56 3.464 3.486c0 .957 -.383 1.824 -1.003 2.454m-2.997 1.033h-11.343c-2.572 -.004 -4.657 -2.011 -4.657 -4.487c0 -2.475 2.085 -4.482 4.657 -4.482c.13 -.582 .37 -1.128 .7 -1.62", "key": "svg-0" }], ["path", { "d": "M3 3l18 18", "key": "svg-1" }]];
11493
+ const IconCloudOff = createReactComponent("outline", "cloud-off", "CloudOff", __iconNode$1e);
11494
11494
 
11495
11495
  /**
11496
11496
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11500,8 +11500,8 @@ const IconDashboard = createReactComponent("outline", "dashboard", "Dashboard",
11500
11500
  */
11501
11501
 
11502
11502
 
11503
- const __iconNode$17 = [["path", { "d": "M12 6m-8 0a8 3 0 1 0 16 0a8 3 0 1 0 -16 0", "key": "svg-0" }], ["path", { "d": "M4 6v6a8 3 0 0 0 16 0v-6", "key": "svg-1" }], ["path", { "d": "M4 12v6a8 3 0 0 0 16 0v-6", "key": "svg-2" }]];
11504
- const IconDatabase = createReactComponent("outline", "database", "Database", __iconNode$17);
11503
+ const __iconNode$1d = [["path", { "d": "M6.657 18c-2.572 0 -4.657 -2.007 -4.657 -4.483c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.913 0 3.464 1.56 3.464 3.486c0 1.927 -1.551 3.487 -3.465 3.487h-11.878", "key": "svg-0" }]];
11504
+ const IconCloud = createReactComponent("outline", "cloud", "Cloud", __iconNode$1d);
11505
11505
 
11506
11506
  /**
11507
11507
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11511,8 +11511,8 @@ const IconDatabase = createReactComponent("outline", "database", "Database", __i
11511
11511
  */
11512
11512
 
11513
11513
 
11514
- const __iconNode$16 = [["path", { "d": "M6 4h10l4 4v10a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2", "key": "svg-0" }], ["path", { "d": "M12 14m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-1" }], ["path", { "d": "M14 4l0 4l-6 0l0 -4", "key": "svg-2" }]];
11515
- const IconDeviceFloppy = createReactComponent("outline", "device-floppy", "DeviceFloppy", __iconNode$16);
11514
+ const __iconNode$1c = [["path", { "d": "M7 8l-4 4l4 4", "key": "svg-0" }], ["path", { "d": "M17 8l4 4l-4 4", "key": "svg-1" }], ["path", { "d": "M14 4l-4 16", "key": "svg-2" }]];
11515
+ const IconCode = createReactComponent("outline", "code", "Code", __iconNode$1c);
11516
11516
 
11517
11517
  /**
11518
11518
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11522,8 +11522,8 @@ const IconDeviceFloppy = createReactComponent("outline", "device-floppy", "Devic
11522
11522
  */
11523
11523
 
11524
11524
 
11525
- const __iconNode$15 = [["path", { "d": "M3 19l18 0", "key": "svg-0" }], ["path", { "d": "M5 6m0 1a1 1 0 0 1 1 -1h12a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-12a1 1 0 0 1 -1 -1z", "key": "svg-1" }]];
11526
- const IconDeviceLaptop = createReactComponent("outline", "device-laptop", "DeviceLaptop", __iconNode$15);
11525
+ const __iconNode$1b = [["path", { "d": "M7 7m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z", "key": "svg-0" }], ["path", { "d": "M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1", "key": "svg-1" }]];
11526
+ const IconCopy = createReactComponent("outline", "copy", "Copy", __iconNode$1b);
11527
11527
 
11528
11528
  /**
11529
11529
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11533,8 +11533,8 @@ const IconDeviceLaptop = createReactComponent("outline", "device-laptop", "Devic
11533
11533
  */
11534
11534
 
11535
11535
 
11536
- const __iconNode$14 = [["path", { "d": "M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-0" }], ["path", { "d": "M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-1" }], ["path", { "d": "M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-2" }]];
11537
- const IconDotsVertical = createReactComponent("outline", "dots-vertical", "DotsVertical", __iconNode$14);
11536
+ const __iconNode$1a = [["path", { "d": "M12 13m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-0" }], ["path", { "d": "M13.45 11.55l2.05 -2.05", "key": "svg-1" }], ["path", { "d": "M6.4 20a9 9 0 1 1 11.2 0z", "key": "svg-2" }]];
11537
+ const IconDashboard = createReactComponent("outline", "dashboard", "Dashboard", __iconNode$1a);
11538
11538
 
11539
11539
  /**
11540
11540
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11544,8 +11544,8 @@ const IconDotsVertical = createReactComponent("outline", "dots-vertical", "DotsV
11544
11544
  */
11545
11545
 
11546
11546
 
11547
- const __iconNode$13 = [["path", { "d": "M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2", "key": "svg-0" }], ["path", { "d": "M7 11l5 5l5 -5", "key": "svg-1" }], ["path", { "d": "M12 4l0 12", "key": "svg-2" }]];
11548
- const IconDownload = createReactComponent("outline", "download", "Download", __iconNode$13);
11547
+ const __iconNode$19 = [["path", { "d": "M12 6m-8 0a8 3 0 1 0 16 0a8 3 0 1 0 -16 0", "key": "svg-0" }], ["path", { "d": "M4 6v6a8 3 0 0 0 16 0v-6", "key": "svg-1" }], ["path", { "d": "M4 12v6a8 3 0 0 0 16 0v-6", "key": "svg-2" }]];
11548
+ const IconDatabase = createReactComponent("outline", "database", "Database", __iconNode$19);
11549
11549
 
11550
11550
  /**
11551
11551
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11555,8 +11555,8 @@ const IconDownload = createReactComponent("outline", "download", "Download", __i
11555
11555
  */
11556
11556
 
11557
11557
 
11558
- const __iconNode$12 = [["path", { "d": "M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1", "key": "svg-0" }], ["path", { "d": "M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z", "key": "svg-1" }], ["path", { "d": "M16 5l3 3", "key": "svg-2" }]];
11559
- const IconEdit = createReactComponent("outline", "edit", "Edit", __iconNode$12);
11558
+ const __iconNode$18 = [["path", { "d": "M6 4h10l4 4v10a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2", "key": "svg-0" }], ["path", { "d": "M12 14m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-1" }], ["path", { "d": "M14 4l0 4l-6 0l0 -4", "key": "svg-2" }]];
11559
+ const IconDeviceFloppy = createReactComponent("outline", "device-floppy", "DeviceFloppy", __iconNode$18);
11560
11560
 
11561
11561
  /**
11562
11562
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11566,8 +11566,8 @@ const IconEdit = createReactComponent("outline", "edit", "Edit", __iconNode$12);
11566
11566
  */
11567
11567
 
11568
11568
 
11569
- const __iconNode$11 = [["path", { "d": "M12 6h-6a2 2 0 0 0 -2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-6", "key": "svg-0" }], ["path", { "d": "M11 13l9 -9", "key": "svg-1" }], ["path", { "d": "M15 4h5v5", "key": "svg-2" }]];
11570
- const IconExternalLink = createReactComponent("outline", "external-link", "ExternalLink", __iconNode$11);
11569
+ const __iconNode$17 = [["path", { "d": "M3 19l18 0", "key": "svg-0" }], ["path", { "d": "M5 6m0 1a1 1 0 0 1 1 -1h12a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-12a1 1 0 0 1 -1 -1z", "key": "svg-1" }]];
11570
+ const IconDeviceLaptop = createReactComponent("outline", "device-laptop", "DeviceLaptop", __iconNode$17);
11571
11571
 
11572
11572
  /**
11573
11573
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11577,8 +11577,8 @@ const IconExternalLink = createReactComponent("outline", "external-link", "Exter
11577
11577
  */
11578
11578
 
11579
11579
 
11580
- const __iconNode$10 = [["path", { "d": "M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0", "key": "svg-0" }], ["path", { "d": "M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6", "key": "svg-1" }]];
11581
- const IconEye = createReactComponent("outline", "eye", "Eye", __iconNode$10);
11580
+ const __iconNode$16 = [["path", { "d": "M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-0" }], ["path", { "d": "M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-1" }], ["path", { "d": "M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-2" }]];
11581
+ const IconDotsVertical = createReactComponent("outline", "dots-vertical", "DotsVertical", __iconNode$16);
11582
11582
 
11583
11583
  /**
11584
11584
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11588,8 +11588,8 @@ const IconEye = createReactComponent("outline", "eye", "Eye", __iconNode$10);
11588
11588
  */
11589
11589
 
11590
11590
 
11591
- const __iconNode$$ = [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z", "key": "svg-1" }], ["path", { "d": "M12 11l0 6", "key": "svg-2" }], ["path", { "d": "M9 14l6 0", "key": "svg-3" }]];
11592
- const IconFilePlus = createReactComponent("outline", "file-plus", "FilePlus", __iconNode$$);
11591
+ const __iconNode$15 = [["path", { "d": "M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2", "key": "svg-0" }], ["path", { "d": "M7 11l5 5l5 -5", "key": "svg-1" }], ["path", { "d": "M12 4l0 12", "key": "svg-2" }]];
11592
+ const IconDownload = createReactComponent("outline", "download", "Download", __iconNode$15);
11593
11593
 
11594
11594
  /**
11595
11595
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11599,8 +11599,8 @@ const IconFilePlus = createReactComponent("outline", "file-plus", "FilePlus", __
11599
11599
  */
11600
11600
 
11601
11601
 
11602
- const __iconNode$_ = [["path", { "d": "M17 17m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0", "key": "svg-0" }], ["path", { "d": "M17 13v4h4", "key": "svg-1" }], ["path", { "d": "M12 3v4a1 1 0 0 0 1 1h4", "key": "svg-2" }], ["path", { "d": "M11.5 21h-6.5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v2m0 3v4", "key": "svg-3" }]];
11603
- const IconFileReport = createReactComponent("outline", "file-report", "FileReport", __iconNode$_);
11602
+ const __iconNode$14 = [["path", { "d": "M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1", "key": "svg-0" }], ["path", { "d": "M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z", "key": "svg-1" }], ["path", { "d": "M16 5l3 3", "key": "svg-2" }]];
11603
+ const IconEdit = createReactComponent("outline", "edit", "Edit", __iconNode$14);
11604
11604
 
11605
11605
  /**
11606
11606
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11610,8 +11610,8 @@ const IconFileReport = createReactComponent("outline", "file-report", "FileRepor
11610
11610
  */
11611
11611
 
11612
11612
 
11613
- const __iconNode$Z = [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M12 21h-5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v4.5", "key": "svg-1" }], ["path", { "d": "M16.5 17.5m-2.5 0a2.5 2.5 0 1 0 5 0a2.5 2.5 0 1 0 -5 0", "key": "svg-2" }], ["path", { "d": "M18.5 19.5l2.5 2.5", "key": "svg-3" }]];
11614
- const IconFileSearch = createReactComponent("outline", "file-search", "FileSearch", __iconNode$Z);
11613
+ const __iconNode$13 = [["path", { "d": "M12 6h-6a2 2 0 0 0 -2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-6", "key": "svg-0" }], ["path", { "d": "M11 13l9 -9", "key": "svg-1" }], ["path", { "d": "M15 4h5v5", "key": "svg-2" }]];
11614
+ const IconExternalLink = createReactComponent("outline", "external-link", "ExternalLink", __iconNode$13);
11615
11615
 
11616
11616
  /**
11617
11617
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11621,8 +11621,8 @@ const IconFileSearch = createReactComponent("outline", "file-search", "FileSearc
11621
11621
  */
11622
11622
 
11623
11623
 
11624
- const __iconNode$Y = [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z", "key": "svg-1" }]];
11625
- const IconFile = createReactComponent("outline", "file", "File", __iconNode$Y);
11624
+ const __iconNode$12 = [["path", { "d": "M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0", "key": "svg-0" }], ["path", { "d": "M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6", "key": "svg-1" }]];
11625
+ const IconEye = createReactComponent("outline", "eye", "Eye", __iconNode$12);
11626
11626
 
11627
11627
  /**
11628
11628
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11632,8 +11632,8 @@ const IconFile = createReactComponent("outline", "file", "File", __iconNode$Y);
11632
11632
  */
11633
11633
 
11634
11634
 
11635
- const __iconNode$X = [["path", { "d": "M12 19h-7a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2h4l3 3h7a2 2 0 0 1 2 2v3.5", "key": "svg-0" }], ["path", { "d": "M16 19h6", "key": "svg-1" }], ["path", { "d": "M19 16v6", "key": "svg-2" }]];
11636
- const IconFolderPlus = createReactComponent("outline", "folder-plus", "FolderPlus", __iconNode$X);
11635
+ const __iconNode$11 = [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z", "key": "svg-1" }], ["path", { "d": "M12 11l0 6", "key": "svg-2" }], ["path", { "d": "M9 14l6 0", "key": "svg-3" }]];
11636
+ const IconFilePlus = createReactComponent("outline", "file-plus", "FilePlus", __iconNode$11);
11637
11637
 
11638
11638
  /**
11639
11639
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11643,8 +11643,8 @@ const IconFolderPlus = createReactComponent("outline", "folder-plus", "FolderPlu
11643
11643
  */
11644
11644
 
11645
11645
 
11646
- const __iconNode$W = [["path", { "d": "M12 19h-7a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2h4l3 3h7a2 2 0 0 1 2 2v3.5", "key": "svg-0" }], ["path", { "d": "M19 22v-6", "key": "svg-1" }], ["path", { "d": "M22 19l-3 -3l-3 3", "key": "svg-2" }]];
11647
- const IconFolderUp = createReactComponent("outline", "folder-up", "FolderUp", __iconNode$W);
11646
+ const __iconNode$10 = [["path", { "d": "M17 17m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0", "key": "svg-0" }], ["path", { "d": "M17 13v4h4", "key": "svg-1" }], ["path", { "d": "M12 3v4a1 1 0 0 0 1 1h4", "key": "svg-2" }], ["path", { "d": "M11.5 21h-6.5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v2m0 3v4", "key": "svg-3" }]];
11647
+ const IconFileReport = createReactComponent("outline", "file-report", "FileReport", __iconNode$10);
11648
11648
 
11649
11649
  /**
11650
11650
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11654,8 +11654,8 @@ const IconFolderUp = createReactComponent("outline", "folder-up", "FolderUp", __
11654
11654
  */
11655
11655
 
11656
11656
 
11657
- const __iconNode$V = [["path", { "d": "M13.5 19h-8.5a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2h4l3 3h7a2 2 0 0 1 2 2v4", "key": "svg-0" }], ["path", { "d": "M22 22l-5 -5", "key": "svg-1" }], ["path", { "d": "M17 22l5 -5", "key": "svg-2" }]];
11658
- const IconFolderX = createReactComponent("outline", "folder-x", "FolderX", __iconNode$V);
11657
+ const __iconNode$$ = [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M12 21h-5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v4.5", "key": "svg-1" }], ["path", { "d": "M16.5 17.5m-2.5 0a2.5 2.5 0 1 0 5 0a2.5 2.5 0 1 0 -5 0", "key": "svg-2" }], ["path", { "d": "M18.5 19.5l2.5 2.5", "key": "svg-3" }]];
11658
+ const IconFileSearch = createReactComponent("outline", "file-search", "FileSearch", __iconNode$$);
11659
11659
 
11660
11660
  /**
11661
11661
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11665,8 +11665,8 @@ const IconFolderX = createReactComponent("outline", "folder-x", "FolderX", __ico
11665
11665
  */
11666
11666
 
11667
11667
 
11668
- const __iconNode$U = [["path", { "d": "M5 4h4l3 3h7a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2", "key": "svg-0" }]];
11669
- const IconFolder = createReactComponent("outline", "folder", "Folder", __iconNode$U);
11668
+ const __iconNode$_ = [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z", "key": "svg-1" }]];
11669
+ const IconFile = createReactComponent("outline", "file", "File", __iconNode$_);
11670
11670
 
11671
11671
  /**
11672
11672
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11676,8 +11676,8 @@ const IconFolder = createReactComponent("outline", "folder", "Folder", __iconNod
11676
11676
  */
11677
11677
 
11678
11678
 
11679
- const __iconNode$T = [["path", { "d": "M7 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-0" }], ["path", { "d": "M7 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-1" }], ["path", { "d": "M17 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-2" }], ["path", { "d": "M7 8l0 8", "key": "svg-3" }], ["path", { "d": "M7 8a4 4 0 0 0 4 4h4", "key": "svg-4" }]];
11680
- const IconGitMerge = createReactComponent("outline", "git-merge", "GitMerge", __iconNode$T);
11679
+ const __iconNode$Z = [["path", { "d": "M12 19h-7a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2h4l3 3h7a2 2 0 0 1 2 2v3.5", "key": "svg-0" }], ["path", { "d": "M16 19h6", "key": "svg-1" }], ["path", { "d": "M19 16v6", "key": "svg-2" }]];
11680
+ const IconFolderPlus = createReactComponent("outline", "folder-plus", "FolderPlus", __iconNode$Z);
11681
11681
 
11682
11682
  /**
11683
11683
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11687,8 +11687,8 @@ const IconGitMerge = createReactComponent("outline", "git-merge", "GitMerge", __
11687
11687
  */
11688
11688
 
11689
11689
 
11690
- const __iconNode$S = [["path", { "d": "M5 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-0" }], ["path", { "d": "M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-1" }], ["path", { "d": "M19 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-2" }], ["path", { "d": "M5 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-3" }], ["path", { "d": "M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-4" }], ["path", { "d": "M19 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-5" }], ["path", { "d": "M5 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-6" }], ["path", { "d": "M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-7" }], ["path", { "d": "M19 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-8" }]];
11691
- const IconGridDots = createReactComponent("outline", "grid-dots", "GridDots", __iconNode$S);
11690
+ const __iconNode$Y = [["path", { "d": "M12 19h-7a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2h4l3 3h7a2 2 0 0 1 2 2v3.5", "key": "svg-0" }], ["path", { "d": "M19 22v-6", "key": "svg-1" }], ["path", { "d": "M22 19l-3 -3l-3 3", "key": "svg-2" }]];
11691
+ const IconFolderUp = createReactComponent("outline", "folder-up", "FolderUp", __iconNode$Y);
11692
11692
 
11693
11693
  /**
11694
11694
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11698,8 +11698,8 @@ const IconGridDots = createReactComponent("outline", "grid-dots", "GridDots", __
11698
11698
  */
11699
11699
 
11700
11700
 
11701
- const __iconNode$R = [["path", { "d": "M9 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-0" }], ["path", { "d": "M9 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-1" }], ["path", { "d": "M9 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-2" }], ["path", { "d": "M15 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-3" }], ["path", { "d": "M15 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-4" }], ["path", { "d": "M15 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-5" }]];
11702
- const IconGripVertical = createReactComponent("outline", "grip-vertical", "GripVertical", __iconNode$R);
11701
+ const __iconNode$X = [["path", { "d": "M13.5 19h-8.5a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2h4l3 3h7a2 2 0 0 1 2 2v4", "key": "svg-0" }], ["path", { "d": "M22 22l-5 -5", "key": "svg-1" }], ["path", { "d": "M17 22l5 -5", "key": "svg-2" }]];
11702
+ const IconFolderX = createReactComponent("outline", "folder-x", "FolderX", __iconNode$X);
11703
11703
 
11704
11704
  /**
11705
11705
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11709,8 +11709,8 @@ const IconGripVertical = createReactComponent("outline", "grip-vertical", "GripV
11709
11709
  */
11710
11710
 
11711
11711
 
11712
- const __iconNode$Q = [["path", { "d": "M19 14a2 2 0 1 0 0 4a2 2 0 0 0 0 -4z", "key": "svg-0" }], ["path", { "d": "M21 12a2 2 0 1 0 -4 0v4", "key": "svg-1" }], ["path", { "d": "M4 6v12", "key": "svg-2" }], ["path", { "d": "M12 6v12", "key": "svg-3" }], ["path", { "d": "M11 18h2", "key": "svg-4" }], ["path", { "d": "M3 18h2", "key": "svg-5" }], ["path", { "d": "M4 12h8", "key": "svg-6" }], ["path", { "d": "M3 6h2", "key": "svg-7" }], ["path", { "d": "M11 6h2", "key": "svg-8" }]];
11713
- const IconH6 = createReactComponent("outline", "h-6", "H6", __iconNode$Q);
11712
+ const __iconNode$W = [["path", { "d": "M5 4h4l3 3h7a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2", "key": "svg-0" }]];
11713
+ const IconFolder = createReactComponent("outline", "folder", "Folder", __iconNode$W);
11714
11714
 
11715
11715
  /**
11716
11716
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11720,8 +11720,8 @@ const IconH6 = createReactComponent("outline", "h-6", "H6", __iconNode$Q);
11720
11720
  */
11721
11721
 
11722
11722
 
11723
- const __iconNode$P = [["path", { "d": "M5 12l-2 0l9 -9l9 9l-2 0", "key": "svg-0" }], ["path", { "d": "M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7", "key": "svg-1" }], ["path", { "d": "M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6", "key": "svg-2" }]];
11724
- const IconHome = createReactComponent("outline", "home", "Home", __iconNode$P);
11723
+ const __iconNode$V = [["path", { "d": "M7 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-0" }], ["path", { "d": "M7 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-1" }], ["path", { "d": "M17 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-2" }], ["path", { "d": "M7 8l0 8", "key": "svg-3" }], ["path", { "d": "M7 8a4 4 0 0 0 4 4h4", "key": "svg-4" }]];
11724
+ const IconGitMerge = createReactComponent("outline", "git-merge", "GitMerge", __iconNode$V);
11725
11725
 
11726
11726
  /**
11727
11727
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11731,8 +11731,8 @@ const IconHome = createReactComponent("outline", "home", "Home", __iconNode$P);
11731
11731
  */
11732
11732
 
11733
11733
 
11734
- const __iconNode$O = [["path", { "d": "M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v10a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z", "key": "svg-0" }], ["path", { "d": "M9 10m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-1" }], ["path", { "d": "M15 8l2 0", "key": "svg-2" }], ["path", { "d": "M15 12l2 0", "key": "svg-3" }], ["path", { "d": "M7 16l10 0", "key": "svg-4" }]];
11735
- const IconId = createReactComponent("outline", "id", "Id", __iconNode$O);
11734
+ const __iconNode$U = [["path", { "d": "M5 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-0" }], ["path", { "d": "M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-1" }], ["path", { "d": "M19 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-2" }], ["path", { "d": "M5 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-3" }], ["path", { "d": "M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-4" }], ["path", { "d": "M19 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-5" }], ["path", { "d": "M5 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-6" }], ["path", { "d": "M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-7" }], ["path", { "d": "M19 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-8" }]];
11735
+ const IconGridDots = createReactComponent("outline", "grid-dots", "GridDots", __iconNode$U);
11736
11736
 
11737
11737
  /**
11738
11738
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11742,8 +11742,8 @@ const IconId = createReactComponent("outline", "id", "Id", __iconNode$O);
11742
11742
  */
11743
11743
 
11744
11744
 
11745
- const __iconNode$N = [["path", { "d": "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 9h.01", "key": "svg-1" }], ["path", { "d": "M11 12h1v4h1", "key": "svg-2" }]];
11746
- const IconInfoCircle = createReactComponent("outline", "info-circle", "InfoCircle", __iconNode$N);
11745
+ const __iconNode$T = [["path", { "d": "M9 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-0" }], ["path", { "d": "M9 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-1" }], ["path", { "d": "M9 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-2" }], ["path", { "d": "M15 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-3" }], ["path", { "d": "M15 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-4" }], ["path", { "d": "M15 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-5" }]];
11746
+ const IconGripVertical = createReactComponent("outline", "grip-vertical", "GripVertical", __iconNode$T);
11747
11747
 
11748
11748
  /**
11749
11749
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11753,8 +11753,8 @@ const IconInfoCircle = createReactComponent("outline", "info-circle", "InfoCircl
11753
11753
  */
11754
11754
 
11755
11755
 
11756
- const __iconNode$M = [["path", { "d": "M12 9h.01", "key": "svg-0" }], ["path", { "d": "M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14z", "key": "svg-1" }], ["path", { "d": "M11 12h1v4h1", "key": "svg-2" }]];
11757
- const IconInfoSquare = createReactComponent("outline", "info-square", "InfoSquare", __iconNode$M);
11756
+ const __iconNode$S = [["path", { "d": "M19 14a2 2 0 1 0 0 4a2 2 0 0 0 0 -4z", "key": "svg-0" }], ["path", { "d": "M21 12a2 2 0 1 0 -4 0v4", "key": "svg-1" }], ["path", { "d": "M4 6v12", "key": "svg-2" }], ["path", { "d": "M12 6v12", "key": "svg-3" }], ["path", { "d": "M11 18h2", "key": "svg-4" }], ["path", { "d": "M3 18h2", "key": "svg-5" }], ["path", { "d": "M4 12h8", "key": "svg-6" }], ["path", { "d": "M3 6h2", "key": "svg-7" }], ["path", { "d": "M11 6h2", "key": "svg-8" }]];
11757
+ const IconH6 = createReactComponent("outline", "h-6", "H6", __iconNode$S);
11758
11758
 
11759
11759
  /**
11760
11760
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11764,8 +11764,8 @@ const IconInfoSquare = createReactComponent("outline", "info-square", "InfoSquar
11764
11764
  */
11765
11765
 
11766
11766
 
11767
- const __iconNode$L = [["path", { "d": "M16.555 3.843l3.602 3.602a2.877 2.877 0 0 1 0 4.069l-2.643 2.643a2.877 2.877 0 0 1 -4.069 0l-.301 -.301l-6.558 6.558a2 2 0 0 1 -1.239 .578l-.175 .008h-1.172a1 1 0 0 1 -.993 -.883l-.007 -.117v-1.172a2 2 0 0 1 .467 -1.284l.119 -.13l.414 -.414h2v-2h2v-2l2.144 -2.144l-.301 -.301a2.877 2.877 0 0 1 0 -4.069l2.643 -2.643a2.877 2.877 0 0 1 4.069 0z", "key": "svg-0" }], ["path", { "d": "M15 9h.01", "key": "svg-1" }]];
11768
- const IconKey = createReactComponent("outline", "key", "Key", __iconNode$L);
11767
+ const __iconNode$R = [["path", { "d": "M5 12l-2 0l9 -9l9 9l-2 0", "key": "svg-0" }], ["path", { "d": "M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7", "key": "svg-1" }], ["path", { "d": "M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6", "key": "svg-2" }]];
11768
+ const IconHome = createReactComponent("outline", "home", "Home", __iconNode$R);
11769
11769
 
11770
11770
  /**
11771
11771
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11775,8 +11775,8 @@ const IconKey = createReactComponent("outline", "key", "Key", __iconNode$L);
11775
11775
  */
11776
11776
 
11777
11777
 
11778
- const __iconNode$K = [["path", { "d": "M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v2a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z", "key": "svg-0" }], ["path", { "d": "M4 14m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v2a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z", "key": "svg-1" }]];
11779
- const IconLayoutList = createReactComponent("outline", "layout-list", "LayoutList", __iconNode$K);
11778
+ const __iconNode$Q = [["path", { "d": "M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v10a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z", "key": "svg-0" }], ["path", { "d": "M9 10m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-1" }], ["path", { "d": "M15 8l2 0", "key": "svg-2" }], ["path", { "d": "M15 12l2 0", "key": "svg-3" }], ["path", { "d": "M7 16l10 0", "key": "svg-4" }]];
11779
+ const IconId = createReactComponent("outline", "id", "Id", __iconNode$Q);
11780
11780
 
11781
11781
  /**
11782
11782
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11786,8 +11786,8 @@ const IconLayoutList = createReactComponent("outline", "layout-list", "LayoutLis
11786
11786
  */
11787
11787
 
11788
11788
 
11789
- const __iconNode$J = [["path", { "d": "M9 15l6 -6", "key": "svg-0" }], ["path", { "d": "M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464", "key": "svg-1" }], ["path", { "d": "M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463", "key": "svg-2" }]];
11790
- const IconLink = createReactComponent("outline", "link", "Link", __iconNode$J);
11789
+ const __iconNode$P = [["path", { "d": "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 9h.01", "key": "svg-1" }], ["path", { "d": "M11 12h1v4h1", "key": "svg-2" }]];
11790
+ const IconInfoCircle = createReactComponent("outline", "info-circle", "InfoCircle", __iconNode$P);
11791
11791
 
11792
11792
  /**
11793
11793
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11797,8 +11797,8 @@ const IconLink = createReactComponent("outline", "link", "Link", __iconNode$J);
11797
11797
  */
11798
11798
 
11799
11799
 
11800
- const __iconNode$I = [["path", { "d": "M4 8v-2c0 -.554 .225 -1.055 .588 -1.417", "key": "svg-0" }], ["path", { "d": "M4 16v2a2 2 0 0 0 2 2h2", "key": "svg-1" }], ["path", { "d": "M16 4h2a2 2 0 0 1 2 2v2", "key": "svg-2" }], ["path", { "d": "M16 20h2c.55 0 1.05 -.222 1.41 -.582", "key": "svg-3" }], ["path", { "d": "M15 11a1 1 0 0 1 1 1m-.29 3.704a1 1 0 0 1 -.71 .296h-6a1 1 0 0 1 -1 -1v-3a1 1 0 0 1 1 -1h2", "key": "svg-4" }], ["path", { "d": "M10 11v-1m1.182 -2.826a2 2 0 0 1 2.818 1.826v1", "key": "svg-5" }], ["path", { "d": "M3 3l18 18", "key": "svg-6" }]];
11801
- const IconLockAccessOff = createReactComponent("outline", "lock-access-off", "LockAccessOff", __iconNode$I);
11800
+ const __iconNode$O = [["path", { "d": "M12 9h.01", "key": "svg-0" }], ["path", { "d": "M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14z", "key": "svg-1" }], ["path", { "d": "M11 12h1v4h1", "key": "svg-2" }]];
11801
+ const IconInfoSquare = createReactComponent("outline", "info-square", "InfoSquare", __iconNode$O);
11802
11802
 
11803
11803
  /**
11804
11804
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11808,8 +11808,8 @@ const IconLockAccessOff = createReactComponent("outline", "lock-access-off", "Lo
11808
11808
  */
11809
11809
 
11810
11810
 
11811
- const __iconNode$H = [["path", { "d": "M4 8v-2a2 2 0 0 1 2 -2h2", "key": "svg-0" }], ["path", { "d": "M4 16v2a2 2 0 0 0 2 2h2", "key": "svg-1" }], ["path", { "d": "M16 4h2a2 2 0 0 1 2 2v2", "key": "svg-2" }], ["path", { "d": "M16 20h2a2 2 0 0 0 2 -2v-2", "key": "svg-3" }], ["path", { "d": "M8 11m0 1a1 1 0 0 1 1 -1h6a1 1 0 0 1 1 1v3a1 1 0 0 1 -1 1h-6a1 1 0 0 1 -1 -1z", "key": "svg-4" }], ["path", { "d": "M10 11v-2a2 2 0 1 1 4 0v2", "key": "svg-5" }]];
11812
- const IconLockAccess = createReactComponent("outline", "lock-access", "LockAccess", __iconNode$H);
11811
+ const __iconNode$N = [["path", { "d": "M16.555 3.843l3.602 3.602a2.877 2.877 0 0 1 0 4.069l-2.643 2.643a2.877 2.877 0 0 1 -4.069 0l-.301 -.301l-6.558 6.558a2 2 0 0 1 -1.239 .578l-.175 .008h-1.172a1 1 0 0 1 -.993 -.883l-.007 -.117v-1.172a2 2 0 0 1 .467 -1.284l.119 -.13l.414 -.414h2v-2h2v-2l2.144 -2.144l-.301 -.301a2.877 2.877 0 0 1 0 -4.069l2.643 -2.643a2.877 2.877 0 0 1 4.069 0z", "key": "svg-0" }], ["path", { "d": "M15 9h.01", "key": "svg-1" }]];
11812
+ const IconKey = createReactComponent("outline", "key", "Key", __iconNode$N);
11813
11813
 
11814
11814
  /**
11815
11815
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11819,8 +11819,8 @@ const IconLockAccess = createReactComponent("outline", "lock-access", "LockAcces
11819
11819
  */
11820
11820
 
11821
11821
 
11822
- const __iconNode$G = [["path", { "d": "M11.5 21h-4.5a2 2 0 0 1 -2 -2v-6a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v.5", "key": "svg-0" }], ["path", { "d": "M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0", "key": "svg-1" }], ["path", { "d": "M8 11v-4a4 4 0 1 1 8 0v4", "key": "svg-2" }], ["path", { "d": "M15 19l2 2l4 -4", "key": "svg-3" }]];
11823
- const IconLockCheck = createReactComponent("outline", "lock-check", "LockCheck", __iconNode$G);
11822
+ const __iconNode$M = [["path", { "d": "M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z", "key": "svg-0" }], ["path", { "d": "M4 15l16 0", "key": "svg-1" }]];
11823
+ const IconLayoutBottombar = createReactComponent("outline", "layout-bottombar", "LayoutBottombar", __iconNode$M);
11824
11824
 
11825
11825
  /**
11826
11826
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11830,8 +11830,8 @@ const IconLockCheck = createReactComponent("outline", "lock-check", "LockCheck",
11830
11830
  */
11831
11831
 
11832
11832
 
11833
- const __iconNode$F = [["path", { "d": "M5 11m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z", "key": "svg-0" }], ["path", { "d": "M12 16m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-1" }], ["path", { "d": "M8 11v-5a4 4 0 0 1 8 0", "key": "svg-2" }]];
11834
- const IconLockOpen = createReactComponent("outline", "lock-open", "LockOpen", __iconNode$F);
11833
+ const __iconNode$L = [["path", { "d": "M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v2a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z", "key": "svg-0" }], ["path", { "d": "M4 14m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v2a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z", "key": "svg-1" }]];
11834
+ const IconLayoutList = createReactComponent("outline", "layout-list", "LayoutList", __iconNode$L);
11835
11835
 
11836
11836
  /**
11837
11837
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11841,8 +11841,8 @@ const IconLockOpen = createReactComponent("outline", "lock-open", "LockOpen", __
11841
11841
  */
11842
11842
 
11843
11843
 
11844
- const __iconNode$E = [["path", { "d": "M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6z", "key": "svg-0" }], ["path", { "d": "M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0", "key": "svg-1" }], ["path", { "d": "M8 11v-4a4 4 0 1 1 8 0v4", "key": "svg-2" }]];
11845
- const IconLock = createReactComponent("outline", "lock", "Lock", __iconNode$E);
11844
+ const __iconNode$K = [["path", { "d": "M9 15l6 -6", "key": "svg-0" }], ["path", { "d": "M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464", "key": "svg-1" }], ["path", { "d": "M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463", "key": "svg-2" }]];
11845
+ const IconLink = createReactComponent("outline", "link", "Link", __iconNode$K);
11846
11846
 
11847
11847
  /**
11848
11848
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11852,8 +11852,8 @@ const IconLock = createReactComponent("outline", "lock", "Lock", __iconNode$E);
11852
11852
  */
11853
11853
 
11854
11854
 
11855
- const __iconNode$D = [["path", { "d": "M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2", "key": "svg-0" }], ["path", { "d": "M9 12h12l-3 -3", "key": "svg-1" }], ["path", { "d": "M18 15l3 -3", "key": "svg-2" }]];
11856
- const IconLogout = createReactComponent("outline", "logout", "Logout", __iconNode$D);
11855
+ const __iconNode$J = [["path", { "d": "M4 8v-2c0 -.554 .225 -1.055 .588 -1.417", "key": "svg-0" }], ["path", { "d": "M4 16v2a2 2 0 0 0 2 2h2", "key": "svg-1" }], ["path", { "d": "M16 4h2a2 2 0 0 1 2 2v2", "key": "svg-2" }], ["path", { "d": "M16 20h2c.55 0 1.05 -.222 1.41 -.582", "key": "svg-3" }], ["path", { "d": "M15 11a1 1 0 0 1 1 1m-.29 3.704a1 1 0 0 1 -.71 .296h-6a1 1 0 0 1 -1 -1v-3a1 1 0 0 1 1 -1h2", "key": "svg-4" }], ["path", { "d": "M10 11v-1m1.182 -2.826a2 2 0 0 1 2.818 1.826v1", "key": "svg-5" }], ["path", { "d": "M3 3l18 18", "key": "svg-6" }]];
11856
+ const IconLockAccessOff = createReactComponent("outline", "lock-access-off", "LockAccessOff", __iconNode$J);
11857
11857
 
11858
11858
  /**
11859
11859
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11863,8 +11863,8 @@ const IconLogout = createReactComponent("outline", "logout", "Logout", __iconNod
11863
11863
  */
11864
11864
 
11865
11865
 
11866
- const __iconNode$C = [["path", { "d": "M11 19h-6a2 2 0 0 1 -2 -2v-10a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v6", "key": "svg-0" }], ["path", { "d": "M3 7l9 6l9 -6", "key": "svg-1" }], ["path", { "d": "M20 21l2 -2l-2 -2", "key": "svg-2" }], ["path", { "d": "M17 17l-2 2l2 2", "key": "svg-3" }]];
11867
- const IconMailCode = createReactComponent("outline", "mail-code", "MailCode", __iconNode$C);
11866
+ const __iconNode$I = [["path", { "d": "M4 8v-2a2 2 0 0 1 2 -2h2", "key": "svg-0" }], ["path", { "d": "M4 16v2a2 2 0 0 0 2 2h2", "key": "svg-1" }], ["path", { "d": "M16 4h2a2 2 0 0 1 2 2v2", "key": "svg-2" }], ["path", { "d": "M16 20h2a2 2 0 0 0 2 -2v-2", "key": "svg-3" }], ["path", { "d": "M8 11m0 1a1 1 0 0 1 1 -1h6a1 1 0 0 1 1 1v3a1 1 0 0 1 -1 1h-6a1 1 0 0 1 -1 -1z", "key": "svg-4" }], ["path", { "d": "M10 11v-2a2 2 0 1 1 4 0v2", "key": "svg-5" }]];
11867
+ const IconLockAccess = createReactComponent("outline", "lock-access", "LockAccess", __iconNode$I);
11868
11868
 
11869
11869
  /**
11870
11870
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11874,8 +11874,8 @@ const IconMailCode = createReactComponent("outline", "mail-code", "MailCode", __
11874
11874
  */
11875
11875
 
11876
11876
 
11877
- const __iconNode$B = [["path", { "d": "M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10z", "key": "svg-0" }], ["path", { "d": "M3 7l9 6l9 -6", "key": "svg-1" }]];
11878
- const IconMail = createReactComponent("outline", "mail", "Mail", __iconNode$B);
11877
+ const __iconNode$H = [["path", { "d": "M11.5 21h-4.5a2 2 0 0 1 -2 -2v-6a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v.5", "key": "svg-0" }], ["path", { "d": "M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0", "key": "svg-1" }], ["path", { "d": "M8 11v-4a4 4 0 1 1 8 0v4", "key": "svg-2" }], ["path", { "d": "M15 19l2 2l4 -4", "key": "svg-3" }]];
11878
+ const IconLockCheck = createReactComponent("outline", "lock-check", "LockCheck", __iconNode$H);
11879
11879
 
11880
11880
  /**
11881
11881
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11885,8 +11885,8 @@ const IconMail = createReactComponent("outline", "mail", "Mail", __iconNode$B);
11885
11885
  */
11886
11886
 
11887
11887
 
11888
- const __iconNode$A = [["path", { "d": "M4 6l16 0", "key": "svg-0" }], ["path", { "d": "M4 12l16 0", "key": "svg-1" }], ["path", { "d": "M4 18l16 0", "key": "svg-2" }]];
11889
- const IconMenu2 = createReactComponent("outline", "menu-2", "Menu2", __iconNode$A);
11888
+ const __iconNode$G = [["path", { "d": "M5 11m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z", "key": "svg-0" }], ["path", { "d": "M12 16m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-1" }], ["path", { "d": "M8 11v-5a4 4 0 0 1 8 0", "key": "svg-2" }]];
11889
+ const IconLockOpen = createReactComponent("outline", "lock-open", "LockOpen", __iconNode$G);
11890
11890
 
11891
11891
  /**
11892
11892
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11896,8 +11896,8 @@ const IconMenu2 = createReactComponent("outline", "menu-2", "Menu2", __iconNode$
11896
11896
  */
11897
11897
 
11898
11898
 
11899
- const __iconNode$z = [["path", { "d": "M4 8l16 0", "key": "svg-0" }], ["path", { "d": "M4 16l16 0", "key": "svg-1" }]];
11900
- const IconMenu = createReactComponent("outline", "menu", "Menu", __iconNode$z);
11899
+ const __iconNode$F = [["path", { "d": "M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6z", "key": "svg-0" }], ["path", { "d": "M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0", "key": "svg-1" }], ["path", { "d": "M8 11v-4a4 4 0 1 1 8 0v4", "key": "svg-2" }]];
11900
+ const IconLock = createReactComponent("outline", "lock", "Lock", __iconNode$F);
11901
11901
 
11902
11902
  /**
11903
11903
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11907,8 +11907,8 @@ const IconMenu = createReactComponent("outline", "menu", "Menu", __iconNode$z);
11907
11907
  */
11908
11908
 
11909
11909
 
11910
- const __iconNode$y = [["path", { "d": "M6 9a6 6 0 1 0 12 0a6 6 0 0 0 -12 0", "key": "svg-0" }], ["path", { "d": "M12 3c1.333 .333 2 2.333 2 6s-.667 5.667 -2 6", "key": "svg-1" }], ["path", { "d": "M12 3c-1.333 .333 -2 2.333 -2 6s.667 5.667 2 6", "key": "svg-2" }], ["path", { "d": "M6 9h12", "key": "svg-3" }], ["path", { "d": "M3 20h7", "key": "svg-4" }], ["path", { "d": "M14 20h7", "key": "svg-5" }], ["path", { "d": "M10 20a2 2 0 1 0 4 0a2 2 0 0 0 -4 0", "key": "svg-6" }], ["path", { "d": "M12 15v3", "key": "svg-7" }]];
11911
- const IconNetwork = createReactComponent("outline", "network", "Network", __iconNode$y);
11910
+ const __iconNode$E = [["path", { "d": "M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2", "key": "svg-0" }], ["path", { "d": "M9 12h12l-3 -3", "key": "svg-1" }], ["path", { "d": "M18 15l3 -3", "key": "svg-2" }]];
11911
+ const IconLogout = createReactComponent("outline", "logout", "Logout", __iconNode$E);
11912
11912
 
11913
11913
  /**
11914
11914
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11918,8 +11918,8 @@ const IconNetwork = createReactComponent("outline", "network", "Network", __icon
11918
11918
  */
11919
11919
 
11920
11920
 
11921
- const __iconNode$x = [["path", { "d": "M12 10v4", "key": "svg-0" }], ["path", { "d": "M10 13l4 -2", "key": "svg-1" }], ["path", { "d": "M10 11l4 2", "key": "svg-2" }], ["path", { "d": "M5 10v4", "key": "svg-3" }], ["path", { "d": "M3 13l4 -2", "key": "svg-4" }], ["path", { "d": "M3 11l4 2", "key": "svg-5" }], ["path", { "d": "M19 10v4", "key": "svg-6" }], ["path", { "d": "M17 13l4 -2", "key": "svg-7" }], ["path", { "d": "M17 11l4 2", "key": "svg-8" }]];
11922
- const IconPassword = createReactComponent("outline", "password", "Password", __iconNode$x);
11921
+ const __iconNode$D = [["path", { "d": "M11 19h-6a2 2 0 0 1 -2 -2v-10a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v6", "key": "svg-0" }], ["path", { "d": "M3 7l9 6l9 -6", "key": "svg-1" }], ["path", { "d": "M20 21l2 -2l-2 -2", "key": "svg-2" }], ["path", { "d": "M17 17l-2 2l2 2", "key": "svg-3" }]];
11922
+ const IconMailCode = createReactComponent("outline", "mail-code", "MailCode", __iconNode$D);
11923
11923
 
11924
11924
  /**
11925
11925
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11929,8 +11929,8 @@ const IconPassword = createReactComponent("outline", "password", "Password", __i
11929
11929
  */
11930
11930
 
11931
11931
 
11932
- const __iconNode$w = [["path", { "d": "M6 5m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z", "key": "svg-0" }], ["path", { "d": "M14 5m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z", "key": "svg-1" }]];
11933
- const IconPlayerPause = createReactComponent("outline", "player-pause", "PlayerPause", __iconNode$w);
11932
+ const __iconNode$C = [["path", { "d": "M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10z", "key": "svg-0" }], ["path", { "d": "M3 7l9 6l9 -6", "key": "svg-1" }]];
11933
+ const IconMail = createReactComponent("outline", "mail", "Mail", __iconNode$C);
11934
11934
 
11935
11935
  /**
11936
11936
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11940,8 +11940,8 @@ const IconPlayerPause = createReactComponent("outline", "player-pause", "PlayerP
11940
11940
  */
11941
11941
 
11942
11942
 
11943
- const __iconNode$v = [["path", { "d": "M7 4v16l13 -8z", "key": "svg-0" }]];
11944
- const IconPlayerPlay = createReactComponent("outline", "player-play", "PlayerPlay", __iconNode$v);
11943
+ const __iconNode$B = [["path", { "d": "M4 6l16 0", "key": "svg-0" }], ["path", { "d": "M4 12l16 0", "key": "svg-1" }], ["path", { "d": "M4 18l16 0", "key": "svg-2" }]];
11944
+ const IconMenu2 = createReactComponent("outline", "menu-2", "Menu2", __iconNode$B);
11945
11945
 
11946
11946
  /**
11947
11947
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11951,8 +11951,8 @@ const IconPlayerPlay = createReactComponent("outline", "player-play", "PlayerPla
11951
11951
  */
11952
11952
 
11953
11953
 
11954
- const __iconNode$u = [["path", { "d": "M20 16l-4 4", "key": "svg-0" }], ["path", { "d": "M7 12l5 5l-1.5 1.5a3.536 3.536 0 1 1 -5 -5l1.5 -1.5z", "key": "svg-1" }], ["path", { "d": "M17 12l-5 -5l1.5 -1.5a3.536 3.536 0 1 1 5 5l-1.5 1.5z", "key": "svg-2" }], ["path", { "d": "M3 21l2.5 -2.5", "key": "svg-3" }], ["path", { "d": "M18.5 5.5l2.5 -2.5", "key": "svg-4" }], ["path", { "d": "M10 11l-2 2", "key": "svg-5" }], ["path", { "d": "M13 14l-2 2", "key": "svg-6" }], ["path", { "d": "M16 16l4 4", "key": "svg-7" }]];
11955
- const IconPlugConnectedX = createReactComponent("outline", "plug-connected-x", "PlugConnectedX", __iconNode$u);
11954
+ const __iconNode$A = [["path", { "d": "M4 8l16 0", "key": "svg-0" }], ["path", { "d": "M4 16l16 0", "key": "svg-1" }]];
11955
+ const IconMenu = createReactComponent("outline", "menu", "Menu", __iconNode$A);
11956
11956
 
11957
11957
  /**
11958
11958
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11962,8 +11962,8 @@ const IconPlugConnectedX = createReactComponent("outline", "plug-connected-x", "
11962
11962
  */
11963
11963
 
11964
11964
 
11965
- const __iconNode$t = [["path", { "d": "M7 12l5 5l-1.5 1.5a3.536 3.536 0 1 1 -5 -5l1.5 -1.5z", "key": "svg-0" }], ["path", { "d": "M17 12l-5 -5l1.5 -1.5a3.536 3.536 0 1 1 5 5l-1.5 1.5z", "key": "svg-1" }], ["path", { "d": "M3 21l2.5 -2.5", "key": "svg-2" }], ["path", { "d": "M18.5 5.5l2.5 -2.5", "key": "svg-3" }], ["path", { "d": "M10 11l-2 2", "key": "svg-4" }], ["path", { "d": "M13 14l-2 2", "key": "svg-5" }]];
11966
- const IconPlugConnected = createReactComponent("outline", "plug-connected", "PlugConnected", __iconNode$t);
11965
+ const __iconNode$z = [["path", { "d": "M8 9h8", "key": "svg-0" }], ["path", { "d": "M8 13h6", "key": "svg-1" }], ["path", { "d": "M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12z", "key": "svg-2" }]];
11966
+ const IconMessage = createReactComponent("outline", "message", "Message", __iconNode$z);
11967
11967
 
11968
11968
  /**
11969
11969
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11973,8 +11973,8 @@ const IconPlugConnected = createReactComponent("outline", "plug-connected", "Plu
11973
11973
  */
11974
11974
 
11975
11975
 
11976
- const __iconNode$s = [["path", { "d": "M12 5l0 14", "key": "svg-0" }], ["path", { "d": "M5 12l14 0", "key": "svg-1" }]];
11977
- const IconPlus = createReactComponent("outline", "plus", "Plus", __iconNode$s);
11976
+ const __iconNode$y = [["path", { "d": "M12 10v4", "key": "svg-0" }], ["path", { "d": "M10 13l4 -2", "key": "svg-1" }], ["path", { "d": "M10 11l4 2", "key": "svg-2" }], ["path", { "d": "M5 10v4", "key": "svg-3" }], ["path", { "d": "M3 13l4 -2", "key": "svg-4" }], ["path", { "d": "M3 11l4 2", "key": "svg-5" }], ["path", { "d": "M19 10v4", "key": "svg-6" }], ["path", { "d": "M17 13l4 -2", "key": "svg-7" }], ["path", { "d": "M17 11l4 2", "key": "svg-8" }]];
11977
+ const IconPassword = createReactComponent("outline", "password", "Password", __iconNode$y);
11978
11978
 
11979
11979
  /**
11980
11980
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11984,8 +11984,8 @@ const IconPlus = createReactComponent("outline", "plus", "Plus", __iconNode$s);
11984
11984
  */
11985
11985
 
11986
11986
 
11987
- const __iconNode$r = [["path", { "d": "M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2", "key": "svg-0" }], ["path", { "d": "M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4", "key": "svg-1" }], ["path", { "d": "M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z", "key": "svg-2" }]];
11988
- const IconPrinter = createReactComponent("outline", "printer", "Printer", __iconNode$r);
11987
+ const __iconNode$x = [["path", { "d": "M6 5m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z", "key": "svg-0" }], ["path", { "d": "M14 5m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z", "key": "svg-1" }]];
11988
+ const IconPlayerPause = createReactComponent("outline", "player-pause", "PlayerPause", __iconNode$x);
11989
11989
 
11990
11990
  /**
11991
11991
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -11995,8 +11995,8 @@ const IconPrinter = createReactComponent("outline", "printer", "Printer", __icon
11995
11995
  */
11996
11996
 
11997
11997
 
11998
- const __iconNode$q = [["path", { "d": "M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4", "key": "svg-0" }], ["path", { "d": "M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4", "key": "svg-1" }]];
11999
- const IconRefresh = createReactComponent("outline", "refresh", "Refresh", __iconNode$q);
11998
+ const __iconNode$w = [["path", { "d": "M7 4v16l13 -8z", "key": "svg-0" }]];
11999
+ const IconPlayerPlay = createReactComponent("outline", "player-play", "PlayerPlay", __iconNode$w);
12000
12000
 
12001
12001
  /**
12002
12002
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12006,8 +12006,8 @@ const IconRefresh = createReactComponent("outline", "refresh", "Refresh", __icon
12006
12006
  */
12007
12007
 
12008
12008
 
12009
- const __iconNode$p = [["path", { "d": "M6 4m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z", "key": "svg-0" }], ["path", { "d": "M12 2v2", "key": "svg-1" }], ["path", { "d": "M9 12v9", "key": "svg-2" }], ["path", { "d": "M15 12v9", "key": "svg-3" }], ["path", { "d": "M5 16l4 -2", "key": "svg-4" }], ["path", { "d": "M15 14l4 2", "key": "svg-5" }], ["path", { "d": "M9 18h6", "key": "svg-6" }], ["path", { "d": "M10 8v.01", "key": "svg-7" }], ["path", { "d": "M14 8v.01", "key": "svg-8" }]];
12010
- const IconRobot = createReactComponent("outline", "robot", "Robot", __iconNode$p);
12009
+ const __iconNode$v = [["path", { "d": "M20 16l-4 4", "key": "svg-0" }], ["path", { "d": "M7 12l5 5l-1.5 1.5a3.536 3.536 0 1 1 -5 -5l1.5 -1.5z", "key": "svg-1" }], ["path", { "d": "M17 12l-5 -5l1.5 -1.5a3.536 3.536 0 1 1 5 5l-1.5 1.5z", "key": "svg-2" }], ["path", { "d": "M3 21l2.5 -2.5", "key": "svg-3" }], ["path", { "d": "M18.5 5.5l2.5 -2.5", "key": "svg-4" }], ["path", { "d": "M10 11l-2 2", "key": "svg-5" }], ["path", { "d": "M13 14l-2 2", "key": "svg-6" }], ["path", { "d": "M16 16l4 4", "key": "svg-7" }]];
12010
+ const IconPlugConnectedX = createReactComponent("outline", "plug-connected-x", "PlugConnectedX", __iconNode$v);
12011
12011
 
12012
12012
  /**
12013
12013
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12017,8 +12017,8 @@ const IconRobot = createReactComponent("outline", "robot", "Robot", __iconNode$p
12017
12017
  */
12018
12018
 
12019
12019
 
12020
- const __iconNode$o = [["path", { "d": "M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0", "key": "svg-0" }], ["path", { "d": "M21 21l-6 -6", "key": "svg-1" }]];
12021
- const IconSearch = createReactComponent("outline", "search", "Search", __iconNode$o);
12020
+ const __iconNode$u = [["path", { "d": "M7 12l5 5l-1.5 1.5a3.536 3.536 0 1 1 -5 -5l1.5 -1.5z", "key": "svg-0" }], ["path", { "d": "M17 12l-5 -5l1.5 -1.5a3.536 3.536 0 1 1 5 5l-1.5 1.5z", "key": "svg-1" }], ["path", { "d": "M3 21l2.5 -2.5", "key": "svg-2" }], ["path", { "d": "M18.5 5.5l2.5 -2.5", "key": "svg-3" }], ["path", { "d": "M10 11l-2 2", "key": "svg-4" }], ["path", { "d": "M13 14l-2 2", "key": "svg-5" }]];
12021
+ const IconPlugConnected = createReactComponent("outline", "plug-connected", "PlugConnected", __iconNode$u);
12022
12022
 
12023
12023
  /**
12024
12024
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12028,8 +12028,8 @@ const IconSearch = createReactComponent("outline", "search", "Search", __iconNod
12028
12028
  */
12029
12029
 
12030
12030
 
12031
- const __iconNode$n = [["path", { "d": "M10 14l11 -11", "key": "svg-0" }], ["path", { "d": "M21 3l-6.5 18a.55 .55 0 0 1 -1 0l-3.5 -7l-7 -3.5a.55 .55 0 0 1 0 -1l18 -6.5", "key": "svg-1" }]];
12032
- const IconSend = createReactComponent("outline", "send", "Send", __iconNode$n);
12031
+ const __iconNode$t = [["path", { "d": "M12 5l0 14", "key": "svg-0" }], ["path", { "d": "M5 12l14 0", "key": "svg-1" }]];
12032
+ const IconPlus = createReactComponent("outline", "plus", "Plus", __iconNode$t);
12033
12033
 
12034
12034
  /**
12035
12035
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12039,8 +12039,8 @@ const IconSend = createReactComponent("outline", "send", "Send", __iconNode$n);
12039
12039
  */
12040
12040
 
12041
12041
 
12042
- const __iconNode$m = [["path", { "d": "M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z", "key": "svg-0" }], ["path", { "d": "M3 12m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z", "key": "svg-1" }], ["path", { "d": "M7 8l0 .01", "key": "svg-2" }], ["path", { "d": "M7 16l0 .01", "key": "svg-3" }]];
12043
- const IconServer = createReactComponent("outline", "server", "Server", __iconNode$m);
12042
+ const __iconNode$s = [["path", { "d": "M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2", "key": "svg-0" }], ["path", { "d": "M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4", "key": "svg-1" }], ["path", { "d": "M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z", "key": "svg-2" }]];
12043
+ const IconPrinter = createReactComponent("outline", "printer", "Printer", __iconNode$s);
12044
12044
 
12045
12045
  /**
12046
12046
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12050,8 +12050,8 @@ const IconServer = createReactComponent("outline", "server", "Server", __iconNod
12050
12050
  */
12051
12051
 
12052
12052
 
12053
- const __iconNode$l = [["path", { "d": "M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z", "key": "svg-0" }], ["path", { "d": "M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0", "key": "svg-1" }]];
12054
- const IconSettings = createReactComponent("outline", "settings", "Settings", __iconNode$l);
12053
+ const __iconNode$r = [["path", { "d": "M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4", "key": "svg-0" }], ["path", { "d": "M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4", "key": "svg-1" }]];
12054
+ const IconRefresh = createReactComponent("outline", "refresh", "Refresh", __iconNode$r);
12055
12055
 
12056
12056
  /**
12057
12057
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12061,8 +12061,8 @@ const IconSettings = createReactComponent("outline", "settings", "Settings", __i
12061
12061
  */
12062
12062
 
12063
12063
 
12064
- const __iconNode$k = [["path", { "d": "M11.46 20.846a12 12 0 0 1 -7.96 -14.846a12 12 0 0 0 8.5 -3a12 12 0 0 0 8.5 3a12 12 0 0 1 -.09 7.06", "key": "svg-0" }], ["path", { "d": "M15 19l2 2l4 -4", "key": "svg-1" }]];
12065
- const IconShieldCheck = createReactComponent("outline", "shield-check", "ShieldCheck", __iconNode$k);
12064
+ const __iconNode$q = [["path", { "d": "M6 4m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z", "key": "svg-0" }], ["path", { "d": "M12 2v2", "key": "svg-1" }], ["path", { "d": "M9 12v9", "key": "svg-2" }], ["path", { "d": "M15 12v9", "key": "svg-3" }], ["path", { "d": "M5 16l4 -2", "key": "svg-4" }], ["path", { "d": "M15 14l4 2", "key": "svg-5" }], ["path", { "d": "M9 18h6", "key": "svg-6" }], ["path", { "d": "M10 8v.01", "key": "svg-7" }], ["path", { "d": "M14 8v.01", "key": "svg-8" }]];
12065
+ const IconRobot = createReactComponent("outline", "robot", "Robot", __iconNode$q);
12066
12066
 
12067
12067
  /**
12068
12068
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12072,8 +12072,8 @@ const IconShieldCheck = createReactComponent("outline", "shield-check", "ShieldC
12072
12072
  */
12073
12073
 
12074
12074
 
12075
- const __iconNode$j = [["path", { "d": "M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3", "key": "svg-0" }], ["path", { "d": "M12 11m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-1" }], ["path", { "d": "M12 12l0 2.5", "key": "svg-2" }]];
12076
- const IconShieldLock = createReactComponent("outline", "shield-lock", "ShieldLock", __iconNode$j);
12075
+ const __iconNode$p = [["path", { "d": "M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0", "key": "svg-0" }], ["path", { "d": "M21 21l-6 -6", "key": "svg-1" }]];
12076
+ const IconSearch = createReactComponent("outline", "search", "Search", __iconNode$p);
12077
12077
 
12078
12078
  /**
12079
12079
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12083,8 +12083,8 @@ const IconShieldLock = createReactComponent("outline", "shield-lock", "ShieldLoc
12083
12083
  */
12084
12084
 
12085
12085
 
12086
- const __iconNode$i = [["path", { "d": "M17.67 17.667a12 12 0 0 1 -5.67 3.333a12 12 0 0 1 -8.5 -15c.794 .036 1.583 -.006 2.357 -.124m3.128 -.926a11.997 11.997 0 0 0 3.015 -1.95a12 12 0 0 0 8.5 3a12 12 0 0 1 -1.116 9.376", "key": "svg-0" }], ["path", { "d": "M3 3l18 18", "key": "svg-1" }]];
12087
- const IconShieldOff = createReactComponent("outline", "shield-off", "ShieldOff", __iconNode$i);
12086
+ const __iconNode$o = [["path", { "d": "M10 14l11 -11", "key": "svg-0" }], ["path", { "d": "M21 3l-6.5 18a.55 .55 0 0 1 -1 0l-3.5 -7l-7 -3.5a.55 .55 0 0 1 0 -1l18 -6.5", "key": "svg-1" }]];
12087
+ const IconSend = createReactComponent("outline", "send", "Send", __iconNode$o);
12088
12088
 
12089
12089
  /**
12090
12090
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12094,8 +12094,8 @@ const IconShieldOff = createReactComponent("outline", "shield-off", "ShieldOff",
12094
12094
  */
12095
12095
 
12096
12096
 
12097
- const __iconNode$h = [["path", { "d": "M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3", "key": "svg-0" }]];
12098
- const IconShield = createReactComponent("outline", "shield", "Shield", __iconNode$h);
12097
+ const __iconNode$n = [["path", { "d": "M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z", "key": "svg-0" }], ["path", { "d": "M3 12m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z", "key": "svg-1" }], ["path", { "d": "M7 8l0 .01", "key": "svg-2" }], ["path", { "d": "M7 16l0 .01", "key": "svg-3" }]];
12098
+ const IconServer = createReactComponent("outline", "server", "Server", __iconNode$n);
12099
12099
 
12100
12100
  /**
12101
12101
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12105,8 +12105,8 @@ const IconShield = createReactComponent("outline", "shield", "Shield", __iconNod
12105
12105
  */
12106
12106
 
12107
12107
 
12108
- const __iconNode$g = [["path", { "d": "M16 18a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2zm0 -12a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2zm-7 12a6 6 0 0 1 6 -6a6 6 0 0 1 -6 -6a6 6 0 0 1 -6 6a6 6 0 0 1 6 6z", "key": "svg-0" }]];
12109
- const IconSparkles = createReactComponent("outline", "sparkles", "Sparkles", __iconNode$g);
12108
+ const __iconNode$m = [["path", { "d": "M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z", "key": "svg-0" }], ["path", { "d": "M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0", "key": "svg-1" }]];
12109
+ const IconSettings = createReactComponent("outline", "settings", "Settings", __iconNode$m);
12110
12110
 
12111
12111
  /**
12112
12112
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12116,8 +12116,8 @@ const IconSparkles = createReactComponent("outline", "sparkles", "Sparkles", __i
12116
12116
  */
12117
12117
 
12118
12118
 
12119
- const __iconNode$f = [["path", { "d": "M4 4m0 1a1 1 0 0 1 1 -1h14a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-14a1 1 0 0 1 -1 -1z", "key": "svg-0" }], ["path", { "d": "M4 12m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z", "key": "svg-1" }], ["path", { "d": "M14 12l6 0", "key": "svg-2" }], ["path", { "d": "M14 16l6 0", "key": "svg-3" }], ["path", { "d": "M14 20l6 0", "key": "svg-4" }]];
12120
- const IconTemplate = createReactComponent("outline", "template", "Template", __iconNode$f);
12119
+ const __iconNode$l = [["path", { "d": "M11.46 20.846a12 12 0 0 1 -7.96 -14.846a12 12 0 0 0 8.5 -3a12 12 0 0 0 8.5 3a12 12 0 0 1 -.09 7.06", "key": "svg-0" }], ["path", { "d": "M15 19l2 2l4 -4", "key": "svg-1" }]];
12120
+ const IconShieldCheck = createReactComponent("outline", "shield-check", "ShieldCheck", __iconNode$l);
12121
12121
 
12122
12122
  /**
12123
12123
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12127,8 +12127,8 @@ const IconTemplate = createReactComponent("outline", "template", "Template", __i
12127
12127
  */
12128
12128
 
12129
12129
 
12130
- const __iconNode$e = [["path", { "d": "M5 7l5 5l-5 5", "key": "svg-0" }], ["path", { "d": "M12 19l7 0", "key": "svg-1" }]];
12131
- const IconTerminal = createReactComponent("outline", "terminal", "Terminal", __iconNode$e);
12130
+ const __iconNode$k = [["path", { "d": "M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3", "key": "svg-0" }], ["path", { "d": "M12 11m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-1" }], ["path", { "d": "M12 12l0 2.5", "key": "svg-2" }]];
12131
+ const IconShieldLock = createReactComponent("outline", "shield-lock", "ShieldLock", __iconNode$k);
12132
12132
 
12133
12133
  /**
12134
12134
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12138,8 +12138,8 @@ const IconTerminal = createReactComponent("outline", "terminal", "Terminal", __i
12138
12138
  */
12139
12139
 
12140
12140
 
12141
- const __iconNode$d = [["path", { "d": "M4 15h16", "key": "svg-0" }], ["path", { "d": "M4 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z", "key": "svg-1" }], ["path", { "d": "M4 20h12", "key": "svg-2" }]];
12142
- const IconTextCaption = createReactComponent("outline", "text-caption", "TextCaption", __iconNode$d);
12141
+ const __iconNode$j = [["path", { "d": "M17.67 17.667a12 12 0 0 1 -5.67 3.333a12 12 0 0 1 -8.5 -15c.794 .036 1.583 -.006 2.357 -.124m3.128 -.926a11.997 11.997 0 0 0 3.015 -1.95a12 12 0 0 0 8.5 3a12 12 0 0 1 -1.116 9.376", "key": "svg-0" }], ["path", { "d": "M3 3l18 18", "key": "svg-1" }]];
12142
+ const IconShieldOff = createReactComponent("outline", "shield-off", "ShieldOff", __iconNode$j);
12143
12143
 
12144
12144
  /**
12145
12145
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12149,8 +12149,8 @@ const IconTextCaption = createReactComponent("outline", "text-caption", "TextCap
12149
12149
  */
12150
12150
 
12151
12151
 
12152
- const __iconNode$c = [["path", { "d": "M4 7l16 0", "key": "svg-0" }], ["path", { "d": "M10 11l0 6", "key": "svg-1" }], ["path", { "d": "M14 11l0 6", "key": "svg-2" }], ["path", { "d": "M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12", "key": "svg-3" }], ["path", { "d": "M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3", "key": "svg-4" }]];
12153
- const IconTrash = createReactComponent("outline", "trash", "Trash", __iconNode$c);
12152
+ const __iconNode$i = [["path", { "d": "M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3", "key": "svg-0" }]];
12153
+ const IconShield = createReactComponent("outline", "shield", "Shield", __iconNode$i);
12154
12154
 
12155
12155
  /**
12156
12156
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12160,8 +12160,8 @@ const IconTrash = createReactComponent("outline", "trash", "Trash", __iconNode$c
12160
12160
  */
12161
12161
 
12162
12162
 
12163
- const __iconNode$b = [["path", { "d": "M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2", "key": "svg-0" }], ["path", { "d": "M7 9l5 -5l5 5", "key": "svg-1" }], ["path", { "d": "M12 4l0 12", "key": "svg-2" }]];
12164
- const IconUpload = createReactComponent("outline", "upload", "Upload", __iconNode$b);
12163
+ const __iconNode$h = [["path", { "d": "M16 18a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2zm0 -12a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2zm-7 12a6 6 0 0 1 6 -6a6 6 0 0 1 -6 -6a6 6 0 0 1 -6 6a6 6 0 0 1 6 6z", "key": "svg-0" }]];
12164
+ const IconSparkles = createReactComponent("outline", "sparkles", "Sparkles", __iconNode$h);
12165
12165
 
12166
12166
  /**
12167
12167
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12171,8 +12171,8 @@ const IconUpload = createReactComponent("outline", "upload", "Upload", __iconNod
12171
12171
  */
12172
12172
 
12173
12173
 
12174
- const __iconNode$a = [["path", { "d": "M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0", "key": "svg-0" }], ["path", { "d": "M6 21v-2a4 4 0 0 1 4 -4h4", "key": "svg-1" }], ["path", { "d": "M15 19l2 2l4 -4", "key": "svg-2" }]];
12175
- const IconUserCheck = createReactComponent("outline", "user-check", "UserCheck", __iconNode$a);
12174
+ const __iconNode$g = [["path", { "d": "M4 4m0 1a1 1 0 0 1 1 -1h14a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-14a1 1 0 0 1 -1 -1z", "key": "svg-0" }], ["path", { "d": "M4 12m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z", "key": "svg-1" }], ["path", { "d": "M14 12l6 0", "key": "svg-2" }], ["path", { "d": "M14 16l6 0", "key": "svg-3" }], ["path", { "d": "M14 20l6 0", "key": "svg-4" }]];
12175
+ const IconTemplate = createReactComponent("outline", "template", "Template", __iconNode$g);
12176
12176
 
12177
12177
  /**
12178
12178
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12182,8 +12182,8 @@ const IconUserCheck = createReactComponent("outline", "user-check", "UserCheck",
12182
12182
  */
12183
12183
 
12184
12184
 
12185
- const __iconNode$9 = [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 10m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0", "key": "svg-1" }], ["path", { "d": "M6.168 18.849a4 4 0 0 1 3.832 -2.849h4a4 4 0 0 1 3.834 2.855", "key": "svg-2" }]];
12186
- const IconUserCircle = createReactComponent("outline", "user-circle", "UserCircle", __iconNode$9);
12185
+ const __iconNode$f = [["path", { "d": "M5 7l5 5l-5 5", "key": "svg-0" }], ["path", { "d": "M12 19l7 0", "key": "svg-1" }]];
12186
+ const IconTerminal = createReactComponent("outline", "terminal", "Terminal", __iconNode$f);
12187
12187
 
12188
12188
  /**
12189
12189
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12193,8 +12193,8 @@ const IconUserCircle = createReactComponent("outline", "user-circle", "UserCircl
12193
12193
  */
12194
12194
 
12195
12195
 
12196
- const __iconNode$8 = [["path", { "d": "M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0", "key": "svg-0" }], ["path", { "d": "M16 19h6", "key": "svg-1" }], ["path", { "d": "M19 16v6", "key": "svg-2" }], ["path", { "d": "M6 21v-2a4 4 0 0 1 4 -4h4", "key": "svg-3" }]];
12197
- const IconUserPlus = createReactComponent("outline", "user-plus", "UserPlus", __iconNode$8);
12196
+ const __iconNode$e = [["path", { "d": "M4 15h16", "key": "svg-0" }], ["path", { "d": "M4 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z", "key": "svg-1" }], ["path", { "d": "M4 20h12", "key": "svg-2" }]];
12197
+ const IconTextCaption = createReactComponent("outline", "text-caption", "TextCaption", __iconNode$e);
12198
12198
 
12199
12199
  /**
12200
12200
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12204,8 +12204,8 @@ const IconUserPlus = createReactComponent("outline", "user-plus", "UserPlus", __
12204
12204
  */
12205
12205
 
12206
12206
 
12207
- const __iconNode$7 = [["path", { "d": "M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0", "key": "svg-0" }], ["path", { "d": "M6 21v-2a4 4 0 0 1 4 -4h.5", "key": "svg-1" }], ["path", { "d": "M17.8 20.817l-2.172 1.138a.392 .392 0 0 1 -.568 -.41l.415 -2.411l-1.757 -1.707a.389 .389 0 0 1 .217 -.665l2.428 -.352l1.086 -2.193a.392 .392 0 0 1 .702 0l1.086 2.193l2.428 .352a.39 .39 0 0 1 .217 .665l-1.757 1.707l.414 2.41a.39 .39 0 0 1 -.567 .411l-2.172 -1.138z", "key": "svg-2" }]];
12208
- const IconUserStar = createReactComponent("outline", "user-star", "UserStar", __iconNode$7);
12207
+ const __iconNode$d = [["path", { "d": "M4 7l16 0", "key": "svg-0" }], ["path", { "d": "M10 11l0 6", "key": "svg-1" }], ["path", { "d": "M14 11l0 6", "key": "svg-2" }], ["path", { "d": "M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12", "key": "svg-3" }], ["path", { "d": "M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3", "key": "svg-4" }]];
12208
+ const IconTrash = createReactComponent("outline", "trash", "Trash", __iconNode$d);
12209
12209
 
12210
12210
  /**
12211
12211
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12215,8 +12215,8 @@ const IconUserStar = createReactComponent("outline", "user-star", "UserStar", __
12215
12215
  */
12216
12216
 
12217
12217
 
12218
- const __iconNode$6 = [["path", { "d": "M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0", "key": "svg-0" }], ["path", { "d": "M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2", "key": "svg-1" }]];
12219
- const IconUser = createReactComponent("outline", "user", "User", __iconNode$6);
12218
+ const __iconNode$c = [["path", { "d": "M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2", "key": "svg-0" }], ["path", { "d": "M7 9l5 -5l5 5", "key": "svg-1" }], ["path", { "d": "M12 4l0 12", "key": "svg-2" }]];
12219
+ const IconUpload = createReactComponent("outline", "upload", "Upload", __iconNode$c);
12220
12220
 
12221
12221
  /**
12222
12222
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12226,8 +12226,8 @@ const IconUser = createReactComponent("outline", "user", "User", __iconNode$6);
12226
12226
  */
12227
12227
 
12228
12228
 
12229
- const __iconNode$5 = [["path", { "d": "M10 13a2 2 0 1 0 4 0a2 2 0 0 0 -4 0", "key": "svg-0" }], ["path", { "d": "M8 21v-1a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v1", "key": "svg-1" }], ["path", { "d": "M15 5a2 2 0 1 0 4 0a2 2 0 0 0 -4 0", "key": "svg-2" }], ["path", { "d": "M17 10h2a2 2 0 0 1 2 2v1", "key": "svg-3" }], ["path", { "d": "M5 5a2 2 0 1 0 4 0a2 2 0 0 0 -4 0", "key": "svg-4" }], ["path", { "d": "M3 13v-1a2 2 0 0 1 2 -2h2", "key": "svg-5" }]];
12230
- const IconUsersGroup = createReactComponent("outline", "users-group", "UsersGroup", __iconNode$5);
12229
+ const __iconNode$b = [["path", { "d": "M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0", "key": "svg-0" }], ["path", { "d": "M6 21v-2a4 4 0 0 1 4 -4h4", "key": "svg-1" }], ["path", { "d": "M15 19l2 2l4 -4", "key": "svg-2" }]];
12230
+ const IconUserCheck = createReactComponent("outline", "user-check", "UserCheck", __iconNode$b);
12231
12231
 
12232
12232
  /**
12233
12233
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12237,8 +12237,8 @@ const IconUsersGroup = createReactComponent("outline", "users-group", "UsersGrou
12237
12237
  */
12238
12238
 
12239
12239
 
12240
- const __iconNode$4 = [["path", { "d": "M9 7m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0", "key": "svg-0" }], ["path", { "d": "M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2", "key": "svg-1" }], ["path", { "d": "M16 3.13a4 4 0 0 1 0 7.75", "key": "svg-2" }], ["path", { "d": "M21 21v-2a4 4 0 0 0 -3 -3.85", "key": "svg-3" }]];
12241
- const IconUsers = createReactComponent("outline", "users", "Users", __iconNode$4);
12240
+ const __iconNode$a = [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 10m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0", "key": "svg-1" }], ["path", { "d": "M6.168 18.849a4 4 0 0 1 3.832 -2.849h4a4 4 0 0 1 3.834 2.855", "key": "svg-2" }]];
12241
+ const IconUserCircle = createReactComponent("outline", "user-circle", "UserCircle", __iconNode$a);
12242
12242
 
12243
12243
  /**
12244
12244
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12248,8 +12248,74 @@ const IconUsers = createReactComponent("outline", "users", "Users", __iconNode$4
12248
12248
  */
12249
12249
 
12250
12250
 
12251
- const __iconNode$3 = [["path", { "d": "M5 4c-2.5 5 -2.5 10 0 16m14 -16c2.5 5 2.5 10 0 16m-10 -11h1c1 0 1 1 2.016 3.527c.984 2.473 .984 3.473 1.984 3.473h1", "key": "svg-0" }], ["path", { "d": "M8 16c1.5 0 3 -2 4 -3.5s2.5 -3.5 4 -3.5", "key": "svg-1" }]];
12252
- const IconVariable = createReactComponent("outline", "variable", "Variable", __iconNode$3);
12251
+ const __iconNode$9 = [["path", { "d": "M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0", "key": "svg-0" }], ["path", { "d": "M16 19h6", "key": "svg-1" }], ["path", { "d": "M19 16v6", "key": "svg-2" }], ["path", { "d": "M6 21v-2a4 4 0 0 1 4 -4h4", "key": "svg-3" }]];
12252
+ const IconUserPlus = createReactComponent("outline", "user-plus", "UserPlus", __iconNode$9);
12253
+
12254
+ /**
12255
+ * @license @tabler/icons-react v3.36.0 - MIT
12256
+ *
12257
+ * This source code is licensed under the MIT license.
12258
+ * See the LICENSE file in the root directory of this source tree.
12259
+ */
12260
+
12261
+
12262
+ const __iconNode$8 = [["path", { "d": "M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0", "key": "svg-0" }], ["path", { "d": "M6 21v-2a4 4 0 0 1 4 -4h.5", "key": "svg-1" }], ["path", { "d": "M17.8 20.817l-2.172 1.138a.392 .392 0 0 1 -.568 -.41l.415 -2.411l-1.757 -1.707a.389 .389 0 0 1 .217 -.665l2.428 -.352l1.086 -2.193a.392 .392 0 0 1 .702 0l1.086 2.193l2.428 .352a.39 .39 0 0 1 .217 .665l-1.757 1.707l.414 2.41a.39 .39 0 0 1 -.567 .411l-2.172 -1.138z", "key": "svg-2" }]];
12263
+ const IconUserStar = createReactComponent("outline", "user-star", "UserStar", __iconNode$8);
12264
+
12265
+ /**
12266
+ * @license @tabler/icons-react v3.36.0 - MIT
12267
+ *
12268
+ * This source code is licensed under the MIT license.
12269
+ * See the LICENSE file in the root directory of this source tree.
12270
+ */
12271
+
12272
+
12273
+ const __iconNode$7 = [["path", { "d": "M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0", "key": "svg-0" }], ["path", { "d": "M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2", "key": "svg-1" }]];
12274
+ const IconUser = createReactComponent("outline", "user", "User", __iconNode$7);
12275
+
12276
+ /**
12277
+ * @license @tabler/icons-react v3.36.0 - MIT
12278
+ *
12279
+ * This source code is licensed under the MIT license.
12280
+ * See the LICENSE file in the root directory of this source tree.
12281
+ */
12282
+
12283
+
12284
+ const __iconNode$6 = [["path", { "d": "M10 13a2 2 0 1 0 4 0a2 2 0 0 0 -4 0", "key": "svg-0" }], ["path", { "d": "M8 21v-1a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v1", "key": "svg-1" }], ["path", { "d": "M15 5a2 2 0 1 0 4 0a2 2 0 0 0 -4 0", "key": "svg-2" }], ["path", { "d": "M17 10h2a2 2 0 0 1 2 2v1", "key": "svg-3" }], ["path", { "d": "M5 5a2 2 0 1 0 4 0a2 2 0 0 0 -4 0", "key": "svg-4" }], ["path", { "d": "M3 13v-1a2 2 0 0 1 2 -2h2", "key": "svg-5" }]];
12285
+ const IconUsersGroup = createReactComponent("outline", "users-group", "UsersGroup", __iconNode$6);
12286
+
12287
+ /**
12288
+ * @license @tabler/icons-react v3.36.0 - MIT
12289
+ *
12290
+ * This source code is licensed under the MIT license.
12291
+ * See the LICENSE file in the root directory of this source tree.
12292
+ */
12293
+
12294
+
12295
+ const __iconNode$5 = [["path", { "d": "M9 7m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0", "key": "svg-0" }], ["path", { "d": "M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2", "key": "svg-1" }], ["path", { "d": "M16 3.13a4 4 0 0 1 0 7.75", "key": "svg-2" }], ["path", { "d": "M21 21v-2a4 4 0 0 0 -3 -3.85", "key": "svg-3" }]];
12296
+ const IconUsers = createReactComponent("outline", "users", "Users", __iconNode$5);
12297
+
12298
+ /**
12299
+ * @license @tabler/icons-react v3.36.0 - MIT
12300
+ *
12301
+ * This source code is licensed under the MIT license.
12302
+ * See the LICENSE file in the root directory of this source tree.
12303
+ */
12304
+
12305
+
12306
+ const __iconNode$4 = [["path", { "d": "M5 4c-2.5 5 -2.5 10 0 16m14 -16c2.5 5 2.5 10 0 16m-10 -11h1c1 0 1 1 2.016 3.527c.984 2.473 .984 3.473 1.984 3.473h1", "key": "svg-0" }], ["path", { "d": "M8 16c1.5 0 3 -2 4 -3.5s2.5 -3.5 4 -3.5", "key": "svg-1" }]];
12307
+ const IconVariable = createReactComponent("outline", "variable", "Variable", __iconNode$4);
12308
+
12309
+ /**
12310
+ * @license @tabler/icons-react v3.36.0 - MIT
12311
+ *
12312
+ * This source code is licensed under the MIT license.
12313
+ * See the LICENSE file in the root directory of this source tree.
12314
+ */
12315
+
12316
+
12317
+ const __iconNode$3 = [["path", { "d": "M12 3c-3.866 0 -7 3.272 -7 7v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1 -1v-10c0 -3.728 -3.134 -7 -7 -7z", "key": "svg-0" }], ["path", { "d": "M5 13l14 0", "key": "svg-1" }], ["path", { "d": "M12 3l0 18", "key": "svg-2" }]];
12318
+ const IconWindow = createReactComponent("outline", "window", "Window", __iconNode$3);
12253
12319
 
12254
12320
  /**
12255
12321
  * @license @tabler/icons-react v3.36.0 - MIT
@@ -12334,7 +12400,6 @@ function SearchBar(props) {
12334
12400
  const searchPosition = (_d = (_c = props.shellUi.search) === null || _c === void 0 ? void 0 : _c.searchPosition) !== null && _d !== void 0 ? _d : ShellUISearchPosition.Left;
12335
12401
  const isCenterPosition = searchPosition === ShellUISearchPosition.Center;
12336
12402
  // Dimensioni diverse in base alla posizione
12337
- const searchWidth = isCenterPosition ? 800 : 280;
12338
12403
  const searchSize = isCenterPosition ? 'sm' : 'sm';
12339
12404
  const iconSize = isCenterPosition ? 18 : 18;
12340
12405
  // Carica le actions dal menu come fa lo Spotlight, mantenendo i gruppi
@@ -12455,6 +12520,10 @@ function SearchBar(props) {
12455
12520
  if (searchType === ShellUISearchType.Spotlight) {
12456
12521
  return jsx(Box, {
12457
12522
  visibleFrom: 'sm',
12523
+ style: isCenterPosition ? {
12524
+ width: '100%',
12525
+ maxWidth: '800px'
12526
+ } : undefined,
12458
12527
  children: jsx(TextInput, {
12459
12528
  disabled: props.disabled,
12460
12529
  size: searchSize,
@@ -12464,7 +12533,7 @@ function SearchBar(props) {
12464
12533
  size: iconSize
12465
12534
  }),
12466
12535
  rightSectionWidth: isCenterPosition ? 0 : 90,
12467
- w: searchWidth,
12536
+ w: isCenterPosition ? '100%' : 280,
12468
12537
  rightSection: rightSection,
12469
12538
  styles: {
12470
12539
  input: {
@@ -12495,6 +12564,10 @@ function SearchBar(props) {
12495
12564
  // Dropdown Type (nuovo)
12496
12565
  return jsx(Box, {
12497
12566
  visibleFrom: 'sm',
12567
+ style: isCenterPosition ? {
12568
+ width: '100%',
12569
+ maxWidth: '800px'
12570
+ } : undefined,
12498
12571
  children: jsxs(Popover, {
12499
12572
  opened: dropdownOpened,
12500
12573
  onChange: setDropdownOpened,
@@ -12520,7 +12593,7 @@ function SearchBar(props) {
12520
12593
  size: iconSize
12521
12594
  }),
12522
12595
  rightSectionWidth: isCenterPosition ? 0 : 90,
12523
- w: searchWidth,
12596
+ w: isCenterPosition ? '100%' : 280,
12524
12597
  rightSection: rightSection,
12525
12598
  styles: {
12526
12599
  input: {
@@ -12747,7 +12820,7 @@ function FrontendSwitch(props) {
12747
12820
  }
12748
12821
 
12749
12822
  function AppBar(props) {
12750
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
12823
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
12751
12824
  const {
12752
12825
  userInfo
12753
12826
  } = useSelector(state => state.user);
@@ -12836,14 +12909,19 @@ function AppBar(props) {
12836
12909
  children: jsx(Stack, {
12837
12910
  gap: 0,
12838
12911
  children: jsxs(Group, {
12839
- px: 16,
12840
- justify: 'space-between',
12912
+ px: 'md',
12841
12913
  wrap: "nowrap",
12914
+ gap: "md",
12842
12915
  style: {
12843
12916
  height: '48px',
12844
- backgroundColor: (_b = (_a = props.previewMode) === null || _a === void 0 ? void 0 : _a.headerColor) !== null && _b !== void 0 ? _b : fluxoTheme.colors['brand'][7]
12917
+ backgroundColor: (_b = (_a = props.previewMode) === null || _a === void 0 ? void 0 : _a.headerColor) !== null && _b !== void 0 ? _b : fluxoTheme.colors['brand'][7],
12918
+ display: 'flex',
12919
+ justifyContent: ((_d = (_c = props.shellUi.search) === null || _c === void 0 ? void 0 : _c.searchPosition) !== null && _d !== void 0 ? _d : ShellUISearchPosition.Left) === ShellUISearchPosition.Center ? 'flex-start' : 'space-between'
12845
12920
  },
12846
12921
  children: [jsxs(Group, {
12922
+ style: {
12923
+ flexShrink: 0
12924
+ },
12847
12925
  children: [(props.shellUi.navigation === ShellUINavigation.Sidebar || props.shellUi.navigation === ShellUINavigation.SidebarMinimal || isMobile) && jsx(Burger, {
12848
12926
  tabIndex: -1,
12849
12927
  disabled: props.previewMode !== undefined,
@@ -12857,20 +12935,23 @@ function AppBar(props) {
12857
12935
  tabIndex: -1,
12858
12936
  to: props.previewMode ? '' : '/',
12859
12937
  style: {
12860
- maxHeight: (_d = (_c = props.previewMode) === null || _c === void 0 ? void 0 : _c.logoHeight) !== null && _d !== void 0 ? _d : configuration.logoHeight
12938
+ maxHeight: (_f = (_e = props.previewMode) === null || _e === void 0 ? void 0 : _e.logoHeight) !== null && _f !== void 0 ? _f : configuration.logoHeight
12861
12939
  },
12862
12940
  children: jsx("img", {
12863
- src: ((_e = props.previewMode) === null || _e === void 0 ? void 0 : _e.logo) ? props.previewMode.logo : configuration.logo,
12941
+ src: ((_g = props.previewMode) === null || _g === void 0 ? void 0 : _g.logo) ? props.previewMode.logo : configuration.logo,
12864
12942
  style: {
12865
- maxHeight: (_g = (_f = props.previewMode) === null || _f === void 0 ? void 0 : _f.logoHeight) !== null && _g !== void 0 ? _g : configuration.logoHeight
12943
+ maxHeight: (_j = (_h = props.previewMode) === null || _h === void 0 ? void 0 : _h.logoHeight) !== null && _j !== void 0 ? _j : configuration.logoHeight
12866
12944
  }
12867
12945
  })
12868
12946
  })]
12869
- }), ((_j = (_h = props.shellUi.search) === null || _h === void 0 ? void 0 : _h.searchPosition) !== null && _j !== void 0 ? _j : ShellUISearchPosition.Left) === ShellUISearchPosition.Center && jsx(Box, {
12947
+ }), ((_l = (_k = props.shellUi.search) === null || _k === void 0 ? void 0 : _k.searchPosition) !== null && _l !== void 0 ? _l : ShellUISearchPosition.Left) === ShellUISearchPosition.Center && jsx(Box, {
12870
12948
  style: {
12871
- position: 'absolute',
12872
- left: '50%',
12873
- transform: 'translateX(-50%)'
12949
+ flex: '1 1 auto',
12950
+ display: 'flex',
12951
+ justifyContent: 'center',
12952
+ minWidth: 0,
12953
+ maxWidth: '800px',
12954
+ margin: '0 auto'
12874
12955
  },
12875
12956
  children: jsx(SearchBar, {
12876
12957
  disabled: props.previewMode !== undefined,
@@ -12878,6 +12959,9 @@ function AppBar(props) {
12878
12959
  })
12879
12960
  }), jsxs(Group, {
12880
12961
  wrap: "nowrap",
12962
+ style: {
12963
+ flexShrink: 0
12964
+ },
12881
12965
  children: [developmentMode && jsx(Badge, {
12882
12966
  tabIndex: -1,
12883
12967
  color: 'red',
@@ -12940,7 +13024,7 @@ function AppBar(props) {
12940
13024
  })
12941
13025
  })
12942
13026
  })]
12943
- }), (((_l = (_k = props.shellUi.search) === null || _k === void 0 ? void 0 : _k.searchPosition) !== null && _l !== void 0 ? _l : ShellUISearchPosition.Left) === ShellUISearchPosition.Left || ((_o = (_m = props.shellUi.search) === null || _m === void 0 ? void 0 : _m.searchPosition) !== null && _o !== void 0 ? _o : ShellUISearchPosition.Left) === ShellUISearchPosition.Right) && jsx(SearchBar, {
13027
+ }), (((_o = (_m = props.shellUi.search) === null || _m === void 0 ? void 0 : _m.searchPosition) !== null && _o !== void 0 ? _o : ShellUISearchPosition.Left) === ShellUISearchPosition.Left || ((_q = (_p = props.shellUi.search) === null || _p === void 0 ? void 0 : _p.searchPosition) !== null && _q !== void 0 ? _q : ShellUISearchPosition.Left) === ShellUISearchPosition.Right) && jsx(SearchBar, {
12944
13028
  disabled: props.previewMode !== undefined,
12945
13029
  shellUi: props.shellUi
12946
13030
  }), jsxs(Popover, {
@@ -12957,7 +13041,7 @@ function AppBar(props) {
12957
13041
  color: "cyan",
12958
13042
  radius: "xl",
12959
13043
  size: 32,
12960
- children: [(_p = userInfo === null || userInfo === void 0 ? void 0 : userInfo.FirstName) === null || _p === void 0 ? void 0 : _p.substr(0, 1), (_q = userInfo === null || userInfo === void 0 ? void 0 : userInfo.LastName) === null || _q === void 0 ? void 0 : _q.substr(0, 1)]
13044
+ children: [(_r = userInfo === null || userInfo === void 0 ? void 0 : userInfo.FirstName) === null || _r === void 0 ? void 0 : _r.substr(0, 1), (_s = userInfo === null || userInfo === void 0 ? void 0 : userInfo.LastName) === null || _s === void 0 ? void 0 : _s.substr(0, 1)]
12961
13045
  })
12962
13046
  }), jsx(Popover.Dropdown, {
12963
13047
  w: 300,
@@ -12971,7 +13055,7 @@ function AppBar(props) {
12971
13055
  color: "cyan",
12972
13056
  radius: "xl",
12973
13057
  size: 64,
12974
- children: [(_r = userInfo === null || userInfo === void 0 ? void 0 : userInfo.FirstName) === null || _r === void 0 ? void 0 : _r.substr(0, 1), (_s = userInfo === null || userInfo === void 0 ? void 0 : userInfo.LastName) === null || _s === void 0 ? void 0 : _s.substr(0, 1)]
13058
+ children: [(_t = userInfo === null || userInfo === void 0 ? void 0 : userInfo.FirstName) === null || _t === void 0 ? void 0 : _t.substr(0, 1), (_u = userInfo === null || userInfo === void 0 ? void 0 : userInfo.LastName) === null || _u === void 0 ? void 0 : _u.substr(0, 1)]
12975
13059
  }), jsxs(Text, {
12976
13060
  children: [userInfo === null || userInfo === void 0 ? void 0 : userInfo.FirstName, " ", userInfo === null || userInfo === void 0 ? void 0 : userInfo.LastName]
12977
13061
  })]
@@ -13594,141 +13678,6 @@ const CloseSessionConfirmationModal = ({
13594
13678
  });
13595
13679
  };
13596
13680
 
13597
- /**
13598
- * Hook to manage SessionHub WebSocket connection lifecycle
13599
- * @param shouldConnect - When true, starts the connection. Use this to delay connection until FluxoClient is initialized
13600
- */
13601
- const useSessionHub = (shouldConnect = true) => {
13602
- const isConnecting = useRef(false);
13603
- const hasStartedRef = useRef(false);
13604
- const [isConnected, setIsConnected] = useState(false);
13605
- const hasBeenConnectedOnce = useRef(false); // Flag per tracciare se si รจ mai connesso
13606
- // Funzione per avviare la connessione
13607
- const startConnection = useCallback$1(() => __awaiter(void 0, void 0, void 0, function* () {
13608
- if (isConnecting.current || hasStartedRef.current) return;
13609
- isConnecting.current = true;
13610
- try {
13611
- yield FluxoClientSys.Instance.sessionHub.start();
13612
- console.info('โœ… SessionHub connection started from useSessionHub hook');
13613
- // Registra l'handler per ForceLogout subito dopo la connessione
13614
- FluxoClientSys.Instance.sessionHub.on('ForceLogout', data => {
13615
- console.warn('๐Ÿšจ Force logout received from server:', data);
13616
- FluxoClientSys.Instance.auth.logout();
13617
- });
13618
- console.info('๐ŸŽง ForceLogout handler registered');
13619
- hasStartedRef.current = true;
13620
- setIsConnected(true);
13621
- hasBeenConnectedOnce.current = true; // Segna che ci siamo connessi almeno una volta
13622
- } catch (error) {
13623
- console.error('โŒ Failed to start SessionHub connection', error);
13624
- setIsConnected(false);
13625
- } finally {
13626
- isConnecting.current = false;
13627
- }
13628
- }), []);
13629
- // Funzione per fermare la connessione
13630
- const stopConnection = useCallback$1(() => __awaiter(void 0, void 0, void 0, function* () {
13631
- if (!hasStartedRef.current) return;
13632
- try {
13633
- yield FluxoClientSys.Instance.sessionHub.stop();
13634
- console.info('๐Ÿ”Œ SessionHub connection stopped');
13635
- hasStartedRef.current = false;
13636
- setIsConnected(false);
13637
- } catch (error) {
13638
- console.error('โŒ Failed to stop SessionHub connection', error);
13639
- }
13640
- }), []);
13641
- useEffect(() => {
13642
- // Start connection when shouldConnect becomes true
13643
- if (shouldConnect && !hasStartedRef.current && !isConnecting.current) {
13644
- startConnection();
13645
- }
13646
- // Stop connection when shouldConnect becomes false (e.g., user logout)
13647
- if (!shouldConnect && hasStartedRef.current) {
13648
- stopConnection();
13649
- }
13650
- // Cleanup on unmount
13651
- return () => {
13652
- if (hasStartedRef.current) {
13653
- const cleanup = () => __awaiter(void 0, void 0, void 0, function* () {
13654
- try {
13655
- yield FluxoClientSys.Instance.sessionHub.stop();
13656
- console.info('๐Ÿ”Œ SessionHub connection stopped (component unmount)');
13657
- hasStartedRef.current = false;
13658
- } catch (error) {
13659
- console.error('โŒ Failed to stop SessionHub on unmount', error);
13660
- }
13661
- });
13662
- cleanup();
13663
- }
13664
- };
13665
- }, [shouldConnect, startConnection, stopConnection]);
13666
- // Monitora lo stato della connessione ogni 2 secondi
13667
- useEffect(() => {
13668
- const checkConnection = () => {
13669
- const connected = FluxoClientSys.Instance.sessionHub.isConnected;
13670
- setIsConnected(connected);
13671
- // Se si connette, segna che ci siamo connessi almeno una volta
13672
- if (connected) {
13673
- hasBeenConnectedOnce.current = true;
13674
- }
13675
- };
13676
- const interval = setInterval(checkConnection, 2000);
13677
- checkConnection(); // Check subito
13678
- return () => clearInterval(interval);
13679
- }, []);
13680
- // Cleanup finale: disconnetti quando il componente viene smontato
13681
- useEffect(() => {
13682
- return () => {
13683
- if (hasStartedRef.current) {
13684
- const cleanup = () => __awaiter(void 0, void 0, void 0, function* () {
13685
- try {
13686
- yield FluxoClientSys.Instance.sessionHub.stop();
13687
- console.info('SessionHub connection stopped (component unmount)');
13688
- } catch (error) {
13689
- console.error('Failed to stop SessionHub connection', error);
13690
- }
13691
- });
13692
- cleanup();
13693
- }
13694
- };
13695
- }, []);
13696
- // Esponi metodi utili
13697
- const on = useCallback$1((eventName, handler) => {
13698
- FluxoClientSys.Instance.sessionHub.on(eventName, handler);
13699
- }, []);
13700
- const off = useCallback$1((eventName, handler) => {
13701
- FluxoClientSys.Instance.sessionHub.off(eventName, handler);
13702
- }, []);
13703
- const invoke = useCallback$1((methodName, ...args) => __awaiter(void 0, void 0, void 0, function* () {
13704
- return yield FluxoClientSys.Instance.sessionHub.invoke(methodName, ...args);
13705
- }), []);
13706
- const send = useCallback$1((methodName, ...args) => __awaiter(void 0, void 0, void 0, function* () {
13707
- yield FluxoClientSys.Instance.sessionHub.send(methodName, ...args);
13708
- }), []);
13709
- const getState = useCallback$1(() => {
13710
- return FluxoClientSys.Instance.sessionHub.state;
13711
- }, []);
13712
- const getConnectionId = useCallback$1(() => {
13713
- return FluxoClientSys.Instance.sessionHub.connectionId;
13714
- }, []);
13715
- // Memoizza l'oggetto restituito per evitare re-render inutili del ScreenSharingProvider
13716
- return useMemo$1(() => ({
13717
- on,
13718
- off,
13719
- invoke,
13720
- send,
13721
- getState,
13722
- getConnectionId,
13723
- connectionId: FluxoClientSys.Instance.sessionHub.connectionId,
13724
- isConnected: () => isConnected,
13725
- connected: isConnected,
13726
- reconnect: startConnection,
13727
- disconnect: stopConnection,
13728
- hasBeenConnectedOnce: hasBeenConnectedOnce.current
13729
- }), [on, off, invoke, send, getState, getConnectionId, isConnected, startConnection, stopConnection]);
13730
- };
13731
-
13732
13681
  /**
13733
13682
  * Hook personalizzato per tracciare i cambiamenti di pagina e titolo
13734
13683
  * e inviare gli aggiornamenti al server via SessionHub
@@ -13797,9 +13746,13 @@ function AppContent(props) {
13797
13746
  // Hook personalizzati per gestire le diverse responsabilitร 
13798
13747
  useDocumentTitleManager(props.withMultipleSessions, sessionContext);
13799
13748
  useScrollPositionManager(props.withMultipleSessions, currentSessionId);
13800
- const sessionHub = useSessionHub(false);
13801
13749
  // Traccia i cambiamenti di pagina e titolo e invia gli aggiornamenti al server
13802
- usePageTracker(sessionHub);
13750
+ // Wrapper per adattare sessionHub al tipo richiesto da usePageTracker
13751
+ const sessionHubWrapper = useMemo$1(() => ({
13752
+ isConnected: () => FluxoClientSys.Instance.sessionHub.isConnected,
13753
+ invoke: FluxoClientSys.Instance.sessionHub.invoke.bind(FluxoClientSys.Instance.sessionHub)
13754
+ }), []);
13755
+ usePageTracker(sessionHubWrapper);
13803
13756
  // FIX #1: Stabilizza le funzioni del sessionContext per evitare ricreazioni del listener
13804
13757
  const stableSessionContext = useMemo$1(() => ({
13805
13758
  addOrSwitchToSession: sessionContext.addOrSwitchToSession
@@ -13894,6 +13847,7 @@ function AppContent(props) {
13894
13847
  children: [props.withMultipleSessions ? jsxs(Tabs, {
13895
13848
  variant: 'none',
13896
13849
  value: currentSessionId,
13850
+ keepMounted: true,
13897
13851
  onChange: value => value && sessionContext.setCurrentSession(value),
13898
13852
  children: [jsx(Box, {
13899
13853
  style: {
@@ -14730,7 +14684,6 @@ function FooterBar(props) {
14730
14684
  hasDeveloperAccess,
14731
14685
  hasDataAnalystAccess
14732
14686
  } = useAppSelector(state => state.layout);
14733
- const sessionHub = useSessionHub(false);
14734
14687
  const [wsPopoverOpened, setWsPopoverOpened] = useState(false);
14735
14688
  const [isWsConnected, setIsWsConnected] = useState(false);
14736
14689
  const [connectionId, setConnectionId] = useState(null);
@@ -14744,7 +14697,7 @@ function FooterBar(props) {
14744
14697
  // Monitora lo stato della connessione WebSocket
14745
14698
  useEffect(() => {
14746
14699
  const checkConnection = () => {
14747
- const connected = sessionHub.isConnected();
14700
+ const connected = FluxoClientSys.Instance.sessionHub.isConnected;
14748
14701
  setIsWsConnected(connected);
14749
14702
  if (connected) {
14750
14703
  // Ottieni il connection ID
@@ -14761,17 +14714,17 @@ function FooterBar(props) {
14761
14714
  // Controlla periodicamente ogni 2 secondi
14762
14715
  const interval = setInterval(checkConnection, 2000);
14763
14716
  return () => clearInterval(interval);
14764
- }, [sessionHub]);
14717
+ }, []);
14765
14718
  useEffect(() => {
14766
14719
  if (idle) FluxoStateDispatcher.dispatchSetUserIdle();else FluxoStateDispatcher.dispatchUnsetUserIdle();
14767
14720
  }, [idle]);
14768
14721
  // Invia l'aggiornamento dell'attivitร  utente al server quando cambia lo stato idle
14769
14722
  useEffect(() => {
14770
14723
  if (!isWsConnected) return; // Non inviare se non siamo connessi
14771
- sessionHub.invoke('UpdateUserActivity', !userIdle).catch(error => {
14724
+ FluxoClientSys.Instance.sessionHub.invoke('UpdateUserActivity', !userIdle).catch(error => {
14772
14725
  console.error('Failed to update user activity:', error);
14773
14726
  });
14774
- }, [userIdle, isWsConnected, sessionHub]);
14727
+ }, [userIdle, isWsConnected]);
14775
14728
  [{
14776
14729
  title: 'Home',
14777
14730
  href: '#'
@@ -15669,7 +15622,7 @@ function Navbar(props) {
15669
15622
  id: 'fluxo-shell-sidebar',
15670
15623
  zIndex: 197,
15671
15624
  style: props.shellUi.navigation === ShellUINavigation.Sidebar || props.shellUi.navigation === ShellUINavigation.SidebarMinimal ? {
15672
- borderTopLeftRadius: '20px',
15625
+ borderTopLeftRadius: '12px',
15673
15626
  overflow: 'visible'
15674
15627
  } : undefined,
15675
15628
  children: jsx(AppShell.Section, {
@@ -20050,11 +20003,20 @@ function AppLayout({
20050
20003
  const [currentShellUI, setCurrentShellUI] = useState(ui);
20051
20004
  const isMobile = useMediaQuery('(max-width: 992px)');
20052
20005
  // Monitora lo stato della connessione WebSocket
20053
- const sessionHub = useSessionHub(false);
20054
- const {
20055
- connected,
20056
- hasBeenConnectedOnce
20057
- } = sessionHub;
20006
+ const [connected, setConnected] = useState(false);
20007
+ const [hasBeenConnectedOnce, setHasBeenConnectedOnce] = useState(false);
20008
+ useEffect(() => {
20009
+ const checkConnection = () => {
20010
+ const isConnected = FluxoClientSys.Instance.sessionHub.isConnected;
20011
+ setConnected(isConnected);
20012
+ if (isConnected) {
20013
+ setHasBeenConnectedOnce(true);
20014
+ }
20015
+ };
20016
+ const interval = setInterval(checkConnection, 2000);
20017
+ checkConnection();
20018
+ return () => clearInterval(interval);
20019
+ }, []);
20058
20020
  // Mostra l'overlay solo se la connessione รจ stata persa DOPO essere stata stabilita
20059
20021
  const showDisconnectionOverlay = !connected && hasBeenConnectedOnce;
20060
20022
  // Blocca lo scroll quando l'overlay รจ visibile
@@ -20090,7 +20052,7 @@ function AppLayout({
20090
20052
  return jsx(ShellUIContext.Provider, {
20091
20053
  value: currentShellUI,
20092
20054
  children: jsx(ScreenSharingProvider, {
20093
- sessionHub: sessionHub,
20055
+ sessionHub: FluxoClientSys.Instance.sessionHub,
20094
20056
  children: jsxs(WithShellSessionProvider, {
20095
20057
  withMultipleSessions: (_a = currentShellUI.withMultipleSessions) !== null && _a !== void 0 ? _a : false,
20096
20058
  children: [jsx(WithRavifyProvider, {
@@ -20101,16 +20063,16 @@ function AppLayout({
20101
20063
  className: currentShellUI.navigation === ShellUINavigation.Sidebar || currentShellUI.navigation === ShellUINavigation.SidebarMinimal ? 'flxShellAppShellV2' : 'flxShellAppShellV1',
20102
20064
  styles: {
20103
20065
  main: {
20104
- backgroundColor: '#fafbff'
20066
+ backgroundColor: '#fafbff',
20067
+ paddingLeft: currentShellUI.navigation === ShellUINavigation.None || currentShellUI.navigation === ShellUINavigation.Topbar ? 0 : undefined
20105
20068
  }
20106
20069
  },
20107
20070
  navbar: {
20108
20071
  width: currentShellUI.navigation === ShellUINavigation.SidebarMinimal ? navbarOpened ? 248 : 80 : 248,
20109
20072
  breakpoint: 'sm',
20110
20073
  collapsed: {
20111
- mobile: !navbarOpened,
20112
- // Su mobile, sempre nascosta quando chiusa
20113
- desktop: !navbarOpened && currentShellUI.navigation === ShellUINavigation.Sidebar // Su desktop, nascosta solo con Sidebar normale
20074
+ mobile: currentShellUI.navigation === ShellUINavigation.None ? true : !navbarOpened,
20075
+ desktop: currentShellUI.navigation === ShellUINavigation.None ? true : !navbarOpened && currentShellUI.navigation === ShellUINavigation.Sidebar
20114
20076
  }
20115
20077
  },
20116
20078
  header: {
@@ -60665,23 +60627,319 @@ const ScreenViewerModal = ({
60665
60627
  });
60666
60628
  };
60667
60629
 
60630
+ /**
60631
+ * Modal per inviare messaggi agli utenti connessi
60632
+ */
60633
+ const SendMessageModal = ({
60634
+ opened,
60635
+ onClose,
60636
+ mode,
60637
+ targetId,
60638
+ targetName,
60639
+ availableUsers: _availableUsers = [],
60640
+ sessionHub,
60641
+ onMessageSent
60642
+ }) => {
60643
+ var _a, _b;
60644
+ const [message, setMessage] = useState('');
60645
+ const [messageType, setMessageType] = useState('Informazioni');
60646
+ const [displayType, setDisplayType] = useState('Modal');
60647
+ const [selectedUserIds, setSelectedUserIds] = useState([]);
60648
+ const [isSending, setIsSending] = useState(false);
60649
+ const [error, setError] = useState(null);
60650
+ // Configurazione tipi di visualizzazione con icone
60651
+ const displayTypeConfig = {
60652
+ 'Modal': {
60653
+ icon: jsx(IconWindow, {
60654
+ size: 16
60655
+ }),
60656
+ color: 'blue',
60657
+ label: 'Modale'
60658
+ },
60659
+ 'Toast': {
60660
+ icon: jsx(IconMessage, {
60661
+ size: 16
60662
+ }),
60663
+ color: 'teal',
60664
+ label: 'Toast'
60665
+ },
60666
+ 'NotificationBar': {
60667
+ icon: jsx(IconLayoutBottombar, {
60668
+ size: 16
60669
+ }),
60670
+ color: 'cyan',
60671
+ label: 'Notification Bar'
60672
+ }
60673
+ };
60674
+ const displayTypeOptions = Object.entries(displayTypeConfig).map(([value, config]) => ({
60675
+ value,
60676
+ label: config.label
60677
+ }));
60678
+ // Configurazione tipi di messaggio con icone
60679
+ const messageTypeConfig = {
60680
+ 'Informazioni': {
60681
+ icon: jsx(IconInfoCircle, {
60682
+ size: 16
60683
+ }),
60684
+ color: 'blue',
60685
+ label: 'Informazioni'
60686
+ },
60687
+ 'Successo': {
60688
+ icon: jsx(IconCircleCheck, {
60689
+ size: 16
60690
+ }),
60691
+ color: 'green',
60692
+ label: 'Successo'
60693
+ },
60694
+ 'Avviso': {
60695
+ icon: jsx(IconAlertCircle, {
60696
+ size: 16
60697
+ }),
60698
+ color: 'yellow',
60699
+ label: 'Avviso'
60700
+ },
60701
+ 'Critico': {
60702
+ icon: jsx(IconAlertOctagon, {
60703
+ size: 16
60704
+ }),
60705
+ color: 'red',
60706
+ label: 'Critico'
60707
+ },
60708
+ 'Errore': {
60709
+ icon: jsx(IconX, {
60710
+ size: 16
60711
+ }),
60712
+ color: 'red',
60713
+ label: 'Errore'
60714
+ },
60715
+ 'Alert': {
60716
+ icon: jsx(IconBell, {
60717
+ size: 16
60718
+ }),
60719
+ color: 'orange',
60720
+ label: 'Alert'
60721
+ },
60722
+ 'Notifica': {
60723
+ icon: jsx(IconMail, {
60724
+ size: 16
60725
+ }),
60726
+ color: 'grape',
60727
+ label: 'Notifica'
60728
+ }
60729
+ };
60730
+ const messageTypeOptions = Object.entries(messageTypeConfig).map(([value, config]) => ({
60731
+ value,
60732
+ label: config.label
60733
+ }));
60734
+ const handleSend = () => __awaiter(void 0, void 0, void 0, function* () {
60735
+ if (!message.trim()) {
60736
+ setError('Il messaggio non puรฒ essere vuoto');
60737
+ return;
60738
+ }
60739
+ // Validazione per modalitร  multiple-users
60740
+ if (mode === 'multiple-users' && selectedUserIds.length === 0) {
60741
+ setError('Seleziona almeno un utente');
60742
+ return;
60743
+ }
60744
+ setIsSending(true);
60745
+ setError(null);
60746
+ try {
60747
+ if (mode === 'broadcast') {
60748
+ yield sessionHub.invoke('SendBroadcastMessage', messageType, displayType, message);
60749
+ } else if (mode === 'user' && targetId) {
60750
+ yield sessionHub.invoke('SendMessageToUser', targetId, messageType, displayType, message);
60751
+ } else if (mode === 'session' && targetId) {
60752
+ yield sessionHub.invoke('SendMessageToSession', targetId, messageType, displayType, message);
60753
+ } else if (mode === 'multiple-users') {
60754
+ // Invia il messaggio a tutti gli utenti selezionati
60755
+ const promises = selectedUserIds.map(userId => sessionHub.invoke('SendMessageToUser', userId, messageType, displayType, message));
60756
+ yield Promise.all(promises);
60757
+ console.info(`โœ… Messaggio inviato a ${selectedUserIds.length} utenti`, selectedUserIds);
60758
+ }
60759
+ console.info(`โœ… Messaggio inviato - Modalitร : ${mode}, Tipo: ${messageType}, Display: ${displayType}`);
60760
+ // Reset form
60761
+ setMessage('');
60762
+ setMessageType('Informazioni');
60763
+ setDisplayType('Modal');
60764
+ setSelectedUserIds([]);
60765
+ // Callback
60766
+ onMessageSent === null || onMessageSent === void 0 ? void 0 : onMessageSent();
60767
+ onClose();
60768
+ } catch (err) {
60769
+ console.error('โŒ Errore invio messaggio:', err);
60770
+ setError((err === null || err === void 0 ? void 0 : err.message) || 'Errore durante l\'invio del messaggio');
60771
+ } finally {
60772
+ setIsSending(false);
60773
+ }
60774
+ });
60775
+ const getTitle = () => {
60776
+ switch (mode) {
60777
+ case 'broadcast':
60778
+ return 'Invia messaggio a tutti gli utenti';
60779
+ case 'user':
60780
+ return `Invia messaggio a ${targetName || 'utente'}`;
60781
+ case 'session':
60782
+ return 'Invia messaggio alla sessione';
60783
+ case 'multiple-users':
60784
+ return 'Invia messaggio a utenti specifici';
60785
+ default:
60786
+ return 'Invia messaggio';
60787
+ }
60788
+ };
60789
+ const getDescription = () => {
60790
+ switch (mode) {
60791
+ case 'broadcast':
60792
+ return 'Questo messaggio verrร  inviato a tutti gli utenti connessi all\'applicazione';
60793
+ case 'user':
60794
+ return `Questo messaggio verrร  inviato a tutte le sessioni attive di ${targetName || 'questo utente'}`;
60795
+ case 'session':
60796
+ return 'Questo messaggio verrร  inviato solo a questa specifica sessione';
60797
+ case 'multiple-users':
60798
+ return `Seleziona gli utenti a cui vuoi inviare il messaggio${selectedUserIds.length > 0 ? ` (${selectedUserIds.length} selezionati)` : ''}`;
60799
+ default:
60800
+ return '';
60801
+ }
60802
+ };
60803
+ return jsx(Modal, {
60804
+ opened: opened,
60805
+ onClose: onClose,
60806
+ centered: true,
60807
+ title: jsx(Text, {
60808
+ fw: 600,
60809
+ size: "lg",
60810
+ children: getTitle()
60811
+ }),
60812
+ size: "lg",
60813
+ padding: "md",
60814
+ children: jsxs(Stack, {
60815
+ gap: "md",
60816
+ children: [jsx(Alert, {
60817
+ icon: jsx(IconAlertTriangle, {
60818
+ size: 16
60819
+ }),
60820
+ color: "blue",
60821
+ variant: "light",
60822
+ children: getDescription()
60823
+ }), mode === 'multiple-users' && jsx(MultiSelect, {
60824
+ label: "Seleziona utenti",
60825
+ placeholder: "Cerca e seleziona gli utenti...",
60826
+ value: selectedUserIds,
60827
+ onChange: setSelectedUserIds,
60828
+ data: _availableUsers,
60829
+ searchable: true,
60830
+ clearable: true,
60831
+ required: true,
60832
+ description: `${selectedUserIds.length} utenti selezionati`,
60833
+ error: error && selectedUserIds.length === 0 ? 'Seleziona almeno un utente' : undefined
60834
+ }), jsx(Select, {
60835
+ label: "Tipo di messaggio",
60836
+ placeholder: "Seleziona il tipo",
60837
+ value: messageType,
60838
+ onChange: value => setMessageType(value),
60839
+ data: messageTypeOptions,
60840
+ required: true,
60841
+ leftSection: (_a = messageTypeConfig[messageType]) === null || _a === void 0 ? void 0 : _a.icon,
60842
+ renderOption: ({
60843
+ option
60844
+ }) => {
60845
+ const config = messageTypeConfig[option.value];
60846
+ return jsxs(Group, {
60847
+ gap: "sm",
60848
+ children: [jsx(Text, {
60849
+ c: config.color,
60850
+ children: config.icon
60851
+ }), jsx(Text, {
60852
+ children: config.label
60853
+ })]
60854
+ });
60855
+ }
60856
+ }), jsx(Select, {
60857
+ label: "Modalit\u00E0 di visualizzazione",
60858
+ placeholder: "Seleziona la modalit\u00E0",
60859
+ value: displayType,
60860
+ onChange: value => setDisplayType(value),
60861
+ data: displayTypeOptions,
60862
+ required: true,
60863
+ leftSection: (_b = displayTypeConfig[displayType]) === null || _b === void 0 ? void 0 : _b.icon,
60864
+ renderOption: ({
60865
+ option
60866
+ }) => {
60867
+ const config = displayTypeConfig[option.value];
60868
+ return jsxs(Group, {
60869
+ gap: "sm",
60870
+ children: [jsx(Text, {
60871
+ c: config.color,
60872
+ children: config.icon
60873
+ }), jsx(Text, {
60874
+ children: config.label
60875
+ })]
60876
+ });
60877
+ }
60878
+ }), jsx(Textarea, {
60879
+ label: "Messaggio",
60880
+ placeholder: "Scrivi il messaggio da inviare...",
60881
+ value: message,
60882
+ onChange: e => setMessage(e.currentTarget.value),
60883
+ minRows: 4,
60884
+ maxRows: 8,
60885
+ required: true,
60886
+ error: error
60887
+ }), jsxs(Group, {
60888
+ justify: "space-between",
60889
+ children: [jsxs(Text, {
60890
+ size: "xs",
60891
+ c: "dimmed",
60892
+ children: [mode === 'broadcast' && 'Il messaggio sarร  visibile a tutti', mode === 'user' && targetId && `Target User ID: ${targetId}`, mode === 'session' && targetId && `Target Connection ID: ${targetId.substring(0, 8)}...`, mode === 'multiple-users' && selectedUserIds.length > 0 && `Invio a ${selectedUserIds.length} utenti`]
60893
+ }), jsxs(Group, {
60894
+ gap: "sm",
60895
+ children: [jsx(Button, {
60896
+ variant: "subtle",
60897
+ color: "gray",
60898
+ onClick: onClose,
60899
+ disabled: isSending,
60900
+ children: "Annulla"
60901
+ }), jsx(Button, {
60902
+ leftSection: jsx(IconSend, {
60903
+ size: 16
60904
+ }),
60905
+ onClick: handleSend,
60906
+ loading: isSending,
60907
+ color: mode === 'broadcast' ? 'orange' : mode === 'multiple-users' ? 'grape' : 'blue',
60908
+ disabled: mode === 'multiple-users' && selectedUserIds.length === 0,
60909
+ children: isSending && mode === 'multiple-users' ? `Invio... (${selectedUserIds.length})` : 'Invia messaggio'
60910
+ })]
60911
+ })]
60912
+ })]
60913
+ })
60914
+ });
60915
+ };
60916
+
60668
60917
  function ConnectedUsers() {
60669
60918
  const [connectedUsers, setConnectedUsers] = useState([]);
60670
60919
  const [expandedUsers, setExpandedUsers] = useState(new Set());
60671
60920
  const [searchQuery, setSearchQuery] = useState('');
60672
60921
  const [currentConnectionId, setCurrentConnectionId] = useState('');
60673
60922
  const [currentDeviceId, setCurrentDeviceId] = useState('');
60923
+ const [loading, setLoading] = useState(true);
60674
60924
  // Screen sharing modal state
60675
60925
  const [screenViewerOpened, setScreenViewerOpened] = useState(false);
60676
60926
  const [selectedConnection, setSelectedConnection] = useState(null);
60927
+ // Send message modal state
60928
+ const [sendMessageOpened, setSendMessageOpened] = useState(false);
60929
+ const [messageMode, setMessageMode] = useState('broadcast');
60930
+ const [messageTarget, setMessageTarget] = useState(null);
60931
+ const [availableUsersForMultipleSelect, setAvailableUsersForMultipleSelect] = useState([]);
60677
60932
  // Confirm modal state for force logout
60678
60933
  const [showForceLogoutModal, setShowForceLogoutModal] = useState(false);
60679
60934
  const [deviceToDisconnect, setDeviceToDisconnect] = useState(null);
60680
- // Hook per il SessionHub
60681
- const sessionHub = useSessionHub(false);
60935
+ // Debounce timer per evitare troppi refresh consecutivi
60936
+ const [updateDebounceTimer, setUpdateDebounceTimer] = useState(null);
60682
60937
  // Memoizza la funzione di caricamento per poterla usare nell'event handler
60683
- const loadConnectedUsers = useCallback$1(() => __awaiter(this, void 0, void 0, function* () {
60938
+ const loadConnectedUsers = useCallback$1((...args_1) => __awaiter(this, [...args_1], void 0, function* (showLoader = true) {
60684
60939
  try {
60940
+ if (showLoader) {
60941
+ setLoading(true);
60942
+ }
60685
60943
  const users = yield FluxoClientSys.Instance.sessionHub.getConnectedUsers();
60686
60944
  setConnectedUsers(users);
60687
60945
  // Ottieni il connection ID corrente
@@ -60701,27 +60959,64 @@ function ConnectedUsers() {
60701
60959
  message: 'Impossibile caricare gli utenti connessi',
60702
60960
  color: 'red'
60703
60961
  });
60962
+ } finally {
60963
+ if (showLoader) {
60964
+ setLoading(false);
60965
+ }
60704
60966
  }
60705
60967
  }), []);
60706
60968
  // Carica gli utenti connessi all'avvio
60707
60969
  useEffect(() => {
60708
60970
  loadConnectedUsers();
60709
60971
  }, [loadConnectedUsers]);
60972
+ // Aggiorna la lista di utenti disponibili per la selezione multipla
60973
+ useEffect(() => {
60974
+ // Raggruppa gli utenti per userId per evitare duplicati
60975
+ const grouped = connectedUsers.reduce((acc, user) => {
60976
+ const existing = acc.find(u => u.userId === user.userId);
60977
+ if (existing) {
60978
+ // Unisci le sessioni
60979
+ existing.sessions = [...existing.sessions, ...user.sessions];
60980
+ existing.count = existing.sessions.length;
60981
+ } else {
60982
+ acc.push(Object.assign({}, user));
60983
+ }
60984
+ return acc;
60985
+ }, []);
60986
+ const usersList = grouped.map(user => ({
60987
+ value: user.userId,
60988
+ label: `${user.userName} (${user.count} ${user.count === 1 ? 'sessione' : 'sessioni'})`
60989
+ }));
60990
+ setAvailableUsersForMultipleSelect(usersList);
60991
+ }, [connectedUsers]);
60710
60992
  // Ascolta l'evento OnConnectedUsersChanged e ricarica automaticamente la lista
60711
60993
  useEffect(() => {
60712
60994
  const handleConnectedUsersChanged = () => {
60713
- console.info('๐Ÿ‘ฅ Connected users changed, reloading list...');
60714
- loadConnectedUsers();
60995
+ console.info('๐Ÿ‘ฅ Connected users changed, scheduling reload...');
60996
+ // Cancella il timer precedente se esiste
60997
+ if (updateDebounceTimer) {
60998
+ clearTimeout(updateDebounceTimer);
60999
+ }
61000
+ // Imposta un nuovo timer con debounce di 500ms
61001
+ const timer = setTimeout(() => {
61002
+ console.info('๐Ÿ‘ฅ Executing debounced reload...');
61003
+ loadConnectedUsers(false); // false = non mostrare il loader
61004
+ }, 500);
61005
+ setUpdateDebounceTimer(timer);
60715
61006
  };
60716
61007
  // Registra l'event handler
60717
- sessionHub.on('OnConnectedUsersChanged', handleConnectedUsersChanged);
61008
+ FluxoClientSys.Instance.sessionHub.on('OnConnectedUsersChanged', handleConnectedUsersChanged);
60718
61009
  console.info('๐ŸŽง Listening for OnConnectedUsersChanged events');
60719
61010
  // Cleanup
60720
61011
  return () => {
60721
- sessionHub.off('OnConnectedUsersChanged', handleConnectedUsersChanged);
61012
+ FluxoClientSys.Instance.sessionHub.off('OnConnectedUsersChanged', handleConnectedUsersChanged);
60722
61013
  console.info('๐Ÿงน Stopped listening for OnConnectedUsersChanged events');
61014
+ // Pulisci il timer se esiste
61015
+ if (updateDebounceTimer) {
61016
+ clearTimeout(updateDebounceTimer);
61017
+ }
60723
61018
  };
60724
- }, [sessionHub, loadConnectedUsers]);
61019
+ }, [loadConnectedUsers, updateDebounceTimer]);
60725
61020
  const toggleUserExpand = userId => {
60726
61021
  const newExpanded = new Set(expandedUsers);
60727
61022
  if (newExpanded.has(userId)) {
@@ -60778,7 +61073,7 @@ function ConnectedUsers() {
60778
61073
  // Funzione per disconnettere forzatamente una sessione
60779
61074
  const handleForceLogout = (deviceId, userName) => __awaiter(this, void 0, void 0, function* () {
60780
61075
  try {
60781
- yield sessionHub.invoke('ForceLogout', deviceId);
61076
+ yield FluxoClientSys.Instance.sessionHub.invoke('ForceLogout', deviceId);
60782
61077
  showNotification({
60783
61078
  title: 'Disconnessione avviata',
60784
61079
  message: `Tutte le sessioni di ${userName} sul dispositivo sono state disconnesse`,
@@ -60793,92 +61088,182 @@ function ConnectedUsers() {
60793
61088
  });
60794
61089
  }
60795
61090
  });
61091
+ // Funzioni per aprire la modale di invio messaggi
61092
+ const openBroadcastMessage = () => {
61093
+ setMessageMode('broadcast');
61094
+ setMessageTarget(null);
61095
+ setSendMessageOpened(true);
61096
+ };
61097
+ const openMultipleUsersMessage = () => {
61098
+ setMessageMode('multiple-users');
61099
+ setMessageTarget(null);
61100
+ setSendMessageOpened(true);
61101
+ };
61102
+ const openUserMessage = (userId, userName) => {
61103
+ setMessageMode('user');
61104
+ setMessageTarget({
61105
+ id: userId,
61106
+ name: userName
61107
+ });
61108
+ setSendMessageOpened(true);
61109
+ };
61110
+ const openSessionMessage = (connectionId, userName) => {
61111
+ setMessageMode('session');
61112
+ setMessageTarget({
61113
+ id: connectionId,
61114
+ name: userName
61115
+ });
61116
+ setSendMessageOpened(true);
61117
+ };
61118
+ const handleMessageSent = () => {
61119
+ showNotification({
61120
+ title: 'Messaggio inviato',
61121
+ message: 'Il messaggio รจ stato inviato con successo',
61122
+ color: 'green'
61123
+ });
61124
+ };
60796
61125
  return jsxs(Stack, {
60797
61126
  gap: "md",
60798
61127
  children: [jsxs(Group, {
60799
61128
  gap: "md",
61129
+ grow: true,
60800
61130
  children: [jsx(Card, {
60801
61131
  withBorder: true,
60802
- padding: "md",
60803
- style: {
60804
- flex: 1
60805
- },
60806
- children: jsxs(Group, {
61132
+ padding: "lg",
61133
+ children: jsxs(Stack, {
60807
61134
  gap: "xs",
60808
- children: [jsx(IconUserCircle, {
60809
- size: 24,
60810
- style: {
60811
- color: 'var(--mantine-color-blue-6)'
60812
- }
61135
+ children: [jsxs(Group, {
61136
+ gap: "sm",
61137
+ justify: "space-between",
61138
+ children: [jsx(IconUserCircle, {
61139
+ size: 28,
61140
+ style: {
61141
+ color: 'var(--mantine-color-blue-6)'
61142
+ }
61143
+ }), loading ? jsx(Loader, {
61144
+ size: "xs"
61145
+ }) : jsx(Badge, {
61146
+ color: "blue",
61147
+ variant: "light",
61148
+ size: "lg",
61149
+ children: groupedUsers.length
61150
+ })]
60813
61151
  }), jsxs("div", {
60814
61152
  children: [jsx(Text, {
60815
- size: "xs",
61153
+ size: "sm",
60816
61154
  c: "dimmed",
61155
+ fw: 500,
60817
61156
  children: "Utenti connessi"
60818
- }), jsx(Text, {
60819
- size: "xl",
60820
- fw: 700,
60821
- children: groupedUsers.length
61157
+ }), !loading && jsx(Text, {
61158
+ size: "xs",
61159
+ c: "dimmed",
61160
+ children: "Utenti unici attivi"
60822
61161
  })]
60823
61162
  })]
60824
61163
  })
60825
61164
  }), jsx(Card, {
60826
61165
  withBorder: true,
60827
- padding: "md",
60828
- style: {
60829
- flex: 1
60830
- },
60831
- children: jsxs(Group, {
61166
+ padding: "lg",
61167
+ children: jsxs(Stack, {
60832
61168
  gap: "xs",
60833
- children: [jsx(IconPlugConnected, {
60834
- size: 24,
60835
- style: {
60836
- color: 'var(--mantine-color-teal-6)'
60837
- }
61169
+ children: [jsxs(Group, {
61170
+ gap: "sm",
61171
+ justify: "space-between",
61172
+ children: [jsx(IconPlugConnected, {
61173
+ size: 28,
61174
+ style: {
61175
+ color: 'var(--mantine-color-teal-6)'
61176
+ }
61177
+ }), loading ? jsx(Loader, {
61178
+ size: "xs"
61179
+ }) : jsx(Badge, {
61180
+ color: "teal",
61181
+ variant: "light",
61182
+ size: "lg",
61183
+ children: getTotalSessions()
61184
+ })]
60838
61185
  }), jsxs("div", {
60839
61186
  children: [jsx(Text, {
60840
- size: "xs",
61187
+ size: "sm",
60841
61188
  c: "dimmed",
61189
+ fw: 500,
60842
61190
  children: "Sessioni totali"
60843
- }), jsx(Text, {
60844
- size: "xl",
60845
- fw: 700,
60846
- children: getTotalSessions()
61191
+ }), !loading && jsx(Text, {
61192
+ size: "xs",
61193
+ c: "dimmed",
61194
+ children: "Connessioni WebSocket attive"
60847
61195
  })]
60848
61196
  })]
60849
61197
  })
60850
61198
  }), jsx(Card, {
60851
61199
  withBorder: true,
60852
- padding: "md",
60853
- style: {
60854
- flex: 1
60855
- },
60856
- children: jsxs(Group, {
61200
+ padding: "lg",
61201
+ children: jsxs(Stack, {
60857
61202
  gap: "xs",
60858
- children: [jsx(IconDeviceLaptop, {
60859
- size: 24,
60860
- style: {
60861
- color: 'var(--mantine-color-indigo-6)'
60862
- }
60863
- }), jsxs("div", {
60864
- children: [jsx(Text, {
60865
- size: "xs",
60866
- c: "dimmed",
60867
- children: "Dispositivi totali"
60868
- }), jsx(Text, {
60869
- size: "xl",
60870
- fw: 700,
61203
+ children: [jsxs(Group, {
61204
+ gap: "sm",
61205
+ justify: "space-between",
61206
+ children: [jsx(IconDeviceLaptop, {
61207
+ size: 28,
61208
+ style: {
61209
+ color: 'var(--mantine-color-indigo-6)'
61210
+ }
61211
+ }), loading ? jsx(Loader, {
61212
+ size: "xs"
61213
+ }) : jsx(Badge, {
61214
+ color: "indigo",
61215
+ variant: "light",
61216
+ size: "lg",
60871
61217
  children: groupedUsers.reduce((acc, user) => {
60872
61218
  const devices = new Set(user.sessions.map(s => s.deviceId || 'unknown'));
60873
61219
  return acc + devices.size;
60874
61220
  }, 0)
60875
61221
  })]
61222
+ }), jsxs("div", {
61223
+ children: [jsx(Text, {
61224
+ size: "sm",
61225
+ c: "dimmed",
61226
+ fw: 500,
61227
+ children: "Dispositivi totali"
61228
+ }), !loading && jsx(Text, {
61229
+ size: "xs",
61230
+ c: "dimmed",
61231
+ children: "Dispositivi unici registrati"
61232
+ })]
60876
61233
  })]
60877
61234
  })
60878
61235
  })]
60879
61236
  }), jsx(DataCard, {
60880
61237
  title: "Utenti connessi",
60881
61238
  padded: false,
61239
+ elements: [jsx(Tooltip, {
61240
+ label: "Invia messaggio a tutti gli utenti connessi",
61241
+ children: jsx(Button, {
61242
+ leftSection: jsx(IconBroadcast, {
61243
+ size: 16
61244
+ }),
61245
+ variant: "light",
61246
+ color: "orange",
61247
+ size: "xs",
61248
+ onClick: openBroadcastMessage,
61249
+ children: "Messaggio Broadcast"
61250
+ })
61251
+ }, "broadcast-btn"), jsx(Space, {
61252
+ w: 16
61253
+ }), jsx(Tooltip, {
61254
+ label: "Invia messaggio a utenti specifici selezionati",
61255
+ children: jsx(Button, {
61256
+ leftSection: jsx(IconUsersGroup, {
61257
+ size: 16
61258
+ }),
61259
+ variant: "light",
61260
+ color: "grape",
61261
+ size: "xs",
61262
+ onClick: openMultipleUsersMessage,
61263
+ disabled: groupedUsers.length === 0,
61264
+ children: "Messaggio a Utenti Multipli"
61265
+ })
61266
+ }, "multiple-users-btn")],
60882
61267
  children: jsxs(Stack, {
60883
61268
  gap: 0,
60884
61269
  children: [jsx(Box, {
@@ -60902,14 +61287,29 @@ function ConnectedUsers() {
60902
61287
  value: searchQuery,
60903
61288
  onChange: e => setSearchQuery(e.currentTarget.value)
60904
61289
  })
60905
- }), filteredUsers.length === 0 ? jsx(Box, {
61290
+ }), loading ? jsx(Box, {
61291
+ p: 60,
61292
+ children: jsx(Center, {
61293
+ children: jsxs(Stack, {
61294
+ gap: "md",
61295
+ align: "center",
61296
+ children: [jsx(Loader, {
61297
+ size: "lg"
61298
+ }), jsx(Text, {
61299
+ size: "sm",
61300
+ c: "dimmed",
61301
+ children: "Caricamento utenti connessi..."
61302
+ })]
61303
+ })
61304
+ })
61305
+ }) : filteredUsers.length === 0 ? jsx(Box, {
60906
61306
  p: 40,
60907
61307
  children: jsx(NoData, {
60908
61308
  icon: jsx(IconUsers, {
60909
61309
  size: 48
60910
61310
  }),
60911
61311
  iconSize: 48,
60912
- message: searchQuery ? "Nessun risultato" : "Nessun utente connesso"
61312
+ message: searchQuery ? "Nessun risultato trovato" : "Nessun utente connesso"
60913
61313
  })
60914
61314
  }) : jsx(Table.ScrollContainer, {
60915
61315
  minWidth: 800,
@@ -60938,6 +61338,12 @@ function ConnectedUsers() {
60938
61338
  textAlign: 'center'
60939
61339
  },
60940
61340
  children: "Sessioni"
61341
+ }), jsx(Table.Th, {
61342
+ w: 100,
61343
+ style: {
61344
+ textAlign: 'center'
61345
+ },
61346
+ children: "Azioni"
60941
61347
  })]
60942
61348
  })
60943
61349
  }), jsx(Table.Tbody, {
@@ -60946,7 +61352,8 @@ function ConnectedUsers() {
60946
61352
  return jsxs(Fragment, {
60947
61353
  children: [jsxs(Table.Tr, {
60948
61354
  style: {
60949
- cursor: 'pointer'
61355
+ cursor: 'pointer',
61356
+ transition: 'background-color 0.15s ease'
60950
61357
  },
60951
61358
  onClick: () => toggleUserExpand(user.userId),
60952
61359
  children: [jsx(Table.Td, {
@@ -60999,46 +61406,64 @@ function ConnectedUsers() {
60999
61406
  children: [user.count, " ", user.count === 1 ? 'sessione' : 'sessioni']
61000
61407
  })
61001
61408
  })
61409
+ }), jsx(Table.Td, {
61410
+ children: jsx(Center, {
61411
+ children: jsx(Tooltip, {
61412
+ label: "Invia messaggio a tutte le sessioni dell'utente",
61413
+ children: jsx(ActionIcon, {
61414
+ size: "sm",
61415
+ variant: "light",
61416
+ color: "blue",
61417
+ onClick: e => {
61418
+ e.stopPropagation();
61419
+ openUserMessage(user.userId, user.userName);
61420
+ },
61421
+ children: jsx(IconSend, {
61422
+ size: 16
61423
+ })
61424
+ })
61425
+ })
61426
+ })
61002
61427
  })]
61003
61428
  }, user.userId), expandedUsers.has(user.userId) && jsx(Table.Tr, {
61004
61429
  children: jsx(Table.Td, {
61005
- colSpan: 5,
61430
+ colSpan: 6,
61006
61431
  style: {
61007
61432
  backgroundColor: 'var(--mantine-color-gray-0)',
61008
61433
  padding: 0
61009
61434
  },
61010
61435
  children: jsx(Box, {
61011
- p: "md",
61436
+ p: "lg",
61012
61437
  children: jsx(Stack, {
61013
- gap: "md",
61014
- children: Array.from(groupSessionsByDevice(user.sessions)).map(([deviceId, deviceSessions]) => {
61438
+ gap: "lg",
61439
+ children: Array.from(groupSessionsByDevice(user.sessions)).map(([deviceId, deviceSessions], index, array) => {
61015
61440
  const isCurrentDevice = deviceId === currentDeviceId;
61016
61441
  return jsxs(Box, {
61017
61442
  children: [jsxs(Group, {
61018
- gap: 6,
61019
- mb: 8,
61443
+ gap: 8,
61444
+ mb: 12,
61020
61445
  justify: "space-between",
61021
61446
  children: [jsxs(Group, {
61022
- gap: 6,
61447
+ gap: 8,
61023
61448
  children: [jsx(IconDeviceLaptop, {
61024
- size: 14,
61449
+ size: 16,
61025
61450
  style: {
61026
61451
  color: 'var(--mantine-color-indigo-6)'
61027
61452
  }
61028
61453
  }), jsxs(Text, {
61029
- size: "xs",
61454
+ size: "sm",
61030
61455
  fw: 600,
61031
61456
  c: "dimmed",
61032
61457
  children: ["Dispositivo: ", getDeviceIdShort(deviceId)]
61033
61458
  }), jsxs(Badge, {
61034
- size: "xs",
61459
+ size: "sm",
61035
61460
  color: "indigo",
61036
61461
  variant: "dot",
61037
61462
  children: [deviceSessions.length, " ", deviceSessions.length === 1 ? 'sessione' : 'sessioni']
61038
61463
  }), isCurrentDevice && jsx(Badge, {
61039
61464
  color: "blue",
61040
61465
  variant: "filled",
61041
- size: "xs",
61466
+ size: "sm",
61042
61467
  children: "Il tuo dispositivo"
61043
61468
  })]
61044
61469
  }), !isCurrentDevice && jsx(Tooltip, {
@@ -61062,45 +61487,57 @@ function ConnectedUsers() {
61062
61487
  })
61063
61488
  })]
61064
61489
  }), jsxs(Table, {
61065
- withTableBorder: true,
61066
61490
  withColumnBorders: true,
61491
+ style: {
61492
+ tableLayout: 'fixed',
61493
+ width: '100%'
61494
+ },
61067
61495
  children: [jsx(Table.Thead, {
61068
61496
  children: jsxs(Table.Tr, {
61069
61497
  children: [jsx(Table.Th, {
61070
- w: 40,
61498
+ style: {
61499
+ width: '40px'
61500
+ },
61071
61501
  children: jsx(Center, {
61072
- children: jsx(IconNetwork, {
61502
+ children: jsx(IconPlugConnected, {
61073
61503
  size: 12
61074
61504
  })
61075
61505
  })
61076
61506
  }), jsx(Table.Th, {
61077
- w: 'auto',
61078
- miw: 150,
61079
- children: "Connection ID"
61507
+ style: {
61508
+ width: '100px'
61509
+ },
61510
+ children: "ID"
61080
61511
  }), jsx(Table.Th, {
61081
- w: 120,
61512
+ style: {
61513
+ width: '110px'
61514
+ },
61082
61515
  children: "Indirizzo IP"
61083
61516
  }), jsx(Table.Th, {
61084
- w: 100,
61517
+ style: {
61518
+ width: '110px'
61519
+ },
61085
61520
  children: "Browser"
61086
61521
  }), jsx(Table.Th, {
61087
- w: 200,
61522
+ style: {
61523
+ width: '150px'
61524
+ },
61088
61525
  children: "Pagina Corrente"
61089
61526
  }), jsx(Table.Th, {
61090
- w: 100,
61091
61527
  style: {
61528
+ width: '60px',
61092
61529
  textAlign: 'center'
61093
61530
  },
61094
61531
  children: "Attivit\u00E0"
61095
61532
  }), jsx(Table.Th, {
61096
- w: 100,
61097
61533
  style: {
61534
+ width: '60px',
61098
61535
  textAlign: 'center'
61099
61536
  },
61100
61537
  children: "Stato"
61101
61538
  }), jsx(Table.Th, {
61102
- w: 64,
61103
61539
  style: {
61540
+ width: '80px',
61104
61541
  textAlign: 'center'
61105
61542
  },
61106
61543
  children: "Azioni"
@@ -61220,41 +61657,60 @@ function ConnectedUsers() {
61220
61657
  })
61221
61658
  }), jsx(Table.Td, {
61222
61659
  children: jsx(Center, {
61223
- children: isCurrentConnection ? jsx(Tooltip, {
61224
- label: "Non puoi visualizzare il tuo schermo",
61225
- children: jsx(ActionIcon, {
61226
- size: "xs",
61227
- variant: "light",
61228
- color: "gray",
61229
- disabled: true,
61230
- children: jsx(IconEye, {
61231
- size: 14
61660
+ children: jsxs(Group, {
61661
+ gap: 8,
61662
+ children: [isCurrentConnection ? jsx(Tooltip, {
61663
+ label: "Non puoi visualizzare il tuo schermo",
61664
+ children: jsx(ActionIcon, {
61665
+ size: "xs",
61666
+ variant: "light",
61667
+ color: "gray",
61668
+ disabled: true,
61669
+ children: jsx(IconEye, {
61670
+ size: 14
61671
+ })
61232
61672
  })
61233
- })
61234
- }) : jsx(Tooltip, {
61235
- label: "Visualizza schermo",
61236
- children: jsx(ActionIcon, {
61237
- size: "xs",
61238
- variant: "light",
61239
- color: "gray",
61240
- onClick: e => {
61241
- e.stopPropagation();
61242
- setSelectedConnection({
61243
- connectionId: session.wsConnectionId,
61244
- userName: session.userName
61245
- });
61246
- setScreenViewerOpened(true);
61247
- },
61248
- children: jsx(IconEye, {
61249
- size: 14
61673
+ }) : jsx(Tooltip, {
61674
+ label: "Visualizza schermo",
61675
+ children: jsx(ActionIcon, {
61676
+ size: "xs",
61677
+ variant: "light",
61678
+ color: "gray",
61679
+ onClick: e => {
61680
+ e.stopPropagation();
61681
+ setSelectedConnection({
61682
+ connectionId: session.wsConnectionId,
61683
+ userName: session.userName
61684
+ });
61685
+ setScreenViewerOpened(true);
61686
+ },
61687
+ children: jsx(IconEye, {
61688
+ size: 14
61689
+ })
61250
61690
  })
61251
- })
61691
+ }), jsx(Tooltip, {
61692
+ label: "Invia messaggio a questa sessione",
61693
+ children: jsx(ActionIcon, {
61694
+ size: "xs",
61695
+ variant: "light",
61696
+ color: "blue",
61697
+ onClick: e => {
61698
+ e.stopPropagation();
61699
+ openSessionMessage(session.wsConnectionId, session.userName);
61700
+ },
61701
+ children: jsx(IconSend, {
61702
+ size: 14
61703
+ })
61704
+ })
61705
+ })]
61252
61706
  })
61253
61707
  })
61254
61708
  })]
61255
61709
  }, idx);
61256
61710
  })
61257
61711
  })]
61712
+ }), index < array.length - 1 && jsx(Divider, {
61713
+ my: "md"
61258
61714
  })]
61259
61715
  }, deviceId);
61260
61716
  })
@@ -61274,6 +61730,15 @@ function ConnectedUsers() {
61274
61730
  connectionId: selectedConnection === null || selectedConnection === void 0 ? void 0 : selectedConnection.connectionId,
61275
61731
  userName: selectedConnection === null || selectedConnection === void 0 ? void 0 : selectedConnection.userName,
61276
61732
  sessionHub: FluxoClientSys.Instance.sessionHub
61733
+ }), jsx(SendMessageModal, {
61734
+ opened: sendMessageOpened,
61735
+ onClose: () => setSendMessageOpened(false),
61736
+ mode: messageMode,
61737
+ targetId: messageTarget === null || messageTarget === void 0 ? void 0 : messageTarget.id,
61738
+ targetName: messageTarget === null || messageTarget === void 0 ? void 0 : messageTarget.name,
61739
+ availableUsers: availableUsersForMultipleSelect,
61740
+ sessionHub: FluxoClientSys.Instance.sessionHub,
61741
+ onMessageSent: handleMessageSent
61277
61742
  }), jsx(ConfirmModal, {
61278
61743
  open: showForceLogoutModal,
61279
61744
  title: "Conferma disconnessione",
@@ -64594,7 +65059,7 @@ function McpServerManagement() {
64594
65059
  function Settings(props) {
64595
65060
  const [currentTab, setCurrentTab] = useState('ui');
64596
65061
  const [apiRestDoc, setApiRestDoc] = useState();
64597
- const navigate = useNavigate();
65062
+ const navigate = useFlxNavigate();
64598
65063
  const {
64599
65064
  hasAdminAccess,
64600
65065
  hasDeveloperAccess,
@@ -64606,6 +65071,9 @@ function Settings(props) {
64606
65071
  } = useAppSelector(state => state.layout.systemSettings);
64607
65072
  const [showBiEditorModal, setShowBiEditorModal] = useState(false);
64608
65073
  const isClosingRef = useRef(false);
65074
+ const {
65075
+ headerHeight
65076
+ } = useShellLayout();
64609
65077
  //useDocumentTitle('Amministrazione');
64610
65078
  // Intercetta il refresh e il cambio tab del browser
64611
65079
  useEffect(() => {
@@ -64829,7 +65297,7 @@ function Settings(props) {
64829
65297
  items: [{
64830
65298
  key: 'bi',
64831
65299
  title: jsx(Text, {
64832
- children: "BI Editor"
65300
+ children: "BI Designer"
64833
65301
  }),
64834
65302
  onClick: () => {
64835
65303
  //window.location.hash = 'bi';
@@ -65017,7 +65485,11 @@ function Settings(props) {
65017
65485
  children: "KOREBI"
65018
65486
  })]
65019
65487
  }),
65020
- onClick: () => navigate('/korebi-ide'),
65488
+ onClick: () => navigate('/korebi-ide', {
65489
+ state: {
65490
+ title: "Korebi IDE"
65491
+ }
65492
+ }),
65021
65493
  disabled: false,
65022
65494
  icon: jsx(IconCode, {
65023
65495
  size: 18
@@ -65092,32 +65564,27 @@ function Settings(props) {
65092
65564
  children: jsx(EmailTemplate, {})
65093
65565
  }) : jsx(ErrorPage$1, {});
65094
65566
  case 'apidoc':
65095
- return hasAdminAccess || hasDeveloperAccess ? jsx(ScrollArea, {
65096
- style: {
65097
- height: 'calc(100vh - 132px)'
65098
- },
65099
- children: jsx(ApiReferenceReact, {
65100
- configuration: {
65101
- darkMode: false,
65102
- customCss: '.darklight-reference {display: none !important} .references-navigation-list { height: calc(100vh - 132px) !important; }',
65103
- hideDarkModeToggle: true,
65104
- forceDarkModeState: 'light',
65105
- authentication: {
65106
- http: {
65107
- basic: {
65108
- username: "",
65109
- password: ""
65110
- },
65111
- bearer: {
65112
- token: localStorage.getItem('access-token')
65113
- }
65567
+ return hasAdminAccess || hasDeveloperAccess ? jsx(ApiReferenceReact, {
65568
+ configuration: {
65569
+ showDeveloperTools: 'never',
65570
+ darkMode: false,
65571
+ customCss: `.darklight-reference {display: none !important} aside {height: calc(100vh - 178px) !important; top: ${headerHeight + 40}px !important; } .open-api-client-button {display: none !important}`,
65572
+ hideDarkModeToggle: true,
65573
+ forceDarkModeState: 'light',
65574
+ authentication: {
65575
+ http: {
65576
+ bearer: {
65577
+ token: localStorage.getItem('access-token')
65114
65578
  }
65115
- },
65116
- spec: {
65117
- url: FluxoClientSys.Instance.clientConfig.fluxoInstanceUrl.replace('/api', '') + '/openapi/v1.json'
65118
65579
  }
65119
- }
65120
- })
65580
+ },
65581
+ sources: [{
65582
+ url: FluxoClientSys.Instance.clientConfig.fluxoInstanceUrl.replace('/api', '') + '/openapi/v1.json',
65583
+ agent: {
65584
+ disabled: true
65585
+ }
65586
+ }]
65587
+ }
65121
65588
  }) : jsx(ErrorPage$1, {});
65122
65589
  /*return apiRestDoc ? (
65123
65590
  <DataCard title={'Documentazione API REST'}>
@@ -65224,42 +65691,47 @@ function Settings(props) {
65224
65691
  });
65225
65692
  }
65226
65693
 
65227
- function MainRoutes(props) {
65228
- const {
65229
- hasAdminAccess,
65230
- hasDeveloperAccess,
65231
- hasDataAnalystAccess
65232
- } = useSelector(state => state.layout);
65233
- const KIde = /*#__PURE__*/lazy(() => import('@fluxo-dev/shell-korebi').then(({
65234
- KorebiIde
65235
- }) => ({
65236
- default: KorebiIde
65237
- })));
65238
- return jsxs(FlxRoutes, {
65239
- children: [props.isAdminFrontend && (hasDeveloperAccess || hasDataAnalystAccess || hasAdminAccess) && jsxs(Fragment, {
65240
- children: [jsx(Route, {
65241
- path: 'settings',
65242
- element: jsx(Settings, {
65243
- slots: props.fluxoShellProps.slots,
65244
- pluginEndpoint: props.pluginEndpoint,
65245
- frontends: props.frontends
65246
- })
65247
- }), jsx(Route, {
65248
- path: 'korebi-ide',
65249
- element: jsx(Suspense, {
65250
- children: jsx(KIde, {})
65251
- })
65252
- }), jsx(Route, {
65253
- path: 'ravify/jobs-viewer',
65254
- element: jsx(JobsViewer, {})
65255
- })]
65256
- }), props.fluxoShellProps.ui.security.showMyProfile && jsx(Route, {
65694
+ const KIde = /*#__PURE__*/lazy(() => import('@fluxo-dev/shell-korebi').then(({
65695
+ KorebiIde
65696
+ }) => ({
65697
+ default: KorebiIde
65698
+ })));
65699
+ /**
65700
+ * Genera le routes principali come RouteObject[] invece di componente wrapper
65701
+ * Questo evita il remount dei componenti quando si switcha tra sessioni
65702
+ */
65703
+ function generateMainRoutes(props, hasAdminAccess, hasDeveloperAccess, hasDataAnalystAccess) {
65704
+ const routes = [];
65705
+ if (props.isAdminFrontend && (hasDeveloperAccess || hasDataAnalystAccess || hasAdminAccess)) {
65706
+ routes.push({
65707
+ path: 'settings',
65708
+ element: jsx(Settings, {
65709
+ slots: props.fluxoShellProps.slots,
65710
+ pluginEndpoint: props.pluginEndpoint,
65711
+ frontends: props.frontends
65712
+ })
65713
+ }, {
65714
+ path: 'korebi-ide',
65715
+ element: jsx(Suspense, {
65716
+ fallback: jsx("div", {
65717
+ children: "Loading..."
65718
+ }),
65719
+ children: jsx(KIde, {})
65720
+ })
65721
+ }, {
65722
+ path: 'ravify/jobs-viewer',
65723
+ element: jsx(JobsViewer, {})
65724
+ });
65725
+ }
65726
+ if (props.fluxoShellProps.ui.security.showMyProfile) {
65727
+ routes.push({
65257
65728
  path: 'me',
65258
65729
  element: jsx(UserProfile, {
65259
65730
  slots: props.fluxoShellProps.slots
65260
65731
  })
65261
- })]
65262
- });
65732
+ });
65733
+ }
65734
+ return routes;
65263
65735
  }
65264
65736
 
65265
65737
  function ForgotPassword(props) {
@@ -76907,6 +77379,519 @@ var dxReportingIt = {
76907
77379
  "ASPxReportsStringId.ReportDesigner_FieldList_AddDataSource": "Aggiungi origine dati"
76908
77380
  };
76909
77381
 
77382
+ /**
77383
+ * Hook to manage SessionHub WebSocket connection lifecycle
77384
+ * @param shouldConnect - When true, starts the connection. Use this to delay connection until FluxoClient is initialized
77385
+ */
77386
+ const useSessionHub = (shouldConnect = true) => {
77387
+ const isConnecting = useRef(false);
77388
+ const hasStartedRef = useRef(false);
77389
+ const [isConnected, setIsConnected] = useState(false);
77390
+ const hasBeenConnectedOnce = useRef(false); // Flag per tracciare se si รจ mai connesso
77391
+ // Funzione per avviare la connessione
77392
+ const startConnection = useCallback$1(() => __awaiter(void 0, void 0, void 0, function* () {
77393
+ if (isConnecting.current || hasStartedRef.current) return;
77394
+ isConnecting.current = true;
77395
+ try {
77396
+ yield FluxoClientSys.Instance.sessionHub.start();
77397
+ console.info('โœ… SessionHub connection started from useSessionHub hook');
77398
+ // Registra l'handler per ForceLogout subito dopo la connessione
77399
+ FluxoClientSys.Instance.sessionHub.on('ForceLogout', data => {
77400
+ console.warn('๐Ÿšจ Force logout received from server:', data);
77401
+ FluxoClientSys.Instance.auth.logout();
77402
+ });
77403
+ console.info('๐ŸŽง ForceLogout handler registered');
77404
+ hasStartedRef.current = true;
77405
+ setIsConnected(true);
77406
+ hasBeenConnectedOnce.current = true; // Segna che ci siamo connessi almeno una volta
77407
+ } catch (error) {
77408
+ console.error('โŒ Failed to start SessionHub connection', error);
77409
+ setIsConnected(false);
77410
+ } finally {
77411
+ isConnecting.current = false;
77412
+ }
77413
+ }), []);
77414
+ // Funzione per fermare la connessione
77415
+ const stopConnection = useCallback$1(() => __awaiter(void 0, void 0, void 0, function* () {
77416
+ if (!hasStartedRef.current) return;
77417
+ try {
77418
+ yield FluxoClientSys.Instance.sessionHub.stop();
77419
+ console.info('๐Ÿ”Œ SessionHub connection stopped');
77420
+ hasStartedRef.current = false;
77421
+ setIsConnected(false);
77422
+ } catch (error) {
77423
+ console.error('โŒ Failed to stop SessionHub connection', error);
77424
+ }
77425
+ }), []);
77426
+ useEffect(() => {
77427
+ // Start connection when shouldConnect becomes true
77428
+ if (shouldConnect && !hasStartedRef.current && !isConnecting.current) {
77429
+ startConnection();
77430
+ }
77431
+ // Stop connection when shouldConnect becomes false (e.g., user logout)
77432
+ if (!shouldConnect && hasStartedRef.current) {
77433
+ stopConnection();
77434
+ }
77435
+ // Cleanup on unmount
77436
+ return () => {
77437
+ if (hasStartedRef.current) {
77438
+ const cleanup = () => __awaiter(void 0, void 0, void 0, function* () {
77439
+ try {
77440
+ yield FluxoClientSys.Instance.sessionHub.stop();
77441
+ console.info('๐Ÿ”Œ SessionHub connection stopped (component unmount)');
77442
+ hasStartedRef.current = false;
77443
+ } catch (error) {
77444
+ console.error('โŒ Failed to stop SessionHub on unmount', error);
77445
+ }
77446
+ });
77447
+ cleanup();
77448
+ }
77449
+ };
77450
+ }, [shouldConnect, startConnection, stopConnection]);
77451
+ // Monitora lo stato della connessione ogni 2 secondi
77452
+ useEffect(() => {
77453
+ const checkConnection = () => {
77454
+ const connected = FluxoClientSys.Instance.sessionHub.isConnected;
77455
+ setIsConnected(connected);
77456
+ // Se si connette, segna che ci siamo connessi almeno una volta
77457
+ if (connected) {
77458
+ hasBeenConnectedOnce.current = true;
77459
+ }
77460
+ };
77461
+ const interval = setInterval(checkConnection, 2000);
77462
+ checkConnection(); // Check subito
77463
+ return () => clearInterval(interval);
77464
+ }, []);
77465
+ // Cleanup finale: disconnetti quando il componente viene smontato
77466
+ useEffect(() => {
77467
+ return () => {
77468
+ if (hasStartedRef.current) {
77469
+ const cleanup = () => __awaiter(void 0, void 0, void 0, function* () {
77470
+ try {
77471
+ yield FluxoClientSys.Instance.sessionHub.stop();
77472
+ console.info('SessionHub connection stopped (component unmount)');
77473
+ } catch (error) {
77474
+ console.error('Failed to stop SessionHub connection', error);
77475
+ }
77476
+ });
77477
+ cleanup();
77478
+ }
77479
+ };
77480
+ }, []);
77481
+ // Esponi metodi utili
77482
+ const on = useCallback$1((eventName, handler) => {
77483
+ FluxoClientSys.Instance.sessionHub.on(eventName, handler);
77484
+ }, []);
77485
+ const off = useCallback$1((eventName, handler) => {
77486
+ FluxoClientSys.Instance.sessionHub.off(eventName, handler);
77487
+ }, []);
77488
+ const invoke = useCallback$1((methodName, ...args) => __awaiter(void 0, void 0, void 0, function* () {
77489
+ return yield FluxoClientSys.Instance.sessionHub.invoke(methodName, ...args);
77490
+ }), []);
77491
+ const send = useCallback$1((methodName, ...args) => __awaiter(void 0, void 0, void 0, function* () {
77492
+ yield FluxoClientSys.Instance.sessionHub.send(methodName, ...args);
77493
+ }), []);
77494
+ const getState = useCallback$1(() => {
77495
+ return FluxoClientSys.Instance.sessionHub.state;
77496
+ }, []);
77497
+ const getConnectionId = useCallback$1(() => {
77498
+ return FluxoClientSys.Instance.sessionHub.connectionId;
77499
+ }, []);
77500
+ // ============================================================================
77501
+ // METODI MESSAGING REALTIME
77502
+ // ============================================================================
77503
+ /**
77504
+ * Invia un messaggio broadcast a tutte le sessioni connesse all'applicazione
77505
+ * @param messageType - Tipo del messaggio (es: "Critico", "Informazioni", "Avviso")
77506
+ * @param message - Contenuto testuale del messaggio
77507
+ * @throws HubException in caso di errori
77508
+ */
77509
+ const sendBroadcastMessage = useCallback$1((messageType, message) => __awaiter(void 0, void 0, void 0, function* () {
77510
+ try {
77511
+ yield FluxoClientSys.Instance.sessionHub.invoke('SendBroadcastMessage', messageType, message);
77512
+ console.info(`๐Ÿ“ข Broadcast message sent - Type: ${messageType}`);
77513
+ } catch (error) {
77514
+ console.error('โŒ Failed to send broadcast message', error);
77515
+ throw error;
77516
+ }
77517
+ }), []);
77518
+ /**
77519
+ * Invia un messaggio a una singola sessione specifica
77520
+ * @param targetConnectionId - ID della connessione WebSocket destinataria
77521
+ * @param messageType - Tipo del messaggio (es: "Critico", "Informazioni", "Avviso")
77522
+ * @param message - Contenuto testuale del messaggio
77523
+ * @throws HubException "Sessione non trovata" se il connectionId non esiste
77524
+ */
77525
+ const sendMessageToSession = useCallback$1((targetConnectionId, messageType, message) => __awaiter(void 0, void 0, void 0, function* () {
77526
+ try {
77527
+ yield FluxoClientSys.Instance.sessionHub.invoke('SendMessageToSession', targetConnectionId, messageType, message);
77528
+ console.info(`๐Ÿ“จ Message sent to session ${targetConnectionId} - Type: ${messageType}`);
77529
+ } catch (error) {
77530
+ console.error(`โŒ Failed to send message to session ${targetConnectionId}`, error);
77531
+ throw error;
77532
+ }
77533
+ }), []);
77534
+ /**
77535
+ * Invia un messaggio a tutte le sessioni di uno specifico utente
77536
+ * @param targetUserId - ID dell'utente destinatario
77537
+ * @param messageType - Tipo del messaggio (es: "Critico", "Informazioni", "Avviso")
77538
+ * @param message - Contenuto testuale del messaggio
77539
+ * @throws HubException "Nessuna sessione trovata per l'utente specificato"
77540
+ */
77541
+ const sendMessageToUser = useCallback$1((targetUserId, messageType, message) => __awaiter(void 0, void 0, void 0, function* () {
77542
+ try {
77543
+ yield FluxoClientSys.Instance.sessionHub.invoke('SendMessageToUser', targetUserId, messageType, message);
77544
+ console.info(`๐Ÿ‘ค Message sent to user ${targetUserId} - Type: ${messageType}`);
77545
+ } catch (error) {
77546
+ console.error(`โŒ Failed to send message to user ${targetUserId}`, error);
77547
+ throw error;
77548
+ }
77549
+ }), []);
77550
+ /**
77551
+ * Registra un listener per l'evento ReceiveMessage
77552
+ * @param handler - Funzione da chiamare quando arriva un messaggio
77553
+ * @returns Funzione per rimuovere il listener
77554
+ */
77555
+ const onReceiveMessage = useCallback$1(handler => {
77556
+ FluxoClientSys.Instance.sessionHub.on('ReceiveMessage', handler);
77557
+ console.info('๐ŸŽง ReceiveMessage handler registered');
77558
+ // Ritorna una funzione per rimuovere il listener
77559
+ return () => {
77560
+ FluxoClientSys.Instance.sessionHub.off('ReceiveMessage', handler);
77561
+ console.info('๐Ÿ”‡ ReceiveMessage handler removed');
77562
+ };
77563
+ }, []);
77564
+ // ============================================================================
77565
+ // FINE METODI MESSAGING REALTIME
77566
+ // ============================================================================
77567
+ // Memoizza l'oggetto restituito per evitare re-render inutili del ScreenSharingProvider
77568
+ return useMemo$1(() => ({
77569
+ // Metodi base
77570
+ on,
77571
+ off,
77572
+ invoke,
77573
+ send,
77574
+ getState,
77575
+ getConnectionId,
77576
+ connectionId: FluxoClientSys.Instance.sessionHub.connectionId,
77577
+ isConnected: () => isConnected,
77578
+ connected: isConnected,
77579
+ reconnect: startConnection,
77580
+ disconnect: stopConnection,
77581
+ hasBeenConnectedOnce: hasBeenConnectedOnce.current,
77582
+ // Metodi messaging realtime
77583
+ sendBroadcastMessage,
77584
+ sendMessageToSession,
77585
+ sendMessageToUser,
77586
+ onReceiveMessage
77587
+ }), [on, off, invoke, send, getState, getConnectionId, isConnected, startConnection, stopConnection, sendBroadcastMessage, sendMessageToSession, sendMessageToUser, onReceiveMessage]);
77588
+ };
77589
+
77590
+ // Funzioni helper per icone e colori (fuori dal componente)
77591
+ const getIcon = type => {
77592
+ switch (type) {
77593
+ case 'Critico':
77594
+ return jsx(IconAlertCircle, {
77595
+ size: 20
77596
+ });
77597
+ case 'Errore':
77598
+ return jsx(IconAlertTriangle, {
77599
+ size: 20
77600
+ });
77601
+ case 'Avviso':
77602
+ return jsx(IconAlertTriangle, {
77603
+ size: 20
77604
+ });
77605
+ case 'Successo':
77606
+ return jsx(IconCircleCheck, {
77607
+ size: 20
77608
+ });
77609
+ case 'Informazioni':
77610
+ default:
77611
+ return jsx(IconInfoCircle, {
77612
+ size: 20
77613
+ });
77614
+ }
77615
+ };
77616
+ const getColor = type => {
77617
+ switch (type) {
77618
+ case 'Critico':
77619
+ return 'red';
77620
+ case 'Errore':
77621
+ return 'red';
77622
+ case 'Avviso':
77623
+ return 'yellow';
77624
+ case 'Successo':
77625
+ return 'green';
77626
+ case 'Informazioni':
77627
+ return 'blue';
77628
+ case 'Alert':
77629
+ return 'orange';
77630
+ default:
77631
+ return 'gray';
77632
+ }
77633
+ };
77634
+ // Chiave localStorage per persistere i messaggi
77635
+ const MESSAGES_STORAGE_KEY = 'fluxo_persisted_messages';
77636
+ /**
77637
+ * Modal per visualizzare i messaggi ricevuti dal server
77638
+ * Supporta 3 modalitร  di visualizzazione:
77639
+ * - Modal: apre un modal tradizionale
77640
+ * - Toast: notifica bottom-right che resta aperta finchรฉ l'utente non la chiude
77641
+ * - NotificationBar: barra full-width fixed top che resta aperta finchรฉ l'utente non la chiude
77642
+ *
77643
+ * I messaggi sono persistiti in localStorage e ricompaiono al refresh della pagina
77644
+ */
77645
+ const MessageReceiverModal = () => {
77646
+ const [currentMessage, setCurrentMessage] = useState(null);
77647
+ const [opened, setOpened] = useState(false);
77648
+ // Funzione per ottenere i messaggi da localStorage
77649
+ const getMessagesFromStorage = useCallback$1(() => {
77650
+ try {
77651
+ const stored = localStorage.getItem(MESSAGES_STORAGE_KEY);
77652
+ return stored ? JSON.parse(stored) : [];
77653
+ } catch (error) {
77654
+ console.error('Errore lettura messaggi da localStorage:', error);
77655
+ return [];
77656
+ }
77657
+ }, []);
77658
+ // Funzione per rimuovere un messaggio da localStorage
77659
+ const removeMessageFromStorage = useCallback$1(messageId => {
77660
+ try {
77661
+ const existingMessages = getMessagesFromStorage();
77662
+ const filtered = existingMessages.filter(msg => msg.id !== messageId);
77663
+ localStorage.setItem(MESSAGES_STORAGE_KEY, JSON.stringify(filtered));
77664
+ console.log('โœ… Messaggio rimosso da localStorage:', messageId);
77665
+ } catch (error) {
77666
+ console.error('Errore rimozione messaggio da localStorage:', error);
77667
+ }
77668
+ }, [getMessagesFromStorage]);
77669
+ // Funzione per salvare un messaggio in localStorage
77670
+ const saveMessageToStorage = useCallback$1(message => {
77671
+ try {
77672
+ const existingMessages = getMessagesFromStorage();
77673
+ const persistedMessage = Object.assign(Object.assign({}, message), {
77674
+ id: `${message.timestamp}-${Math.random().toString(36).substr(2, 9)}`
77675
+ });
77676
+ existingMessages.push(persistedMessage);
77677
+ localStorage.setItem(MESSAGES_STORAGE_KEY, JSON.stringify(existingMessages));
77678
+ return persistedMessage.id;
77679
+ } catch (error) {
77680
+ console.error('Errore salvataggio messaggio in localStorage:', error);
77681
+ return null;
77682
+ }
77683
+ }, [getMessagesFromStorage]);
77684
+ // Funzione per mostrare una notifica (Toast o NotificationBar)
77685
+ const showNotification = useCallback$1((data, messageId, position, isBar = false) => {
77686
+ notifications.show({
77687
+ id: messageId,
77688
+ // Usa l'ID univoco
77689
+ title: data.messageType,
77690
+ message: data.message,
77691
+ color: getColor(data.messageType),
77692
+ icon: getIcon(data.messageType),
77693
+ autoClose: false,
77694
+ // Tutti i messaggi devono essere chiusi manualmente
77695
+ withCloseButton: true,
77696
+ position,
77697
+ styles: isBar ? {
77698
+ root: {
77699
+ width: '100%',
77700
+ maxWidth: '100%',
77701
+ margin: 0,
77702
+ borderRadius: 0
77703
+ }
77704
+ } : undefined,
77705
+ onClose: () => {
77706
+ // Rimuovi da localStorage quando viene chiuso
77707
+ removeMessageFromStorage(messageId);
77708
+ }
77709
+ });
77710
+ }, [removeMessageFromStorage]);
77711
+ // Ripristina i messaggi persistiti al mount
77712
+ useEffect(() => {
77713
+ const persistedMessages = getMessagesFromStorage();
77714
+ console.log('๐Ÿ“ฆ Ripristino messaggi persistiti:', persistedMessages.length);
77715
+ let firstModalShown = false;
77716
+ persistedMessages.forEach(msg => {
77717
+ if (msg.displayType === 'Modal') {
77718
+ // Per i modal, mostra solo il primo (gli altri verranno mostrati dopo)
77719
+ if (!firstModalShown) {
77720
+ setCurrentMessage(msg);
77721
+ setOpened(true);
77722
+ firstModalShown = true;
77723
+ }
77724
+ } else if (msg.displayType === 'Toast') {
77725
+ showNotification(msg, msg.id, 'bottom-right');
77726
+ } else if (msg.displayType === 'NotificationBar') {
77727
+ showNotification(msg, msg.id, 'top-center', true);
77728
+ } else {
77729
+ // Fallback
77730
+ showNotification(msg, msg.id, 'bottom-right');
77731
+ }
77732
+ });
77733
+ }, [getMessagesFromStorage, showNotification]);
77734
+ useEffect(() => {
77735
+ const handleReceiveMessage = data => {
77736
+ console.log('๐Ÿ“ฉ Messaggio ricevuto:', data);
77737
+ // Salva il messaggio in localStorage
77738
+ const messageId = saveMessageToStorage(data);
77739
+ if (!messageId) return;
77740
+ // Crea il messaggio persistito con ID
77741
+ const persistedMsg = Object.assign(Object.assign({}, data), {
77742
+ id: messageId
77743
+ });
77744
+ // Gestisci in base al displayType
77745
+ if (data.displayType === 'Modal') {
77746
+ // Mostra il modal tradizionale
77747
+ setCurrentMessage(persistedMsg);
77748
+ setOpened(true);
77749
+ } else if (data.displayType === 'Toast') {
77750
+ // Toast: notifica bottom-right che resta aperta finchรฉ l'utente non la chiude
77751
+ showNotification(data, messageId, 'bottom-right');
77752
+ } else if (data.displayType === 'NotificationBar') {
77753
+ // NotificationBar: barra full-width fixed top che resta aperta
77754
+ showNotification(data, messageId, 'top-center', true);
77755
+ } else {
77756
+ // Fallback: mostra come Toast
77757
+ showNotification(data, messageId, 'bottom-right');
77758
+ }
77759
+ // Riproduci suono/notifica browser (opzionale)
77760
+ if ('Notification' in window && Notification.permission === 'granted') {
77761
+ new Notification(`${data.messageType}: ${data.message.substring(0, 50)}...`);
77762
+ }
77763
+ };
77764
+ // Registra l'event handler direttamente su FluxoClientSys
77765
+ FluxoClientSys.Instance.sessionHub.on('ReceiveMessage', handleReceiveMessage);
77766
+ console.info('๐ŸŽง MessageReceiverModal: ReceiveMessage handler registered');
77767
+ return () => {
77768
+ FluxoClientSys.Instance.sessionHub.off('ReceiveMessage', handleReceiveMessage);
77769
+ console.info('๐Ÿ”‡ MessageReceiverModal: ReceiveMessage handler removed');
77770
+ };
77771
+ }, [saveMessageToStorage, showNotification]);
77772
+ // Richiedi permesso notifiche all'avvio (opzionale)
77773
+ useEffect(() => {
77774
+ if ('Notification' in window && Notification.permission === 'default') {
77775
+ Notification.requestPermission();
77776
+ }
77777
+ }, []);
77778
+ const handleClose = () => {
77779
+ // Rimuovi il messaggio da localStorage quando viene chiuso
77780
+ if (currentMessage === null || currentMessage === void 0 ? void 0 : currentMessage.id) {
77781
+ removeMessageFromStorage(currentMessage.id);
77782
+ }
77783
+ setOpened(false);
77784
+ setCurrentMessage(null);
77785
+ // Controlla se ci sono altri messaggi Modal da mostrare
77786
+ const remainingMessages = getMessagesFromStorage();
77787
+ const nextModal = remainingMessages.find(msg => msg.displayType === 'Modal');
77788
+ if (nextModal) {
77789
+ setCurrentMessage(nextModal);
77790
+ setOpened(true);
77791
+ }
77792
+ };
77793
+ if (!currentMessage) return null;
77794
+ const isCritical = currentMessage.messageType === 'Critico';
77795
+ return jsx(Modal, {
77796
+ opened: opened,
77797
+ onClose: handleClose,
77798
+ centered: true,
77799
+ title: jsxs(Group, {
77800
+ gap: "sm",
77801
+ children: [getIcon(currentMessage.messageType), jsx(Text, {
77802
+ fw: 500,
77803
+ size: "md",
77804
+ children: currentMessage.messageType
77805
+ })]
77806
+ }),
77807
+ size: "md",
77808
+ closeOnClickOutside: !isCritical,
77809
+ closeOnEscape: !isCritical,
77810
+ withCloseButton: !isCritical,
77811
+ overlayProps: {
77812
+ backgroundOpacity: 0.55,
77813
+ blur: 8
77814
+ },
77815
+ children: jsxs(Stack, {
77816
+ gap: "md",
77817
+ children: [jsx(Alert, {
77818
+ icon: getIcon(currentMessage.messageType),
77819
+ color: getColor(currentMessage.messageType),
77820
+ variant: "light",
77821
+ styles: {
77822
+ root: {
77823
+ border: `1px solid var(--mantine-color-${getColor(currentMessage.messageType)}-3)`
77824
+ }
77825
+ },
77826
+ children: jsx(Text, {
77827
+ size: "sm",
77828
+ style: {
77829
+ whiteSpace: 'pre-wrap',
77830
+ lineHeight: 1.6
77831
+ },
77832
+ children: currentMessage.message
77833
+ })
77834
+ }), jsx(Divider, {}), jsx(Box, {
77835
+ p: "xs",
77836
+ style: {
77837
+ backgroundColor: 'var(--mantine-color-gray-0)',
77838
+ borderRadius: '4px',
77839
+ border: '1px solid var(--mantine-color-gray-2)'
77840
+ },
77841
+ children: jsxs(Group, {
77842
+ gap: "md",
77843
+ justify: "space-between",
77844
+ children: [jsxs(Box, {
77845
+ children: [jsx(Text, {
77846
+ size: "xs",
77847
+ c: "dimmed",
77848
+ fw: 500,
77849
+ children: "Ricevuto il"
77850
+ }), jsx(Text, {
77851
+ size: "xs",
77852
+ fw: 500,
77853
+ children: new Date(currentMessage.timestamp).toLocaleString('it-IT', {
77854
+ day: '2-digit',
77855
+ month: '2-digit',
77856
+ year: 'numeric',
77857
+ hour: '2-digit',
77858
+ minute: '2-digit'
77859
+ })
77860
+ })]
77861
+ }), currentMessage.targetUserId && jsxs(Box, {
77862
+ style: {
77863
+ textAlign: 'right'
77864
+ },
77865
+ children: [jsx(Text, {
77866
+ size: "xs",
77867
+ c: "dimmed",
77868
+ fw: 500,
77869
+ children: "User ID"
77870
+ }), jsx(Text, {
77871
+ size: "xs",
77872
+ fw: 500,
77873
+ ff: "monospace",
77874
+ children: currentMessage.targetUserId
77875
+ })]
77876
+ })]
77877
+ })
77878
+ }), jsx(Group, {
77879
+ justify: "flex-end",
77880
+ gap: "sm",
77881
+ children: jsx(Button, {
77882
+ variant: isCritical ? 'filled' : 'light',
77883
+ color: getColor(currentMessage.messageType),
77884
+ onClick: handleClose,
77885
+ leftSection: isCritical ? undefined : jsx(IconX, {
77886
+ size: 16
77887
+ }),
77888
+ children: isCritical ? 'Ho capito' : 'Chiudi'
77889
+ })
77890
+ })]
77891
+ })
77892
+ });
77893
+ };
77894
+
76910
77895
  var ShellUINavigation;
76911
77896
  (function (ShellUINavigation) {
76912
77897
  ShellUINavigation[ShellUINavigation["Sidebar"] = 1] = "Sidebar";
@@ -77202,15 +78187,14 @@ function FluxoShell(props) {
77202
78187
  children: [{
77203
78188
  index: true,
77204
78189
  element: flxFrontend.dashboardComponent
77205
- }, {
77206
- path: '/*',
77207
- element: jsx(MainRoutes, {
77208
- fluxoShellProps: props,
77209
- isAdminFrontend: flxFrontend.id === 'admin',
77210
- pluginEndpoint: props.pluginEndpoint,
77211
- frontends: props.frontends
77212
- })
77213
- }, ...generateRoutesFromEmbeddedModules(flxFrontend, 'protected'), ...generateRoutesFromDeployedApps(flxFrontend, res.apps), ...generateRoutesFromJitApps(flxFrontend)]
78190
+ },
78191
+ // Espande le routes di MainRoutes direttamente qui per evitare il wrapper
78192
+ ...generateMainRoutes({
78193
+ fluxoShellProps: props,
78194
+ isAdminFrontend: flxFrontend.id === 'admin',
78195
+ pluginEndpoint: props.pluginEndpoint,
78196
+ frontends: props.frontends
78197
+ }, res.hasAdminAccess || false, res.hasDeveloperAccess || false, res.hasDataAnalystAccess || false), ...generateRoutesFromEmbeddedModules(flxFrontend, 'protected'), ...generateRoutesFromDeployedApps(flxFrontend, res.apps), ...generateRoutesFromJitApps(flxFrontend)]
77214
78198
  }, {
77215
78199
  path: '*',
77216
78200
  element: jsx(ErrorPage, {})
@@ -77394,13 +78378,13 @@ function SessionHubManager({
77394
78378
  return null; // Componente invisibile, gestisce solo la logica
77395
78379
  }
77396
78380
  function AppInner(props) {
77397
- return jsx(React__default.Suspense, {
78381
+ return jsxs(React__default.Suspense, {
77398
78382
  fallback: jsx(Fragment, {
77399
78383
  children: "..."
77400
78384
  }),
77401
- children: jsx(RouterProvider, {
78385
+ children: [jsx(MessageReceiverModal, {}), jsx(RouterProvider, {
77402
78386
  router: props.router
77403
- })
78387
+ })]
77404
78388
  });
77405
78389
  }
77406
78390
 
@@ -77413,7 +78397,6 @@ function LockedResource({
77413
78397
  onResourceUnlocked,
77414
78398
  readOnlyMode = false
77415
78399
  }) {
77416
- const sessionHub = useSessionHub(false);
77417
78400
  const [resourceIsAlreadyLocked, setResourceIsAlreadyLocked] = useState(false);
77418
78401
  const [isLoading, setIsLoading] = useState(true);
77419
78402
  const [error, setError] = useState(null);
@@ -77435,7 +78418,7 @@ function LockedResource({
77435
78418
  }, [onResourceLocked, onResourceUnlocked]);
77436
78419
  // Funzione per eseguire il lock check
77437
78420
  const performLockCheck = React__default.useCallback((showLoader = true) => {
77438
- if (!sessionHub || !sessionHub.isConnected()) {
78421
+ if (!FluxoClientSys.Instance.sessionHub || !FluxoClientSys.Instance.sessionHub.isConnected) {
77439
78422
  return;
77440
78423
  }
77441
78424
  // Mostra il loader solo se richiesto (primo check)
@@ -77443,11 +78426,11 @@ function LockedResource({
77443
78426
  setIsLoading(true);
77444
78427
  }
77445
78428
  setError(null);
77446
- sessionHub.invoke('LockResource', resourceId, componentId.current).then(res => {
77447
- var _a, _b, _c;
78429
+ FluxoClientSys.Instance.sessionHub.invoke('LockResource', resourceId, componentId.current).then(res => {
78430
+ var _a, _b;
77448
78431
  const isLocked = res.isAlreadyLocked;
77449
- const currentWsConnectionId = ((_a = sessionHub.getConnectionId) === null || _a === void 0 ? void 0 : _a.call(sessionHub)) || sessionHub.connectionId;
77450
- const lockingWsConnectionId = (_b = res.session) === null || _b === void 0 ? void 0 : _b.wsConnectionId;
78432
+ const currentWsConnectionId = FluxoClientSys.Instance.sessionHub.connectionId;
78433
+ const lockingWsConnectionId = (_a = res.session) === null || _a === void 0 ? void 0 : _a.wsConnectionId;
77451
78434
  // Verifica se la risorsa รจ bloccata dalla stessa sessione WebSocket
77452
78435
  const isSameSession = isLocked && currentWsConnectionId && lockingWsConnectionId && currentWsConnectionId === lockingWsConnectionId;
77453
78436
  setResourceIsAlreadyLocked(isLocked);
@@ -77455,7 +78438,7 @@ function LockedResource({
77455
78438
  setIsLoading(false);
77456
78439
  setHasCheckedOnce(true);
77457
78440
  // Salva l'username dell'utente che ha bloccato la risorsa
77458
- if (isLocked && ((_c = res.session) === null || _c === void 0 ? void 0 : _c.userName)) {
78441
+ if (isLocked && ((_b = res.session) === null || _b === void 0 ? void 0 : _b.userName)) {
77459
78442
  setLockedByUser(res.session.userName);
77460
78443
  } else {
77461
78444
  setLockedByUser(null);
@@ -77476,7 +78459,7 @@ function LockedResource({
77476
78459
  onResourceLockedRef.current();
77477
78460
  }
77478
78461
  });
77479
- }, [sessionHub, resourceId]);
78462
+ }, [resourceId]);
77480
78463
  // Lock della risorsa all'avvio
77481
78464
  useEffect(() => {
77482
78465
  performLockCheck(true); // Mostra il loader al primo check
@@ -77484,12 +78467,12 @@ function LockedResource({
77484
78467
  // Monitora lo stato di connessione e ri-esegui il check quando si riconnette
77485
78468
  useEffect(() => {
77486
78469
  // Aspetta che il primo check sia completato prima di monitorare la connessione
77487
- if (!sessionHub || !hasCheckedOnce) return;
77488
- const currentConnectionState = sessionHub.isConnected();
78470
+ if (!hasCheckedOnce) return;
78471
+ const currentConnectionState = FluxoClientSys.Instance.sessionHub.isConnected;
77489
78472
  setIsConnected(currentConnectionState);
77490
78473
  // Polling per monitorare lo stato di connessione
77491
78474
  const interval = setInterval(() => {
77492
- const newConnectionState = sessionHub.isConnected();
78475
+ const newConnectionState = FluxoClientSys.Instance.sessionHub.isConnected;
77493
78476
  // Solo se passa da disconnesso a connesso, ri-esegui il check
77494
78477
  if (newConnectionState && !isConnected) {
77495
78478
  console.log('๐Ÿ”„ SessionHub riconnesso, ri-verifico il lock della risorsa:', resourceId);
@@ -77498,23 +78481,17 @@ function LockedResource({
77498
78481
  setIsConnected(newConnectionState);
77499
78482
  }, 2000);
77500
78483
  return () => clearInterval(interval);
77501
- }, [sessionHub, isConnected, performLockCheck, resourceId, hasCheckedOnce]);
77502
- // Ref per sessionHub per evitare di catturarlo nella closure
77503
- const sessionHubRef = useRef(sessionHub);
77504
- useEffect(() => {
77505
- sessionHubRef.current = sessionHub;
77506
- }, [sessionHub]);
78484
+ }, [isConnected, performLockCheck, resourceId, hasCheckedOnce]);
77507
78485
  // Unlock della risorsa alla cleanup (solo al vero unmount)
77508
78486
  useEffect(() => {
77509
78487
  // Salva i valori al mount per usarli nel cleanup
77510
78488
  const currentResourceId = resourceId;
77511
78489
  const currentComponentId = componentId.current;
77512
78490
  return () => {
77513
- // Usa il ref aggiornato di sessionHub
77514
- const currentSessionHub = sessionHubRef.current;
77515
- if (currentSessionHub && currentSessionHub.isConnected()) {
78491
+ // Usa FluxoClientSys.Instance.sessionHub direttamente
78492
+ if (FluxoClientSys.Instance.sessionHub && FluxoClientSys.Instance.sessionHub.isConnected) {
77516
78493
  console.log('๐Ÿ”“ Unlock risorsa al unmount:', currentResourceId, currentComponentId);
77517
- currentSessionHub.invoke('UnlockResource', currentResourceId, currentComponentId).catch(err => {
78494
+ FluxoClientSys.Instance.sessionHub.invoke('UnlockResource', currentResourceId, currentComponentId).catch(err => {
77518
78495
  console.error('Error unlocking resource:', err);
77519
78496
  });
77520
78497
  }
@@ -77691,4 +78668,4 @@ function LockedResource({
77691
78668
  });
77692
78669
  }
77693
78670
 
77694
- export { FluxoShell, FrontendSwitch, LockedResource, ScreenSharingProvider, ScreenSharingWidget, ShellSessionContext, ShellUINavigation, ShellUISearchPosition, ShellUISearchType, useScreenSharingContext, useSessionHub };
78671
+ export { FluxoShell, FrontendSwitch, LockedResource, MessageReceiverModal, ScreenSharingProvider, ScreenSharingWidget, ShellSessionContext, ShellUINavigation, ShellUISearchPosition, ShellUISearchType, useScreenSharingContext, useSessionHub };