R: Refactor basic components structure

This commit is contained in:
Ivan 2025-02-07 10:54:47 +03:00
parent 4d91437d7f
commit 07c1d54f17
193 changed files with 317 additions and 426 deletions

View File

@ -1,7 +1,7 @@
import { useNavigate, useRouteError } from 'react-router'; import { useNavigate, useRouteError } from 'react-router';
import InfoError from '@/components/info/InfoError'; import InfoError from '@/components/info/InfoError';
import Button from '@/components/ui/Button'; import { Button } from '@/components/ui/Control';
function ErrorFallback() { function ErrorFallback() {
const error = useRouteError(); const error = useRouteError();

View File

@ -1,6 +1,6 @@
import clsx from 'clsx'; import clsx from 'clsx';
import TextURL from '@/components/ui/TextURL'; import { TextURL } from '@/components/ui/Control';
import { external_urls } from '@/utils/constants'; import { external_urls } from '@/utils/constants';
function Footer() { function Footer() {

View File

@ -1,8 +1,8 @@
'use client'; 'use client';
import InfoConstituenta from '@/components/info/InfoConstituenta'; import InfoConstituenta from '@/components/info/InfoConstituenta';
import { Tooltip } from '@/components/ui/Container';
import Loader from '@/components/ui/Loader'; import Loader from '@/components/ui/Loader';
import Tooltip from '@/components/ui/Tooltip';
import { useTooltipsStore } from '@/stores/tooltips'; import { useTooltipsStore } from '@/stores/tooltips';
import { globals } from '@/utils/constants'; import { globals } from '@/utils/constants';

View File

@ -16,8 +16,7 @@ import {
IconUser IconUser
} from '@/components/Icons'; } from '@/components/Icons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import Dropdown from '@/components/ui/Dropdown'; import { Dropdown, DropdownButton } from '@/components/ui/Dropdown';
import DropdownButton from '@/components/ui/DropdownButton';
import { usePreferencesStore } from '@/stores/preferences'; import { usePreferencesStore } from '@/stores/preferences';
import { urls } from '../urls'; import { urls } from '../urls';

View File

@ -1,8 +1,8 @@
import { Suspense } from 'react'; import { Suspense } from 'react';
import { useConceptNavigation } from '@/app/Navigation/NavigationContext'; import { useConceptNavigation } from '@/app/Navigation/NavigationContext';
import { useDropdown } from '@/components/ui/Dropdown';
import Loader from '@/components/ui/Loader'; import Loader from '@/components/ui/Loader';
import useDropdown from '@/hooks/useDropdown';
import { urls } from '../urls'; import { urls } from '../urls';
import UserButton from './UserButton'; import UserButton from './UserButton';

View File

@ -2,7 +2,8 @@ import { useConceptNavigation } from '@/app/Navigation/NavigationContext';
import { urls } from '@/app/urls'; import { urls } from '@/app/urls';
import { useAuthSuspense } from '@/backend/auth/useAuth'; import { useAuthSuspense } from '@/backend/auth/useAuth';
import { useLogout } from '@/backend/auth/useLogout'; import { useLogout } from '@/backend/auth/useLogout';
import TextURL from '@/components/ui/TextURL';
import { TextURL } from './ui/Control';
function ExpectedAnonymous() { function ExpectedAnonymous() {
const { user } = useAuthSuspense(); const { user } = useAuthSuspense();

View File

@ -8,7 +8,7 @@ import clsx from 'clsx';
import { EditorView } from 'codemirror'; import { EditorView } from 'codemirror';
import { forwardRef, useRef } from 'react'; import { forwardRef, useRef } from 'react';
import Label from '@/components/ui/Label'; import { Label } from '@/components/ui/Input';
import { ConstituentaID, IRSForm } from '@/models/rsform'; import { ConstituentaID, IRSForm } from '@/models/rsform';
import { generateAlias, getCstTypePrefix, guessCstType } from '@/models/rsformAPI'; import { generateAlias, getCstTypePrefix, guessCstType } from '@/models/rsformAPI';
import { extractGlobals } from '@/models/rslangAPI'; import { extractGlobals } from '@/models/rslangAPI';

View File

@ -8,7 +8,7 @@ import clsx from 'clsx';
import { EditorView } from 'codemirror'; import { EditorView } from 'codemirror';
import { forwardRef, useRef, useState } from 'react'; import { forwardRef, useRef, useState } from 'react';
import Label from '@/components/ui/Label'; import { Label } from '@/components/ui/Input';
import { ReferenceType } from '@/models/language'; import { ReferenceType } from '@/models/language';
import { DialogType } from '@/models/miscellaneous'; import { DialogType } from '@/models/miscellaneous';
import { ConstituentaID, IRSForm } from '@/models/rsform'; import { ConstituentaID, IRSForm } from '@/models/rsform';

View File

@ -1,7 +1,8 @@
'use client'; 'use client';
import { useAuthSuspense } from '@/backend/auth/useAuth'; import { useAuthSuspense } from '@/backend/auth/useAuth';
import TextURL from '@/components/ui/TextURL';
import { TextURL } from './ui/Control';
function RequireAuth({ children }: React.PropsWithChildren) { function RequireAuth({ children }: React.PropsWithChildren) {
const { isAnonymous } = useAuthSuspense(); const { isAnonymous } = useAuthSuspense();

View File

@ -2,9 +2,9 @@ import React, { Suspense } from 'react';
import { IconHelp } from '@/components/Icons'; import { IconHelp } from '@/components/Icons';
import { CProps } from '@/components/props'; 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 Loader from '@/components/ui/Loader';
import TextURL from '@/components/ui/TextURL';
import Tooltip, { PlacesType } from '@/components/ui/Tooltip';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';
import { usePreferencesStore } from '@/stores/preferences'; import { usePreferencesStore } from '@/stores/preferences';

View File

@ -1,7 +1,7 @@
import axios, { type AxiosError } from 'axios'; import axios, { type AxiosError } from 'axios';
import clsx from 'clsx'; import clsx from 'clsx';
import PrettyJson from '@/components/ui/PrettyJSON'; import { PrettyJson } from '@/components/ui/View';
import { isResponseHtml } from '@/utils/utils'; import { isResponseHtml } from '@/utils/utils';
export type ErrorData = string | Error | AxiosError | undefined | null; export type ErrorData = string | Error | AxiosError | undefined | null;

View File

@ -1,4 +1,4 @@
import Overlay from '@/components/ui/Overlay'; import { Overlay } from '@/components/ui/Container';
interface SelectedCounterProps { interface SelectedCounterProps {
totalCount: number; totalCount: number;

View File

@ -3,8 +3,8 @@
import { createColumnHelper } from '@tanstack/react-table'; import { createColumnHelper } from '@tanstack/react-table';
import { IconPageRight } from '@/components/Icons'; import { IconPageRight } from '@/components/Icons';
import { Tooltip } from '@/components/ui/Container';
import DataTable from '@/components/ui/DataTable'; import DataTable from '@/components/ui/DataTable';
import Tooltip from '@/components/ui/Tooltip';
import { OssNodeInternal } from '@/models/miscellaneous'; import { OssNodeInternal } from '@/models/miscellaneous';
import { ICstSubstituteEx, OperationType } from '@/models/oss'; import { ICstSubstituteEx, OperationType } from '@/models/oss';
import { labelOperationType } from '@/utils/labels'; import { labelOperationType } from '@/utils/labels';

View File

@ -4,11 +4,9 @@ import clsx from 'clsx';
import { IconOSS } from '@/components/Icons'; import { IconOSS } from '@/components/Icons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import Dropdown from '@/components/ui/Dropdown'; import { MiniButton } from '@/components/ui/Control';
import DropdownButton from '@/components/ui/DropdownButton'; import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import Label from '@/components/ui/Label'; import { Label } from '@/components/ui/Input';
import MiniButton from '@/components/ui/MiniButton';
import useDropdown from '@/hooks/useDropdown';
import { ILibraryItemReference } from '@/models/library'; import { ILibraryItemReference } from '@/models/library';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';

View File

@ -6,8 +6,8 @@ import { useState } from 'react';
import BadgeConstituenta from '@/components/info/BadgeConstituenta'; import BadgeConstituenta from '@/components/info/BadgeConstituenta';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable'; 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 { CstMatchMode } from '@/models/miscellaneous';
import { IConstituenta } from '@/models/rsform'; import { IConstituenta } from '@/models/rsform';
import { matchConstituenta } from '@/models/rsformAPI'; import { matchConstituenta } from '@/models/rsformAPI';

View File

@ -6,8 +6,8 @@ import { useState } from 'react';
import BadgeConstituenta from '@/components/info/BadgeConstituenta'; import BadgeConstituenta from '@/components/info/BadgeConstituenta';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import DataTable, { createColumnHelper, RowSelectionState } from '@/components/ui/DataTable'; 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 { Graph } from '@/models/Graph';
import { CstMatchMode } from '@/models/miscellaneous'; import { CstMatchMode } from '@/models/miscellaneous';
import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform'; import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform';

View File

@ -6,9 +6,9 @@ import { useState } from 'react';
import { IconMoveDown, IconMoveUp, IconRemove } from '@/components/Icons'; import { IconMoveDown, IconMoveUp, IconRemove } from '@/components/Icons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import SelectOperation from '@/components/select/SelectOperation'; import SelectOperation from '@/components/select/SelectOperation';
import { MiniButton } from '@/components/ui/Control';
import DataTable, { createColumnHelper } from '@/components/ui/DataTable'; import DataTable, { createColumnHelper } from '@/components/ui/DataTable';
import MiniButton from '@/components/ui/MiniButton'; import { NoData } from '@/components/ui/View';
import NoData from '@/components/ui/NoData';
import { IOperation, OperationID } from '@/models/oss'; import { IOperation, OperationID } from '@/models/oss';
interface PickMultiOperationProps extends CProps.Styling { interface PickMultiOperationProps extends CProps.Styling {

View File

@ -4,12 +4,11 @@ import { useIntl } from 'react-intl';
import { IconClose, IconFolderTree } from '@/components/Icons'; import { IconClose, IconFolderTree } from '@/components/Icons';
import { CProps } from '@/components/props'; 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 DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable';
import Dropdown from '@/components/ui/Dropdown'; import { Dropdown, useDropdown } from '@/components/ui/Dropdown';
import FlexColumn from '@/components/ui/FlexColumn'; import { SearchBar } from '@/components/ui/SearchBar';
import MiniButton from '@/components/ui/MiniButton';
import SearchBar from '@/components/ui/SearchBar';
import useDropdown from '@/hooks/useDropdown';
import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/models/library'; import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/models/library';
import { matchLibraryItem } from '@/models/libraryAPI'; import { matchLibraryItem } from '@/models/libraryAPI';
import { APP_COLORS } from '@/styling/color'; import { APP_COLORS } from '@/styling/color';

View File

@ -8,9 +8,9 @@ import { IconAccept, IconPageLeft, IconPageRight, IconRemove, IconReplace } from
import BadgeConstituenta from '@/components/info/BadgeConstituenta'; import BadgeConstituenta from '@/components/info/BadgeConstituenta';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import SelectConstituenta from '@/components/select/SelectConstituenta'; import SelectConstituenta from '@/components/select/SelectConstituenta';
import { MiniButton } from '@/components/ui/Control';
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable'; import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable';
import MiniButton from '@/components/ui/MiniButton'; import { NoData } from '@/components/ui/View';
import NoData from '@/components/ui/NoData';
import { ILibraryItem } from '@/models/library'; import { ILibraryItem } from '@/models/library';
import { ICstSubstitute, IMultiSubstitution } from '@/models/oss'; import { ICstSubstitute, IMultiSubstitution } from '@/models/oss';
import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform'; import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform';

View File

@ -2,10 +2,8 @@
import { PolicyIcon } from '@/components/DomainIcons'; import { PolicyIcon } from '@/components/DomainIcons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import Dropdown from '@/components/ui/Dropdown'; import { MiniButton } from '@/components/ui/Control';
import DropdownButton from '@/components/ui/DropdownButton'; import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import MiniButton from '@/components/ui/MiniButton';
import useDropdown from '@/hooks/useDropdown';
import { AccessPolicy } from '@/models/library'; import { AccessPolicy } from '@/models/library';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';
import { describeAccessPolicy, labelAccessPolicy } from '@/utils/labels'; import { describeAccessPolicy, labelAccessPolicy } from '@/utils/labels';

View File

@ -3,7 +3,7 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import SelectSingle from '@/components/ui/SelectSingle'; import { SelectSingle } from '@/components/ui/Input';
import { CstMatchMode } from '@/models/miscellaneous'; import { CstMatchMode } from '@/models/miscellaneous';
import { ConstituentaID, IConstituenta } from '@/models/rsform'; import { ConstituentaID, IConstituenta } from '@/models/rsform';
import { matchConstituenta } from '@/models/rsformAPI'; import { matchConstituenta } from '@/models/rsformAPI';

View File

@ -2,10 +2,8 @@
import { DependencyIcon } from '@/components/DomainIcons'; import { DependencyIcon } from '@/components/DomainIcons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import Dropdown from '@/components/ui/Dropdown'; import { SelectorButton } from '@/components/ui/Control';
import DropdownButton from '@/components/ui/DropdownButton'; import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import SelectorButton from '@/components/ui/SelectorButton';
import useDropdown from '@/hooks/useDropdown';
import useWindowSize from '@/hooks/useWindowSize'; import useWindowSize from '@/hooks/useWindowSize';
import { DependencyMode } from '@/models/miscellaneous'; import { DependencyMode } from '@/models/miscellaneous';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';

View File

@ -2,10 +2,8 @@
import { ItemTypeIcon } from '@/components/DomainIcons'; import { ItemTypeIcon } from '@/components/DomainIcons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import Dropdown from '@/components/ui/Dropdown'; import { SelectorButton } from '@/components/ui/Control';
import DropdownButton from '@/components/ui/DropdownButton'; import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import SelectorButton from '@/components/ui/SelectorButton';
import useDropdown from '@/hooks/useDropdown';
import { LibraryItemType } from '@/models/library'; import { LibraryItemType } from '@/models/library';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';
import { describeLibraryItemType, labelLibraryItemType } from '@/utils/labels'; import { describeLibraryItemType, labelLibraryItemType } from '@/utils/labels';

View File

@ -3,7 +3,7 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import SelectSingle from '@/components/ui/SelectSingle'; import { SelectSingle } from '@/components/ui/Input';
import { ILibraryItem, LibraryItemID } from '@/models/library'; import { ILibraryItem, LibraryItemID } from '@/models/library';
import { matchLibraryItem } from '@/models/libraryAPI'; import { matchLibraryItem } from '@/models/libraryAPI';

View File

@ -6,7 +6,7 @@ import { useEffect, useState } from 'react';
import { useFolders } from '@/backend/library/useFolders'; import { useFolders } from '@/backend/library/useFolders';
import { IconFolder, IconFolderClosed, IconFolderEmpty, IconFolderOpened } from '@/components/Icons'; import { IconFolder, IconFolderClosed, IconFolderEmpty, IconFolderOpened } from '@/components/Icons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import MiniButton from '@/components/ui/MiniButton'; import { MiniButton } from '@/components/ui/Control';
import { FolderNode } from '@/models/FolderTree'; import { FolderNode } from '@/models/FolderTree';
import { labelFolderNode } from '@/utils/labels'; import { labelFolderNode } from '@/utils/labels';

View File

@ -4,9 +4,8 @@ import clsx from 'clsx';
import { IconFolderTree } from '@/components/Icons'; import { IconFolderTree } from '@/components/Icons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import Dropdown from '@/components/ui/Dropdown'; import { MiniButton } from '@/components/ui/Control';
import MiniButton from '@/components/ui/MiniButton'; import { Dropdown, useDropdown } from '@/components/ui/Dropdown';
import useDropdown from '@/hooks/useDropdown';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';
import SelectLocation from './SelectLocation'; import SelectLocation from './SelectLocation';

View File

@ -4,10 +4,8 @@ import clsx from 'clsx';
import { LocationIcon } from '@/components/DomainIcons'; import { LocationIcon } from '@/components/DomainIcons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import Dropdown from '@/components/ui/Dropdown'; import { SelectorButton } from '@/components/ui/Control';
import DropdownButton from '@/components/ui/DropdownButton'; import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import SelectorButton from '@/components/ui/SelectorButton';
import useDropdown from '@/hooks/useDropdown';
import { LocationHead } from '@/models/library'; import { LocationHead } from '@/models/library';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';
import { describeLocationHead, labelLocationHead } from '@/utils/labels'; import { describeLocationHead, labelLocationHead } from '@/utils/labels';

View File

@ -2,10 +2,8 @@
import { MatchModeIcon } from '@/components/DomainIcons'; import { MatchModeIcon } from '@/components/DomainIcons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import Dropdown from '@/components/ui/Dropdown'; import { SelectorButton } from '@/components/ui/Control';
import DropdownButton from '@/components/ui/DropdownButton'; import { Dropdown, DropdownButton, useDropdown } from '@/components/ui/Dropdown';
import SelectorButton from '@/components/ui/SelectorButton';
import useDropdown from '@/hooks/useDropdown';
import useWindowSize from '@/hooks/useWindowSize'; import useWindowSize from '@/hooks/useWindowSize';
import { CstMatchMode } from '@/models/miscellaneous'; import { CstMatchMode } from '@/models/miscellaneous';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';

View File

@ -1,5 +1,5 @@
import { CProps } from '@/components/props'; 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 { Grammeme } from '@/models/language';
import { getCompatibleGrams } from '@/models/languageAPI'; import { getCompatibleGrams } from '@/models/languageAPI';
import { compareGrammemeOptions, IGrammemeOption, SelectorGrammemes } from '@/utils/selectors'; import { compareGrammemeOptions, IGrammemeOption, SelectorGrammemes } from '@/utils/selectors';

View File

@ -3,7 +3,7 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import SelectSingle from '@/components/ui/SelectSingle'; import { SelectSingle } from '@/components/ui/Input';
import { IOperation, OperationID } from '@/models/oss'; import { IOperation, OperationID } from '@/models/oss';
import { matchOperation } from '@/models/ossAPI'; import { matchOperation } from '@/models/ossAPI';

View File

@ -5,7 +5,7 @@ import clsx from 'clsx';
import { useLabelUser } from '@/backend/users/useLabelUser'; import { useLabelUser } from '@/backend/users/useLabelUser';
import { useUsers } from '@/backend/users/useUsers'; import { useUsers } from '@/backend/users/useUsers';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import SelectSingle from '@/components/ui/SelectSingle'; import { SelectSingle } from '@/components/ui/Input';
import { UserID } from '@/models/user'; import { UserID } from '@/models/user';
import { matchUser } from '@/models/userAPI'; import { matchUser } from '@/models/userAPI';

View File

@ -3,7 +3,7 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import SelectSingle from '@/components/ui/SelectSingle'; import { SelectSingle } from '@/components/ui/Input';
import { IVersionInfo, VersionID } from '@/models/library'; import { IVersionInfo, VersionID } from '@/models/library';
import { labelVersion } from '@/utils/labels'; import { labelVersion } from '@/utils/labels';

View File

@ -12,7 +12,7 @@ import {
IconReset IconReset
} from '@/components/Icons'; } from '@/components/Icons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import MiniButton from '@/components/ui/MiniButton'; import { MiniButton } from '@/components/ui/Control';
import { Graph } from '@/models/Graph'; import { Graph } from '@/models/Graph';
interface ToolbarGraphSelectionProps extends CProps.Styling { interface ToolbarGraphSelectionProps extends CProps.Styling {

View File

@ -2,7 +2,7 @@ import clsx from 'clsx';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
export interface DividerProps extends CProps.Styling { interface DividerProps extends CProps.Styling {
/** Indicates whether the divider is vertical. */ /** Indicates whether the divider is vertical. */
vertical?: boolean; vertical?: boolean;
@ -13,7 +13,7 @@ export interface DividerProps extends CProps.Styling {
/** /**
* Horizontal or vertical divider with customizable margins and 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 ( return (
<div <div
className={clsx( className={clsx(
@ -28,5 +28,3 @@ function Divider({ vertical, margins = 'mx-2', className, ...restProps }: Divide
/> />
); );
} }
export default Divider;

View File

@ -6,12 +6,10 @@ import { CProps } from '@/components/props';
* `flex` column container. * `flex` column container.
* This component is useful for creating vertical layouts with flexbox. * 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 ( return (
<div className={clsx('cc-column', className)} {...restProps}> <div className={clsx('cc-column', className)} {...restProps}>
{children} {children}
</div> </div>
); );
} }
export default FlexColumn;

View File

@ -16,7 +16,7 @@ interface OverlayProps extends CProps.Styling {
/** /**
* Displays a transparent overlay over the main content. * Displays a transparent overlay over the main content.
*/ */
function Overlay({ export function Overlay({
children, children,
className, className,
position = 'top-0 right-0', position = 'top-0 right-0',
@ -31,5 +31,3 @@ function Overlay({
</div> </div>
); );
} }
export default Overlay;

View File

@ -20,7 +20,7 @@ interface TooltipProps extends Omit<ITooltip, 'variant'> {
/** /**
* Displays content in a tooltip container. * Displays content in a tooltip container.
*/ */
function Tooltip({ export function Tooltip({
text, text,
children, children,
layer = 'z-tooltip', layer = 'z-tooltip',
@ -58,5 +58,3 @@ function Tooltip({
document.body document.body
); );
} }
export default Tooltip;

View File

@ -0,0 +1,4 @@
export { Divider } from './Divider';
export { FlexColumn } from './FlexColumn';
export { Overlay } from './Overlay';
export { type PlacesType, Tooltip } from './Tooltip';

View File

@ -20,7 +20,7 @@ interface ButtonProps extends CProps.Control, CProps.Colors, CProps.Button {
/** /**
* Customizable `button` with text, icon, tooltips and various styles. * Customizable `button` with text, icon, tooltips and various styles.
*/ */
function Button({ export function Button({
icon, icon,
text, text,
title, title,
@ -66,5 +66,3 @@ function Button({
</button> </button>
); );
} }
export default Button;

View File

@ -1,7 +1,7 @@
import { urls } from '@/app/urls'; import { urls } from '@/app/urls';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';
import TextURL from './TextURL'; import { TextURL } from './TextURL';
interface TextURLProps { interface TextURLProps {
/** Text to display. */ /** Text to display. */
@ -13,8 +13,6 @@ interface TextURLProps {
/** /**
* Displays a link to a help topic. * Displays a link to a help topic.
*/ */
function LinkTopic({ text, topic }: TextURLProps) { export function LinkTopic({ text, topic }: TextURLProps) {
return <TextURL text={text} href={urls.help_topic(topic)} />; return <TextURL text={text} href={urls.help_topic(topic)} />;
} }
export default LinkTopic;

View File

@ -17,7 +17,7 @@ interface MiniButtonProps extends CProps.Button {
/** /**
* Displays small transparent button with an icon. * Displays small transparent button with an icon.
*/ */
function MiniButton({ export function MiniButton({
icon, icon,
noHover, noHover,
noPadding, noPadding,
@ -53,5 +53,3 @@ function MiniButton({
</button> </button>
); );
} }
export default MiniButton;

View File

@ -20,7 +20,7 @@ interface SelectorButtonProps extends CProps.Button {
/** /**
* Displays a button with an icon and text that opens a dropdown menu. * Displays a button with an icon and text that opens a dropdown menu.
*/ */
function SelectorButton({ export function SelectorButton({
text, text,
icon, icon,
title, title,
@ -59,5 +59,3 @@ function SelectorButton({
</button> </button>
); );
} }
export default SelectorButton;

View File

@ -16,7 +16,7 @@ interface SubmitButtonProps extends CProps.Button {
/** /**
* Displays submit type button with icon and text. * 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 ( return (
<button <button
type='submit' type='submit'
@ -37,5 +37,3 @@ function SubmitButton({ text = 'ОК', icon, disabled, loading, className, ...re
</button> </button>
); );
} }
export default SubmitButton;

View File

@ -20,7 +20,7 @@ interface TextURLProps {
/** /**
* Displays a text with a clickable link. * Displays a text with a clickable link.
*/ */
function TextURL({ text, href, title, color = 'text-sec-600', onClick }: TextURLProps) { export function TextURL({ text, href, title, color = 'text-sec-600', onClick }: TextURLProps) {
const design = `cursor-pointer hover:underline ${color}`; const design = `cursor-pointer hover:underline ${color}`;
if (href) { if (href) {
return ( return (
@ -39,4 +39,3 @@ function TextURL({ text, href, title, color = 'text-sec-600', onClick }: TextURL
} }
} }
export default TextURL;

View File

@ -0,0 +1,6 @@
export { Button } from './Button';
export { LinkTopic } from './LinkTopic';
export { MiniButton } from './MiniButton';
export { SelectorButton } from './SelectorButton';
export { SubmitButton } from './SubmitButton';
export { TextURL } from './TextURL';

View File

@ -2,7 +2,7 @@
import { Table } from '@tanstack/react-table'; import { Table } from '@tanstack/react-table';
import CheckboxTristate from '@/components/ui/CheckboxTristate'; import { CheckboxTristate } from '@/components/ui/Input';
interface SelectAllProps<TData> { interface SelectAllProps<TData> {
table: Table<TData>; table: Table<TData>;

View File

@ -2,7 +2,7 @@
import { Row } from '@tanstack/react-table'; import { Row } from '@tanstack/react-table';
import Checkbox from '@/components/ui/Checkbox'; import { Checkbox } from '@/components/ui/Input';
interface SelectRowProps<TData> { interface SelectRowProps<TData> {
row: Row<TData>; row: Row<TData>;

View File

@ -17,7 +17,7 @@ interface DropdownProps extends CProps.Styling {
/** /**
* Animated list of children with optional positioning and visibility control. * Animated list of children with optional positioning and visibility control.
*/ */
function Dropdown({ export function Dropdown({
isOpen, isOpen,
stretchLeft, stretchLeft,
stretchTop, stretchTop,
@ -59,5 +59,3 @@ function Dropdown({
</div> </div>
); );
} }
export default Dropdown;

View File

@ -18,7 +18,7 @@ interface DropdownButtonProps extends CProps.Button {
* `button` with optional text, icon, and click functionality styled for use in a {@link Dropdown}. * `button` with optional text, icon, and click functionality styled for use in a {@link Dropdown}.
* It supports optional children for custom content or the default text/icon display. * It supports optional children for custom content or the default text/icon display.
*/ */
function DropdownButton({ export function DropdownButton({
icon, icon,
text, text,
className, className,
@ -58,5 +58,3 @@ function DropdownButton({
</button> </button>
); );
} }
export default DropdownButton;

View File

@ -1,9 +1,9 @@
import clsx from 'clsx'; import clsx from 'clsx';
import Checkbox, { CheckboxProps } from './Checkbox'; import { Checkbox, CheckboxProps } from '../Input';
/** Animated {@link Checkbox} inside a {@link Dropdown} item. */ /** Animated {@link Checkbox} inside a {@link Dropdown} item. */
function DropdownCheckbox({ onChange: setValue, disabled, ...restProps }: CheckboxProps) { export function DropdownCheckbox({ onChange: setValue, disabled, ...restProps }: CheckboxProps) {
return ( return (
<div <div
className={clsx( className={clsx(
@ -17,5 +17,3 @@ function DropdownCheckbox({ onChange: setValue, disabled, ...restProps }: Checkb
</div> </div>
); );
} }
export default DropdownCheckbox;

View File

@ -0,0 +1,4 @@
export { Dropdown } from './Dropdown';
export { DropdownButton } from './DropdownButton';
export { DropdownCheckbox } from './DropdownCheckbox';
export { useDropdown } from './useDropdown';

View File

@ -2,9 +2,9 @@
import { useRef, useState } from 'react'; 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 [isOpen, setIsOpen] = useState(false);
const ref = useRef(null); const ref = useRef(null);
@ -18,5 +18,3 @@ function useDropdown() {
hide: () => setIsOpen(false) hide: () => setIsOpen(false)
}; };
} }
export default useDropdown;

View File

@ -21,7 +21,7 @@ export interface CheckboxProps extends Omit<CProps.Button, 'value' | 'onClick' |
/** /**
* Component that allows toggling a boolean value. * Component that allows toggling a boolean value.
*/ */
function Checkbox({ export function Checkbox({
disabled, disabled,
label, label,
title, title,
@ -79,5 +79,3 @@ function Checkbox({
</button> </button>
); );
} }
export default Checkbox;

View File

@ -17,7 +17,7 @@ export interface CheckboxTristateProps extends Omit<CheckboxProps, 'value' | 'on
/** /**
* Component that allows toggling among three states: `true`, `false`, and `null`. * Component that allows toggling among three states: `true`, `false`, and `null`.
*/ */
function CheckboxTristate({ export function CheckboxTristate({
disabled, disabled,
label, label,
title, title,
@ -82,5 +82,3 @@ function CheckboxTristate({
</button> </button>
); );
} }
export default CheckboxTristate;

View File

@ -1,7 +1,7 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { FieldError, GlobalError } from 'react-hook-form'; import { FieldError, GlobalError } from 'react-hook-form';
import { CProps } from '../props'; import { CProps } from '@/components/props';
interface ErrorFieldProps extends CProps.Styling { interface ErrorFieldProps extends CProps.Styling {
error?: FieldError | GlobalError; error?: FieldError | GlobalError;
@ -10,7 +10,7 @@ interface ErrorFieldProps extends CProps.Styling {
/** /**
* Displays an error message for input field. * 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) { if (!error) {
return null; return null;
} }
@ -20,5 +20,3 @@ function ErrorField({ error, className, ...restProps }: ErrorFieldProps): React.
</div> </div>
); );
} }
export default ErrorField;

View File

@ -6,8 +6,8 @@ import { useRef, useState } from 'react';
import { IconUpload } from '@/components/Icons'; import { IconUpload } from '@/components/Icons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import Button from './Button'; import { Button } from '../Control';
import Label from './Label'; import { Label } from './Label';
interface FileInputProps extends Omit<CProps.Input, 'accept' | 'type'> { interface FileInputProps extends Omit<CProps.Input, 'accept' | 'type'> {
/** Label to display in file upload button. */ /** Label to display in file upload button. */
@ -23,7 +23,7 @@ interface FileInputProps extends Omit<CProps.Input, 'accept' | 'type'> {
/** /**
* FileInput is a component for selecting a `file`, displaying the selected file name. * 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<HTMLInputElement | null>(null); const inputRef = useRef<HTMLInputElement | null>(null);
const [fileName, setFileName] = useState(''); const [fileName, setFileName] = useState('');
@ -56,5 +56,3 @@ function FileInput({ id, label, acceptType, title, className, style, onChange, .
</div> </div>
); );
} }
export default FileInput;

View File

@ -12,7 +12,7 @@ interface LabelProps extends CProps.Label {
* *
* Note: Html label component is used only if `htmlFor` prop is set. * 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) { if (!text) {
return null; return null;
} }
@ -30,5 +30,3 @@ function Label({ text, className, ...restProps }: LabelProps) {
); );
} }
} }
export default Label;

View File

@ -45,7 +45,7 @@ export interface SelectMultiProps<Option, Group extends GroupBase<Option> = Grou
/** /**
* Displays a multi-select component. * Displays a multi-select component.
*/ */
function SelectMulti<Option, Group extends GroupBase<Option> = GroupBase<Option>>({ export function SelectMulti<Option, Group extends GroupBase<Option> = GroupBase<Option>>({
noPortal, noPortal,
...restProps ...restProps
}: SelectMultiProps<Option, Group>) { }: SelectMultiProps<Option, Group>) {
@ -125,5 +125,3 @@ function SelectMulti<Option, Group extends GroupBase<Option> = GroupBase<Option>
/> />
); );
} }
export default SelectMulti;

View File

@ -46,7 +46,7 @@ export interface SelectSingleProps<Option, Group extends GroupBase<Option> = Gro
/** /**
* Displays a single-select component. * Displays a single-select component.
*/ */
function SelectSingle<Option, Group extends GroupBase<Option> = GroupBase<Option>>({ export function SelectSingle<Option, Group extends GroupBase<Option> = GroupBase<Option>>({
noPortal, noPortal,
noBorder, noBorder,
...restProps ...restProps
@ -123,5 +123,3 @@ function SelectSingle<Option, Group extends GroupBase<Option> = GroupBase<Option
/> />
); );
} }
export default SelectSingle;

View File

@ -5,8 +5,8 @@ import { IconDropArrow, IconPageRight } from '@/components/Icons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import { globals, PARAMETER } from '@/utils/constants'; import { globals, PARAMETER } from '@/utils/constants';
import MiniButton from './MiniButton'; import { Overlay } from '../Container';
import Overlay from './Overlay'; import { MiniButton } from '../Control';
interface SelectTreeProps<ItemType> extends CProps.Styling { interface SelectTreeProps<ItemType> extends CProps.Styling {
/** Current value. */ /** Current value. */
@ -34,7 +34,7 @@ interface SelectTreeProps<ItemType> extends CProps.Styling {
/** /**
* Displays a tree of items and allows user to select one. * Displays a tree of items and allows user to select one.
*/ */
function SelectTree<ItemType>({ export function SelectTree<ItemType>({
items, items,
value, value,
getParent, getParent,
@ -123,5 +123,3 @@ function SelectTree<ItemType>({
</div> </div>
); );
} }
export default SelectTree;

View File

@ -1,9 +1,9 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import { Label } from '@/components/ui/Input/Label';
import ErrorField from './ErrorField'; import { ErrorField } from './ErrorField';
import Label from './Label';
export interface TextAreaProps extends CProps.Editor, CProps.ErrorProcessing, CProps.Colors, CProps.TextArea { export interface TextAreaProps extends CProps.Editor, CProps.ErrorProcessing, CProps.Colors, CProps.TextArea {
/** Indicates that padding should be minimal. */ /** 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. * Displays a customizable textarea with a label.
*/ */
function TextArea({ export function TextArea({
id, id,
label, label,
required, required,
@ -71,5 +71,3 @@ function TextArea({
</div> </div>
); );
} }
export default TextArea;

View File

@ -1,9 +1,9 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import { Label } from '@/components/ui/Input/Label';
import ErrorField from './ErrorField'; import { ErrorField } from './ErrorField';
import Label from './Label';
interface TextInputProps extends CProps.Editor, CProps.ErrorProcessing, CProps.Colors, CProps.Input { interface TextInputProps extends CProps.Editor, CProps.ErrorProcessing, CProps.Colors, CProps.Input {
/** Indicates that padding should be minimal. */ /** Indicates that padding should be minimal. */
@ -22,7 +22,7 @@ function preventEnterCapture(event: React.KeyboardEvent<HTMLInputElement>) {
/** /**
* Displays a customizable input with a label. * Displays a customizable input with a label.
*/ */
function TextInput({ export function TextInput({
id, id,
label, label,
dense, dense,
@ -70,5 +70,3 @@ function TextInput({
</div> </div>
); );
} }
export default TextInput;

View File

@ -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';

View File

@ -5,15 +5,13 @@ import clsx from 'clsx';
import { IconClose } from '@/components/Icons'; import { IconClose } from '@/components/Icons';
import BadgeHelp from '@/components/info/BadgeHelp'; import BadgeHelp from '@/components/info/BadgeHelp';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import Button from '@/components/ui/Button';
import MiniButton from '@/components/ui/MiniButton';
import useEscapeKey from '@/hooks/useEscapeKey'; import useEscapeKey from '@/hooks/useEscapeKey';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';
import { useDialogsStore } from '@/stores/dialogs'; import { useDialogsStore } from '@/stores/dialogs';
import { PARAMETER } from '@/utils/constants'; import { PARAMETER } from '@/utils/constants';
import { prepareTooltip } from '@/utils/labels'; import { prepareTooltip } from '@/utils/labels';
import SubmitButton from '../SubmitButton'; import { Button, MiniButton, SubmitButton } from '../Control';
import { ModalBackdrop } from './ModalBackdrop'; import { ModalBackdrop } from './ModalBackdrop';
export interface ModalProps extends CProps.Styling { export interface ModalProps extends CProps.Styling {

View File

@ -4,13 +4,12 @@ import clsx from 'clsx';
import { IconClose } from '@/components/Icons'; import { IconClose } from '@/components/Icons';
import BadgeHelp from '@/components/info/BadgeHelp'; import BadgeHelp from '@/components/info/BadgeHelp';
import Button from '@/components/ui/Button';
import MiniButton from '@/components/ui/MiniButton';
import useEscapeKey from '@/hooks/useEscapeKey'; import useEscapeKey from '@/hooks/useEscapeKey';
import { useDialogsStore } from '@/stores/dialogs'; import { useDialogsStore } from '@/stores/dialogs';
import { PARAMETER } from '@/utils/constants'; import { PARAMETER } from '@/utils/constants';
import { prepareTooltip } from '@/utils/labels'; import { prepareTooltip } from '@/utils/labels';
import { Button, MiniButton } from '../Control';
import { ModalBackdrop } from './ModalBackdrop'; import { ModalBackdrop } from './ModalBackdrop';
import { ModalProps } from './ModalForm'; import { ModalProps } from './ModalForm';

View File

@ -1 +0,0 @@
export { default } from './PDFViewer';

View File

@ -3,8 +3,8 @@ import clsx from 'clsx';
import { IconSearch } from '@/components/Icons'; import { IconSearch } from '@/components/Icons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import Overlay from './Overlay'; import { Overlay } from './Container';
import TextInput from './TextInput'; import { TextInput } from './Input';
interface SearchBarProps extends CProps.Styling { interface SearchBarProps extends CProps.Styling {
/** Id of the search bar. */ /** 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. * Displays a search bar with a search icon and text input.
*/ */
function SearchBar({ export function SearchBar({
id, id,
query, query,
noIcon, noIcon,
@ -58,5 +58,3 @@ function SearchBar({
</div> </div>
); );
} }
export default SearchBar;

View File

@ -13,7 +13,7 @@ interface TabLabelProps extends Omit<TabPropsImpl, 'children'>, CProps.Titled {
/** /**
* Displays a tab header with a label. * 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 ( return (
<TabImpl <TabImpl
className={clsx( className={clsx(
@ -38,5 +38,3 @@ function TabLabel({ label, title, titleHtml, hideTitle, className, ...otherProps
} }
TabLabel.tabsRole = 'Tab'; TabLabel.tabsRole = 'Tab';
export default TabLabel;

View File

@ -0,0 +1,2 @@
export { TabLabel } from './TabLabel';
export { TabList, TabPanel, Tabs } from 'react-tabs';

View File

@ -12,7 +12,7 @@ interface EmbedYoutubeProps {
/** /**
* Embeds a YouTube video into the page using the given video ID and dimensions. * Embeds a YouTube video into the page using the given video ID and dimensions.
*/ */
function EmbedYoutube({ videoID, pxHeight, pxWidth }: EmbedYoutubeProps) { export function EmbedYoutube({ videoID, pxHeight, pxWidth }: EmbedYoutubeProps) {
if (!pxWidth) { if (!pxWidth) {
pxWidth = (pxHeight * 16) / 9; pxWidth = (pxHeight * 16) / 9;
} }
@ -41,5 +41,3 @@ function EmbedYoutube({ videoID, pxHeight, pxWidth }: EmbedYoutubeProps) {
</div> </div>
); );
} }
export default EmbedYoutube;

View File

@ -14,7 +14,7 @@ interface IndicatorProps extends CProps.Titled, CProps.Styling {
/** /**
* Displays a status `icon` with a tooltip. * 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 ( return (
<div <div
className={clsx( className={clsx(
@ -35,5 +35,3 @@ function Indicator({ icon, title, titleHtml, hideTitle, noPadding, className, ..
</div> </div>
); );
} }
export default Indicator;

View File

@ -5,12 +5,10 @@ import { CProps } from '@/components/props';
/** /**
* Wraps content in a div with a centered text. * 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 ( return (
<div className={clsx('p-3 flex flex-col items-center text-center select-none w-full', className)} {...restProps}> <div className={clsx('p-3 flex flex-col items-center text-center select-none w-full', className)} {...restProps}>
{children} {children}
</div> </div>
); );
} }
export default NoData;

View File

@ -23,7 +23,7 @@ interface PDFViewerProps {
/** /**
* Displays a PDF file using an embedded viewer. * 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 windowSize = useWindowSize();
const pageWidth = Math.max(minWidth, Math.min((windowSize?.width ?? 0) - (offsetXpx ?? 0) - 10, MAXIMUM_WIDTH)); 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 <embed src={`${file}#toolbar=0`} className='p-3' style={{ width: pageWidth, height: pageHeight }} />; return <embed src={`${file}#toolbar=0`} className='p-3' style={{ width: pageWidth, height: pageHeight }} />;
} }
export default PDFViewer;

View File

@ -5,9 +5,7 @@ interface PrettyJsonProps {
/** /**
* Displays JSON data in a formatted string. * Displays JSON data in a formatted string.
*/ */
function PrettyJson({ data }: PrettyJsonProps) { export function PrettyJson({ data }: PrettyJsonProps) {
const text = JSON.stringify(data, null, 2); const text = JSON.stringify(data, null, 2);
return <pre>{text === '{}' ? '' : text}</pre>; return <pre>{text === '{}' ? '' : text}</pre>;
} }
export default PrettyJson;

View File

@ -18,7 +18,7 @@ export interface TextContentProps extends CProps.Styling {
/** /**
* Displays text limited to a certain number of symbols. * 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 truncated = maxLength ? truncateToLastWord(text, maxLength) : text;
const isTruncated = maxLength && text.length > maxLength; const isTruncated = maxLength && text.length > maxLength;
return ( return (
@ -32,5 +32,3 @@ function TextContent({ className, text, maxLength, noTooltip, ...restProps }: Te
</div> </div>
); );
} }
export default TextContent;

View File

@ -3,7 +3,7 @@ import clsx from 'clsx';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import { globals } from '@/utils/constants'; import { globals } from '@/utils/constants';
import MiniButton from './MiniButton'; import { MiniButton } from '../Control';
interface ValueIconProps extends CProps.Styling, CProps.Titled { interface ValueIconProps extends CProps.Styling, CProps.Titled {
/** Id of the component. */ /** 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. * Displays a value with an icon that can be clicked.
*/ */
function ValueIcon({ export function ValueIcon({
id, id,
dense, dense,
icon, icon,
@ -73,5 +73,3 @@ function ValueIcon({
</div> </div>
); );
} }
export default ValueIcon;

View File

@ -19,7 +19,7 @@ interface ValueLabeledProps extends CProps.Styling {
/** /**
* Displays a labeled value. * Displays a labeled value.
*/ */
function ValueLabeled({ id, label, text, title, className, ...restProps }: ValueLabeledProps) { export function ValueLabeled({ id, label, text, title, className, ...restProps }: ValueLabeledProps) {
return ( return (
<div className={clsx('flex justify-between gap-6', className)} {...restProps}> <div className={clsx('flex justify-between gap-6', className)} {...restProps}>
<span title={title}>{label}</span> <span title={title}>{label}</span>
@ -27,5 +27,3 @@ function ValueLabeled({ id, label, text, title, className, ...restProps }: Value
</div> </div>
); );
} }
export default ValueLabeled;

View File

@ -1,7 +1,7 @@
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import { PARAMETER } from '@/utils/constants'; import { PARAMETER } from '@/utils/constants';
import ValueIcon from './ValueIcon'; import { ValueIcon } from './ValueIcon';
interface ValueStatsProps extends CProps.Styling, CProps.Titled { interface ValueStatsProps extends CProps.Styling, CProps.Titled {
/** Id of the component. */ /** Id of the component. */
@ -17,8 +17,6 @@ interface ValueStatsProps extends CProps.Styling, CProps.Titled {
/** /**
* Displays statistics value with an icon. * Displays statistics value with an icon.
*/ */
function ValueStats(props: ValueStatsProps) { export function ValueStats(props: ValueStatsProps) {
return <ValueIcon dense smallThreshold={PARAMETER.statSmallThreshold} textClassName='min-w-[1.4rem]' {...props} />; return <ValueIcon dense smallThreshold={PARAMETER.statSmallThreshold} textClassName='min-w-[1.4rem]' {...props} />;
} }
export default ValueStats;

View File

@ -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';

View File

@ -6,8 +6,8 @@ import { useState } from 'react';
import { useLibrary } from '@/backend/library/useLibrary'; import { useLibrary } from '@/backend/library/useLibrary';
import { IconReset } from '@/components/Icons'; import { IconReset } from '@/components/Icons';
import PickSchema from '@/components/select/PickSchema'; import PickSchema from '@/components/select/PickSchema';
import Label from '@/components/ui/Label'; import { MiniButton } from '@/components/ui/Control';
import MiniButton from '@/components/ui/MiniButton'; import { Label } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal'; import { ModalForm } from '@/components/ui/Modal';
import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/models/library'; import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/models/library';
import { IOperation, IOperationSchema, OperationID } from '@/models/oss'; import { IOperation, IOperationSchema, OperationID } from '@/models/oss';

View File

@ -6,9 +6,8 @@ import { useState } from 'react';
import { useAuthSuspense } from '@/backend/auth/useAuth'; import { useAuthSuspense } from '@/backend/auth/useAuth';
import SelectLocationContext from '@/components/select/SelectLocationContext'; import SelectLocationContext from '@/components/select/SelectLocationContext';
import SelectLocationHead from '@/components/select/SelectLocationHead'; 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 { ModalForm } from '@/components/ui/Modal';
import TextArea from '@/components/ui/TextArea';
import { LocationHead } from '@/models/library'; import { LocationHead } from '@/models/library';
import { combineLocation, validateLocation } from '@/models/libraryAPI'; import { combineLocation, validateLocation } from '@/models/libraryAPI';
import { useDialogsStore } from '@/stores/dialogs'; import { useDialogsStore } from '@/stores/dialogs';

View File

@ -12,12 +12,9 @@ import { VisibilityIcon } from '@/components/DomainIcons';
import SelectAccessPolicy from '@/components/select/SelectAccessPolicy'; import SelectAccessPolicy from '@/components/select/SelectAccessPolicy';
import SelectLocationContext from '@/components/select/SelectLocationContext'; import SelectLocationContext from '@/components/select/SelectLocationContext';
import SelectLocationHead from '@/components/select/SelectLocationHead'; import SelectLocationHead from '@/components/select/SelectLocationHead';
import Checkbox from '@/components/ui/Checkbox'; import { MiniButton } from '@/components/ui/Control';
import Label from '@/components/ui/Label'; import { Checkbox, Label, TextArea, TextInput } from '@/components/ui/Input';
import MiniButton from '@/components/ui/MiniButton';
import { ModalForm } from '@/components/ui/Modal'; 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 { AccessPolicy, ILibraryItem, LocationHead } from '@/models/library';
import { cloneTitle, combineLocation, validateLocation } from '@/models/libraryAPI'; import { cloneTitle, combineLocation, validateLocation } from '@/models/libraryAPI';
import { ConstituentaID } from '@/models/rsform'; import { ConstituentaID } from '@/models/rsform';

View File

@ -6,9 +6,7 @@ import { useEffect, useState } from 'react';
import { ICstCreateDTO } from '@/backend/rsform/api'; import { ICstCreateDTO } from '@/backend/rsform/api';
import BadgeHelp from '@/components/info/BadgeHelp'; import BadgeHelp from '@/components/info/BadgeHelp';
import RSInput from '@/components/RSInput'; import RSInput from '@/components/RSInput';
import SelectSingle from '@/components/ui/SelectSingle'; import { SelectSingle, TextArea, TextInput } from '@/components/ui/Input';
import TextArea from '@/components/ui/TextArea';
import TextInput from '@/components/ui/TextInput';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';
import { CstType, IRSForm } from '@/models/rsform'; import { CstType, IRSForm } from '@/models/rsform';
import { generateAlias, isBaseSet, isBasicConcept, isFunctional, validateNewAlias } from '@/models/rsformAPI'; import { generateAlias, isBaseSet, isBasicConcept, isFunctional, validateNewAlias } from '@/models/rsformAPI';

View File

@ -2,12 +2,11 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { TabList, TabPanel, Tabs } from 'react-tabs';
import { useLibrary } from '@/backend/library/useLibrary'; import { useLibrary } from '@/backend/library/useLibrary';
import { IOperationCreateDTO } from '@/backend/oss/api'; import { IOperationCreateDTO } from '@/backend/oss/api';
import { ModalForm } from '@/components/ui/Modal'; 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 { LibraryItemID } from '@/models/library';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';
import { IOperationSchema, OperationID, OperationType } from '@/models/oss'; import { IOperationSchema, OperationID, OperationType } from '@/models/oss';

View File

@ -5,11 +5,8 @@ import { useEffect } from 'react';
import { useLibrary } from '@/backend/library/useLibrary'; import { useLibrary } from '@/backend/library/useLibrary';
import { IconReset } from '@/components/Icons'; import { IconReset } from '@/components/Icons';
import PickSchema from '@/components/select/PickSchema'; import PickSchema from '@/components/select/PickSchema';
import Checkbox from '@/components/ui/Checkbox'; import { MiniButton } from '@/components/ui/Control';
import Label from '@/components/ui/Label'; import { Checkbox, Label, TextArea, TextInput } from '@/components/ui/Input';
import MiniButton from '@/components/ui/MiniButton';
import TextArea from '@/components/ui/TextArea';
import TextInput from '@/components/ui/TextInput';
import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/models/library'; import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/models/library';
import { IOperationSchema } from '@/models/oss'; import { IOperationSchema } from '@/models/oss';
import { sortItemsForOSS } from '@/models/ossAPI'; import { sortItemsForOSS } from '@/models/ossAPI';

View File

@ -1,8 +1,6 @@
import PickMultiOperation from '@/components/select/PickMultiOperation'; import PickMultiOperation from '@/components/select/PickMultiOperation';
import FlexColumn from '@/components/ui/FlexColumn'; import { FlexColumn } from '@/components/ui/Container';
import Label from '@/components/ui/Label'; import { Label, TextArea, TextInput } from '@/components/ui/Input';
import TextArea from '@/components/ui/TextArea';
import TextInput from '@/components/ui/TextInput';
import { IOperationSchema, OperationID } from '@/models/oss'; import { IOperationSchema, OperationID } from '@/models/oss';
interface TabSynthesisOperationProps { interface TabSynthesisOperationProps {

View File

@ -6,10 +6,8 @@ import { Controller, useForm, useWatch } from 'react-hook-form';
import { CreateVersionSchema, IVersionCreateDTO } from '@/backend/library/api'; import { CreateVersionSchema, IVersionCreateDTO } from '@/backend/library/api';
import { useVersionCreate } from '@/backend/library/useVersionCreate'; 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 { 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 { IVersionInfo, LibraryItemID, VersionID } from '@/models/library';
import { nextVersion } from '@/models/libraryAPI'; import { nextVersion } from '@/models/libraryAPI';
import { ConstituentaID } from '@/models/rsform'; import { ConstituentaID } from '@/models/rsform';

View File

@ -2,13 +2,12 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { Suspense, useEffect, useState } from 'react'; import { Suspense, useEffect, useState } from 'react';
import { TabList, TabPanel, Tabs } from 'react-tabs';
import { ICstCreateDTO } from '@/backend/rsform/api'; import { ICstCreateDTO } from '@/backend/rsform/api';
import { useRSForm } from '@/backend/rsform/useRSForm'; import { useRSForm } from '@/backend/rsform/useRSForm';
import Loader from '@/components/ui/Loader'; import Loader from '@/components/ui/Loader';
import { ModalForm } from '@/components/ui/Modal'; 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 FormCreateCst from '@/dialogs/DlgCreateCst/FormCreateCst';
import usePartialUpdate from '@/hooks/usePartialUpdate'; import usePartialUpdate from '@/hooks/usePartialUpdate';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';

View File

@ -7,9 +7,9 @@ import { useEffect, useState } from 'react';
import { IconAccept, IconRemove, IconReset } from '@/components/Icons'; import { IconAccept, IconRemove, IconReset } from '@/components/Icons';
import RSInput from '@/components/RSInput'; import RSInput from '@/components/RSInput';
import PickConstituenta from '@/components/select/PickConstituenta'; import PickConstituenta from '@/components/select/PickConstituenta';
import { MiniButton } from '@/components/ui/Control';
import DataTable, { IConditionalStyle } from '@/components/ui/DataTable'; import DataTable, { IConditionalStyle } from '@/components/ui/DataTable';
import MiniButton from '@/components/ui/MiniButton'; import { NoData } from '@/components/ui/View';
import NoData from '@/components/ui/NoData';
import { IConstituenta, IRSForm } from '@/models/rsform'; import { IConstituenta, IRSForm } from '@/models/rsform';
import { IArgumentValue } from '@/models/rslang'; import { IArgumentValue } from '@/models/rslang';
import { APP_COLORS } from '@/styling/color'; import { APP_COLORS } from '@/styling/color';

View File

@ -5,8 +5,7 @@ import { Dispatch, useEffect, useState } from 'react';
import { useTemplatesSuspense } from '@/backend/library/useTemplates'; import { useTemplatesSuspense } from '@/backend/library/useTemplates';
import RSInput from '@/components/RSInput'; import RSInput from '@/components/RSInput';
import PickConstituenta from '@/components/select/PickConstituenta'; import PickConstituenta from '@/components/select/PickConstituenta';
import SelectSingle from '@/components/ui/SelectSingle'; import { SelectSingle, TextArea } from '@/components/ui/Input';
import TextArea from '@/components/ui/TextArea';
import { CATEGORY_CST_TYPE, IConstituenta, IRSForm } from '@/models/rsform'; import { CATEGORY_CST_TYPE, IConstituenta, IRSForm } from '@/models/rsform';
import { applyFilterCategory } from '@/models/rsformAPI'; import { applyFilterCategory } from '@/models/rsformAPI';

View File

@ -3,7 +3,7 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { useState } from 'react'; import { useState } from 'react';
import Checkbox from '@/components/ui/Checkbox'; import { Checkbox } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal'; import { ModalForm } from '@/components/ui/Modal';
import { ConstituentaID, IRSForm } from '@/models/rsform'; import { ConstituentaID, IRSForm } from '@/models/rsform';
import { useDialogsStore } from '@/stores/dialogs'; import { useDialogsStore } from '@/stores/dialogs';

View File

@ -3,9 +3,8 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { useState } from 'react'; import { useState } from 'react';
import Checkbox from '@/components/ui/Checkbox'; import { Checkbox, TextInput } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal'; import { ModalForm } from '@/components/ui/Modal';
import TextInput from '@/components/ui/TextInput';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';
import { IOperation, OperationID } from '@/models/oss'; import { IOperation, OperationID } from '@/models/oss';
import { useDialogsStore } from '@/stores/dialogs'; import { useDialogsStore } from '@/stores/dialogs';

View File

@ -6,8 +6,8 @@ import { useState } from 'react';
import { useUsers } from '@/backend/users/useUsers'; import { useUsers } from '@/backend/users/useUsers';
import { IconRemove } from '@/components/Icons'; import { IconRemove } from '@/components/Icons';
import SelectUser from '@/components/select/SelectUser'; import SelectUser from '@/components/select/SelectUser';
import Label from '@/components/ui/Label'; import { MiniButton } from '@/components/ui/Control';
import MiniButton from '@/components/ui/MiniButton'; import { Label } from '@/components/ui/Input';
import { ModalForm } from '@/components/ui/Modal'; import { ModalForm } from '@/components/ui/Modal';
import { UserID } from '@/models/user'; import { UserID } from '@/models/user';
import { useDialogsStore } from '@/stores/dialogs'; import { useDialogsStore } from '@/stores/dialogs';

View File

@ -1,8 +1,8 @@
'use client'; 'use client';
import { IconRemove } from '@/components/Icons'; import { IconRemove } from '@/components/Icons';
import { MiniButton } from '@/components/ui/Control';
import DataTable, { createColumnHelper } from '@/components/ui/DataTable'; import DataTable, { createColumnHelper } from '@/components/ui/DataTable';
import MiniButton from '@/components/ui/MiniButton';
import { IUserInfo, UserID } from '@/models/user'; import { IUserInfo, UserID } from '@/models/user';
interface TableUsersProps { interface TableUsersProps {

View File

@ -2,12 +2,11 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { useCallback, useEffect, useState } from 'react'; import { useCallback, useEffect, useState } from 'react';
import { TabList, TabPanel, Tabs } from 'react-tabs';
import { IOperationUpdateDTO } from '@/backend/oss/api'; import { IOperationUpdateDTO } from '@/backend/oss/api';
import { useRSForms } from '@/backend/rsform/useRSForms'; import { useRSForms } from '@/backend/rsform/useRSForms';
import { ModalForm } from '@/components/ui/Modal'; 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 { LibraryItemID } from '@/models/library';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';
import { ICstSubstitute, IOperation, IOperationSchema, OperationID, OperationType } from '@/models/oss'; import { ICstSubstitute, IOperation, IOperationSchema, OperationID, OperationType } from '@/models/oss';

View File

@ -1,8 +1,8 @@
'use client'; 'use client';
import PickMultiOperation from '@/components/select/PickMultiOperation'; import PickMultiOperation from '@/components/select/PickMultiOperation';
import FlexColumn from '@/components/ui/FlexColumn'; import { FlexColumn } from '@/components/ui/Container';
import Label from '@/components/ui/Label'; import { Label } from '@/components/ui/Input';
import { IOperationSchema, OperationID } from '@/models/oss'; import { IOperationSchema, OperationID } from '@/models/oss';
interface TabArgumentsProps { interface TabArgumentsProps {

View File

@ -1,5 +1,4 @@
import TextArea from '@/components/ui/TextArea'; import { TextArea, TextInput } from '@/components/ui/Input';
import TextInput from '@/components/ui/TextInput';
interface TabOperationProps { interface TabOperationProps {
alias: string; alias: string;

View File

@ -1,5 +1,5 @@
import PickSubstitutions from '@/components/select/PickSubstitutions'; import PickSubstitutions from '@/components/select/PickSubstitutions';
import TextArea from '@/components/ui/TextArea'; import { TextArea } from '@/components/ui/Input';
import { ICstSubstitute } from '@/models/oss'; import { ICstSubstitute } from '@/models/oss';
import { IRSForm } from '@/models/rsform'; import { IRSForm } from '@/models/rsform';
import { APP_COLORS } from '@/styling/color'; import { APP_COLORS } from '@/styling/color';

View File

@ -2,10 +2,9 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { useState } from 'react'; import { useState } from 'react';
import { TabList, TabPanel, Tabs } from 'react-tabs';
import { ModalForm } from '@/components/ui/Modal'; 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 { ReferenceType } from '@/models/language';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';
import { IRSForm } from '@/models/rsform'; import { IRSForm } from '@/models/rsform';

Some files were not shown because too many files have changed in this diff Show More