From 07c1d54f172d0cac99dded146f764105aeb5d7ae Mon Sep 17 00:00:00 2001
From: Ivan <8611739+IRBorisov@users.noreply.github.com>
Date: Fri, 7 Feb 2025 10:54:47 +0300
Subject: [PATCH] R: Refactor basic components structure
---
rsconcept/frontend/src/app/ErrorFallback.tsx | 2 +-
rsconcept/frontend/src/app/Footer.tsx | 2 +-
rsconcept/frontend/src/app/GlobalTooltips.tsx | 2 +-
.../frontend/src/app/Navigation/UserDropdown.tsx | 3 +--
rsconcept/frontend/src/app/Navigation/UserMenu.tsx | 2 +-
.../frontend/src/components/ExpectedAnonymous.tsx | 3 ++-
.../frontend/src/components/RSInput/RSInput.tsx | 2 +-
.../frontend/src/components/RefsInput/RefsInput.tsx | 2 +-
rsconcept/frontend/src/components/RequireAuth.tsx | 3 ++-
.../components/{ui/Flow => graph}/DynamicEdge.tsx | 0
.../frontend/src/components/info/BadgeHelp.tsx | 4 ++--
.../frontend/src/components/info/InfoError.tsx | 2 +-
.../src/components/info/SelectedCounter.tsx | 2 +-
.../src/components/info/TooltipOperation.tsx | 2 +-
.../src/components/select/MiniSelectorOSS.tsx | 8 +++-----
.../src/components/select/PickConstituenta.tsx | 4 ++--
.../src/components/select/PickMultiConstituenta.tsx | 4 ++--
.../src/components/select/PickMultiOperation.tsx | 4 ++--
.../frontend/src/components/select/PickSchema.tsx | 9 ++++-----
.../src/components/select/PickSubstitutions.tsx | 4 ++--
.../src/components/select/SelectAccessPolicy.tsx | 6 ++----
.../src/components/select/SelectConstituenta.tsx | 2 +-
.../src/components/select/SelectGraphFilter.tsx | 6 ++----
.../src/components/select/SelectItemType.tsx | 6 ++----
.../src/components/select/SelectLibraryItem.tsx | 2 +-
.../src/components/select/SelectLocation.tsx | 2 +-
.../src/components/select/SelectLocationContext.tsx | 5 ++---
.../src/components/select/SelectLocationHead.tsx | 6 ++----
.../src/components/select/SelectMatchMode.tsx | 6 ++----
.../src/components/select/SelectMultiGrammeme.tsx | 2 +-
.../src/components/select/SelectOperation.tsx | 2 +-
.../frontend/src/components/select/SelectUser.tsx | 2 +-
.../src/components/select/SelectVersion.tsx | 2 +-
.../src/components/select/ToolbarGraphSelection.tsx | 2 +-
.../src/components/ui/{ => Container}/Divider.tsx | 6 ++----
.../components/ui/{ => Container}/FlexColumn.tsx | 4 +---
.../src/components/ui/{ => Container}/Overlay.tsx | 4 +---
.../src/components/ui/{ => Container}/Tooltip.tsx | 4 +---
.../frontend/src/components/ui/Container/index.tsx | 4 ++++
.../src/components/ui/{ => Control}/Button.tsx | 4 +---
.../src/components/ui/{ => Control}/LinkTopic.tsx | 6 ++----
.../src/components/ui/{ => Control}/MiniButton.tsx | 4 +---
.../components/ui/{ => Control}/SelectorButton.tsx | 4 +---
.../components/ui/{ => Control}/SubmitButton.tsx | 4 +---
.../src/components/ui/{ => Control}/TextURL.tsx | 3 +--
.../frontend/src/components/ui/Control/index.tsx | 6 ++++++
.../src/components/ui/DataTable/SelectAll.tsx | 2 +-
.../src/components/ui/DataTable/SelectRow.tsx | 2 +-
.../src/components/ui/{ => Dropdown}/Dropdown.tsx | 4 +---
.../components/ui/{ => Dropdown}/DropdownButton.tsx | 4 +---
.../ui/{ => Dropdown}/DropdownCheckbox.tsx | 6 ++----
.../frontend/src/components/ui/Dropdown/index.tsx | 4 ++++
.../ui/Dropdown}/useDropdown.ts | 6 ++----
.../src/components/ui/{ => Input}/Checkbox.tsx | 4 +---
.../components/ui/{ => Input}/CheckboxTristate.tsx | 4 +---
.../src/components/ui/{ => Input}/ErrorField.tsx | 6 ++----
.../src/components/ui/{ => Input}/FileInput.tsx | 8 +++-----
.../src/components/ui/{ => Input}/Label.tsx | 4 +---
.../src/components/ui/{ => Input}/SelectMulti.tsx | 4 +---
.../src/components/ui/{ => Input}/SelectSingle.tsx | 4 +---
.../src/components/ui/{ => Input}/SelectTree.tsx | 8 +++-----
.../src/components/ui/{ => Input}/TextArea.tsx | 8 +++-----
.../src/components/ui/{ => Input}/TextInput.tsx | 8 +++-----
.../frontend/src/components/ui/Input/index.tsx | 10 ++++++++++
.../frontend/src/components/ui/Modal/ModalForm.tsx | 4 +---
.../frontend/src/components/ui/Modal/ModalView.tsx | 3 +--
.../frontend/src/components/ui/PDFViewer/index.tsx | 1 -
rsconcept/frontend/src/components/ui/SearchBar.tsx | 8 +++-----
.../src/components/ui/{ => Tabs}/TabLabel.tsx | 4 +---
rsconcept/frontend/src/components/ui/Tabs/index.tsx | 2 ++
.../src/components/ui/{ => View}/EmbedYoutube.tsx | 4 +---
.../src/components/ui/{ => View}/Indicator.tsx | 4 +---
.../src/components/ui/{ => View}/NoData.tsx | 4 +---
.../components/ui/{PDFViewer => View}/PDFViewer.tsx | 4 +---
.../src/components/ui/{ => View}/PrettyJSON.tsx | 4 +---
.../src/components/ui/{ => View}/TextContent.tsx | 4 +---
.../src/components/ui/{ => View}/ValueIcon.tsx | 6 ++----
.../src/components/ui/{ => View}/ValueLabeled.tsx | 4 +---
.../src/components/ui/{ => View}/ValueStats.tsx | 6 ++----
rsconcept/frontend/src/components/ui/View/index.tsx | 9 +++++++++
.../frontend/src/dialogs/DlgChangeInputSchema.tsx | 4 ++--
.../frontend/src/dialogs/DlgChangeLocation.tsx | 3 +--
.../frontend/src/dialogs/DlgCloneLibraryItem.tsx | 7 ++-----
.../src/dialogs/DlgCreateCst/FormCreateCst.tsx | 4 +---
.../DlgCreateOperation/DlgCreateOperation.tsx | 3 +--
.../DlgCreateOperation/TabInputOperation.tsx | 7 ++-----
.../DlgCreateOperation/TabSynthesisOperation.tsx | 6 ++----
rsconcept/frontend/src/dialogs/DlgCreateVersion.tsx | 4 +---
.../src/dialogs/DlgCstTemplate/DlgCstTemplate.tsx | 3 +--
.../src/dialogs/DlgCstTemplate/TabArguments.tsx | 4 ++--
.../src/dialogs/DlgCstTemplate/TabTemplate.tsx | 3 +--
.../src/dialogs/DlgDeleteCst/DlgDeleteCst.tsx | 2 +-
.../frontend/src/dialogs/DlgDeleteOperation.tsx | 3 +--
.../src/dialogs/DlgEditEditors/DlgEditEditors.tsx | 4 ++--
.../src/dialogs/DlgEditEditors/TableUsers.tsx | 2 +-
.../dialogs/DlgEditOperation/DlgEditOperation.tsx | 3 +--
.../src/dialogs/DlgEditOperation/TabArguments.tsx | 4 ++--
.../src/dialogs/DlgEditOperation/TabOperation.tsx | 3 +--
.../src/dialogs/DlgEditOperation/TabSynthesis.tsx | 2 +-
.../dialogs/DlgEditReference/DlgEditReference.tsx | 3 +--
.../dialogs/DlgEditReference/TabEntityReference.tsx | 3 +--
.../DlgEditReference/TabSyntacticReference.tsx | 2 +-
.../src/dialogs/DlgEditVersions/DlgEditVersions.tsx | 5 ++---
.../src/dialogs/DlgEditVersions/TableVersions.tsx | 2 +-
.../dialogs/DlgEditWordForms/DlgEditWordForms.tsx | 5 ++---
.../src/dialogs/DlgEditWordForms/TableWordForms.tsx | 4 ++--
rsconcept/frontend/src/dialogs/DlgGraphParams.tsx | 2 +-
.../DlgInlineSynthesis/DlgInlineSynthesis.tsx | 3 +--
.../src/dialogs/DlgInlineSynthesis/TabSource.tsx | 2 +-
.../src/dialogs/DlgRelocateConstituents.tsx | 2 +-
rsconcept/frontend/src/dialogs/DlgRenameCst.tsx | 3 +--
.../frontend/src/dialogs/DlgShowAST/DlgShowAST.tsx | 2 +-
.../src/dialogs/DlgShowAST/graph/ASTEdgeTypes.ts | 2 +-
rsconcept/frontend/src/dialogs/DlgUploadRSForm.tsx | 3 +--
.../src/pages/CreateItemPage/FormCreateItem.tsx | 10 +++-------
.../frontend/src/pages/LibraryPage/LibraryPage.tsx | 4 ++--
.../src/pages/LibraryPage/TableLibraryItems.tsx | 5 ++---
.../src/pages/LibraryPage/ToolbarSearch.tsx | 9 +++------
.../src/pages/LibraryPage/ViewSideLocation.tsx | 2 +-
rsconcept/frontend/src/pages/LoginPage.tsx | 5 ++---
.../frontend/src/pages/ManualsPage/TopicItem.tsx | 2 +-
.../src/pages/ManualsPage/TopicsDropdown.tsx | 6 +++---
.../frontend/src/pages/ManualsPage/TopicsStatic.tsx | 2 +-
.../src/pages/ManualsPage/items/HelpConcept.tsx | 2 +-
.../src/pages/ManualsPage/items/HelpExteor.tsx | 2 +-
.../src/pages/ManualsPage/items/HelpMain.tsx | 3 +--
.../src/pages/ManualsPage/items/HelpRSLang.tsx | 2 +-
.../src/pages/ManualsPage/items/HelpThesaurus.tsx | 2 +-
.../pages/ManualsPage/items/cc/HelpConceptOSS.tsx | 2 +-
.../ManualsPage/items/cc/HelpConceptPropagation.tsx | 2 +-
.../ManualsPage/items/cc/HelpConceptRelations.tsx | 2 +-
.../ManualsPage/items/cc/HelpConceptSynthesis.tsx | 2 +-
.../ManualsPage/items/cc/HelpConceptSystem.tsx | 2 +-
.../ManualsPage/items/cc/HelpCstAttributes.tsx | 2 +-
.../src/pages/ManualsPage/items/info/HelpAPI.tsx | 2 +-
.../ManualsPage/items/info/HelpContributors.tsx | 3 +--
.../pages/ManualsPage/items/info/HelpPrivacy.tsx | 2 +-
.../src/pages/ManualsPage/items/info/HelpRules.tsx | 2 +-
.../ManualsPage/items/rslang/HelpRSLangCorrect.tsx | 2 +-
.../items/rslang/HelpRSLangInterpret.tsx | 2 +-
.../items/rslang/HelpRSLangOperations.tsx | 2 +-
.../src/pages/ManualsPage/items/ui/HelpLibrary.tsx | 2 +-
.../src/pages/ManualsPage/items/ui/HelpOssGraph.tsx | 4 ++--
.../src/pages/ManualsPage/items/ui/HelpRSCard.tsx | 2 +-
.../src/pages/ManualsPage/items/ui/HelpRSEditor.tsx | 2 +-
.../pages/ManualsPage/items/ui/HelpRSGraphTerm.tsx | 4 ++--
.../src/pages/ManualsPage/items/ui/HelpRSList.tsx | 4 ++--
.../src/pages/ManualsPage/items/ui/HelpRSMenu.tsx | 4 ++--
.../pages/ManualsPage/items/ui/HelpRelocateCst.tsx | 2 +-
.../pages/ManualsPage/items/ui/HelpTypeGraph.tsx | 2 +-
rsconcept/frontend/src/pages/NotFoundPage.tsx | 2 +-
.../pages/OssPage/EditorOssCard/EditorOssCard.tsx | 2 +-
.../src/pages/OssPage/EditorOssCard/FormOSS.tsx | 5 ++---
.../src/pages/OssPage/EditorOssCard/OssStats.tsx | 2 +-
.../OssPage/EditorOssGraph/NodeContextMenu.tsx | 3 +--
.../src/pages/OssPage/EditorOssGraph/OssFlow.tsx | 2 +-
.../OssPage/EditorOssGraph/ToolbarOssGraph.tsx | 2 +-
.../pages/OssPage/EditorOssGraph/graph/NodeCore.tsx | 4 ++--
.../frontend/src/pages/OssPage/MenuOssTabs.tsx | 8 +++-----
rsconcept/frontend/src/pages/OssPage/OssPage.tsx | 2 +-
rsconcept/frontend/src/pages/OssPage/OssTabs.tsx | 5 ++---
rsconcept/frontend/src/pages/PasswordChangePage.tsx | 4 ++--
.../EditorConstituenta/EditorControls.tsx | 4 ++--
.../EditorConstituenta/FormConstituenta.tsx | 8 ++++----
.../EditorConstituenta/ToolbarConstituenta.tsx | 4 ++--
.../EditorRSExpression/EditorRSExpression.tsx | 2 +-
.../EditorRSExpression/ToolbarRSExpression.tsx | 4 ++--
.../EditorRSFormCard/EditorLibraryItem.tsx | 9 ++++-----
.../EditorRSFormCard/EditorRSFormCard.tsx | 2 +-
.../RSFormPage/EditorRSFormCard/FormRSForm.tsx | 6 ++----
.../RSFormPage/EditorRSFormCard/RSFormStats.tsx | 2 +-
.../EditorRSFormCard/ToolbarItemAccess.tsx | 6 +++---
.../EditorRSFormCard/ToolbarRSFormCard.tsx | 4 ++--
.../EditorRSFormCard/ToolbarVersioning.tsx | 4 ++--
.../pages/RSFormPage/EditorRSList/EditorRSList.tsx | 6 +++---
.../pages/RSFormPage/EditorRSList/TableRSList.tsx | 5 ++---
.../pages/RSFormPage/EditorRSList/ToolbarRSList.tsx | 8 +++-----
.../RSFormPage/EditorTermGraph/GraphSelectors.tsx | 4 ++--
.../RSFormPage/EditorTermGraph/SchemasGuide.tsx | 2 +-
.../src/pages/RSFormPage/EditorTermGraph/TGFlow.tsx | 2 +-
.../EditorTermGraph/ToolbarFocusedCst.tsx | 2 +-
.../RSFormPage/EditorTermGraph/ToolbarTermGraph.tsx | 2 +-
.../pages/RSFormPage/EditorTermGraph/ViewHidden.tsx | 4 ++--
.../RSFormPage/EditorTermGraph/graph/TGEdgeTypes.ts | 2 +-
.../frontend/src/pages/RSFormPage/MenuRSTabs.tsx | 8 +++-----
.../frontend/src/pages/RSFormPage/RSFormPage.tsx | 4 ++--
rsconcept/frontend/src/pages/RSFormPage/RSTabs.tsx | 5 ++---
.../ViewConstituents/ConstituentsSearch.tsx | 4 ++--
.../ViewConstituents/TableSideConstituents.tsx | 3 +--
.../frontend/src/pages/RegisterPage/FormSignup.tsx | 13 ++++---------
.../frontend/src/pages/RestorePasswordPage.tsx | 5 ++---
.../src/pages/UserProfilePage/EditorPassword.tsx | 6 +++---
.../src/pages/UserProfilePage/EditorProfile.tsx | 4 ++--
193 files changed, 317 insertions(+), 426 deletions(-)
rename rsconcept/frontend/src/components/{ui/Flow => graph}/DynamicEdge.tsx (100%)
rename rsconcept/frontend/src/components/ui/{ => Container}/Divider.tsx (75%)
rename rsconcept/frontend/src/components/ui/{ => Container}/FlexColumn.tsx (74%)
rename rsconcept/frontend/src/components/ui/{ => Container}/Overlay.tsx (93%)
rename rsconcept/frontend/src/components/ui/{ => Container}/Tooltip.tsx (97%)
create mode 100644 rsconcept/frontend/src/components/ui/Container/index.tsx
rename rsconcept/frontend/src/components/ui/{ => Control}/Button.tsx (97%)
rename rsconcept/frontend/src/components/ui/{ => Control}/LinkTopic.tsx (73%)
rename rsconcept/frontend/src/components/ui/{ => Control}/MiniButton.tsx (95%)
rename rsconcept/frontend/src/components/ui/{ => Control}/SelectorButton.tsx (96%)
rename rsconcept/frontend/src/components/ui/{ => Control}/SubmitButton.tsx (85%)
rename rsconcept/frontend/src/components/ui/{ => Control}/TextURL.tsx (87%)
create mode 100644 rsconcept/frontend/src/components/ui/Control/index.tsx
rename rsconcept/frontend/src/components/ui/{ => Dropdown}/Dropdown.tsx (97%)
rename rsconcept/frontend/src/components/ui/{ => Dropdown}/DropdownButton.tsx (96%)
rename rsconcept/frontend/src/components/ui/{ => Dropdown}/DropdownCheckbox.tsx (70%)
create mode 100644 rsconcept/frontend/src/components/ui/Dropdown/index.tsx
rename rsconcept/frontend/src/{hooks => components/ui/Dropdown}/useDropdown.ts (74%)
rename rsconcept/frontend/src/components/ui/{ => Input}/Checkbox.tsx (97%)
rename rsconcept/frontend/src/components/ui/{ => Input}/CheckboxTristate.tsx (97%)
rename rsconcept/frontend/src/components/ui/{ => Input}/ErrorField.tsx (71%)
rename rsconcept/frontend/src/components/ui/{ => Input}/FileInput.tsx (88%)
rename rsconcept/frontend/src/components/ui/{ => Input}/Label.tsx (87%)
rename rsconcept/frontend/src/components/ui/{ => Input}/SelectMulti.tsx (96%)
rename rsconcept/frontend/src/components/ui/{ => Input}/SelectSingle.tsx (96%)
rename rsconcept/frontend/src/components/ui/{ => Input}/SelectTree.tsx (96%)
rename rsconcept/frontend/src/components/ui/{ => Input}/TextArea.tsx (92%)
rename rsconcept/frontend/src/components/ui/{ => Input}/TextInput.tsx (92%)
create mode 100644 rsconcept/frontend/src/components/ui/Input/index.tsx
delete mode 100644 rsconcept/frontend/src/components/ui/PDFViewer/index.tsx
rename rsconcept/frontend/src/components/ui/{ => Tabs}/TabLabel.tsx (88%)
create mode 100644 rsconcept/frontend/src/components/ui/Tabs/index.tsx
rename rsconcept/frontend/src/components/ui/{ => View}/EmbedYoutube.tsx (90%)
rename rsconcept/frontend/src/components/ui/{ => View}/Indicator.tsx (85%)
rename rsconcept/frontend/src/components/ui/{ => View}/NoData.tsx (75%)
rename rsconcept/frontend/src/components/ui/{PDFViewer => View}/PDFViewer.tsx (88%)
rename rsconcept/frontend/src/components/ui/{ => View}/PrettyJSON.tsx (72%)
rename rsconcept/frontend/src/components/ui/{ => View}/TextContent.tsx (87%)
rename rsconcept/frontend/src/components/ui/{ => View}/ValueIcon.tsx (95%)
rename rsconcept/frontend/src/components/ui/{ => View}/ValueLabeled.tsx (81%)
rename rsconcept/frontend/src/components/ui/{ => View}/ValueStats.tsx (81%)
create mode 100644 rsconcept/frontend/src/components/ui/View/index.tsx
diff --git a/rsconcept/frontend/src/app/ErrorFallback.tsx b/rsconcept/frontend/src/app/ErrorFallback.tsx
index c83c5162..d25ec65b 100644
--- a/rsconcept/frontend/src/app/ErrorFallback.tsx
+++ b/rsconcept/frontend/src/app/ErrorFallback.tsx
@@ -1,7 +1,7 @@
import { useNavigate, useRouteError } from 'react-router';
import InfoError from '@/components/info/InfoError';
-import Button from '@/components/ui/Button';
+import { Button } from '@/components/ui/Control';
function ErrorFallback() {
const error = useRouteError();
diff --git a/rsconcept/frontend/src/app/Footer.tsx b/rsconcept/frontend/src/app/Footer.tsx
index 5eb079da..46fd852d 100644
--- a/rsconcept/frontend/src/app/Footer.tsx
+++ b/rsconcept/frontend/src/app/Footer.tsx
@@ -1,6 +1,6 @@
import clsx from 'clsx';
-import TextURL from '@/components/ui/TextURL';
+import { TextURL } from '@/components/ui/Control';
import { external_urls } from '@/utils/constants';
function Footer() {
diff --git a/rsconcept/frontend/src/app/GlobalTooltips.tsx b/rsconcept/frontend/src/app/GlobalTooltips.tsx
index fdbbc6a2..74311144 100644
--- a/rsconcept/frontend/src/app/GlobalTooltips.tsx
+++ b/rsconcept/frontend/src/app/GlobalTooltips.tsx
@@ -1,8 +1,8 @@
'use client';
import InfoConstituenta from '@/components/info/InfoConstituenta';
+import { Tooltip } from '@/components/ui/Container';
import Loader from '@/components/ui/Loader';
-import Tooltip from '@/components/ui/Tooltip';
import { useTooltipsStore } from '@/stores/tooltips';
import { globals } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/app/Navigation/UserDropdown.tsx b/rsconcept/frontend/src/app/Navigation/UserDropdown.tsx
index 42b31b3c..3b705eda 100644
--- a/rsconcept/frontend/src/app/Navigation/UserDropdown.tsx
+++ b/rsconcept/frontend/src/app/Navigation/UserDropdown.tsx
@@ -16,8 +16,7 @@ import {
IconUser
} from '@/components/Icons';
import { CProps } from '@/components/props';
-import Dropdown from '@/components/ui/Dropdown';
-import DropdownButton from '@/components/ui/DropdownButton';
+import { Dropdown, DropdownButton } from '@/components/ui/Dropdown';
import { usePreferencesStore } from '@/stores/preferences';
import { urls } from '../urls';
diff --git a/rsconcept/frontend/src/app/Navigation/UserMenu.tsx b/rsconcept/frontend/src/app/Navigation/UserMenu.tsx
index 5e3781c6..653cd80e 100644
--- a/rsconcept/frontend/src/app/Navigation/UserMenu.tsx
+++ b/rsconcept/frontend/src/app/Navigation/UserMenu.tsx
@@ -1,8 +1,8 @@
import { Suspense } from 'react';
import { useConceptNavigation } from '@/app/Navigation/NavigationContext';
+import { useDropdown } from '@/components/ui/Dropdown';
import Loader from '@/components/ui/Loader';
-import useDropdown from '@/hooks/useDropdown';
import { urls } from '../urls';
import UserButton from './UserButton';
diff --git a/rsconcept/frontend/src/components/ExpectedAnonymous.tsx b/rsconcept/frontend/src/components/ExpectedAnonymous.tsx
index d0720a35..c0c6782e 100644
--- a/rsconcept/frontend/src/components/ExpectedAnonymous.tsx
+++ b/rsconcept/frontend/src/components/ExpectedAnonymous.tsx
@@ -2,7 +2,8 @@ import { useConceptNavigation } from '@/app/Navigation/NavigationContext';
import { urls } from '@/app/urls';
import { useAuthSuspense } from '@/backend/auth/useAuth';
import { useLogout } from '@/backend/auth/useLogout';
-import TextURL from '@/components/ui/TextURL';
+
+import { TextURL } from './ui/Control';
function ExpectedAnonymous() {
const { user } = useAuthSuspense();
diff --git a/rsconcept/frontend/src/components/RSInput/RSInput.tsx b/rsconcept/frontend/src/components/RSInput/RSInput.tsx
index a368e8d4..be583610 100644
--- a/rsconcept/frontend/src/components/RSInput/RSInput.tsx
+++ b/rsconcept/frontend/src/components/RSInput/RSInput.tsx
@@ -8,7 +8,7 @@ import clsx from 'clsx';
import { EditorView } from 'codemirror';
import { forwardRef, useRef } from 'react';
-import Label from '@/components/ui/Label';
+import { Label } from '@/components/ui/Input';
import { ConstituentaID, IRSForm } from '@/models/rsform';
import { generateAlias, getCstTypePrefix, guessCstType } from '@/models/rsformAPI';
import { extractGlobals } from '@/models/rslangAPI';
diff --git a/rsconcept/frontend/src/components/RefsInput/RefsInput.tsx b/rsconcept/frontend/src/components/RefsInput/RefsInput.tsx
index 7455ec0b..86241617 100644
--- a/rsconcept/frontend/src/components/RefsInput/RefsInput.tsx
+++ b/rsconcept/frontend/src/components/RefsInput/RefsInput.tsx
@@ -8,7 +8,7 @@ import clsx from 'clsx';
import { EditorView } from 'codemirror';
import { forwardRef, useRef, useState } from 'react';
-import Label from '@/components/ui/Label';
+import { Label } from '@/components/ui/Input';
import { ReferenceType } from '@/models/language';
import { DialogType } from '@/models/miscellaneous';
import { ConstituentaID, IRSForm } from '@/models/rsform';
diff --git a/rsconcept/frontend/src/components/RequireAuth.tsx b/rsconcept/frontend/src/components/RequireAuth.tsx
index f49710a5..9579c596 100644
--- a/rsconcept/frontend/src/components/RequireAuth.tsx
+++ b/rsconcept/frontend/src/components/RequireAuth.tsx
@@ -1,7 +1,8 @@
'use client';
import { useAuthSuspense } from '@/backend/auth/useAuth';
-import TextURL from '@/components/ui/TextURL';
+
+import { TextURL } from './ui/Control';
function RequireAuth({ children }: React.PropsWithChildren) {
const { isAnonymous } = useAuthSuspense();
diff --git a/rsconcept/frontend/src/components/ui/Flow/DynamicEdge.tsx b/rsconcept/frontend/src/components/graph/DynamicEdge.tsx
similarity index 100%
rename from rsconcept/frontend/src/components/ui/Flow/DynamicEdge.tsx
rename to rsconcept/frontend/src/components/graph/DynamicEdge.tsx
diff --git a/rsconcept/frontend/src/components/info/BadgeHelp.tsx b/rsconcept/frontend/src/components/info/BadgeHelp.tsx
index 7b463726..0eaee73c 100644
--- a/rsconcept/frontend/src/components/info/BadgeHelp.tsx
+++ b/rsconcept/frontend/src/components/info/BadgeHelp.tsx
@@ -2,9 +2,9 @@ import React, { Suspense } from 'react';
import { IconHelp } from '@/components/Icons';
import { CProps } from '@/components/props';
+import { PlacesType, Tooltip } from '@/components/ui/Container';
+import { TextURL } from '@/components/ui/Control';
import Loader from '@/components/ui/Loader';
-import TextURL from '@/components/ui/TextURL';
-import Tooltip, { PlacesType } from '@/components/ui/Tooltip';
import { HelpTopic } from '@/models/miscellaneous';
import { usePreferencesStore } from '@/stores/preferences';
diff --git a/rsconcept/frontend/src/components/info/InfoError.tsx b/rsconcept/frontend/src/components/info/InfoError.tsx
index 03fbb878..802a6cf3 100644
--- a/rsconcept/frontend/src/components/info/InfoError.tsx
+++ b/rsconcept/frontend/src/components/info/InfoError.tsx
@@ -1,7 +1,7 @@
import axios, { type AxiosError } from 'axios';
import clsx from 'clsx';
-import PrettyJson from '@/components/ui/PrettyJSON';
+import { PrettyJson } from '@/components/ui/View';
import { isResponseHtml } from '@/utils/utils';
export type ErrorData = string | Error | AxiosError | undefined | null;
diff --git a/rsconcept/frontend/src/components/info/SelectedCounter.tsx b/rsconcept/frontend/src/components/info/SelectedCounter.tsx
index a5c29fce..35f37cbb 100644
--- a/rsconcept/frontend/src/components/info/SelectedCounter.tsx
+++ b/rsconcept/frontend/src/components/info/SelectedCounter.tsx
@@ -1,4 +1,4 @@
-import Overlay from '@/components/ui/Overlay';
+import { Overlay } from '@/components/ui/Container';
interface SelectedCounterProps {
totalCount: number;
diff --git a/rsconcept/frontend/src/components/info/TooltipOperation.tsx b/rsconcept/frontend/src/components/info/TooltipOperation.tsx
index 68e89f8d..72910da0 100644
--- a/rsconcept/frontend/src/components/info/TooltipOperation.tsx
+++ b/rsconcept/frontend/src/components/info/TooltipOperation.tsx
@@ -3,8 +3,8 @@
import { createColumnHelper } from '@tanstack/react-table';
import { IconPageRight } from '@/components/Icons';
+import { Tooltip } from '@/components/ui/Container';
import DataTable from '@/components/ui/DataTable';
-import Tooltip from '@/components/ui/Tooltip';
import { OssNodeInternal } from '@/models/miscellaneous';
import { ICstSubstituteEx, OperationType } from '@/models/oss';
import { labelOperationType } from '@/utils/labels';
diff --git a/rsconcept/frontend/src/components/select/MiniSelectorOSS.tsx b/rsconcept/frontend/src/components/select/MiniSelectorOSS.tsx
index 151d5691..9ecd125d 100644
--- a/rsconcept/frontend/src/components/select/MiniSelectorOSS.tsx
+++ b/rsconcept/frontend/src/components/select/MiniSelectorOSS.tsx
@@ -4,11 +4,9 @@ import clsx from 'clsx';
import { IconOSS } from '@/components/Icons';
import { CProps } from '@/components/props';
-import Dropdown from '@/components/ui/Dropdown';
-import DropdownButton from '@/components/ui/DropdownButton';
-import Label from '@/components/ui/Label';
-import MiniButton from '@/components/ui/MiniButton';
-import useDropdown from '@/hooks/useDropdown';
+import { MiniButton } from '@/components/ui/Control';
+import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
+import { Label } from '@/components/ui/Input';
import { ILibraryItemReference } from '@/models/library';
import { prefixes } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/components/select/PickConstituenta.tsx b/rsconcept/frontend/src/components/select/PickConstituenta.tsx
index 927643e2..bfa2c054 100644
--- a/rsconcept/frontend/src/components/select/PickConstituenta.tsx
+++ b/rsconcept/frontend/src/components/select/PickConstituenta.tsx
@@ -6,8 +6,8 @@ import { useState } from 'react';
import BadgeConstituenta from '@/components/info/BadgeConstituenta';
import { CProps } from '@/components/props';
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable';
-import NoData from '@/components/ui/NoData';
-import SearchBar from '@/components/ui/SearchBar';
+import { SearchBar } from '@/components/ui/SearchBar';
+import { NoData } from '@/components/ui/View';
import { CstMatchMode } from '@/models/miscellaneous';
import { IConstituenta } from '@/models/rsform';
import { matchConstituenta } from '@/models/rsformAPI';
diff --git a/rsconcept/frontend/src/components/select/PickMultiConstituenta.tsx b/rsconcept/frontend/src/components/select/PickMultiConstituenta.tsx
index 47119490..3a7eb19a 100644
--- a/rsconcept/frontend/src/components/select/PickMultiConstituenta.tsx
+++ b/rsconcept/frontend/src/components/select/PickMultiConstituenta.tsx
@@ -6,8 +6,8 @@ import { useState } from 'react';
import BadgeConstituenta from '@/components/info/BadgeConstituenta';
import { CProps } from '@/components/props';
import DataTable, { createColumnHelper, RowSelectionState } from '@/components/ui/DataTable';
-import NoData from '@/components/ui/NoData';
-import SearchBar from '@/components/ui/SearchBar';
+import { SearchBar } from '@/components/ui/SearchBar';
+import { NoData } from '@/components/ui/View';
import { Graph } from '@/models/Graph';
import { CstMatchMode } from '@/models/miscellaneous';
import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform';
diff --git a/rsconcept/frontend/src/components/select/PickMultiOperation.tsx b/rsconcept/frontend/src/components/select/PickMultiOperation.tsx
index 07348f71..ed0e9b1c 100644
--- a/rsconcept/frontend/src/components/select/PickMultiOperation.tsx
+++ b/rsconcept/frontend/src/components/select/PickMultiOperation.tsx
@@ -6,9 +6,9 @@ import { useState } from 'react';
import { IconMoveDown, IconMoveUp, IconRemove } from '@/components/Icons';
import { CProps } from '@/components/props';
import SelectOperation from '@/components/select/SelectOperation';
+import { MiniButton } from '@/components/ui/Control';
import DataTable, { createColumnHelper } from '@/components/ui/DataTable';
-import MiniButton from '@/components/ui/MiniButton';
-import NoData from '@/components/ui/NoData';
+import { NoData } from '@/components/ui/View';
import { IOperation, OperationID } from '@/models/oss';
interface PickMultiOperationProps extends CProps.Styling {
diff --git a/rsconcept/frontend/src/components/select/PickSchema.tsx b/rsconcept/frontend/src/components/select/PickSchema.tsx
index f74612f5..89269733 100644
--- a/rsconcept/frontend/src/components/select/PickSchema.tsx
+++ b/rsconcept/frontend/src/components/select/PickSchema.tsx
@@ -4,12 +4,11 @@ import { useIntl } from 'react-intl';
import { IconClose, IconFolderTree } from '@/components/Icons';
import { CProps } from '@/components/props';
+import { FlexColumn } from '@/components/ui/Container';
+import { MiniButton } from '@/components/ui/Control';
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable';
-import Dropdown from '@/components/ui/Dropdown';
-import FlexColumn from '@/components/ui/FlexColumn';
-import MiniButton from '@/components/ui/MiniButton';
-import SearchBar from '@/components/ui/SearchBar';
-import useDropdown from '@/hooks/useDropdown';
+import { Dropdown, useDropdown } from '@/components/ui/Dropdown';
+import { SearchBar } from '@/components/ui/SearchBar';
import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/models/library';
import { matchLibraryItem } from '@/models/libraryAPI';
import { APP_COLORS } from '@/styling/color';
diff --git a/rsconcept/frontend/src/components/select/PickSubstitutions.tsx b/rsconcept/frontend/src/components/select/PickSubstitutions.tsx
index 685006c1..69f058ff 100644
--- a/rsconcept/frontend/src/components/select/PickSubstitutions.tsx
+++ b/rsconcept/frontend/src/components/select/PickSubstitutions.tsx
@@ -8,9 +8,9 @@ import { IconAccept, IconPageLeft, IconPageRight, IconRemove, IconReplace } from
import BadgeConstituenta from '@/components/info/BadgeConstituenta';
import { CProps } from '@/components/props';
import SelectConstituenta from '@/components/select/SelectConstituenta';
+import { MiniButton } from '@/components/ui/Control';
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable';
-import MiniButton from '@/components/ui/MiniButton';
-import NoData from '@/components/ui/NoData';
+import { NoData } from '@/components/ui/View';
import { ILibraryItem } from '@/models/library';
import { ICstSubstitute, IMultiSubstitution } from '@/models/oss';
import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform';
diff --git a/rsconcept/frontend/src/components/select/SelectAccessPolicy.tsx b/rsconcept/frontend/src/components/select/SelectAccessPolicy.tsx
index c81e4296..a78b4359 100644
--- a/rsconcept/frontend/src/components/select/SelectAccessPolicy.tsx
+++ b/rsconcept/frontend/src/components/select/SelectAccessPolicy.tsx
@@ -2,10 +2,8 @@
import { PolicyIcon } from '@/components/DomainIcons';
import { CProps } from '@/components/props';
-import Dropdown from '@/components/ui/Dropdown';
-import DropdownButton from '@/components/ui/DropdownButton';
-import MiniButton from '@/components/ui/MiniButton';
-import useDropdown from '@/hooks/useDropdown';
+import { MiniButton } from '@/components/ui/Control';
+import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import { AccessPolicy } from '@/models/library';
import { prefixes } from '@/utils/constants';
import { describeAccessPolicy, labelAccessPolicy } from '@/utils/labels';
diff --git a/rsconcept/frontend/src/components/select/SelectConstituenta.tsx b/rsconcept/frontend/src/components/select/SelectConstituenta.tsx
index 56a200fe..c06bcf15 100644
--- a/rsconcept/frontend/src/components/select/SelectConstituenta.tsx
+++ b/rsconcept/frontend/src/components/select/SelectConstituenta.tsx
@@ -3,7 +3,7 @@
import clsx from 'clsx';
import { CProps } from '@/components/props';
-import SelectSingle from '@/components/ui/SelectSingle';
+import { SelectSingle } from '@/components/ui/Input';
import { CstMatchMode } from '@/models/miscellaneous';
import { ConstituentaID, IConstituenta } from '@/models/rsform';
import { matchConstituenta } from '@/models/rsformAPI';
diff --git a/rsconcept/frontend/src/components/select/SelectGraphFilter.tsx b/rsconcept/frontend/src/components/select/SelectGraphFilter.tsx
index fd2267be..2db4992f 100644
--- a/rsconcept/frontend/src/components/select/SelectGraphFilter.tsx
+++ b/rsconcept/frontend/src/components/select/SelectGraphFilter.tsx
@@ -2,10 +2,8 @@
import { DependencyIcon } from '@/components/DomainIcons';
import { CProps } from '@/components/props';
-import Dropdown from '@/components/ui/Dropdown';
-import DropdownButton from '@/components/ui/DropdownButton';
-import SelectorButton from '@/components/ui/SelectorButton';
-import useDropdown from '@/hooks/useDropdown';
+import { SelectorButton } from '@/components/ui/Control';
+import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import useWindowSize from '@/hooks/useWindowSize';
import { DependencyMode } from '@/models/miscellaneous';
import { prefixes } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/components/select/SelectItemType.tsx b/rsconcept/frontend/src/components/select/SelectItemType.tsx
index b8cd0ae4..a1552b38 100644
--- a/rsconcept/frontend/src/components/select/SelectItemType.tsx
+++ b/rsconcept/frontend/src/components/select/SelectItemType.tsx
@@ -2,10 +2,8 @@
import { ItemTypeIcon } from '@/components/DomainIcons';
import { CProps } from '@/components/props';
-import Dropdown from '@/components/ui/Dropdown';
-import DropdownButton from '@/components/ui/DropdownButton';
-import SelectorButton from '@/components/ui/SelectorButton';
-import useDropdown from '@/hooks/useDropdown';
+import { SelectorButton } from '@/components/ui/Control';
+import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import { LibraryItemType } from '@/models/library';
import { prefixes } from '@/utils/constants';
import { describeLibraryItemType, labelLibraryItemType } from '@/utils/labels';
diff --git a/rsconcept/frontend/src/components/select/SelectLibraryItem.tsx b/rsconcept/frontend/src/components/select/SelectLibraryItem.tsx
index ad4940ce..314c77d0 100644
--- a/rsconcept/frontend/src/components/select/SelectLibraryItem.tsx
+++ b/rsconcept/frontend/src/components/select/SelectLibraryItem.tsx
@@ -3,7 +3,7 @@
import clsx from 'clsx';
import { CProps } from '@/components/props';
-import SelectSingle from '@/components/ui/SelectSingle';
+import { SelectSingle } from '@/components/ui/Input';
import { ILibraryItem, LibraryItemID } from '@/models/library';
import { matchLibraryItem } from '@/models/libraryAPI';
diff --git a/rsconcept/frontend/src/components/select/SelectLocation.tsx b/rsconcept/frontend/src/components/select/SelectLocation.tsx
index 0bbcba3d..336ab52b 100644
--- a/rsconcept/frontend/src/components/select/SelectLocation.tsx
+++ b/rsconcept/frontend/src/components/select/SelectLocation.tsx
@@ -6,7 +6,7 @@ import { useEffect, useState } from 'react';
import { useFolders } from '@/backend/library/useFolders';
import { IconFolder, IconFolderClosed, IconFolderEmpty, IconFolderOpened } from '@/components/Icons';
import { CProps } from '@/components/props';
-import MiniButton from '@/components/ui/MiniButton';
+import { MiniButton } from '@/components/ui/Control';
import { FolderNode } from '@/models/FolderTree';
import { labelFolderNode } from '@/utils/labels';
diff --git a/rsconcept/frontend/src/components/select/SelectLocationContext.tsx b/rsconcept/frontend/src/components/select/SelectLocationContext.tsx
index 25d86576..fe8de27e 100644
--- a/rsconcept/frontend/src/components/select/SelectLocationContext.tsx
+++ b/rsconcept/frontend/src/components/select/SelectLocationContext.tsx
@@ -4,9 +4,8 @@ import clsx from 'clsx';
import { IconFolderTree } from '@/components/Icons';
import { CProps } from '@/components/props';
-import Dropdown from '@/components/ui/Dropdown';
-import MiniButton from '@/components/ui/MiniButton';
-import useDropdown from '@/hooks/useDropdown';
+import { MiniButton } from '@/components/ui/Control';
+import { Dropdown, useDropdown } from '@/components/ui/Dropdown';
import { prefixes } from '@/utils/constants';
import SelectLocation from './SelectLocation';
diff --git a/rsconcept/frontend/src/components/select/SelectLocationHead.tsx b/rsconcept/frontend/src/components/select/SelectLocationHead.tsx
index 0aa796f9..ccfd6cfb 100644
--- a/rsconcept/frontend/src/components/select/SelectLocationHead.tsx
+++ b/rsconcept/frontend/src/components/select/SelectLocationHead.tsx
@@ -4,10 +4,8 @@ import clsx from 'clsx';
import { LocationIcon } from '@/components/DomainIcons';
import { CProps } from '@/components/props';
-import Dropdown from '@/components/ui/Dropdown';
-import DropdownButton from '@/components/ui/DropdownButton';
-import SelectorButton from '@/components/ui/SelectorButton';
-import useDropdown from '@/hooks/useDropdown';
+import { SelectorButton } from '@/components/ui/Control';
+import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import { LocationHead } from '@/models/library';
import { prefixes } from '@/utils/constants';
import { describeLocationHead, labelLocationHead } from '@/utils/labels';
diff --git a/rsconcept/frontend/src/components/select/SelectMatchMode.tsx b/rsconcept/frontend/src/components/select/SelectMatchMode.tsx
index cdecce64..05b1cce5 100644
--- a/rsconcept/frontend/src/components/select/SelectMatchMode.tsx
+++ b/rsconcept/frontend/src/components/select/SelectMatchMode.tsx
@@ -2,10 +2,8 @@
import { MatchModeIcon } from '@/components/DomainIcons';
import { CProps } from '@/components/props';
-import Dropdown from '@/components/ui/Dropdown';
-import DropdownButton from '@/components/ui/DropdownButton';
-import SelectorButton from '@/components/ui/SelectorButton';
-import useDropdown from '@/hooks/useDropdown';
+import { SelectorButton } from '@/components/ui/Control';
+import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import useWindowSize from '@/hooks/useWindowSize';
import { CstMatchMode } from '@/models/miscellaneous';
import { prefixes } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/components/select/SelectMultiGrammeme.tsx b/rsconcept/frontend/src/components/select/SelectMultiGrammeme.tsx
index 78dba411..37f15930 100644
--- a/rsconcept/frontend/src/components/select/SelectMultiGrammeme.tsx
+++ b/rsconcept/frontend/src/components/select/SelectMultiGrammeme.tsx
@@ -1,5 +1,5 @@
import { CProps } from '@/components/props';
-import SelectMulti, { SelectMultiProps } from '@/components/ui/SelectMulti';
+import { SelectMulti, SelectMultiProps } from '@/components/ui/Input';
import { Grammeme } from '@/models/language';
import { getCompatibleGrams } from '@/models/languageAPI';
import { compareGrammemeOptions, IGrammemeOption, SelectorGrammemes } from '@/utils/selectors';
diff --git a/rsconcept/frontend/src/components/select/SelectOperation.tsx b/rsconcept/frontend/src/components/select/SelectOperation.tsx
index d85cace7..04d93fe9 100644
--- a/rsconcept/frontend/src/components/select/SelectOperation.tsx
+++ b/rsconcept/frontend/src/components/select/SelectOperation.tsx
@@ -3,7 +3,7 @@
import clsx from 'clsx';
import { CProps } from '@/components/props';
-import SelectSingle from '@/components/ui/SelectSingle';
+import { SelectSingle } from '@/components/ui/Input';
import { IOperation, OperationID } from '@/models/oss';
import { matchOperation } from '@/models/ossAPI';
diff --git a/rsconcept/frontend/src/components/select/SelectUser.tsx b/rsconcept/frontend/src/components/select/SelectUser.tsx
index cdf5f3ca..8cfdf0a2 100644
--- a/rsconcept/frontend/src/components/select/SelectUser.tsx
+++ b/rsconcept/frontend/src/components/select/SelectUser.tsx
@@ -5,7 +5,7 @@ import clsx from 'clsx';
import { useLabelUser } from '@/backend/users/useLabelUser';
import { useUsers } from '@/backend/users/useUsers';
import { CProps } from '@/components/props';
-import SelectSingle from '@/components/ui/SelectSingle';
+import { SelectSingle } from '@/components/ui/Input';
import { UserID } from '@/models/user';
import { matchUser } from '@/models/userAPI';
diff --git a/rsconcept/frontend/src/components/select/SelectVersion.tsx b/rsconcept/frontend/src/components/select/SelectVersion.tsx
index 5ca00ee6..534f5224 100644
--- a/rsconcept/frontend/src/components/select/SelectVersion.tsx
+++ b/rsconcept/frontend/src/components/select/SelectVersion.tsx
@@ -3,7 +3,7 @@
import clsx from 'clsx';
import { CProps } from '@/components/props';
-import SelectSingle from '@/components/ui/SelectSingle';
+import { SelectSingle } from '@/components/ui/Input';
import { IVersionInfo, VersionID } from '@/models/library';
import { labelVersion } from '@/utils/labels';
diff --git a/rsconcept/frontend/src/components/select/ToolbarGraphSelection.tsx b/rsconcept/frontend/src/components/select/ToolbarGraphSelection.tsx
index e4ce8fe3..139af16e 100644
--- a/rsconcept/frontend/src/components/select/ToolbarGraphSelection.tsx
+++ b/rsconcept/frontend/src/components/select/ToolbarGraphSelection.tsx
@@ -12,7 +12,7 @@ import {
IconReset
} from '@/components/Icons';
import { CProps } from '@/components/props';
-import MiniButton from '@/components/ui/MiniButton';
+import { MiniButton } from '@/components/ui/Control';
import { Graph } from '@/models/Graph';
interface ToolbarGraphSelectionProps extends CProps.Styling {
diff --git a/rsconcept/frontend/src/components/ui/Divider.tsx b/rsconcept/frontend/src/components/ui/Container/Divider.tsx
similarity index 75%
rename from rsconcept/frontend/src/components/ui/Divider.tsx
rename to rsconcept/frontend/src/components/ui/Container/Divider.tsx
index 7e1cbeb6..55aca7ba 100644
--- a/rsconcept/frontend/src/components/ui/Divider.tsx
+++ b/rsconcept/frontend/src/components/ui/Container/Divider.tsx
@@ -2,7 +2,7 @@ import clsx from 'clsx';
import { CProps } from '@/components/props';
-export interface DividerProps extends CProps.Styling {
+interface DividerProps extends CProps.Styling {
/** Indicates whether the divider is vertical. */
vertical?: boolean;
@@ -13,7 +13,7 @@ export interface DividerProps extends CProps.Styling {
/**
* Horizontal or vertical divider with customizable margins and styling.
*/
-function Divider({ vertical, margins = 'mx-2', className, ...restProps }: DividerProps) {
+export function Divider({ vertical, margins = 'mx-2', className, ...restProps }: DividerProps) {
return (
);
}
-
-export default Divider;
diff --git a/rsconcept/frontend/src/components/ui/FlexColumn.tsx b/rsconcept/frontend/src/components/ui/Container/FlexColumn.tsx
similarity index 74%
rename from rsconcept/frontend/src/components/ui/FlexColumn.tsx
rename to rsconcept/frontend/src/components/ui/Container/FlexColumn.tsx
index 187e4ec7..7d83dc65 100644
--- a/rsconcept/frontend/src/components/ui/FlexColumn.tsx
+++ b/rsconcept/frontend/src/components/ui/Container/FlexColumn.tsx
@@ -6,12 +6,10 @@ import { CProps } from '@/components/props';
* `flex` column container.
* This component is useful for creating vertical layouts with flexbox.
*/
-function FlexColumn({ className, children, ...restProps }: CProps.Div) {
+export function FlexColumn({ className, children, ...restProps }: CProps.Div) {
return (
{children}
);
}
-
-export default FlexColumn;
diff --git a/rsconcept/frontend/src/components/ui/Overlay.tsx b/rsconcept/frontend/src/components/ui/Container/Overlay.tsx
similarity index 93%
rename from rsconcept/frontend/src/components/ui/Overlay.tsx
rename to rsconcept/frontend/src/components/ui/Container/Overlay.tsx
index 13d15c91..f83c45de 100644
--- a/rsconcept/frontend/src/components/ui/Overlay.tsx
+++ b/rsconcept/frontend/src/components/ui/Container/Overlay.tsx
@@ -16,7 +16,7 @@ interface OverlayProps extends CProps.Styling {
/**
* Displays a transparent overlay over the main content.
*/
-function Overlay({
+export function Overlay({
children,
className,
position = 'top-0 right-0',
@@ -31,5 +31,3 @@ function Overlay({
);
}
-
-export default Overlay;
diff --git a/rsconcept/frontend/src/components/ui/Tooltip.tsx b/rsconcept/frontend/src/components/ui/Container/Tooltip.tsx
similarity index 97%
rename from rsconcept/frontend/src/components/ui/Tooltip.tsx
rename to rsconcept/frontend/src/components/ui/Container/Tooltip.tsx
index 93033833..0ca58304 100644
--- a/rsconcept/frontend/src/components/ui/Tooltip.tsx
+++ b/rsconcept/frontend/src/components/ui/Container/Tooltip.tsx
@@ -20,7 +20,7 @@ interface TooltipProps extends Omit {
/**
* Displays content in a tooltip container.
*/
-function Tooltip({
+export function Tooltip({
text,
children,
layer = 'z-tooltip',
@@ -58,5 +58,3 @@ function Tooltip({
document.body
);
}
-
-export default Tooltip;
diff --git a/rsconcept/frontend/src/components/ui/Container/index.tsx b/rsconcept/frontend/src/components/ui/Container/index.tsx
new file mode 100644
index 00000000..7fd2040b
--- /dev/null
+++ b/rsconcept/frontend/src/components/ui/Container/index.tsx
@@ -0,0 +1,4 @@
+export { Divider } from './Divider';
+export { FlexColumn } from './FlexColumn';
+export { Overlay } from './Overlay';
+export { type PlacesType, Tooltip } from './Tooltip';
diff --git a/rsconcept/frontend/src/components/ui/Button.tsx b/rsconcept/frontend/src/components/ui/Control/Button.tsx
similarity index 97%
rename from rsconcept/frontend/src/components/ui/Button.tsx
rename to rsconcept/frontend/src/components/ui/Control/Button.tsx
index 2dbe49dd..0ac1e812 100644
--- a/rsconcept/frontend/src/components/ui/Button.tsx
+++ b/rsconcept/frontend/src/components/ui/Control/Button.tsx
@@ -20,7 +20,7 @@ interface ButtonProps extends CProps.Control, CProps.Colors, CProps.Button {
/**
* Customizable `button` with text, icon, tooltips and various styles.
*/
-function Button({
+export function Button({
icon,
text,
title,
@@ -66,5 +66,3 @@ function Button({
);
}
-
-export default Button;
diff --git a/rsconcept/frontend/src/components/ui/LinkTopic.tsx b/rsconcept/frontend/src/components/ui/Control/LinkTopic.tsx
similarity index 73%
rename from rsconcept/frontend/src/components/ui/LinkTopic.tsx
rename to rsconcept/frontend/src/components/ui/Control/LinkTopic.tsx
index 7b044dd9..76891fc4 100644
--- a/rsconcept/frontend/src/components/ui/LinkTopic.tsx
+++ b/rsconcept/frontend/src/components/ui/Control/LinkTopic.tsx
@@ -1,7 +1,7 @@
import { urls } from '@/app/urls';
import { HelpTopic } from '@/models/miscellaneous';
-import TextURL from './TextURL';
+import { TextURL } from './TextURL';
interface TextURLProps {
/** Text to display. */
@@ -13,8 +13,6 @@ interface TextURLProps {
/**
* Displays a link to a help topic.
*/
-function LinkTopic({ text, topic }: TextURLProps) {
+export function LinkTopic({ text, topic }: TextURLProps) {
return ;
}
-
-export default LinkTopic;
diff --git a/rsconcept/frontend/src/components/ui/MiniButton.tsx b/rsconcept/frontend/src/components/ui/Control/MiniButton.tsx
similarity index 95%
rename from rsconcept/frontend/src/components/ui/MiniButton.tsx
rename to rsconcept/frontend/src/components/ui/Control/MiniButton.tsx
index c02f1e20..85daf7e6 100644
--- a/rsconcept/frontend/src/components/ui/MiniButton.tsx
+++ b/rsconcept/frontend/src/components/ui/Control/MiniButton.tsx
@@ -17,7 +17,7 @@ interface MiniButtonProps extends CProps.Button {
/**
* Displays small transparent button with an icon.
*/
-function MiniButton({
+export function MiniButton({
icon,
noHover,
noPadding,
@@ -53,5 +53,3 @@ function MiniButton({
);
}
-
-export default MiniButton;
diff --git a/rsconcept/frontend/src/components/ui/SelectorButton.tsx b/rsconcept/frontend/src/components/ui/Control/SelectorButton.tsx
similarity index 96%
rename from rsconcept/frontend/src/components/ui/SelectorButton.tsx
rename to rsconcept/frontend/src/components/ui/Control/SelectorButton.tsx
index b97d2553..9c80f36e 100644
--- a/rsconcept/frontend/src/components/ui/SelectorButton.tsx
+++ b/rsconcept/frontend/src/components/ui/Control/SelectorButton.tsx
@@ -20,7 +20,7 @@ interface SelectorButtonProps extends CProps.Button {
/**
* Displays a button with an icon and text that opens a dropdown menu.
*/
-function SelectorButton({
+export function SelectorButton({
text,
icon,
title,
@@ -59,5 +59,3 @@ function SelectorButton({
);
}
-
-export default SelectorButton;
diff --git a/rsconcept/frontend/src/components/ui/SubmitButton.tsx b/rsconcept/frontend/src/components/ui/Control/SubmitButton.tsx
similarity index 85%
rename from rsconcept/frontend/src/components/ui/SubmitButton.tsx
rename to rsconcept/frontend/src/components/ui/Control/SubmitButton.tsx
index 42efba64..2eb2c16a 100644
--- a/rsconcept/frontend/src/components/ui/SubmitButton.tsx
+++ b/rsconcept/frontend/src/components/ui/Control/SubmitButton.tsx
@@ -16,7 +16,7 @@ interface SubmitButtonProps extends CProps.Button {
/**
* Displays submit type button with icon and text.
*/
-function SubmitButton({ text = 'ОК', icon, disabled, loading, className, ...restProps }: SubmitButtonProps) {
+export function SubmitButton({ text = 'ОК', icon, disabled, loading, className, ...restProps }: SubmitButtonProps) {
return (
);
}
-
-export default DropdownButton;
diff --git a/rsconcept/frontend/src/components/ui/DropdownCheckbox.tsx b/rsconcept/frontend/src/components/ui/Dropdown/DropdownCheckbox.tsx
similarity index 70%
rename from rsconcept/frontend/src/components/ui/DropdownCheckbox.tsx
rename to rsconcept/frontend/src/components/ui/Dropdown/DropdownCheckbox.tsx
index 5235852e..c69f1880 100644
--- a/rsconcept/frontend/src/components/ui/DropdownCheckbox.tsx
+++ b/rsconcept/frontend/src/components/ui/Dropdown/DropdownCheckbox.tsx
@@ -1,9 +1,9 @@
import clsx from 'clsx';
-import Checkbox, { CheckboxProps } from './Checkbox';
+import { Checkbox, CheckboxProps } from '../Input';
/** Animated {@link Checkbox} inside a {@link Dropdown} item. */
-function DropdownCheckbox({ onChange: setValue, disabled, ...restProps }: CheckboxProps) {
+export function DropdownCheckbox({ onChange: setValue, disabled, ...restProps }: CheckboxProps) {
return (
);
}
-
-export default DropdownCheckbox;
diff --git a/rsconcept/frontend/src/components/ui/Dropdown/index.tsx b/rsconcept/frontend/src/components/ui/Dropdown/index.tsx
new file mode 100644
index 00000000..b368e60a
--- /dev/null
+++ b/rsconcept/frontend/src/components/ui/Dropdown/index.tsx
@@ -0,0 +1,4 @@
+export { Dropdown } from './Dropdown';
+export { DropdownButton } from './DropdownButton';
+export { DropdownCheckbox } from './DropdownCheckbox';
+export { useDropdown } from './useDropdown';
diff --git a/rsconcept/frontend/src/hooks/useDropdown.ts b/rsconcept/frontend/src/components/ui/Dropdown/useDropdown.ts
similarity index 74%
rename from rsconcept/frontend/src/hooks/useDropdown.ts
rename to rsconcept/frontend/src/components/ui/Dropdown/useDropdown.ts
index f7e8b383..284e7928 100644
--- a/rsconcept/frontend/src/hooks/useDropdown.ts
+++ b/rsconcept/frontend/src/components/ui/Dropdown/useDropdown.ts
@@ -2,9 +2,9 @@
import { useRef, useState } from 'react';
-import useClickedOutside from './useClickedOutside';
+import useClickedOutside from '@/hooks/useClickedOutside';
-function useDropdown() {
+export function useDropdown() {
const [isOpen, setIsOpen] = useState(false);
const ref = useRef(null);
@@ -18,5 +18,3 @@ function useDropdown() {
hide: () => setIsOpen(false)
};
}
-
-export default useDropdown;
diff --git a/rsconcept/frontend/src/components/ui/Checkbox.tsx b/rsconcept/frontend/src/components/ui/Input/Checkbox.tsx
similarity index 97%
rename from rsconcept/frontend/src/components/ui/Checkbox.tsx
rename to rsconcept/frontend/src/components/ui/Input/Checkbox.tsx
index 2aa7e0d1..ce05be9b 100644
--- a/rsconcept/frontend/src/components/ui/Checkbox.tsx
+++ b/rsconcept/frontend/src/components/ui/Input/Checkbox.tsx
@@ -21,7 +21,7 @@ export interface CheckboxProps extends Omit
);
}
-
-export default Checkbox;
diff --git a/rsconcept/frontend/src/components/ui/CheckboxTristate.tsx b/rsconcept/frontend/src/components/ui/Input/CheckboxTristate.tsx
similarity index 97%
rename from rsconcept/frontend/src/components/ui/CheckboxTristate.tsx
rename to rsconcept/frontend/src/components/ui/Input/CheckboxTristate.tsx
index 6398c6df..7750e817 100644
--- a/rsconcept/frontend/src/components/ui/CheckboxTristate.tsx
+++ b/rsconcept/frontend/src/components/ui/Input/CheckboxTristate.tsx
@@ -17,7 +17,7 @@ export interface CheckboxTristateProps extends Omit
);
}
-
-export default CheckboxTristate;
diff --git a/rsconcept/frontend/src/components/ui/ErrorField.tsx b/rsconcept/frontend/src/components/ui/Input/ErrorField.tsx
similarity index 71%
rename from rsconcept/frontend/src/components/ui/ErrorField.tsx
rename to rsconcept/frontend/src/components/ui/Input/ErrorField.tsx
index 9788a422..a1524ca5 100644
--- a/rsconcept/frontend/src/components/ui/ErrorField.tsx
+++ b/rsconcept/frontend/src/components/ui/Input/ErrorField.tsx
@@ -1,7 +1,7 @@
import clsx from 'clsx';
import { FieldError, GlobalError } from 'react-hook-form';
-import { CProps } from '../props';
+import { CProps } from '@/components/props';
interface ErrorFieldProps extends CProps.Styling {
error?: FieldError | GlobalError;
@@ -10,7 +10,7 @@ interface ErrorFieldProps extends CProps.Styling {
/**
* Displays an error message for input field.
*/
-function ErrorField({ error, className, ...restProps }: ErrorFieldProps): React.ReactElement | null {
+export function ErrorField({ error, className, ...restProps }: ErrorFieldProps): React.ReactElement | null {
if (!error) {
return null;
}
@@ -20,5 +20,3 @@ function ErrorField({ error, className, ...restProps }: ErrorFieldProps): React.
);
}
-
-export default ErrorField;
diff --git a/rsconcept/frontend/src/components/ui/FileInput.tsx b/rsconcept/frontend/src/components/ui/Input/FileInput.tsx
similarity index 88%
rename from rsconcept/frontend/src/components/ui/FileInput.tsx
rename to rsconcept/frontend/src/components/ui/Input/FileInput.tsx
index bebcc19a..4496b36e 100644
--- a/rsconcept/frontend/src/components/ui/FileInput.tsx
+++ b/rsconcept/frontend/src/components/ui/Input/FileInput.tsx
@@ -6,8 +6,8 @@ import { useRef, useState } from 'react';
import { IconUpload } from '@/components/Icons';
import { CProps } from '@/components/props';
-import Button from './Button';
-import Label from './Label';
+import { Button } from '../Control';
+import { Label } from './Label';
interface FileInputProps extends Omit {
/** Label to display in file upload button. */
@@ -23,7 +23,7 @@ interface FileInputProps extends Omit {
/**
* FileInput is a component for selecting a `file`, displaying the selected file name.
*/
-function FileInput({ id, label, acceptType, title, className, style, onChange, ...restProps }: FileInputProps) {
+export function FileInput({ id, label, acceptType, title, className, style, onChange, ...restProps }: FileInputProps) {
const inputRef = useRef(null);
const [fileName, setFileName] = useState('');
@@ -56,5 +56,3 @@ function FileInput({ id, label, acceptType, title, className, style, onChange, .
);
}
-
-export default FileInput;
diff --git a/rsconcept/frontend/src/components/ui/Label.tsx b/rsconcept/frontend/src/components/ui/Input/Label.tsx
similarity index 87%
rename from rsconcept/frontend/src/components/ui/Label.tsx
rename to rsconcept/frontend/src/components/ui/Input/Label.tsx
index 7927fad8..4f9de845 100644
--- a/rsconcept/frontend/src/components/ui/Label.tsx
+++ b/rsconcept/frontend/src/components/ui/Input/Label.tsx
@@ -12,7 +12,7 @@ interface LabelProps extends CProps.Label {
*
* Note: Html label component is used only if `htmlFor` prop is set.
*/
-function Label({ text, className, ...restProps }: LabelProps) {
+export function Label({ text, className, ...restProps }: LabelProps) {
if (!text) {
return null;
}
@@ -30,5 +30,3 @@ function Label({ text, className, ...restProps }: LabelProps) {
);
}
}
-
-export default Label;
diff --git a/rsconcept/frontend/src/components/ui/SelectMulti.tsx b/rsconcept/frontend/src/components/ui/Input/SelectMulti.tsx
similarity index 96%
rename from rsconcept/frontend/src/components/ui/SelectMulti.tsx
rename to rsconcept/frontend/src/components/ui/Input/SelectMulti.tsx
index 400aad53..fe46ae26 100644
--- a/rsconcept/frontend/src/components/ui/SelectMulti.tsx
+++ b/rsconcept/frontend/src/components/ui/Input/SelectMulti.tsx
@@ -45,7 +45,7 @@ export interface SelectMultiProps
);
}
-
-export default SelectSingle;
diff --git a/rsconcept/frontend/src/components/ui/SelectTree.tsx b/rsconcept/frontend/src/components/ui/Input/SelectTree.tsx
similarity index 96%
rename from rsconcept/frontend/src/components/ui/SelectTree.tsx
rename to rsconcept/frontend/src/components/ui/Input/SelectTree.tsx
index 59f3237b..b1a34179 100644
--- a/rsconcept/frontend/src/components/ui/SelectTree.tsx
+++ b/rsconcept/frontend/src/components/ui/Input/SelectTree.tsx
@@ -5,8 +5,8 @@ import { IconDropArrow, IconPageRight } from '@/components/Icons';
import { CProps } from '@/components/props';
import { globals, PARAMETER } from '@/utils/constants';
-import MiniButton from './MiniButton';
-import Overlay from './Overlay';
+import { Overlay } from '../Container';
+import { MiniButton } from '../Control';
interface SelectTreeProps extends CProps.Styling {
/** Current value. */
@@ -34,7 +34,7 @@ interface SelectTreeProps extends CProps.Styling {
/**
* Displays a tree of items and allows user to select one.
*/
-function SelectTree({
+export function SelectTree({
items,
value,
getParent,
@@ -123,5 +123,3 @@ function SelectTree({
);
}
-
-export default SelectTree;
diff --git a/rsconcept/frontend/src/components/ui/TextArea.tsx b/rsconcept/frontend/src/components/ui/Input/TextArea.tsx
similarity index 92%
rename from rsconcept/frontend/src/components/ui/TextArea.tsx
rename to rsconcept/frontend/src/components/ui/Input/TextArea.tsx
index 55b2df0d..65cd8879 100644
--- a/rsconcept/frontend/src/components/ui/TextArea.tsx
+++ b/rsconcept/frontend/src/components/ui/Input/TextArea.tsx
@@ -1,9 +1,9 @@
import clsx from 'clsx';
import { CProps } from '@/components/props';
+import { Label } from '@/components/ui/Input/Label';
-import ErrorField from './ErrorField';
-import Label from './Label';
+import { ErrorField } from './ErrorField';
export interface TextAreaProps extends CProps.Editor, CProps.ErrorProcessing, CProps.Colors, CProps.TextArea {
/** Indicates that padding should be minimal. */
@@ -19,7 +19,7 @@ export interface TextAreaProps extends CProps.Editor, CProps.ErrorProcessing, CP
/**
* Displays a customizable textarea with a label.
*/
-function TextArea({
+export function TextArea({
id,
label,
required,
@@ -71,5 +71,3 @@ function TextArea({
);
}
-
-export default TextArea;
diff --git a/rsconcept/frontend/src/components/ui/TextInput.tsx b/rsconcept/frontend/src/components/ui/Input/TextInput.tsx
similarity index 92%
rename from rsconcept/frontend/src/components/ui/TextInput.tsx
rename to rsconcept/frontend/src/components/ui/Input/TextInput.tsx
index 6986707c..3c329080 100644
--- a/rsconcept/frontend/src/components/ui/TextInput.tsx
+++ b/rsconcept/frontend/src/components/ui/Input/TextInput.tsx
@@ -1,9 +1,9 @@
import clsx from 'clsx';
import { CProps } from '@/components/props';
+import { Label } from '@/components/ui/Input/Label';
-import ErrorField from './ErrorField';
-import Label from './Label';
+import { ErrorField } from './ErrorField';
interface TextInputProps extends CProps.Editor, CProps.ErrorProcessing, CProps.Colors, CProps.Input {
/** Indicates that padding should be minimal. */
@@ -22,7 +22,7 @@ function preventEnterCapture(event: React.KeyboardEvent) {
/**
* Displays a customizable input with a label.
*/
-function TextInput({
+export function TextInput({
id,
label,
dense,
@@ -70,5 +70,3 @@ function TextInput({
);
}
-
-export default TextInput;
diff --git a/rsconcept/frontend/src/components/ui/Input/index.tsx b/rsconcept/frontend/src/components/ui/Input/index.tsx
new file mode 100644
index 00000000..3fb336d9
--- /dev/null
+++ b/rsconcept/frontend/src/components/ui/Input/index.tsx
@@ -0,0 +1,10 @@
+export { Checkbox, type CheckboxProps } from './Checkbox';
+export { CheckboxTristate } from './CheckboxTristate';
+export { ErrorField } from './ErrorField';
+export { FileInput } from './FileInput';
+export { Label } from './Label';
+export { SelectMulti, type SelectMultiProps } from './SelectMulti';
+export { SelectSingle, type SelectSingleProps } from './SelectSingle';
+export { SelectTree } from './SelectTree';
+export { TextArea } from './TextArea';
+export { TextInput } from './TextInput';
diff --git a/rsconcept/frontend/src/components/ui/Modal/ModalForm.tsx b/rsconcept/frontend/src/components/ui/Modal/ModalForm.tsx
index ae76b9a9..5c5c4d5f 100644
--- a/rsconcept/frontend/src/components/ui/Modal/ModalForm.tsx
+++ b/rsconcept/frontend/src/components/ui/Modal/ModalForm.tsx
@@ -5,15 +5,13 @@ import clsx from 'clsx';
import { IconClose } from '@/components/Icons';
import BadgeHelp from '@/components/info/BadgeHelp';
import { CProps } from '@/components/props';
-import Button from '@/components/ui/Button';
-import MiniButton from '@/components/ui/MiniButton';
import useEscapeKey from '@/hooks/useEscapeKey';
import { HelpTopic } from '@/models/miscellaneous';
import { useDialogsStore } from '@/stores/dialogs';
import { PARAMETER } from '@/utils/constants';
import { prepareTooltip } from '@/utils/labels';
-import SubmitButton from '../SubmitButton';
+import { Button, MiniButton, SubmitButton } from '../Control';
import { ModalBackdrop } from './ModalBackdrop';
export interface ModalProps extends CProps.Styling {
diff --git a/rsconcept/frontend/src/components/ui/Modal/ModalView.tsx b/rsconcept/frontend/src/components/ui/Modal/ModalView.tsx
index 05f71e8d..16a40a73 100644
--- a/rsconcept/frontend/src/components/ui/Modal/ModalView.tsx
+++ b/rsconcept/frontend/src/components/ui/Modal/ModalView.tsx
@@ -4,13 +4,12 @@ import clsx from 'clsx';
import { IconClose } from '@/components/Icons';
import BadgeHelp from '@/components/info/BadgeHelp';
-import Button from '@/components/ui/Button';
-import MiniButton from '@/components/ui/MiniButton';
import useEscapeKey from '@/hooks/useEscapeKey';
import { useDialogsStore } from '@/stores/dialogs';
import { PARAMETER } from '@/utils/constants';
import { prepareTooltip } from '@/utils/labels';
+import { Button, MiniButton } from '../Control';
import { ModalBackdrop } from './ModalBackdrop';
import { ModalProps } from './ModalForm';
diff --git a/rsconcept/frontend/src/components/ui/PDFViewer/index.tsx b/rsconcept/frontend/src/components/ui/PDFViewer/index.tsx
deleted file mode 100644
index 38c9d624..00000000
--- a/rsconcept/frontend/src/components/ui/PDFViewer/index.tsx
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './PDFViewer';
diff --git a/rsconcept/frontend/src/components/ui/SearchBar.tsx b/rsconcept/frontend/src/components/ui/SearchBar.tsx
index 38ea1276..6f1e18a5 100644
--- a/rsconcept/frontend/src/components/ui/SearchBar.tsx
+++ b/rsconcept/frontend/src/components/ui/SearchBar.tsx
@@ -3,8 +3,8 @@ import clsx from 'clsx';
import { IconSearch } from '@/components/Icons';
import { CProps } from '@/components/props';
-import Overlay from './Overlay';
-import TextInput from './TextInput';
+import { Overlay } from './Container';
+import { TextInput } from './Input';
interface SearchBarProps extends CProps.Styling {
/** Id of the search bar. */
@@ -29,7 +29,7 @@ interface SearchBarProps extends CProps.Styling {
/**
* Displays a search bar with a search icon and text input.
*/
-function SearchBar({
+export function SearchBar({
id,
query,
noIcon,
@@ -58,5 +58,3 @@ function SearchBar({
);
}
-
-export default SearchBar;
diff --git a/rsconcept/frontend/src/components/ui/TabLabel.tsx b/rsconcept/frontend/src/components/ui/Tabs/TabLabel.tsx
similarity index 88%
rename from rsconcept/frontend/src/components/ui/TabLabel.tsx
rename to rsconcept/frontend/src/components/ui/Tabs/TabLabel.tsx
index 8b6da6d6..9ef8d227 100644
--- a/rsconcept/frontend/src/components/ui/TabLabel.tsx
+++ b/rsconcept/frontend/src/components/ui/Tabs/TabLabel.tsx
@@ -13,7 +13,7 @@ interface TabLabelProps extends Omit, CProps.Titled {
/**
* Displays a tab header with a label.
*/
-function TabLabel({ label, title, titleHtml, hideTitle, className, ...otherProps }: TabLabelProps) {
+export function TabLabel({ label, title, titleHtml, hideTitle, className, ...otherProps }: TabLabelProps) {
return (
);
}
-
-export default EmbedYoutube;
diff --git a/rsconcept/frontend/src/components/ui/Indicator.tsx b/rsconcept/frontend/src/components/ui/View/Indicator.tsx
similarity index 85%
rename from rsconcept/frontend/src/components/ui/Indicator.tsx
rename to rsconcept/frontend/src/components/ui/View/Indicator.tsx
index 733bd33f..20bbcb5c 100644
--- a/rsconcept/frontend/src/components/ui/Indicator.tsx
+++ b/rsconcept/frontend/src/components/ui/View/Indicator.tsx
@@ -14,7 +14,7 @@ interface IndicatorProps extends CProps.Titled, CProps.Styling {
/**
* Displays a status `icon` with a tooltip.
*/
-function Indicator({ icon, title, titleHtml, hideTitle, noPadding, className, ...restProps }: IndicatorProps) {
+export function Indicator({ icon, title, titleHtml, hideTitle, noPadding, className, ...restProps }: IndicatorProps) {
return (
);
}
-
-export default Indicator;
diff --git a/rsconcept/frontend/src/components/ui/NoData.tsx b/rsconcept/frontend/src/components/ui/View/NoData.tsx
similarity index 75%
rename from rsconcept/frontend/src/components/ui/NoData.tsx
rename to rsconcept/frontend/src/components/ui/View/NoData.tsx
index 7454cb36..a9e76c77 100644
--- a/rsconcept/frontend/src/components/ui/NoData.tsx
+++ b/rsconcept/frontend/src/components/ui/View/NoData.tsx
@@ -5,12 +5,10 @@ import { CProps } from '@/components/props';
/**
* Wraps content in a div with a centered text.
*/
-function NoData({ className, children, ...restProps }: CProps.Div) {
+export function NoData({ className, children, ...restProps }: CProps.Div) {
return (
{children}
);
}
-
-export default NoData;
diff --git a/rsconcept/frontend/src/components/ui/PDFViewer/PDFViewer.tsx b/rsconcept/frontend/src/components/ui/View/PDFViewer.tsx
similarity index 88%
rename from rsconcept/frontend/src/components/ui/PDFViewer/PDFViewer.tsx
rename to rsconcept/frontend/src/components/ui/View/PDFViewer.tsx
index 59c1a7bc..ecc5cbd8 100644
--- a/rsconcept/frontend/src/components/ui/PDFViewer/PDFViewer.tsx
+++ b/rsconcept/frontend/src/components/ui/View/PDFViewer.tsx
@@ -23,7 +23,7 @@ interface PDFViewerProps {
/**
* Displays a PDF file using an embedded viewer.
*/
-function PDFViewer({ file, offsetXpx, minWidth = MINIMUM_WIDTH }: PDFViewerProps) {
+export function PDFViewer({ file, offsetXpx, minWidth = MINIMUM_WIDTH }: PDFViewerProps) {
const windowSize = useWindowSize();
const pageWidth = Math.max(minWidth, Math.min((windowSize?.width ?? 0) - (offsetXpx ?? 0) - 10, MAXIMUM_WIDTH));
@@ -31,5 +31,3 @@ function PDFViewer({ file, offsetXpx, minWidth = MINIMUM_WIDTH }: PDFViewerProps
return
;
}
-
-export default PDFViewer;
diff --git a/rsconcept/frontend/src/components/ui/PrettyJSON.tsx b/rsconcept/frontend/src/components/ui/View/PrettyJSON.tsx
similarity index 72%
rename from rsconcept/frontend/src/components/ui/PrettyJSON.tsx
rename to rsconcept/frontend/src/components/ui/View/PrettyJSON.tsx
index 898f33f9..2b977620 100644
--- a/rsconcept/frontend/src/components/ui/PrettyJSON.tsx
+++ b/rsconcept/frontend/src/components/ui/View/PrettyJSON.tsx
@@ -5,9 +5,7 @@ interface PrettyJsonProps {
/**
* Displays JSON data in a formatted string.
*/
-function PrettyJson({ data }: PrettyJsonProps) {
+export function PrettyJson({ data }: PrettyJsonProps) {
const text = JSON.stringify(data, null, 2);
return
{text === '{}' ? '' : text}
;
}
-
-export default PrettyJson;
diff --git a/rsconcept/frontend/src/components/ui/TextContent.tsx b/rsconcept/frontend/src/components/ui/View/TextContent.tsx
similarity index 87%
rename from rsconcept/frontend/src/components/ui/TextContent.tsx
rename to rsconcept/frontend/src/components/ui/View/TextContent.tsx
index b2a3c64e..c5a036d8 100644
--- a/rsconcept/frontend/src/components/ui/TextContent.tsx
+++ b/rsconcept/frontend/src/components/ui/View/TextContent.tsx
@@ -18,7 +18,7 @@ export interface TextContentProps extends CProps.Styling {
/**
* Displays text limited to a certain number of symbols.
*/
-function TextContent({ className, text, maxLength, noTooltip, ...restProps }: TextContentProps) {
+export function TextContent({ className, text, maxLength, noTooltip, ...restProps }: TextContentProps) {
const truncated = maxLength ? truncateToLastWord(text, maxLength) : text;
const isTruncated = maxLength && text.length > maxLength;
return (
@@ -32,5 +32,3 @@ function TextContent({ className, text, maxLength, noTooltip, ...restProps }: Te
);
}
-
-export default TextContent;
diff --git a/rsconcept/frontend/src/components/ui/ValueIcon.tsx b/rsconcept/frontend/src/components/ui/View/ValueIcon.tsx
similarity index 95%
rename from rsconcept/frontend/src/components/ui/ValueIcon.tsx
rename to rsconcept/frontend/src/components/ui/View/ValueIcon.tsx
index b12a6e37..7161fa08 100644
--- a/rsconcept/frontend/src/components/ui/ValueIcon.tsx
+++ b/rsconcept/frontend/src/components/ui/View/ValueIcon.tsx
@@ -3,7 +3,7 @@ import clsx from 'clsx';
import { CProps } from '@/components/props';
import { globals } from '@/utils/constants';
-import MiniButton from './MiniButton';
+import { MiniButton } from '../Control';
interface ValueIconProps extends CProps.Styling, CProps.Titled {
/** Id of the component. */
@@ -34,7 +34,7 @@ interface ValueIconProps extends CProps.Styling, CProps.Titled {
/**
* Displays a value with an icon that can be clicked.
*/
-function ValueIcon({
+export function ValueIcon({
id,
dense,
icon,
@@ -73,5 +73,3 @@ function ValueIcon({
);
}
-
-export default ValueIcon;
diff --git a/rsconcept/frontend/src/components/ui/ValueLabeled.tsx b/rsconcept/frontend/src/components/ui/View/ValueLabeled.tsx
similarity index 81%
rename from rsconcept/frontend/src/components/ui/ValueLabeled.tsx
rename to rsconcept/frontend/src/components/ui/View/ValueLabeled.tsx
index f8b3d167..f323231f 100644
--- a/rsconcept/frontend/src/components/ui/ValueLabeled.tsx
+++ b/rsconcept/frontend/src/components/ui/View/ValueLabeled.tsx
@@ -19,7 +19,7 @@ interface ValueLabeledProps extends CProps.Styling {
/**
* Displays a labeled value.
*/
-function ValueLabeled({ id, label, text, title, className, ...restProps }: ValueLabeledProps) {
+export function ValueLabeled({ id, label, text, title, className, ...restProps }: ValueLabeledProps) {
return (
{label}
@@ -27,5 +27,3 @@ function ValueLabeled({ id, label, text, title, className, ...restProps }: Value
);
}
-
-export default ValueLabeled;
diff --git a/rsconcept/frontend/src/components/ui/ValueStats.tsx b/rsconcept/frontend/src/components/ui/View/ValueStats.tsx
similarity index 81%
rename from rsconcept/frontend/src/components/ui/ValueStats.tsx
rename to rsconcept/frontend/src/components/ui/View/ValueStats.tsx
index a6881fa6..c1271db5 100644
--- a/rsconcept/frontend/src/components/ui/ValueStats.tsx
+++ b/rsconcept/frontend/src/components/ui/View/ValueStats.tsx
@@ -1,7 +1,7 @@
import { CProps } from '@/components/props';
import { PARAMETER } from '@/utils/constants';
-import ValueIcon from './ValueIcon';
+import { ValueIcon } from './ValueIcon';
interface ValueStatsProps extends CProps.Styling, CProps.Titled {
/** Id of the component. */
@@ -17,8 +17,6 @@ interface ValueStatsProps extends CProps.Styling, CProps.Titled {
/**
* Displays statistics value with an icon.
*/
-function ValueStats(props: ValueStatsProps) {
+export function ValueStats(props: ValueStatsProps) {
return ;
}
-
-export default ValueStats;
diff --git a/rsconcept/frontend/src/components/ui/View/index.tsx b/rsconcept/frontend/src/components/ui/View/index.tsx
new file mode 100644
index 00000000..7f8074dc
--- /dev/null
+++ b/rsconcept/frontend/src/components/ui/View/index.tsx
@@ -0,0 +1,9 @@
+export { EmbedYoutube } from './EmbedYoutube';
+export { Indicator } from './Indicator';
+export { NoData } from './NoData';
+export { PDFViewer } from './PDFViewer';
+export { PrettyJson } from './PrettyJSON';
+export { TextContent } from './TextContent';
+export { ValueIcon } from './ValueIcon';
+export { ValueLabeled } from './ValueLabeled';
+export { ValueStats } from './ValueStats';
diff --git a/rsconcept/frontend/src/dialogs/DlgChangeInputSchema.tsx b/rsconcept/frontend/src/dialogs/DlgChangeInputSchema.tsx
index 9733a8f2..cb173189 100644
--- a/rsconcept/frontend/src/dialogs/DlgChangeInputSchema.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgChangeInputSchema.tsx
@@ -6,8 +6,8 @@ import { useState } from 'react';
import { useLibrary } from '@/backend/library/useLibrary';
import { IconReset } from '@/components/Icons';
import PickSchema from '@/components/select/PickSchema';
-import Label from '@/components/ui/Label';
-import MiniButton from '@/components/ui/MiniButton';
+import { MiniButton } from '@/components/ui/Control';
+import { Label } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal';
import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/models/library';
import { IOperation, IOperationSchema, OperationID } from '@/models/oss';
diff --git a/rsconcept/frontend/src/dialogs/DlgChangeLocation.tsx b/rsconcept/frontend/src/dialogs/DlgChangeLocation.tsx
index 95079566..3c4efcd6 100644
--- a/rsconcept/frontend/src/dialogs/DlgChangeLocation.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgChangeLocation.tsx
@@ -6,9 +6,8 @@ import { useState } from 'react';
import { useAuthSuspense } from '@/backend/auth/useAuth';
import SelectLocationContext from '@/components/select/SelectLocationContext';
import SelectLocationHead from '@/components/select/SelectLocationHead';
-import Label from '@/components/ui/Label';
+import { Label, TextArea } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal';
-import TextArea from '@/components/ui/TextArea';
import { LocationHead } from '@/models/library';
import { combineLocation, validateLocation } from '@/models/libraryAPI';
import { useDialogsStore } from '@/stores/dialogs';
diff --git a/rsconcept/frontend/src/dialogs/DlgCloneLibraryItem.tsx b/rsconcept/frontend/src/dialogs/DlgCloneLibraryItem.tsx
index 21f9533e..dcd15d8b 100644
--- a/rsconcept/frontend/src/dialogs/DlgCloneLibraryItem.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgCloneLibraryItem.tsx
@@ -12,12 +12,9 @@ import { VisibilityIcon } from '@/components/DomainIcons';
import SelectAccessPolicy from '@/components/select/SelectAccessPolicy';
import SelectLocationContext from '@/components/select/SelectLocationContext';
import SelectLocationHead from '@/components/select/SelectLocationHead';
-import Checkbox from '@/components/ui/Checkbox';
-import Label from '@/components/ui/Label';
-import MiniButton from '@/components/ui/MiniButton';
+import { MiniButton } from '@/components/ui/Control';
+import { Checkbox, Label, TextArea, TextInput } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal';
-import TextArea from '@/components/ui/TextArea';
-import TextInput from '@/components/ui/TextInput';
import { AccessPolicy, ILibraryItem, LocationHead } from '@/models/library';
import { cloneTitle, combineLocation, validateLocation } from '@/models/libraryAPI';
import { ConstituentaID } from '@/models/rsform';
diff --git a/rsconcept/frontend/src/dialogs/DlgCreateCst/FormCreateCst.tsx b/rsconcept/frontend/src/dialogs/DlgCreateCst/FormCreateCst.tsx
index 29124f05..57afd43b 100644
--- a/rsconcept/frontend/src/dialogs/DlgCreateCst/FormCreateCst.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgCreateCst/FormCreateCst.tsx
@@ -6,9 +6,7 @@ import { useEffect, useState } from 'react';
import { ICstCreateDTO } from '@/backend/rsform/api';
import BadgeHelp from '@/components/info/BadgeHelp';
import RSInput from '@/components/RSInput';
-import SelectSingle from '@/components/ui/SelectSingle';
-import TextArea from '@/components/ui/TextArea';
-import TextInput from '@/components/ui/TextInput';
+import { SelectSingle, TextArea, TextInput } from '@/components/ui/Input';
import { HelpTopic } from '@/models/miscellaneous';
import { CstType, IRSForm } from '@/models/rsform';
import { generateAlias, isBaseSet, isBasicConcept, isFunctional, validateNewAlias } from '@/models/rsformAPI';
diff --git a/rsconcept/frontend/src/dialogs/DlgCreateOperation/DlgCreateOperation.tsx b/rsconcept/frontend/src/dialogs/DlgCreateOperation/DlgCreateOperation.tsx
index 38f95c0c..e45b4449 100644
--- a/rsconcept/frontend/src/dialogs/DlgCreateOperation/DlgCreateOperation.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgCreateOperation/DlgCreateOperation.tsx
@@ -2,12 +2,11 @@
import clsx from 'clsx';
import { useEffect, useState } from 'react';
-import { TabList, TabPanel, Tabs } from 'react-tabs';
import { useLibrary } from '@/backend/library/useLibrary';
import { IOperationCreateDTO } from '@/backend/oss/api';
import { ModalForm } from '@/components/ui/Modal';
-import TabLabel from '@/components/ui/TabLabel';
+import { TabLabel, TabList, TabPanel, Tabs } from '@/components/ui/Tabs';
import { LibraryItemID } from '@/models/library';
import { HelpTopic } from '@/models/miscellaneous';
import { IOperationSchema, OperationID, OperationType } from '@/models/oss';
diff --git a/rsconcept/frontend/src/dialogs/DlgCreateOperation/TabInputOperation.tsx b/rsconcept/frontend/src/dialogs/DlgCreateOperation/TabInputOperation.tsx
index af724bdf..8cf557cf 100644
--- a/rsconcept/frontend/src/dialogs/DlgCreateOperation/TabInputOperation.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgCreateOperation/TabInputOperation.tsx
@@ -5,11 +5,8 @@ import { useEffect } from 'react';
import { useLibrary } from '@/backend/library/useLibrary';
import { IconReset } from '@/components/Icons';
import PickSchema from '@/components/select/PickSchema';
-import Checkbox from '@/components/ui/Checkbox';
-import Label from '@/components/ui/Label';
-import MiniButton from '@/components/ui/MiniButton';
-import TextArea from '@/components/ui/TextArea';
-import TextInput from '@/components/ui/TextInput';
+import { MiniButton } from '@/components/ui/Control';
+import { Checkbox, Label, TextArea, TextInput } from '@/components/ui/Input';
import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/models/library';
import { IOperationSchema } from '@/models/oss';
import { sortItemsForOSS } from '@/models/ossAPI';
diff --git a/rsconcept/frontend/src/dialogs/DlgCreateOperation/TabSynthesisOperation.tsx b/rsconcept/frontend/src/dialogs/DlgCreateOperation/TabSynthesisOperation.tsx
index 6ff99db8..4d3ce675 100644
--- a/rsconcept/frontend/src/dialogs/DlgCreateOperation/TabSynthesisOperation.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgCreateOperation/TabSynthesisOperation.tsx
@@ -1,8 +1,6 @@
import PickMultiOperation from '@/components/select/PickMultiOperation';
-import FlexColumn from '@/components/ui/FlexColumn';
-import Label from '@/components/ui/Label';
-import TextArea from '@/components/ui/TextArea';
-import TextInput from '@/components/ui/TextInput';
+import { FlexColumn } from '@/components/ui/Container';
+import { Label, TextArea, TextInput } from '@/components/ui/Input';
import { IOperationSchema, OperationID } from '@/models/oss';
interface TabSynthesisOperationProps {
diff --git a/rsconcept/frontend/src/dialogs/DlgCreateVersion.tsx b/rsconcept/frontend/src/dialogs/DlgCreateVersion.tsx
index 0aacab50..74492426 100644
--- a/rsconcept/frontend/src/dialogs/DlgCreateVersion.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgCreateVersion.tsx
@@ -6,10 +6,8 @@ import { Controller, useForm, useWatch } from 'react-hook-form';
import { CreateVersionSchema, IVersionCreateDTO } from '@/backend/library/api';
import { useVersionCreate } from '@/backend/library/useVersionCreate';
-import Checkbox from '@/components/ui/Checkbox';
+import { Checkbox, TextArea, TextInput } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal';
-import TextArea from '@/components/ui/TextArea';
-import TextInput from '@/components/ui/TextInput';
import { IVersionInfo, LibraryItemID, VersionID } from '@/models/library';
import { nextVersion } from '@/models/libraryAPI';
import { ConstituentaID } from '@/models/rsform';
diff --git a/rsconcept/frontend/src/dialogs/DlgCstTemplate/DlgCstTemplate.tsx b/rsconcept/frontend/src/dialogs/DlgCstTemplate/DlgCstTemplate.tsx
index a99190cc..c5d81ff2 100644
--- a/rsconcept/frontend/src/dialogs/DlgCstTemplate/DlgCstTemplate.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgCstTemplate/DlgCstTemplate.tsx
@@ -2,13 +2,12 @@
import clsx from 'clsx';
import { Suspense, useEffect, useState } from 'react';
-import { TabList, TabPanel, Tabs } from 'react-tabs';
import { ICstCreateDTO } from '@/backend/rsform/api';
import { useRSForm } from '@/backend/rsform/useRSForm';
import Loader from '@/components/ui/Loader';
import { ModalForm } from '@/components/ui/Modal';
-import TabLabel from '@/components/ui/TabLabel';
+import { TabLabel, TabList, TabPanel, Tabs } from '@/components/ui/Tabs';
import FormCreateCst from '@/dialogs/DlgCreateCst/FormCreateCst';
import usePartialUpdate from '@/hooks/usePartialUpdate';
import { HelpTopic } from '@/models/miscellaneous';
diff --git a/rsconcept/frontend/src/dialogs/DlgCstTemplate/TabArguments.tsx b/rsconcept/frontend/src/dialogs/DlgCstTemplate/TabArguments.tsx
index a93d45c5..9452771f 100644
--- a/rsconcept/frontend/src/dialogs/DlgCstTemplate/TabArguments.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgCstTemplate/TabArguments.tsx
@@ -7,9 +7,9 @@ import { useEffect, useState } from 'react';
import { IconAccept, IconRemove, IconReset } from '@/components/Icons';
import RSInput from '@/components/RSInput';
import PickConstituenta from '@/components/select/PickConstituenta';
+import { MiniButton } from '@/components/ui/Control';
import DataTable, { IConditionalStyle } from '@/components/ui/DataTable';
-import MiniButton from '@/components/ui/MiniButton';
-import NoData from '@/components/ui/NoData';
+import { NoData } from '@/components/ui/View';
import { IConstituenta, IRSForm } from '@/models/rsform';
import { IArgumentValue } from '@/models/rslang';
import { APP_COLORS } from '@/styling/color';
diff --git a/rsconcept/frontend/src/dialogs/DlgCstTemplate/TabTemplate.tsx b/rsconcept/frontend/src/dialogs/DlgCstTemplate/TabTemplate.tsx
index 3cd1378e..38469648 100644
--- a/rsconcept/frontend/src/dialogs/DlgCstTemplate/TabTemplate.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgCstTemplate/TabTemplate.tsx
@@ -5,8 +5,7 @@ import { Dispatch, useEffect, useState } from 'react';
import { useTemplatesSuspense } from '@/backend/library/useTemplates';
import RSInput from '@/components/RSInput';
import PickConstituenta from '@/components/select/PickConstituenta';
-import SelectSingle from '@/components/ui/SelectSingle';
-import TextArea from '@/components/ui/TextArea';
+import { SelectSingle, TextArea } from '@/components/ui/Input';
import { CATEGORY_CST_TYPE, IConstituenta, IRSForm } from '@/models/rsform';
import { applyFilterCategory } from '@/models/rsformAPI';
diff --git a/rsconcept/frontend/src/dialogs/DlgDeleteCst/DlgDeleteCst.tsx b/rsconcept/frontend/src/dialogs/DlgDeleteCst/DlgDeleteCst.tsx
index 61a4fe14..2a437bf6 100644
--- a/rsconcept/frontend/src/dialogs/DlgDeleteCst/DlgDeleteCst.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgDeleteCst/DlgDeleteCst.tsx
@@ -3,7 +3,7 @@
import clsx from 'clsx';
import { useState } from 'react';
-import Checkbox from '@/components/ui/Checkbox';
+import { Checkbox } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal';
import { ConstituentaID, IRSForm } from '@/models/rsform';
import { useDialogsStore } from '@/stores/dialogs';
diff --git a/rsconcept/frontend/src/dialogs/DlgDeleteOperation.tsx b/rsconcept/frontend/src/dialogs/DlgDeleteOperation.tsx
index 72943f79..80c3596b 100644
--- a/rsconcept/frontend/src/dialogs/DlgDeleteOperation.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgDeleteOperation.tsx
@@ -3,9 +3,8 @@
import clsx from 'clsx';
import { useState } from 'react';
-import Checkbox from '@/components/ui/Checkbox';
+import { Checkbox, TextInput } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal';
-import TextInput from '@/components/ui/TextInput';
import { HelpTopic } from '@/models/miscellaneous';
import { IOperation, OperationID } from '@/models/oss';
import { useDialogsStore } from '@/stores/dialogs';
diff --git a/rsconcept/frontend/src/dialogs/DlgEditEditors/DlgEditEditors.tsx b/rsconcept/frontend/src/dialogs/DlgEditEditors/DlgEditEditors.tsx
index a8d19567..0530ce5a 100644
--- a/rsconcept/frontend/src/dialogs/DlgEditEditors/DlgEditEditors.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgEditEditors/DlgEditEditors.tsx
@@ -6,8 +6,8 @@ import { useState } from 'react';
import { useUsers } from '@/backend/users/useUsers';
import { IconRemove } from '@/components/Icons';
import SelectUser from '@/components/select/SelectUser';
-import Label from '@/components/ui/Label';
-import MiniButton from '@/components/ui/MiniButton';
+import { MiniButton } from '@/components/ui/Control';
+import { Label } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal';
import { UserID } from '@/models/user';
import { useDialogsStore } from '@/stores/dialogs';
diff --git a/rsconcept/frontend/src/dialogs/DlgEditEditors/TableUsers.tsx b/rsconcept/frontend/src/dialogs/DlgEditEditors/TableUsers.tsx
index 2d422325..e8bb7ab6 100644
--- a/rsconcept/frontend/src/dialogs/DlgEditEditors/TableUsers.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgEditEditors/TableUsers.tsx
@@ -1,8 +1,8 @@
'use client';
import { IconRemove } from '@/components/Icons';
+import { MiniButton } from '@/components/ui/Control';
import DataTable, { createColumnHelper } from '@/components/ui/DataTable';
-import MiniButton from '@/components/ui/MiniButton';
import { IUserInfo, UserID } from '@/models/user';
interface TableUsersProps {
diff --git a/rsconcept/frontend/src/dialogs/DlgEditOperation/DlgEditOperation.tsx b/rsconcept/frontend/src/dialogs/DlgEditOperation/DlgEditOperation.tsx
index 0baf49ae..39e2de78 100644
--- a/rsconcept/frontend/src/dialogs/DlgEditOperation/DlgEditOperation.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgEditOperation/DlgEditOperation.tsx
@@ -2,12 +2,11 @@
import clsx from 'clsx';
import { useCallback, useEffect, useState } from 'react';
-import { TabList, TabPanel, Tabs } from 'react-tabs';
import { IOperationUpdateDTO } from '@/backend/oss/api';
import { useRSForms } from '@/backend/rsform/useRSForms';
import { ModalForm } from '@/components/ui/Modal';
-import TabLabel from '@/components/ui/TabLabel';
+import { TabLabel, TabList, TabPanel, Tabs } from '@/components/ui/Tabs';
import { LibraryItemID } from '@/models/library';
import { HelpTopic } from '@/models/miscellaneous';
import { ICstSubstitute, IOperation, IOperationSchema, OperationID, OperationType } from '@/models/oss';
diff --git a/rsconcept/frontend/src/dialogs/DlgEditOperation/TabArguments.tsx b/rsconcept/frontend/src/dialogs/DlgEditOperation/TabArguments.tsx
index d474c312..c8f396dd 100644
--- a/rsconcept/frontend/src/dialogs/DlgEditOperation/TabArguments.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgEditOperation/TabArguments.tsx
@@ -1,8 +1,8 @@
'use client';
import PickMultiOperation from '@/components/select/PickMultiOperation';
-import FlexColumn from '@/components/ui/FlexColumn';
-import Label from '@/components/ui/Label';
+import { FlexColumn } from '@/components/ui/Container';
+import { Label } from '@/components/ui/Input';
import { IOperationSchema, OperationID } from '@/models/oss';
interface TabArgumentsProps {
diff --git a/rsconcept/frontend/src/dialogs/DlgEditOperation/TabOperation.tsx b/rsconcept/frontend/src/dialogs/DlgEditOperation/TabOperation.tsx
index ea72a84a..6cb52ef3 100644
--- a/rsconcept/frontend/src/dialogs/DlgEditOperation/TabOperation.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgEditOperation/TabOperation.tsx
@@ -1,5 +1,4 @@
-import TextArea from '@/components/ui/TextArea';
-import TextInput from '@/components/ui/TextInput';
+import { TextArea, TextInput } from '@/components/ui/Input';
interface TabOperationProps {
alias: string;
diff --git a/rsconcept/frontend/src/dialogs/DlgEditOperation/TabSynthesis.tsx b/rsconcept/frontend/src/dialogs/DlgEditOperation/TabSynthesis.tsx
index b46a8dfe..9b707d78 100644
--- a/rsconcept/frontend/src/dialogs/DlgEditOperation/TabSynthesis.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgEditOperation/TabSynthesis.tsx
@@ -1,5 +1,5 @@
import PickSubstitutions from '@/components/select/PickSubstitutions';
-import TextArea from '@/components/ui/TextArea';
+import { TextArea } from '@/components/ui/Input';
import { ICstSubstitute } from '@/models/oss';
import { IRSForm } from '@/models/rsform';
import { APP_COLORS } from '@/styling/color';
diff --git a/rsconcept/frontend/src/dialogs/DlgEditReference/DlgEditReference.tsx b/rsconcept/frontend/src/dialogs/DlgEditReference/DlgEditReference.tsx
index 45e87482..539bbb95 100644
--- a/rsconcept/frontend/src/dialogs/DlgEditReference/DlgEditReference.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgEditReference/DlgEditReference.tsx
@@ -2,10 +2,9 @@
import clsx from 'clsx';
import { useState } from 'react';
-import { TabList, TabPanel, Tabs } from 'react-tabs';
import { ModalForm } from '@/components/ui/Modal';
-import TabLabel from '@/components/ui/TabLabel';
+import { TabLabel, TabList, TabPanel, Tabs } from '@/components/ui/Tabs';
import { ReferenceType } from '@/models/language';
import { HelpTopic } from '@/models/miscellaneous';
import { IRSForm } from '@/models/rsform';
diff --git a/rsconcept/frontend/src/dialogs/DlgEditReference/TabEntityReference.tsx b/rsconcept/frontend/src/dialogs/DlgEditReference/TabEntityReference.tsx
index faeaac71..bc987c37 100644
--- a/rsconcept/frontend/src/dialogs/DlgEditReference/TabEntityReference.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgEditReference/TabEntityReference.tsx
@@ -5,8 +5,7 @@ import { useEffect, useState } from 'react';
import PickConstituenta from '@/components/select/PickConstituenta';
import SelectMultiGrammeme from '@/components/select/SelectMultiGrammeme';
import SelectWordForm from '@/components/select/SelectWordForm';
-import Label from '@/components/ui/Label';
-import TextInput from '@/components/ui/TextInput';
+import { Label, TextInput } from '@/components/ui/Input';
import { ReferenceType } from '@/models/language';
import { parseEntityReference, parseGrammemes } from '@/models/languageAPI';
import { CstMatchMode } from '@/models/miscellaneous';
diff --git a/rsconcept/frontend/src/dialogs/DlgEditReference/TabSyntacticReference.tsx b/rsconcept/frontend/src/dialogs/DlgEditReference/TabSyntacticReference.tsx
index dce9b1c1..2a9f3314 100644
--- a/rsconcept/frontend/src/dialogs/DlgEditReference/TabSyntacticReference.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgEditReference/TabSyntacticReference.tsx
@@ -2,7 +2,7 @@
import { useEffect, useState } from 'react';
-import TextInput from '@/components/ui/TextInput';
+import { TextInput } from '@/components/ui/Input';
import { ReferenceType } from '@/models/language';
import { parseSyntacticReference } from '@/models/languageAPI';
diff --git a/rsconcept/frontend/src/dialogs/DlgEditVersions/DlgEditVersions.tsx b/rsconcept/frontend/src/dialogs/DlgEditVersions/DlgEditVersions.tsx
index 09ee4e75..e5e72500 100644
--- a/rsconcept/frontend/src/dialogs/DlgEditVersions/DlgEditVersions.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgEditVersions/DlgEditVersions.tsx
@@ -6,10 +6,9 @@ import { useMutatingLibrary } from '@/backend/library/useMutatingLibrary';
import { useVersionDelete } from '@/backend/library/useVersionDelete';
import { useVersionUpdate } from '@/backend/library/useVersionUpdate';
import { IconReset, IconSave } from '@/components/Icons';
-import MiniButton from '@/components/ui/MiniButton';
+import { MiniButton } from '@/components/ui/Control';
+import { TextArea, TextInput } from '@/components/ui/Input';
import { ModalView } from '@/components/ui/Modal';
-import TextArea from '@/components/ui/TextArea';
-import TextInput from '@/components/ui/TextInput';
import { ILibraryItemVersioned, IVersionInfo, VersionID } from '@/models/library';
import { useDialogsStore } from '@/stores/dialogs';
diff --git a/rsconcept/frontend/src/dialogs/DlgEditVersions/TableVersions.tsx b/rsconcept/frontend/src/dialogs/DlgEditVersions/TableVersions.tsx
index 1d2d5cbc..9fe1cb58 100644
--- a/rsconcept/frontend/src/dialogs/DlgEditVersions/TableVersions.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgEditVersions/TableVersions.tsx
@@ -4,8 +4,8 @@ import clsx from 'clsx';
import { useIntl } from 'react-intl';
import { IconRemove } from '@/components/Icons';
+import { MiniButton } from '@/components/ui/Control';
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable';
-import MiniButton from '@/components/ui/MiniButton';
import { IVersionInfo, VersionID } from '@/models/library';
import { APP_COLORS } from '@/styling/color';
diff --git a/rsconcept/frontend/src/dialogs/DlgEditWordForms/DlgEditWordForms.tsx b/rsconcept/frontend/src/dialogs/DlgEditWordForms/DlgEditWordForms.tsx
index f21dd07e..63c8ac65 100644
--- a/rsconcept/frontend/src/dialogs/DlgEditWordForms/DlgEditWordForms.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgEditWordForms/DlgEditWordForms.tsx
@@ -9,10 +9,9 @@ import { useIsProcessingCctext } from '@/backend/cctext/useIsProcessingCctext';
import { useParseText } from '@/backend/cctext/useParseText';
import { IconAccept, IconMoveDown, IconMoveLeft, IconMoveRight, IconRemove } from '@/components/Icons';
import SelectMultiGrammeme from '@/components/select/SelectMultiGrammeme';
-import Label from '@/components/ui/Label';
-import MiniButton from '@/components/ui/MiniButton';
+import { MiniButton } from '@/components/ui/Control';
+import { Label, TextArea } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal';
-import TextArea from '@/components/ui/TextArea';
import { Grammeme, IWordForm } from '@/models/language';
import { parseGrammemes, wordFormEquals } from '@/models/languageAPI';
import { HelpTopic } from '@/models/miscellaneous';
diff --git a/rsconcept/frontend/src/dialogs/DlgEditWordForms/TableWordForms.tsx b/rsconcept/frontend/src/dialogs/DlgEditWordForms/TableWordForms.tsx
index f607f86b..1e2f4a46 100644
--- a/rsconcept/frontend/src/dialogs/DlgEditWordForms/TableWordForms.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgEditWordForms/TableWordForms.tsx
@@ -4,9 +4,9 @@ import clsx from 'clsx';
import { IconRemove } from '@/components/Icons';
import BadgeWordForm from '@/components/info/BadgeWordForm';
+import { MiniButton } from '@/components/ui/Control';
import DataTable, { createColumnHelper } from '@/components/ui/DataTable';
-import MiniButton from '@/components/ui/MiniButton';
-import NoData from '@/components/ui/NoData';
+import { NoData } from '@/components/ui/View';
import { IWordForm } from '@/models/language';
interface TableWordFormsProps {
diff --git a/rsconcept/frontend/src/dialogs/DlgGraphParams.tsx b/rsconcept/frontend/src/dialogs/DlgGraphParams.tsx
index 9a221b55..e0c59740 100644
--- a/rsconcept/frontend/src/dialogs/DlgGraphParams.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgGraphParams.tsx
@@ -1,6 +1,6 @@
'use client';
-import Checkbox from '@/components/ui/Checkbox';
+import { Checkbox } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal';
import usePartialUpdate from '@/hooks/usePartialUpdate';
import { GraphFilterParams } from '@/models/miscellaneous';
diff --git a/rsconcept/frontend/src/dialogs/DlgInlineSynthesis/DlgInlineSynthesis.tsx b/rsconcept/frontend/src/dialogs/DlgInlineSynthesis/DlgInlineSynthesis.tsx
index a222b0cc..632a87d0 100644
--- a/rsconcept/frontend/src/dialogs/DlgInlineSynthesis/DlgInlineSynthesis.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgInlineSynthesis/DlgInlineSynthesis.tsx
@@ -2,13 +2,12 @@
import clsx from 'clsx';
import { Suspense, useEffect, useState } from 'react';
-import { TabList, TabPanel, Tabs } from 'react-tabs';
import { IInlineSynthesisDTO } from '@/backend/rsform/api';
import { useRSForm } from '@/backend/rsform/useRSForm';
import Loader from '@/components/ui/Loader';
import { ModalForm } from '@/components/ui/Modal';
-import TabLabel from '@/components/ui/TabLabel';
+import { TabLabel, TabList, TabPanel, Tabs } from '@/components/ui/Tabs';
import { LibraryItemID } from '@/models/library';
import { ICstSubstitute } from '@/models/oss';
import { ConstituentaID, IRSForm } from '@/models/rsform';
diff --git a/rsconcept/frontend/src/dialogs/DlgInlineSynthesis/TabSource.tsx b/rsconcept/frontend/src/dialogs/DlgInlineSynthesis/TabSource.tsx
index a3f89680..72499dcc 100644
--- a/rsconcept/frontend/src/dialogs/DlgInlineSynthesis/TabSource.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgInlineSynthesis/TabSource.tsx
@@ -2,7 +2,7 @@
import { useLibrary } from '@/backend/library/useLibrary';
import PickSchema from '@/components/select/PickSchema';
-import TextInput from '@/components/ui/TextInput';
+import { TextInput } from '@/components/ui/Input';
import { LibraryItemID, LibraryItemType } from '@/models/library';
import { IRSForm } from '@/models/rsform';
import { sortItemsForInlineSynthesis } from '@/models/rsformAPI';
diff --git a/rsconcept/frontend/src/dialogs/DlgRelocateConstituents.tsx b/rsconcept/frontend/src/dialogs/DlgRelocateConstituents.tsx
index dd969e81..6e77c364 100644
--- a/rsconcept/frontend/src/dialogs/DlgRelocateConstituents.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgRelocateConstituents.tsx
@@ -9,8 +9,8 @@ import { useRSForm } from '@/backend/rsform/useRSForm';
import { RelocateUpIcon } from '@/components/DomainIcons';
import PickMultiConstituenta from '@/components/select/PickMultiConstituenta';
import SelectLibraryItem from '@/components/select/SelectLibraryItem';
+import { MiniButton } from '@/components/ui/Control';
import Loader from '@/components/ui/Loader';
-import MiniButton from '@/components/ui/MiniButton';
import { ModalForm } from '@/components/ui/Modal';
import { ILibraryItem, LibraryItemID } from '@/models/library';
import { HelpTopic } from '@/models/miscellaneous';
diff --git a/rsconcept/frontend/src/dialogs/DlgRenameCst.tsx b/rsconcept/frontend/src/dialogs/DlgRenameCst.tsx
index ae3f8269..87def155 100644
--- a/rsconcept/frontend/src/dialogs/DlgRenameCst.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgRenameCst.tsx
@@ -4,9 +4,8 @@ import clsx from 'clsx';
import { useEffect, useState } from 'react';
import { ICstRenameDTO } from '@/backend/rsform/api';
+import { SelectSingle, TextInput } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal';
-import SelectSingle from '@/components/ui/SelectSingle';
-import TextInput from '@/components/ui/TextInput';
import usePartialUpdate from '@/hooks/usePartialUpdate';
import { HelpTopic } from '@/models/miscellaneous';
import { CstType, IRSForm } from '@/models/rsform';
diff --git a/rsconcept/frontend/src/dialogs/DlgShowAST/DlgShowAST.tsx b/rsconcept/frontend/src/dialogs/DlgShowAST/DlgShowAST.tsx
index a6af43f9..2cc39a3f 100644
--- a/rsconcept/frontend/src/dialogs/DlgShowAST/DlgShowAST.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgShowAST/DlgShowAST.tsx
@@ -3,8 +3,8 @@
import { useState } from 'react';
import { ReactFlowProvider } from 'reactflow';
+import { Overlay } from '@/components/ui/Container';
import { ModalView } from '@/components/ui/Modal';
-import Overlay from '@/components/ui/Overlay';
import { HelpTopic } from '@/models/miscellaneous';
import { SyntaxTree } from '@/models/rslang';
import { useDialogsStore } from '@/stores/dialogs';
diff --git a/rsconcept/frontend/src/dialogs/DlgShowAST/graph/ASTEdgeTypes.ts b/rsconcept/frontend/src/dialogs/DlgShowAST/graph/ASTEdgeTypes.ts
index 19f9735d..2e9588a2 100644
--- a/rsconcept/frontend/src/dialogs/DlgShowAST/graph/ASTEdgeTypes.ts
+++ b/rsconcept/frontend/src/dialogs/DlgShowAST/graph/ASTEdgeTypes.ts
@@ -1,6 +1,6 @@
import { EdgeTypes } from 'reactflow';
-import DynamicEdge from '@/components/ui/Flow/DynamicEdge';
+import DynamicEdge from '@/components/graph/DynamicEdge';
export const ASTEdgeTypes: EdgeTypes = {
dynamic: DynamicEdge
diff --git a/rsconcept/frontend/src/dialogs/DlgUploadRSForm.tsx b/rsconcept/frontend/src/dialogs/DlgUploadRSForm.tsx
index 166af2db..f78498ec 100644
--- a/rsconcept/frontend/src/dialogs/DlgUploadRSForm.tsx
+++ b/rsconcept/frontend/src/dialogs/DlgUploadRSForm.tsx
@@ -3,8 +3,7 @@
import { useState } from 'react';
import { useUploadTRS } from '@/backend/rsform/useUploadTRS';
-import Checkbox from '@/components/ui/Checkbox';
-import FileInput from '@/components/ui/FileInput';
+import { Checkbox, FileInput } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal';
import { LibraryItemID } from '@/models/library';
import { useDialogsStore } from '@/stores/dialogs';
diff --git a/rsconcept/frontend/src/pages/CreateItemPage/FormCreateItem.tsx b/rsconcept/frontend/src/pages/CreateItemPage/FormCreateItem.tsx
index a0b51cd4..9a91e284 100644
--- a/rsconcept/frontend/src/pages/CreateItemPage/FormCreateItem.tsx
+++ b/rsconcept/frontend/src/pages/CreateItemPage/FormCreateItem.tsx
@@ -17,13 +17,9 @@ import SelectAccessPolicy from '@/components/select/SelectAccessPolicy';
import SelectItemType from '@/components/select/SelectItemType';
import SelectLocationContext from '@/components/select/SelectLocationContext';
import SelectLocationHead from '@/components/select/SelectLocationHead';
-import Button from '@/components/ui/Button';
-import Label from '@/components/ui/Label';
-import MiniButton from '@/components/ui/MiniButton';
-import Overlay from '@/components/ui/Overlay';
-import SubmitButton from '@/components/ui/SubmitButton';
-import TextArea from '@/components/ui/TextArea';
-import TextInput from '@/components/ui/TextInput';
+import { Overlay } from '@/components/ui/Container';
+import { Button, MiniButton, SubmitButton } from '@/components/ui/Control';
+import { Label, TextArea, TextInput } from '@/components/ui/Input';
import { AccessPolicy, LibraryItemType, LocationHead } from '@/models/library';
import { combineLocation } from '@/models/libraryAPI';
import { useLibrarySearchStore } from '@/stores/librarySearch';
diff --git a/rsconcept/frontend/src/pages/LibraryPage/LibraryPage.tsx b/rsconcept/frontend/src/pages/LibraryPage/LibraryPage.tsx
index 98c4409e..71746f62 100644
--- a/rsconcept/frontend/src/pages/LibraryPage/LibraryPage.tsx
+++ b/rsconcept/frontend/src/pages/LibraryPage/LibraryPage.tsx
@@ -7,8 +7,8 @@ import { useApplyLibraryFilter } from '@/backend/library/useApplyLibraryFilter';
import { useLibrarySuspense } from '@/backend/library/useLibrary';
import { useRenameLocation } from '@/backend/library/useRenameLocation';
import { IconCSV } from '@/components/Icons';
-import MiniButton from '@/components/ui/MiniButton';
-import Overlay from '@/components/ui/Overlay';
+import { Overlay } from '@/components/ui/Container';
+import { MiniButton } from '@/components/ui/Control';
import { useAppLayoutStore } from '@/stores/appLayout';
import { useDialogsStore } from '@/stores/dialogs';
import { useCreateLibraryFilter, useLibrarySearchStore } from '@/stores/librarySearch';
diff --git a/rsconcept/frontend/src/pages/LibraryPage/TableLibraryItems.tsx b/rsconcept/frontend/src/pages/LibraryPage/TableLibraryItems.tsx
index cdc8477a..e26967b1 100644
--- a/rsconcept/frontend/src/pages/LibraryPage/TableLibraryItems.tsx
+++ b/rsconcept/frontend/src/pages/LibraryPage/TableLibraryItems.tsx
@@ -10,10 +10,9 @@ import { useLabelUser } from '@/backend/users/useLabelUser';
import { IconFolderTree } from '@/components/Icons';
import BadgeLocation from '@/components/info/BadgeLocation';
import { CProps } from '@/components/props';
+import { FlexColumn } from '@/components/ui/Container';
+import { MiniButton, TextURL } from '@/components/ui/Control';
import DataTable, { createColumnHelper, IConditionalStyle, VisibilityState } from '@/components/ui/DataTable';
-import FlexColumn from '@/components/ui/FlexColumn';
-import MiniButton from '@/components/ui/MiniButton';
-import TextURL from '@/components/ui/TextURL';
import useWindowSize from '@/hooks/useWindowSize';
import { ILibraryItem, LibraryItemType } from '@/models/library';
import { useFitHeight } from '@/stores/appLayout';
diff --git a/rsconcept/frontend/src/pages/LibraryPage/ToolbarSearch.tsx b/rsconcept/frontend/src/pages/LibraryPage/ToolbarSearch.tsx
index 07ac0328..897dba13 100644
--- a/rsconcept/frontend/src/pages/LibraryPage/ToolbarSearch.tsx
+++ b/rsconcept/frontend/src/pages/LibraryPage/ToolbarSearch.tsx
@@ -14,12 +14,9 @@ import {
} from '@/components/Icons';
import { CProps } from '@/components/props';
import SelectUser from '@/components/select/SelectUser';
-import Dropdown from '@/components/ui/Dropdown';
-import DropdownButton from '@/components/ui/DropdownButton';
-import MiniButton from '@/components/ui/MiniButton';
-import SearchBar from '@/components/ui/SearchBar';
-import SelectorButton from '@/components/ui/SelectorButton';
-import useDropdown from '@/hooks/useDropdown';
+import { MiniButton, SelectorButton } from '@/components/ui/Control';
+import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
+import { SearchBar } from '@/components/ui/SearchBar';
import { LocationHead } from '@/models/library';
import { useHasCustomFilter, useLibrarySearchStore } from '@/stores/librarySearch';
import { prefixes } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/LibraryPage/ViewSideLocation.tsx b/rsconcept/frontend/src/pages/LibraryPage/ViewSideLocation.tsx
index b0214dea..7da32163 100644
--- a/rsconcept/frontend/src/pages/LibraryPage/ViewSideLocation.tsx
+++ b/rsconcept/frontend/src/pages/LibraryPage/ViewSideLocation.tsx
@@ -8,7 +8,7 @@ import { IconFolderEdit, IconFolderTree } from '@/components/Icons';
import BadgeHelp from '@/components/info/BadgeHelp';
import { CProps } from '@/components/props';
import SelectLocation from '@/components/select/SelectLocation';
-import MiniButton from '@/components/ui/MiniButton';
+import { MiniButton } from '@/components/ui/Control';
import useWindowSize from '@/hooks/useWindowSize';
import { FolderNode } from '@/models/FolderTree';
import { HelpTopic } from '@/models/miscellaneous';
diff --git a/rsconcept/frontend/src/pages/LoginPage.tsx b/rsconcept/frontend/src/pages/LoginPage.tsx
index 666281e4..e5cfaf55 100644
--- a/rsconcept/frontend/src/pages/LoginPage.tsx
+++ b/rsconcept/frontend/src/pages/LoginPage.tsx
@@ -12,9 +12,8 @@ import { useAuthSuspense } from '@/backend/auth/useAuth';
import { useLogin } from '@/backend/auth/useLogin';
import ExpectedAnonymous from '@/components/ExpectedAnonymous';
import { ErrorData } from '@/components/info/InfoError';
-import SubmitButton from '@/components/ui/SubmitButton';
-import TextInput from '@/components/ui/TextInput';
-import TextURL from '@/components/ui/TextURL';
+import { SubmitButton, TextURL } from '@/components/ui/Control';
+import { TextInput } from '@/components/ui/Input';
import useQueryStrings from '@/hooks/useQueryStrings';
import { resources } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/ManualsPage/TopicItem.tsx b/rsconcept/frontend/src/pages/ManualsPage/TopicItem.tsx
index 50eb561f..fc291072 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/TopicItem.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/TopicItem.tsx
@@ -1,4 +1,4 @@
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
import { describeHelpTopic, labelHelpTopic, removeTags } from '@/utils/labels';
diff --git a/rsconcept/frontend/src/pages/ManualsPage/TopicsDropdown.tsx b/rsconcept/frontend/src/pages/ManualsPage/TopicsDropdown.tsx
index e5b364a5..c1767d15 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/TopicsDropdown.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/TopicsDropdown.tsx
@@ -3,9 +3,9 @@
import clsx from 'clsx';
import { IconMenuFold, IconMenuUnfold } from '@/components/Icons';
-import Button from '@/components/ui/Button';
-import SelectTree from '@/components/ui/SelectTree';
-import useDropdown from '@/hooks/useDropdown';
+import { Button } from '@/components/ui/Control';
+import { useDropdown } from '@/components/ui/Dropdown';
+import { SelectTree } from '@/components/ui/Input';
import { HelpTopic, topicParent } from '@/models/miscellaneous';
import { useAppLayoutStore, useFitHeight } from '@/stores/appLayout';
import { PARAMETER, prefixes } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/ManualsPage/TopicsStatic.tsx b/rsconcept/frontend/src/pages/ManualsPage/TopicsStatic.tsx
index 1c278aaf..26acf52f 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/TopicsStatic.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/TopicsStatic.tsx
@@ -1,6 +1,6 @@
import clsx from 'clsx';
-import SelectTree from '@/components/ui/SelectTree';
+import { SelectTree } from '@/components/ui/Input';
import { HelpTopic, topicParent } from '@/models/miscellaneous';
import { useFitHeight } from '@/stores/appLayout';
import { prefixes } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/HelpConcept.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/HelpConcept.tsx
index e990ccf3..8e6e6c83 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/HelpConcept.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/HelpConcept.tsx
@@ -1,4 +1,4 @@
-import TextURL from '@/components/ui/TextURL';
+import { TextURL } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
import { external_urls } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/HelpExteor.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/HelpExteor.tsx
index c8adb80f..a01e8f87 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/HelpExteor.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/HelpExteor.tsx
@@ -1,4 +1,4 @@
-import TextURL from '@/components/ui/TextURL';
+import { TextURL } from '@/components/ui/Control';
import { external_urls, PARAMETER } from '@/utils/constants';
function HelpExteor() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/HelpMain.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/HelpMain.tsx
index cfc5dbc9..a1324196 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/HelpMain.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/HelpMain.tsx
@@ -1,5 +1,4 @@
-import LinkTopic from '@/components/ui/LinkTopic';
-import TextURL from '@/components/ui/TextURL';
+import { LinkTopic, TextURL } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
import { external_urls, prefixes } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/HelpRSLang.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/HelpRSLang.tsx
index d338d06b..091de553 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/HelpRSLang.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/HelpRSLang.tsx
@@ -1,4 +1,4 @@
-import EmbedYoutube from '@/components/ui/EmbedYoutube';
+import { EmbedYoutube } from '@/components/ui/View';
import useWindowSize from '@/hooks/useWindowSize';
import { HelpTopic } from '@/models/miscellaneous';
import { external_urls, youtube } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/HelpThesaurus.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/HelpThesaurus.tsx
index 0a286240..85e36492 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/HelpThesaurus.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/HelpThesaurus.tsx
@@ -26,7 +26,7 @@ import {
IconStatusUnknown,
IconSynthesis
} from '@/components/Icons';
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpThesaurus() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptOSS.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptOSS.tsx
index 47a02dad..ddbfd551 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptOSS.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptOSS.tsx
@@ -7,7 +7,7 @@ import {
IconRSFormOwned,
IconSynthesis
} from '@/components/Icons';
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpConceptOSS() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptPropagation.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptPropagation.tsx
index 842922e6..733c7656 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptPropagation.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptPropagation.tsx
@@ -1,5 +1,5 @@
import { IconPredecessor } from '@/components/Icons';
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpConceptPropagation() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptRelations.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptRelations.tsx
index 2a5f5a8a..7274bcec 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptRelations.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptRelations.tsx
@@ -1,4 +1,4 @@
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpConceptRelations() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptSynthesis.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptSynthesis.tsx
index 0d818f2b..eaa1185c 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptSynthesis.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptSynthesis.tsx
@@ -1,4 +1,4 @@
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpConceptSynthesis() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptSystem.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptSystem.tsx
index 51806911..ed7401cd 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptSystem.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptSystem.tsx
@@ -1,4 +1,4 @@
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpConceptSystem() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpCstAttributes.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpCstAttributes.tsx
index 3985dcc8..79787596 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpCstAttributes.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpCstAttributes.tsx
@@ -1,4 +1,4 @@
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpCstAttributes() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpAPI.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpAPI.tsx
index cd68d140..c968555c 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpAPI.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpAPI.tsx
@@ -1,4 +1,4 @@
-import TextURL from '@/components/ui/TextURL';
+import { TextURL } from '@/components/ui/Control';
import { external_urls } from '@/utils/constants';
function HelpAPI() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpContributors.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpContributors.tsx
index 6bca0c31..0f8e3aee 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpContributors.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpContributors.tsx
@@ -1,5 +1,4 @@
-import LinkTopic from '@/components/ui/LinkTopic';
-import TextURL from '@/components/ui/TextURL';
+import { LinkTopic, TextURL } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
import { external_urls } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpPrivacy.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpPrivacy.tsx
index d4166947..b2810121 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpPrivacy.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpPrivacy.tsx
@@ -1,4 +1,4 @@
-import PDFViewer from '@/components/ui/PDFViewer';
+import { PDFViewer } from '@/components/ui/View';
import { resources } from '@/utils/constants';
interface HelpPrivacyProps {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpRules.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpRules.tsx
index 88145ee2..7597bf14 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpRules.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/info/HelpRules.tsx
@@ -1,5 +1,5 @@
import { urls } from '@/app/urls';
-import TextURL from '@/components/ui/TextURL';
+import { TextURL } from '@/components/ui/Control';
import { external_urls } from '@/utils/constants';
function HelpRules() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/rslang/HelpRSLangCorrect.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/rslang/HelpRSLangCorrect.tsx
index a7e370ca..578ad637 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/rslang/HelpRSLangCorrect.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/rslang/HelpRSLangCorrect.tsx
@@ -1,4 +1,4 @@
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpRSLangCorrect() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/rslang/HelpRSLangInterpret.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/rslang/HelpRSLangInterpret.tsx
index b8542bb6..a401c816 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/rslang/HelpRSLangInterpret.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/rslang/HelpRSLangInterpret.tsx
@@ -1,4 +1,4 @@
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpRSLangInterpret() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/rslang/HelpRSLangOperations.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/rslang/HelpRSLangOperations.tsx
index f02b5193..116b558f 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/rslang/HelpRSLangOperations.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/rslang/HelpRSLangOperations.tsx
@@ -6,7 +6,7 @@ import {
IconSortList,
IconTemplates
} from '@/components/Icons';
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpRSLangOperations() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpLibrary.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpLibrary.tsx
index 9e9caee9..f40c0e6f 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpLibrary.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpLibrary.tsx
@@ -16,7 +16,7 @@ import {
IconSubfolders,
IconUserSearch
} from '@/components/Icons';
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
import { APP_COLORS } from '@/styling/color';
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpOssGraph.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpOssGraph.tsx
index 110e0424..dad173b8 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpOssGraph.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpOssGraph.tsx
@@ -18,8 +18,8 @@ import {
IconRSForm,
IconSave
} from '@/components/Icons';
-import Divider from '@/components/ui/Divider';
-import LinkTopic from '@/components/ui/LinkTopic';
+import { Divider } from '@/components/ui/Container';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpOssGraph() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSCard.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSCard.tsx
index 2dc34cdc..02c1eb3a 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSCard.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSCard.tsx
@@ -9,7 +9,7 @@ import {
IconPublic,
IconSave
} from '@/components/Icons';
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpRSCard() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSEditor.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSEditor.tsx
index 84d80f04..7c578522 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSEditor.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSEditor.tsx
@@ -18,7 +18,7 @@ import {
IconTree,
IconTypeGraph
} from '@/components/Icons';
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
import { APP_COLORS } from '@/styling/color';
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSGraphTerm.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSGraphTerm.tsx
index d223cbc8..6f0c7d28 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSGraphTerm.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSGraphTerm.tsx
@@ -19,8 +19,8 @@ import {
IconText,
IconTypeGraph
} from '@/components/Icons';
-import Divider from '@/components/ui/Divider';
-import LinkTopic from '@/components/ui/LinkTopic';
+import { Divider } from '@/components/ui/Container';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
import { APP_COLORS } from '@/styling/color';
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSList.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSList.tsx
index 98738dc3..47b27baa 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSList.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSList.tsx
@@ -10,8 +10,8 @@ import {
IconReset
} from '@/components/Icons';
import InfoCstStatus from '@/components/info/InfoCstStatus';
-import Divider from '@/components/ui/Divider';
-import LinkTopic from '@/components/ui/LinkTopic';
+import { Divider } from '@/components/ui/Container';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpRSList() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSMenu.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSMenu.tsx
index df8f58c6..9f6fc208 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSMenu.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSMenu.tsx
@@ -13,8 +13,8 @@ import {
IconShare,
IconUpload
} from '@/components/Icons';
-import Divider from '@/components/ui/Divider';
-import LinkTopic from '@/components/ui/LinkTopic';
+import { Divider } from '@/components/ui/Container';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpRSMenu() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRelocateCst.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRelocateCst.tsx
index c2f58e5f..2beef9f1 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRelocateCst.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRelocateCst.tsx
@@ -1,5 +1,5 @@
import { IconMoveDown, IconMoveUp, IconOSS, IconPredecessor } from '@/components/Icons';
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
function HelpRelocateCst() {
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpTypeGraph.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpTypeGraph.tsx
index 9896c620..b87bf475 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpTypeGraph.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpTypeGraph.tsx
@@ -1,4 +1,4 @@
-import LinkTopic from '@/components/ui/LinkTopic';
+import { LinkTopic } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
import { APP_COLORS } from '@/styling/color';
diff --git a/rsconcept/frontend/src/pages/NotFoundPage.tsx b/rsconcept/frontend/src/pages/NotFoundPage.tsx
index 0a466a92..f162e799 100644
--- a/rsconcept/frontend/src/pages/NotFoundPage.tsx
+++ b/rsconcept/frontend/src/pages/NotFoundPage.tsx
@@ -1,4 +1,4 @@
-import TextURL from '@/components/ui/TextURL';
+import { TextURL } from '@/components/ui/Control';
export function NotFoundPage() {
return (
diff --git a/rsconcept/frontend/src/pages/OssPage/EditorOssCard/EditorOssCard.tsx b/rsconcept/frontend/src/pages/OssPage/EditorOssCard/EditorOssCard.tsx
index 26ce326a..6cfde598 100644
--- a/rsconcept/frontend/src/pages/OssPage/EditorOssCard/EditorOssCard.tsx
+++ b/rsconcept/frontend/src/pages/OssPage/EditorOssCard/EditorOssCard.tsx
@@ -2,7 +2,7 @@
import clsx from 'clsx';
-import FlexColumn from '@/components/ui/FlexColumn';
+import { FlexColumn } from '@/components/ui/Container';
import EditorLibraryItem from '@/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem';
import ToolbarRSFormCard from '@/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard';
import { useModificationStore } from '@/stores/modification';
diff --git a/rsconcept/frontend/src/pages/OssPage/EditorOssCard/FormOSS.tsx b/rsconcept/frontend/src/pages/OssPage/EditorOssCard/FormOSS.tsx
index 94fc3e49..1c5fff8b 100644
--- a/rsconcept/frontend/src/pages/OssPage/EditorOssCard/FormOSS.tsx
+++ b/rsconcept/frontend/src/pages/OssPage/EditorOssCard/FormOSS.tsx
@@ -10,9 +10,8 @@ import { IUpdateLibraryItemDTO, UpdateLibraryItemSchema } from '@/backend/librar
import { useUpdateItem } from '@/backend/library/useUpdateItem';
import { useMutatingOss } from '@/backend/oss/useMutatingOss';
import { IconSave } from '@/components/Icons';
-import SubmitButton from '@/components/ui/SubmitButton';
-import TextArea from '@/components/ui/TextArea';
-import TextInput from '@/components/ui/TextInput';
+import { SubmitButton } from '@/components/ui/Control';
+import { TextArea, TextInput } from '@/components/ui/Input';
import { LibraryItemType } from '@/models/library';
import ToolbarItemAccess from '@/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess';
import { useModificationStore } from '@/stores/modification';
diff --git a/rsconcept/frontend/src/pages/OssPage/EditorOssCard/OssStats.tsx b/rsconcept/frontend/src/pages/OssPage/EditorOssCard/OssStats.tsx
index 6efdec46..443a3507 100644
--- a/rsconcept/frontend/src/pages/OssPage/EditorOssCard/OssStats.tsx
+++ b/rsconcept/frontend/src/pages/OssPage/EditorOssCard/OssStats.tsx
@@ -1,7 +1,7 @@
import clsx from 'clsx';
import { IconDownload, IconRSForm, IconRSFormImported, IconRSFormOwned, IconSynthesis } from '@/components/Icons';
-import ValueStats from '@/components/ui/ValueStats';
+import { ValueStats } from '@/components/ui/View';
import { IOperationSchemaStats } from '@/models/oss';
interface OssStatsProps {
diff --git a/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/NodeContextMenu.tsx b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/NodeContextMenu.tsx
index 719c2a67..8afc027d 100644
--- a/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/NodeContextMenu.tsx
+++ b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/NodeContextMenu.tsx
@@ -12,8 +12,7 @@ import {
IconNewRSForm,
IconRSForm
} from '@/components/Icons';
-import Dropdown from '@/components/ui/Dropdown';
-import DropdownButton from '@/components/ui/DropdownButton';
+import { Dropdown, DropdownButton } from '@/components/ui/Dropdown';
import useClickedOutside from '@/hooks/useClickedOutside';
import { IOperation, OperationID, OperationType } from '@/models/oss';
import { PARAMETER } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/OssFlow.tsx b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/OssFlow.tsx
index c7743549..874ed327 100644
--- a/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/OssFlow.tsx
+++ b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/OssFlow.tsx
@@ -24,7 +24,7 @@ import { useMutatingOss } from '@/backend/oss/useMutatingOss';
import { useOperationExecute } from '@/backend/oss/useOperationExecute';
import { useUpdatePositions } from '@/backend/oss/useUpdatePositions';
import { CProps } from '@/components/props';
-import Overlay from '@/components/ui/Overlay';
+import { Overlay } from '@/components/ui/Container';
import { OssNode } from '@/models/miscellaneous';
import { OperationID } from '@/models/oss';
import { useMainHeight } from '@/stores/appLayout';
diff --git a/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/ToolbarOssGraph.tsx b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/ToolbarOssGraph.tsx
index 679da677..c5ad5e2f 100644
--- a/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/ToolbarOssGraph.tsx
+++ b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/ToolbarOssGraph.tsx
@@ -19,7 +19,7 @@ import {
IconSave
} from '@/components/Icons';
import BadgeHelp from '@/components/info/BadgeHelp';
-import MiniButton from '@/components/ui/MiniButton';
+import { MiniButton } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
import { OperationType } from '@/models/oss';
import { useModificationStore } from '@/stores/modification';
diff --git a/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/graph/NodeCore.tsx b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/graph/NodeCore.tsx
index fde5dd6b..278116d8 100644
--- a/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/graph/NodeCore.tsx
+++ b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/graph/NodeCore.tsx
@@ -2,8 +2,8 @@
import { IconConsolidation, IconRSForm } from '@/components/Icons';
import TooltipOperation from '@/components/info/TooltipOperation';
-import Indicator from '@/components/ui/Indicator';
-import Overlay from '@/components/ui/Overlay';
+import { Overlay } from '@/components/ui/Container';
+import { Indicator } from '@/components/ui/View';
import { OssNodeInternal } from '@/models/miscellaneous';
import { OperationType } from '@/models/oss';
import { PARAMETER, prefixes } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/OssPage/MenuOssTabs.tsx b/rsconcept/frontend/src/pages/OssPage/MenuOssTabs.tsx
index 1985e7d3..f5686f64 100644
--- a/rsconcept/frontend/src/pages/OssPage/MenuOssTabs.tsx
+++ b/rsconcept/frontend/src/pages/OssPage/MenuOssTabs.tsx
@@ -18,11 +18,9 @@ import {
IconReader,
IconShare
} from '@/components/Icons';
-import Button from '@/components/ui/Button';
-import Divider from '@/components/ui/Divider';
-import Dropdown from '@/components/ui/Dropdown';
-import DropdownButton from '@/components/ui/DropdownButton';
-import useDropdown from '@/hooks/useDropdown';
+import { Divider } from '@/components/ui/Container';
+import { Button } from '@/components/ui/Control';
+import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import { UserRole } from '@/models/user';
import { useRoleStore } from '@/stores/role';
import { describeAccessMode as describeUserRole, labelAccessMode as labelUserRole } from '@/utils/labels';
diff --git a/rsconcept/frontend/src/pages/OssPage/OssPage.tsx b/rsconcept/frontend/src/pages/OssPage/OssPage.tsx
index 3b0b1770..36f4b9b7 100644
--- a/rsconcept/frontend/src/pages/OssPage/OssPage.tsx
+++ b/rsconcept/frontend/src/pages/OssPage/OssPage.tsx
@@ -9,7 +9,7 @@ import { z } from 'zod';
import { useBlockNavigation, useConceptNavigation } from '@/app/Navigation/NavigationContext';
import { urls } from '@/app/urls';
import { ErrorData } from '@/components/info/InfoError';
-import TextURL from '@/components/ui/TextURL';
+import { TextURL } from '@/components/ui/Control';
import useQueryStrings from '@/hooks/useQueryStrings';
import { useModificationStore } from '@/stores/modification';
diff --git a/rsconcept/frontend/src/pages/OssPage/OssTabs.tsx b/rsconcept/frontend/src/pages/OssPage/OssTabs.tsx
index 6dd3eef7..6146d654 100644
--- a/rsconcept/frontend/src/pages/OssPage/OssTabs.tsx
+++ b/rsconcept/frontend/src/pages/OssPage/OssTabs.tsx
@@ -2,11 +2,10 @@
import clsx from 'clsx';
import { useEffect } from 'react';
-import { TabList, TabPanel, Tabs } from 'react-tabs';
import { useConceptNavigation } from '@/app/Navigation/NavigationContext';
-import Overlay from '@/components/ui/Overlay';
-import TabLabel from '@/components/ui/TabLabel';
+import { Overlay } from '@/components/ui/Container';
+import { TabLabel, TabList, TabPanel, Tabs } from '@/components/ui/Tabs';
import { useAppLayoutStore } from '@/stores/appLayout';
import EditorRSForm from './EditorOssCard';
diff --git a/rsconcept/frontend/src/pages/PasswordChangePage.tsx b/rsconcept/frontend/src/pages/PasswordChangePage.tsx
index e3546a5e..592eff0f 100644
--- a/rsconcept/frontend/src/pages/PasswordChangePage.tsx
+++ b/rsconcept/frontend/src/pages/PasswordChangePage.tsx
@@ -8,9 +8,9 @@ import { useConceptNavigation } from '@/app/Navigation/NavigationContext';
import { urls } from '@/app/urls';
import { useResetPassword } from '@/backend/auth/useResetPassword';
import InfoError, { ErrorData } from '@/components/info/InfoError';
+import { SubmitButton } from '@/components/ui/Control';
+import { TextInput } from '@/components/ui/Input';
import Loader from '@/components/ui/Loader';
-import SubmitButton from '@/components/ui/SubmitButton';
-import TextInput from '@/components/ui/TextInput';
import useQueryStrings from '@/hooks/useQueryStrings';
export function Component() {
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/EditorControls.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/EditorControls.tsx
index c4844a38..f833e67c 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/EditorControls.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/EditorControls.tsx
@@ -4,8 +4,8 @@ import { ICstRenameDTO } from '@/backend/rsform/api';
import { useCstRename } from '@/backend/rsform/useCstRename';
import { useMutatingRSForm } from '@/backend/rsform/useMutatingRSForm';
import { IconEdit } from '@/components/Icons';
-import MiniButton from '@/components/ui/MiniButton';
-import Overlay from '@/components/ui/Overlay';
+import { Overlay } from '@/components/ui/Container';
+import { MiniButton } from '@/components/ui/Control';
import { IConstituenta } from '@/models/rsform';
import { useDialogsStore } from '@/stores/dialogs';
import { useModificationStore } from '@/stores/modification';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/FormConstituenta.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/FormConstituenta.tsx
index 72e7592f..99b162bc 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/FormConstituenta.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/FormConstituenta.tsx
@@ -12,10 +12,10 @@ import { useMutatingRSForm } from '@/backend/rsform/useMutatingRSForm';
import { IconChild, IconPredecessor, IconSave } from '@/components/Icons';
import { CProps } from '@/components/props';
import RefsInput from '@/components/RefsInput';
-import Indicator from '@/components/ui/Indicator';
-import Overlay from '@/components/ui/Overlay';
-import SubmitButton from '@/components/ui/SubmitButton';
-import TextArea from '@/components/ui/TextArea';
+import { Overlay } from '@/components/ui/Container';
+import { SubmitButton } from '@/components/ui/Control';
+import { TextArea } from '@/components/ui/Input';
+import { Indicator } from '@/components/ui/View';
import { ConstituentaID, CstType, IConstituenta, IRSForm } from '@/models/rsform';
import { isBaseSet, isBasicConcept, isFunctional } from '@/models/rsformAPI';
import { IExpressionParse, ParsingStatus } from '@/models/rslang';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/ToolbarConstituenta.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/ToolbarConstituenta.tsx
index 0a35c0c6..4b929771 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/ToolbarConstituenta.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/ToolbarConstituenta.tsx
@@ -20,8 +20,8 @@ import {
} from '@/components/Icons';
import BadgeHelp from '@/components/info/BadgeHelp';
import MiniSelectorOSS from '@/components/select/MiniSelectorOSS';
-import MiniButton from '@/components/ui/MiniButton';
-import Overlay from '@/components/ui/Overlay';
+import { Overlay } from '@/components/ui/Container';
+import { MiniButton } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
import { ConstituentaID, IConstituenta } from '@/models/rsform';
import { useModificationStore } from '@/stores/modification';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx
index c791c8b0..5eb5282c 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx
@@ -13,7 +13,7 @@ import { CProps } from '@/components/props';
import RSInput from '@/components/RSInput';
import { parser as rslangParser } from '@/components/RSInput/rslang/parserAST';
import { RSTextWrapper } from '@/components/RSInput/textEditing';
-import Overlay from '@/components/ui/Overlay';
+import { Overlay } from '@/components/ui/Container';
import { HelpTopic } from '@/models/miscellaneous';
import { ConstituentaID, IConstituenta } from '@/models/rsform';
import { getDefinitionPrefix } from '@/models/rsformAPI';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/ToolbarRSExpression.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/ToolbarRSExpression.tsx
index f4f0687a..de4d4705 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/ToolbarRSExpression.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSExpression/ToolbarRSExpression.tsx
@@ -1,8 +1,8 @@
import { useMutatingRSForm } from '@/backend/rsform/useMutatingRSForm';
import { IconControls, IconTree, IconTypeGraph } from '@/components/Icons';
import { CProps } from '@/components/props';
-import MiniButton from '@/components/ui/MiniButton';
-import Overlay from '@/components/ui/Overlay';
+import { Overlay } from '@/components/ui/Container';
+import { MiniButton } from '@/components/ui/Control';
import { usePreferencesStore } from '@/stores/preferences';
interface ToolbarRSExpressionProps {
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem.tsx
index 0da6594f..76170c84 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem.tsx
@@ -19,12 +19,11 @@ import {
import InfoUsers from '@/components/info/InfoUsers';
import { CProps } from '@/components/props';
import SelectUser from '@/components/select/SelectUser';
+import { Overlay, Tooltip } from '@/components/ui/Container';
+import { MiniButton } from '@/components/ui/Control';
+import { useDropdown } from '@/components/ui/Dropdown';
import Loader from '@/components/ui/Loader';
-import MiniButton from '@/components/ui/MiniButton';
-import Overlay from '@/components/ui/Overlay';
-import Tooltip from '@/components/ui/Tooltip';
-import ValueIcon from '@/components/ui/ValueIcon';
-import useDropdown from '@/hooks/useDropdown';
+import { ValueIcon } from '@/components/ui/View';
import { ILibraryItemEditor } from '@/models/library';
import { UserID, UserRole } from '@/models/user';
import { useDialogsStore } from '@/stores/dialogs';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/EditorRSFormCard.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/EditorRSFormCard.tsx
index 27dfaa11..dd0cd5d5 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/EditorRSFormCard.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/EditorRSFormCard.tsx
@@ -2,7 +2,7 @@
import clsx from 'clsx';
-import FlexColumn from '@/components/ui/FlexColumn';
+import { FlexColumn } from '@/components/ui/Container';
import { useModificationStore } from '@/stores/modification';
import { globals } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/FormRSForm.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/FormRSForm.tsx
index d227c870..cc8e5df4 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/FormRSForm.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/FormRSForm.tsx
@@ -13,10 +13,8 @@ import { useUpdateItem } from '@/backend/library/useUpdateItem';
import { useMutatingRSForm } from '@/backend/rsform/useMutatingRSForm';
import { IconSave } from '@/components/Icons';
import SelectVersion from '@/components/select/SelectVersion';
-import Label from '@/components/ui/Label';
-import SubmitButton from '@/components/ui/SubmitButton';
-import TextArea from '@/components/ui/TextArea';
-import TextInput from '@/components/ui/TextInput';
+import { SubmitButton } from '@/components/ui/Control';
+import { Label, TextArea, TextInput } from '@/components/ui/Input';
import { LibraryItemType, VersionID } from '@/models/library';
import { useModificationStore } from '@/stores/modification';
import { globals } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/RSFormStats.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/RSFormStats.tsx
index 143dc572..888cc360 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/RSFormStats.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/RSFormStats.tsx
@@ -19,7 +19,7 @@ import {
IconStatusProperty,
IconTerminology
} from '@/components/Icons';
-import ValueStats from '@/components/ui/ValueStats';
+import { ValueStats } from '@/components/ui/View';
import { type IRSFormStats } from '@/models/rsform';
interface RSFormStatsProps {
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess.tsx
index 795bde64..d5347fb0 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess.tsx
@@ -4,9 +4,9 @@ import { VisibilityIcon } from '@/components/DomainIcons';
import { IconImmutable, IconMutable } from '@/components/Icons';
import BadgeHelp from '@/components/info/BadgeHelp';
import SelectAccessPolicy from '@/components/select/SelectAccessPolicy';
-import Label from '@/components/ui/Label';
-import MiniButton from '@/components/ui/MiniButton';
-import Overlay from '@/components/ui/Overlay';
+import { Overlay } from '@/components/ui/Container';
+import { MiniButton } from '@/components/ui/Control';
+import { Label } from '@/components/ui/Input';
import { AccessPolicy, ILibraryItemEditor } from '@/models/library';
import { HelpTopic } from '@/models/miscellaneous';
import { UserRole } from '@/models/user';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard.tsx
index 7cfbd6bd..2b3a3e3f 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard.tsx
@@ -4,8 +4,8 @@ import { useMutatingLibrary } from '@/backend/library/useMutatingLibrary';
import { IconDestroy, IconSave, IconShare } from '@/components/Icons';
import BadgeHelp from '@/components/info/BadgeHelp';
import MiniSelectorOSS from '@/components/select/MiniSelectorOSS';
-import MiniButton from '@/components/ui/MiniButton';
-import Overlay from '@/components/ui/Overlay';
+import { Overlay } from '@/components/ui/Container';
+import { MiniButton } from '@/components/ui/Control';
import { AccessPolicy, ILibraryItemEditor, LibraryItemType } from '@/models/library';
import { HelpTopic } from '@/models/miscellaneous';
import { IRSForm } from '@/models/rsform';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/ToolbarVersioning.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/ToolbarVersioning.tsx
index 5b9e55e0..1c48bf44 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/ToolbarVersioning.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSFormCard/ToolbarVersioning.tsx
@@ -3,8 +3,8 @@
import { useVersionRestore } from '@/backend/library/useVersionRestore';
import { IconNewVersion, IconUpload, IconVersions } from '@/components/Icons';
import BadgeHelp from '@/components/info/BadgeHelp';
-import MiniButton from '@/components/ui/MiniButton';
-import Overlay from '@/components/ui/Overlay';
+import { Overlay } from '@/components/ui/Container';
+import { MiniButton } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
import { useDialogsStore } from '@/stores/dialogs';
import { useModificationStore } from '@/stores/modification';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/EditorRSList.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/EditorRSList.tsx
index 3a39e13b..2430925a 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/EditorRSList.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/EditorRSList.tsx
@@ -6,10 +6,10 @@ import { toast } from 'react-toastify';
import { useMutatingRSForm } from '@/backend/rsform/useMutatingRSForm';
import { IconCSV } from '@/components/Icons';
+import { Overlay } from '@/components/ui/Container';
+import { MiniButton } from '@/components/ui/Control';
import { type RowSelectionState } from '@/components/ui/DataTable';
-import MiniButton from '@/components/ui/MiniButton';
-import Overlay from '@/components/ui/Overlay';
-import SearchBar from '@/components/ui/SearchBar';
+import { SearchBar } from '@/components/ui/SearchBar';
import { CstMatchMode } from '@/models/miscellaneous';
import { ConstituentaID, CstType } from '@/models/rsform';
import { matchConstituenta } from '@/models/rsformAPI';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/TableRSList.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/TableRSList.tsx
index 761c0eaf..2aaa9fd4 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/TableRSList.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/TableRSList.tsx
@@ -5,10 +5,9 @@ import { useLayoutEffect, useState } from 'react';
import BadgeConstituenta from '@/components/info/BadgeConstituenta';
import { CProps } from '@/components/props';
+import { TextURL } from '@/components/ui/Control';
import DataTable, { createColumnHelper, RowSelectionState, VisibilityState } from '@/components/ui/DataTable';
-import NoData from '@/components/ui/NoData';
-import TextContent from '@/components/ui/TextContent';
-import TextURL from '@/components/ui/TextURL';
+import { NoData, TextContent } from '@/components/ui/View';
import useWindowSize from '@/hooks/useWindowSize';
import { ConstituentaID, IConstituenta } from '@/models/rsform';
import { PARAMETER, prefixes } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/ToolbarRSList.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/ToolbarRSList.tsx
index a1ee6dc2..892009db 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/ToolbarRSList.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSList/ToolbarRSList.tsx
@@ -11,11 +11,9 @@ import {
} from '@/components/Icons';
import BadgeHelp from '@/components/info/BadgeHelp';
import MiniSelectorOSS from '@/components/select/MiniSelectorOSS';
-import Dropdown from '@/components/ui/Dropdown';
-import DropdownButton from '@/components/ui/DropdownButton';
-import MiniButton from '@/components/ui/MiniButton';
-import Overlay from '@/components/ui/Overlay';
-import useDropdown from '@/hooks/useDropdown';
+import { Overlay } from '@/components/ui/Container';
+import { MiniButton } from '@/components/ui/Control';
+import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import { HelpTopic } from '@/models/miscellaneous';
import { CstType } from '@/models/rsform';
import { prefixes } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/GraphSelectors.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/GraphSelectors.tsx
index 9366d454..6d51ec06 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/GraphSelectors.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/GraphSelectors.tsx
@@ -1,6 +1,6 @@
import BadgeHelp from '@/components/info/BadgeHelp';
-import Overlay from '@/components/ui/Overlay';
-import SelectSingle from '@/components/ui/SelectSingle';
+import { Overlay } from '@/components/ui/Container';
+import { SelectSingle } from '@/components/ui/Input';
import { GraphColoring, HelpTopic } from '@/models/miscellaneous';
import { IRSForm } from '@/models/rsform';
import { mapLabelColoring } from '@/utils/labels';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/SchemasGuide.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/SchemasGuide.tsx
index d9b86411..9657fe63 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/SchemasGuide.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/SchemasGuide.tsx
@@ -1,6 +1,6 @@
import { useLibrary } from '@/backend/library/useLibrary';
import { IconHelp } from '@/components/Icons';
-import Tooltip from '@/components/ui/Tooltip';
+import { Tooltip } from '@/components/ui/Container';
import { LibraryItemID } from '@/models/library';
import { IRSForm } from '@/models/rsform';
import { colorBgSchemas } from '@/styling/color';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/TGFlow.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/TGFlow.tsx
index 9b26c3ec..72ef3306 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/TGFlow.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/TGFlow.tsx
@@ -24,7 +24,7 @@ import InfoConstituenta from '@/components/info/InfoConstituenta';
import SelectedCounter from '@/components/info/SelectedCounter';
import { CProps } from '@/components/props';
import ToolbarGraphSelection from '@/components/select/ToolbarGraphSelection';
-import Overlay from '@/components/ui/Overlay';
+import { Overlay } from '@/components/ui/Container';
import { produceFilteredGraph } from '@/models/miscellaneousAPI';
import { ConstituentaID, CstType, IConstituenta } from '@/models/rsform';
import { isBasicConcept } from '@/models/rsformAPI';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ToolbarFocusedCst.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ToolbarFocusedCst.tsx
index a065bb7e..4e26550a 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ToolbarFocusedCst.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ToolbarFocusedCst.tsx
@@ -1,7 +1,7 @@
'use client';
import { IconGraphInputs, IconGraphOutputs, IconReset } from '@/components/Icons';
-import MiniButton from '@/components/ui/MiniButton';
+import { MiniButton } from '@/components/ui/Control';
import { IConstituenta } from '@/models/rsform';
import { APP_COLORS } from '@/styling/color';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ToolbarTermGraph.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ToolbarTermGraph.tsx
index f432c06e..7a8f644f 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ToolbarTermGraph.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ToolbarTermGraph.tsx
@@ -15,7 +15,7 @@ import {
} from '@/components/Icons';
import BadgeHelp from '@/components/info/BadgeHelp';
import MiniSelectorOSS from '@/components/select/MiniSelectorOSS';
-import MiniButton from '@/components/ui/MiniButton';
+import { MiniButton } from '@/components/ui/Control';
import { HelpTopic } from '@/models/miscellaneous';
import { useDialogsStore } from '@/stores/dialogs';
import { PARAMETER } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ViewHidden.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ViewHidden.tsx
index 59de2a87..973e4a04 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ViewHidden.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/ViewHidden.tsx
@@ -4,8 +4,8 @@ import clsx from 'clsx';
import { IconDropArrow, IconDropArrowUp } from '@/components/Icons';
import { CProps } from '@/components/props';
-import MiniButton from '@/components/ui/MiniButton';
-import Overlay from '@/components/ui/Overlay';
+import { Overlay } from '@/components/ui/Container';
+import { MiniButton } from '@/components/ui/Control';
import useWindowSize from '@/hooks/useWindowSize';
import { GraphColoring } from '@/models/miscellaneous';
import { ConstituentaID, IRSForm } from '@/models/rsform';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/graph/TGEdgeTypes.ts b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/graph/TGEdgeTypes.ts
index f44f37f4..30c6d5be 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/graph/TGEdgeTypes.ts
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/graph/TGEdgeTypes.ts
@@ -1,6 +1,6 @@
import { EdgeTypes } from 'reactflow';
-import DynamicEdge from '@/components/ui/Flow/DynamicEdge';
+import DynamicEdge from '@/components/graph/DynamicEdge';
export const TGEdgeTypes: EdgeTypes = {
termEdge: DynamicEdge
diff --git a/rsconcept/frontend/src/pages/RSFormPage/MenuRSTabs.tsx b/rsconcept/frontend/src/pages/RSFormPage/MenuRSTabs.tsx
index f223448c..62895336 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/MenuRSTabs.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/MenuRSTabs.tsx
@@ -37,11 +37,9 @@ import {
IconTemplates,
IconUpload
} from '@/components/Icons';
-import Button from '@/components/ui/Button';
-import Divider from '@/components/ui/Divider';
-import Dropdown from '@/components/ui/Dropdown';
-import DropdownButton from '@/components/ui/DropdownButton';
-import useDropdown from '@/hooks/useDropdown';
+import { Divider } from '@/components/ui/Container';
+import { Button } from '@/components/ui/Control';
+import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import { AccessPolicy, LocationHead } from '@/models/library';
import { CstType } from '@/models/rsform';
import { UserRole } from '@/models/user';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/RSFormPage.tsx b/rsconcept/frontend/src/pages/RSFormPage/RSFormPage.tsx
index fdd0e9e5..df5b93c4 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/RSFormPage.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/RSFormPage.tsx
@@ -9,8 +9,8 @@ import { z } from 'zod';
import { useBlockNavigation, useConceptNavigation } from '@/app/Navigation/NavigationContext';
import { urls } from '@/app/urls';
import { ErrorData } from '@/components/info/InfoError';
-import Divider from '@/components/ui/Divider';
-import TextURL from '@/components/ui/TextURL';
+import { Divider } from '@/components/ui/Container';
+import { TextURL } from '@/components/ui/Control';
import useQueryStrings from '@/hooks/useQueryStrings';
import { LibraryItemID } from '@/models/library';
import { useModificationStore } from '@/stores/modification';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/RSTabs.tsx b/rsconcept/frontend/src/pages/RSFormPage/RSTabs.tsx
index 6770c98d..d61912b4 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/RSTabs.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/RSTabs.tsx
@@ -2,11 +2,10 @@
import clsx from 'clsx';
import { useEffect } from 'react';
-import { TabList, TabPanel, Tabs } from 'react-tabs';
import { useConceptNavigation } from '@/app/Navigation/NavigationContext';
-import Overlay from '@/components/ui/Overlay';
-import TabLabel from '@/components/ui/TabLabel';
+import { Overlay } from '@/components/ui/Container';
+import { TabLabel, TabList, TabPanel, Tabs } from '@/components/ui/Tabs';
import { ConstituentaID } from '@/models/rsform';
import { useAppLayoutStore } from '@/stores/appLayout';
import { useModificationStore } from '@/stores/modification';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/ViewConstituents/ConstituentsSearch.tsx b/rsconcept/frontend/src/pages/RSFormPage/ViewConstituents/ConstituentsSearch.tsx
index d93c15b7..c325c562 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/ViewConstituents/ConstituentsSearch.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/ViewConstituents/ConstituentsSearch.tsx
@@ -5,8 +5,8 @@ import { useEffect } from 'react';
import { IconChild } from '@/components/Icons';
import SelectGraphFilter from '@/components/select/SelectGraphFilter';
import SelectMatchMode from '@/components/select/SelectMatchMode';
-import MiniButton from '@/components/ui/MiniButton';
-import SearchBar from '@/components/ui/SearchBar';
+import { MiniButton } from '@/components/ui/Control';
+import { SearchBar } from '@/components/ui/SearchBar';
import { applyGraphQuery } from '@/models/miscellaneousAPI';
import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform';
import { matchConstituenta } from '@/models/rsformAPI';
diff --git a/rsconcept/frontend/src/pages/RSFormPage/ViewConstituents/TableSideConstituents.tsx b/rsconcept/frontend/src/pages/RSFormPage/ViewConstituents/TableSideConstituents.tsx
index 2c169ca9..39bac663 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/ViewConstituents/TableSideConstituents.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/ViewConstituents/TableSideConstituents.tsx
@@ -4,8 +4,7 @@ import { useEffect } from 'react';
import BadgeConstituenta from '@/components/info/BadgeConstituenta';
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable';
-import NoData from '@/components/ui/NoData';
-import TextContent from '@/components/ui/TextContent';
+import { NoData, TextContent } from '@/components/ui/View';
import { ConstituentaID, IConstituenta } from '@/models/rsform';
import { APP_COLORS } from '@/styling/color';
import { PARAMETER, prefixes } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/RegisterPage/FormSignup.tsx b/rsconcept/frontend/src/pages/RegisterPage/FormSignup.tsx
index 5b9e8e3d..0f764c97 100644
--- a/rsconcept/frontend/src/pages/RegisterPage/FormSignup.tsx
+++ b/rsconcept/frontend/src/pages/RegisterPage/FormSignup.tsx
@@ -12,15 +12,10 @@ import { IUserSignupDTO, UserSignupSchema } from '@/backend/users/api';
import { useSignup } from '@/backend/users/useSignup';
import { IconHelp } from '@/components/Icons';
import { ErrorData } from '@/components/info/InfoError';
-import Button from '@/components/ui/Button';
-import Checkbox from '@/components/ui/Checkbox';
-import FlexColumn from '@/components/ui/FlexColumn';
-import Overlay from '@/components/ui/Overlay';
-import PrettyJson from '@/components/ui/PrettyJSON';
-import SubmitButton from '@/components/ui/SubmitButton';
-import TextInput from '@/components/ui/TextInput';
-import TextURL from '@/components/ui/TextURL';
-import Tooltip from '@/components/ui/Tooltip';
+import { FlexColumn, Overlay, Tooltip } from '@/components/ui/Container';
+import { Button, SubmitButton, TextURL } from '@/components/ui/Control';
+import { Checkbox, TextInput } from '@/components/ui/Input';
+import { PrettyJson } from '@/components/ui/View';
import { HelpTopic } from '@/models/miscellaneous';
import { globals, patterns } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/pages/RestorePasswordPage.tsx b/rsconcept/frontend/src/pages/RestorePasswordPage.tsx
index 35e7c46b..9d900f78 100644
--- a/rsconcept/frontend/src/pages/RestorePasswordPage.tsx
+++ b/rsconcept/frontend/src/pages/RestorePasswordPage.tsx
@@ -6,9 +6,8 @@ import { useState } from 'react';
import { useRequestPasswordReset } from '@/backend/auth/useRequestPasswordReset';
import { ErrorData } from '@/components/info/InfoError';
-import SubmitButton from '@/components/ui/SubmitButton';
-import TextInput from '@/components/ui/TextInput';
-import TextURL from '@/components/ui/TextURL';
+import { SubmitButton, TextURL } from '@/components/ui/Control';
+import { TextInput } from '@/components/ui/Input';
export function Component() {
const { requestPasswordReset, isPending, error: serverError, reset: clearServerError } = useRequestPasswordReset();
diff --git a/rsconcept/frontend/src/pages/UserProfilePage/EditorPassword.tsx b/rsconcept/frontend/src/pages/UserProfilePage/EditorPassword.tsx
index 6692cb5d..6cb6be88 100644
--- a/rsconcept/frontend/src/pages/UserProfilePage/EditorPassword.tsx
+++ b/rsconcept/frontend/src/pages/UserProfilePage/EditorPassword.tsx
@@ -10,9 +10,9 @@ import { urls } from '@/app/urls';
import { ChangePasswordSchema, IChangePasswordDTO } from '@/backend/auth/api';
import { useChangePassword } from '@/backend/auth/useChangePassword';
import { ErrorData } from '@/components/info/InfoError';
-import FlexColumn from '@/components/ui/FlexColumn';
-import SubmitButton from '@/components/ui/SubmitButton';
-import TextInput from '@/components/ui/TextInput';
+import { FlexColumn } from '@/components/ui/Container';
+import { SubmitButton } from '@/components/ui/Control';
+import { TextInput } from '@/components/ui/Input';
function EditorPassword() {
const router = useConceptNavigation();
diff --git a/rsconcept/frontend/src/pages/UserProfilePage/EditorProfile.tsx b/rsconcept/frontend/src/pages/UserProfilePage/EditorProfile.tsx
index a6399ce9..581e11ab 100644
--- a/rsconcept/frontend/src/pages/UserProfilePage/EditorProfile.tsx
+++ b/rsconcept/frontend/src/pages/UserProfilePage/EditorProfile.tsx
@@ -9,8 +9,8 @@ import { IUpdateProfileDTO, UpdateProfileSchema } from '@/backend/users/api';
import { useProfileSuspense } from '@/backend/users/useProfile';
import { useUpdateProfile } from '@/backend/users/useUpdateProfile';
import { ErrorData } from '@/components/info/InfoError';
-import SubmitButton from '@/components/ui/SubmitButton';
-import TextInput from '@/components/ui/TextInput';
+import { SubmitButton } from '@/components/ui/Control';
+import { TextInput } from '@/components/ui/Input';
function EditorProfile() {
const { profile } = useProfileSuspense();