@atme-lab/ui-kit 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/content/ArticlePreview/ArticlePreview.d.ts +13 -0
- package/dist/components/content/ArticlePreview/components/ArticlePreviewContent/ArticlePreviewContent.d.ts +14 -0
- package/dist/components/content/ArticlePreview/components/ArticlePreviewContent/index.d.ts +2 -0
- package/dist/components/content/ArticlePreview/components/index.d.ts +2 -0
- package/dist/components/content/ArticlePreview/index.d.ts +2 -0
- package/dist/components/content/index.d.ts +2 -0
- package/dist/components/index.d.ts +21 -0
- package/dist/components/layout/Grid/Grid.d.ts +21 -0
- package/dist/components/layout/Grid/index.d.ts +2 -0
- package/dist/components/layout/Island/Island.d.ts +13 -0
- package/dist/components/layout/Island/index.d.ts +2 -0
- package/dist/components/layout/Stack/Stack.d.ts +19 -0
- package/dist/components/layout/Stack/index.d.ts +2 -0
- package/dist/components/layout/WindowFrame/WindowFrame.d.ts +8 -0
- package/dist/components/layout/WindowFrame/components/ActionButton/ActionButton.d.ts +7 -0
- package/dist/components/layout/WindowFrame/components/ActionButton/index.d.ts +1 -0
- package/dist/components/layout/WindowFrame/components/TitleBar/TitleBar.d.ts +7 -0
- package/dist/components/layout/WindowFrame/components/TitleBar/index.d.ts +1 -0
- package/dist/components/layout/WindowFrame/components/index.d.ts +2 -0
- package/dist/components/layout/WindowFrame/index.d.ts +1 -0
- package/dist/components/navigation/SideMenu/SideMenu.d.ts +18 -0
- package/dist/components/navigation/SideMenu/SideMenuItem.d.ts +16 -0
- package/dist/components/navigation/SideMenu/index.d.ts +2 -0
- package/dist/components/navigation/index.d.ts +2 -0
- package/dist/components/primitives/Button/Button.d.ts +13 -0
- package/dist/components/primitives/Button/index.d.ts +2 -0
- package/dist/components/primitives/Icon/Icon.d.ts +9 -0
- package/dist/components/primitives/Icon/Icons/CloseIcon.d.ts +3 -0
- package/dist/components/primitives/Icon/Icons/DocumentIcon.d.ts +3 -0
- package/dist/components/primitives/Icon/Icons/FullscreenIcon.d.ts +3 -0
- package/dist/components/primitives/Icon/Icons/HeartIcon.d.ts +7 -0
- package/dist/components/primitives/Icon/Icons/HomeIcon.d.ts +3 -0
- package/dist/components/primitives/Icon/Icons/index.d.ts +6 -0
- package/dist/components/primitives/Icon/index.d.ts +2 -0
- package/dist/components/primitives/LabelMenuItem/LabelMenuItem.d.ts +11 -0
- package/dist/components/primitives/LabelMenuItem/index.d.ts +2 -0
- package/dist/components/primitives/LikeButton/LikeButton.d.ts +10 -0
- package/dist/components/primitives/LikeButton/index.d.ts +2 -0
- package/dist/components/primitives/Spacer/Spacer.d.ts +10 -0
- package/dist/components/primitives/Spacer/index.d.ts +0 -0
- package/dist/components/primitives/Tag/Tag.d.ts +16 -0
- package/dist/components/primitives/Tag/index.d.ts +2 -0
- package/dist/components/primitives/TagGroup/TagGroup.d.ts +15 -0
- package/dist/components/primitives/TagGroup/components/TagGroupItemButton.d.ts +6 -0
- package/dist/components/primitives/TagGroup/components/TagGroupItemView.d.ts +6 -0
- package/dist/components/primitives/TagGroup/components/index.d.ts +4 -0
- package/dist/components/primitives/TagGroup/index.d.ts +2 -0
- package/dist/components/primitives/TagGroup/types.d.ts +9 -0
- package/dist/components/primitives/Typography/Typography.d.ts +12 -0
- package/dist/components/primitives/Typography/index.d.ts +2 -0
- package/dist/components/types.d.ts +4 -0
- package/dist/global.cjs.js +2 -0
- package/dist/global.cjs.js.map +1 -0
- package/dist/global.d.ts +0 -0
- package/dist/global.esm.js +2 -0
- package/dist/global.esm.js.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/useExternalLink.d.ts +16 -0
- package/dist/hooks/useMenuItem.d.ts +25 -0
- package/dist/hooks/useMenuNavigation.d.ts +16 -0
- package/dist/hooks/useMouseScale.d.ts +22 -0
- package/dist/hooks/useRovingTabIndex.d.ts +20 -0
- package/dist/hooks/useTheme.d.ts +2 -0
- package/dist/index.d.ts +6 -0
- package/dist/styles/functions/spacing.d.ts +1 -0
- package/dist/test/setup.d.ts +0 -0
- package/dist/themes/ThemeProvider.d.ts +12 -0
- package/dist/themes/index.d.ts +3 -0
- package/dist/tokens/generate-css-vars.d.ts +2 -0
- package/dist/tokens/index.d.ts +4 -0
- package/dist/tokens/themes/baseTheme.d.ts +2 -0
- package/dist/tokens/themes/darkTheme.d.ts +57 -0
- package/dist/tokens/themes/index.d.ts +3 -0
- package/dist/tokens/themes/lightTheme.d.ts +53 -0
- package/dist/tokens/types.d.ts +125 -0
- package/dist/tokens/utils.d.ts +3 -0
- package/dist/typings/design.d.ts +1 -0
- package/dist/ui-kit.css +1 -1
- package/dist/utils/deepMerge.d.ts +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/navigation.d.ts +1 -0
- package/package.json +30 -27
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { BaseComponentProps } from '../../types';
|
|
3
|
+
export type ArticlePreviewView = 'tile' | 'row';
|
|
4
|
+
export interface ArticlePreviewProps extends BaseComponentProps, Omit<React.AnchorHTMLAttributes<HTMLAnchorElement> & React.HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
5
|
+
title: string;
|
|
6
|
+
publishedAt: Date | string;
|
|
7
|
+
imageUrl?: string;
|
|
8
|
+
view?: ArticlePreviewView;
|
|
9
|
+
imageAlt?: string;
|
|
10
|
+
href?: string;
|
|
11
|
+
tags?: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export declare const ArticlePreview: React.ForwardRefExoticComponent<ArticlePreviewProps & React.RefAttributes<HTMLAnchorElement | HTMLDivElement>>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export type ArticlePreviewContentView = 'tile' | 'row';
|
|
3
|
+
export interface ArticlePreviewContentProps {
|
|
4
|
+
title: string;
|
|
5
|
+
imageUrl?: string | undefined;
|
|
6
|
+
imageAlt: string;
|
|
7
|
+
formattedDate: string;
|
|
8
|
+
view: ArticlePreviewContentView;
|
|
9
|
+
tags?: React.ReactNode;
|
|
10
|
+
}
|
|
11
|
+
export declare function ArticlePreviewContent({ title, imageUrl, imageAlt, formattedDate, view, tags, }: ArticlePreviewContentProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare namespace ArticlePreviewContent {
|
|
13
|
+
var displayName: string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type { BaseComponentProps } from './types';
|
|
2
|
+
export { Typography } from './primitives/Typography';
|
|
3
|
+
export type { TypographyProps, TypographyVariant, TypographySize } from './primitives/Typography';
|
|
4
|
+
export { Tag } from './primitives/Tag';
|
|
5
|
+
export type { TagProps, TagVariant, TagSize } from './primitives/Tag';
|
|
6
|
+
export { TagGroup } from './primitives/TagGroup';
|
|
7
|
+
export type { TagGroupProps, TagGroupItem, TagGroupTag } from './primitives/TagGroup';
|
|
8
|
+
export { Button } from './primitives/Button';
|
|
9
|
+
export type { ButtonProps, ButtonVariant, ButtonSize } from './primitives/Button';
|
|
10
|
+
export { Icon } from './primitives/Icon';
|
|
11
|
+
export type { IconProps } from './primitives/Icon';
|
|
12
|
+
export { LabelMenuItem } from './primitives/LabelMenuItem';
|
|
13
|
+
export type { LabelMenuItemProps } from './primitives/LabelMenuItem';
|
|
14
|
+
export { LikeButton } from './primitives/LikeButton';
|
|
15
|
+
export type { LikeButtonProps } from './primitives/LikeButton';
|
|
16
|
+
export { Stack } from './layout/Stack';
|
|
17
|
+
export type { StackProps, StackDirection, StackAlign, StackJustify, StackWrap, StackGap } from './layout/Stack';
|
|
18
|
+
export { Grid } from './layout/Grid';
|
|
19
|
+
export type { GridProps, GridColumns, GridGap } from './layout/Grid';
|
|
20
|
+
export { ArticlePreview } from './content/ArticlePreview';
|
|
21
|
+
export type { ArticlePreviewProps, ArticlePreviewView } from './content/ArticlePreview';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { BaseComponentProps } from '../../types';
|
|
3
|
+
export type GridGap = number | string;
|
|
4
|
+
export type GridColumns = number | {
|
|
5
|
+
xs?: number;
|
|
6
|
+
sm?: number;
|
|
7
|
+
md?: number;
|
|
8
|
+
lg?: number;
|
|
9
|
+
xl?: number;
|
|
10
|
+
"2xl"?: number;
|
|
11
|
+
};
|
|
12
|
+
type GridElement = "div" | "section" | "article" | "main" | "header" | "footer" | "aside" | "nav";
|
|
13
|
+
export interface GridProps extends BaseComponentProps, Omit<React.HTMLAttributes<HTMLDivElement>, "ref"> {
|
|
14
|
+
columns?: GridColumns;
|
|
15
|
+
gap?: GridGap;
|
|
16
|
+
minColumnWidth?: string;
|
|
17
|
+
as?: GridElement;
|
|
18
|
+
children: React.ReactNode;
|
|
19
|
+
}
|
|
20
|
+
export declare const Grid: React.ForwardRefExoticComponent<GridProps & React.RefAttributes<HTMLDivElement>>;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseComponentProps } from '../../types';
|
|
2
|
+
import { FC, ReactNode } from 'react';
|
|
3
|
+
export type IslandSize = "sm" | "md" | "lg";
|
|
4
|
+
export type IslandVariant = "default" | "paper" | "accent";
|
|
5
|
+
export type IslandElevation = "none" | "sm" | "md" | "lg" | "xl";
|
|
6
|
+
export interface IslandProps extends BaseComponentProps {
|
|
7
|
+
children?: ReactNode;
|
|
8
|
+
size?: IslandSize;
|
|
9
|
+
variant?: IslandVariant;
|
|
10
|
+
elevation?: IslandElevation;
|
|
11
|
+
bordered?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare const Island: FC<IslandProps>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { BaseComponentProps } from '../../types';
|
|
3
|
+
export type StackDirection = "row" | "column" | "row-reverse" | "column-reverse";
|
|
4
|
+
export type StackAlign = "start" | "end" | "center" | "stretch" | "baseline";
|
|
5
|
+
export type StackJustify = "start" | "end" | "center" | "between" | "around" | "evenly";
|
|
6
|
+
export type StackWrap = "nowrap" | "wrap" | "wrap-reverse";
|
|
7
|
+
export type StackGap = number | string;
|
|
8
|
+
type StackElement = "div" | "section" | "article" | "main" | "header" | "footer" | "aside" | "nav";
|
|
9
|
+
export interface StackProps extends BaseComponentProps, Omit<React.HTMLAttributes<HTMLDivElement>, "ref"> {
|
|
10
|
+
direction?: StackDirection;
|
|
11
|
+
align?: StackAlign;
|
|
12
|
+
justify?: StackJustify;
|
|
13
|
+
wrap?: StackWrap;
|
|
14
|
+
gap?: StackGap;
|
|
15
|
+
as?: StackElement;
|
|
16
|
+
children: React.ReactNode;
|
|
17
|
+
}
|
|
18
|
+
export declare const Stack: React.ForwardRefExoticComponent<StackProps & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
|
+
import { BaseComponentProps } from '../../types';
|
|
3
|
+
export interface WindowFrameProps extends BaseComponentProps {
|
|
4
|
+
children?: ReactNode;
|
|
5
|
+
title?: string;
|
|
6
|
+
actions?: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare const WindowFrame: FC<WindowFrameProps>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BaseComponentProps } from '../../../../types';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
export interface ActionButtonProps extends BaseComponentProps, Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "children"> {
|
|
4
|
+
icon: ReactNode;
|
|
5
|
+
hint?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const ActionButton: import('react').ForwardRefExoticComponent<ActionButtonProps & import('react').RefAttributes<HTMLButtonElement>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ActionButton';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './TitleBar';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WindowFrame } from './WindowFrame';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { BaseComponentProps } from '../../types';
|
|
3
|
+
export interface SideMenuItem {
|
|
4
|
+
title: string;
|
|
5
|
+
path: string;
|
|
6
|
+
isOuterLink?: boolean;
|
|
7
|
+
Icon: React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
|
|
8
|
+
}
|
|
9
|
+
export interface SideMenuProps extends BaseComponentProps {
|
|
10
|
+
items: SideMenuItem[];
|
|
11
|
+
defaultItemSize?: number;
|
|
12
|
+
maxScale?: number;
|
|
13
|
+
showTitles?: boolean;
|
|
14
|
+
orientation?: "horizontal" | "vertical";
|
|
15
|
+
onItemClick?: (item: SideMenuItem, index: number) => void;
|
|
16
|
+
onNavigate?: (url: string) => void;
|
|
17
|
+
}
|
|
18
|
+
export declare const SideMenu: React.FC<SideMenuProps>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { SideMenuItem as SideMenuItemType } from './SideMenu';
|
|
3
|
+
export interface SideMenuItemProps {
|
|
4
|
+
item: SideMenuItemType;
|
|
5
|
+
index: number;
|
|
6
|
+
size: number;
|
|
7
|
+
showTitles: boolean;
|
|
8
|
+
orientation: "horizontal" | "vertical";
|
|
9
|
+
onItemClick?: (item: SideMenuItemType, index: number) => void;
|
|
10
|
+
onNavigate?: (url: string) => void;
|
|
11
|
+
onKeyDown?: (e: React.KeyboardEvent<HTMLElement>, index: number) => void;
|
|
12
|
+
tabIndex: number;
|
|
13
|
+
itemRef?: (el: HTMLLIElement | null) => void;
|
|
14
|
+
linkRef?: (el: HTMLAnchorElement | HTMLButtonElement | null) => void;
|
|
15
|
+
}
|
|
16
|
+
export declare const SideMenuItem: React.ForwardRefExoticComponent<SideMenuItemProps & React.RefAttributes<HTMLLIElement>>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export type ButtonVariant = "primary" | "secondary" | "outline" | "ghost";
|
|
3
|
+
export type ButtonSize = "sm" | "md" | "lg";
|
|
4
|
+
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
5
|
+
variant?: ButtonVariant;
|
|
6
|
+
size?: ButtonSize;
|
|
7
|
+
startIcon?: React.ReactNode;
|
|
8
|
+
endIcon?: React.ReactNode;
|
|
9
|
+
fullWidth?: boolean;
|
|
10
|
+
loading?: boolean;
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export interface IconProps extends React.SVGProps<SVGSVGElement> {
|
|
3
|
+
color?: string;
|
|
4
|
+
children?: React.ReactNode;
|
|
5
|
+
svg?: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
decorative?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const Icon: React.ForwardRefExoticComponent<Omit<IconProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { IconProps } from '../Icon';
|
|
3
|
+
export interface HeartIconProps extends Omit<IconProps, 'children' | 'svg'> {
|
|
4
|
+
/** Залитое сердечко (лайк поставлен) */
|
|
5
|
+
filled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const HeartIcon: React.FC<HeartIconProps>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { DocumentIcon } from './DocumentIcon';
|
|
2
|
+
export { CloseIcon } from './CloseIcon';
|
|
3
|
+
export { HomeIcon } from './HomeIcon';
|
|
4
|
+
export { FullscreenIcon } from './FullscreenIcon';
|
|
5
|
+
export { HeartIcon } from './HeartIcon';
|
|
6
|
+
export type { HeartIconProps } from './HeartIcon';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { IconProps } from '../Icon';
|
|
3
|
+
export interface LabelMenuItemProps {
|
|
4
|
+
label: string;
|
|
5
|
+
icon: React.ComponentType<Partial<IconProps>>;
|
|
6
|
+
onClick: () => void;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
iconSize?: string | number;
|
|
10
|
+
}
|
|
11
|
+
export declare const LabelMenuItem: React.FC<LabelMenuItemProps>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { BaseComponentProps } from '../../types';
|
|
3
|
+
export interface LikeButtonProps extends BaseComponentProps, Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onClick' | 'children'> {
|
|
4
|
+
liked?: boolean;
|
|
5
|
+
defaultLiked?: boolean;
|
|
6
|
+
count?: number;
|
|
7
|
+
onLike?: (liked: boolean) => void;
|
|
8
|
+
onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const LikeButton: React.ForwardRefExoticComponent<LikeButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseComponentProps } from '../../types';
|
|
2
|
+
import { FC } from 'react';
|
|
3
|
+
import { SpacingVariant } from '../../../typings/design';
|
|
4
|
+
export interface SpacerProps extends BaseComponentProps {
|
|
5
|
+
size?: SpacingVariant;
|
|
6
|
+
x?: SpacingVariant;
|
|
7
|
+
y?: SpacingVariant;
|
|
8
|
+
axis?: "x" | "y";
|
|
9
|
+
}
|
|
10
|
+
export declare const Spacer: FC<SpacerProps>;
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export type TagVariant = "primary" | "secondary" | "success" | "warning" | "error" | "neutral";
|
|
3
|
+
export type TagSize = "sm" | "md" | "lg";
|
|
4
|
+
export interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
5
|
+
variant?: TagVariant;
|
|
6
|
+
size?: TagSize;
|
|
7
|
+
icon?: React.ReactNode;
|
|
8
|
+
iconPosition?: "left" | "right";
|
|
9
|
+
closeable?: boolean;
|
|
10
|
+
onClose?: (event: React.MouseEvent<HTMLButtonElement>) => void;
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
href?: string;
|
|
13
|
+
}
|
|
14
|
+
type TagRootElement = HTMLAnchorElement | HTMLSpanElement;
|
|
15
|
+
export declare const Tag: React.ForwardRefExoticComponent<TagProps & React.RefAttributes<TagRootElement>>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { TagProps } from '../Tag';
|
|
3
|
+
import { TagGroupTag } from './types';
|
|
4
|
+
export type { TagGroupItem, TagGroupTag } from './types';
|
|
5
|
+
export { isTagGroupItem } from './types';
|
|
6
|
+
export interface TagGroupProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
7
|
+
tags: TagGroupTag[];
|
|
8
|
+
maxVisible?: number;
|
|
9
|
+
overflowTagProps?: Omit<TagProps, "children">;
|
|
10
|
+
collapseTagProps?: Omit<TagProps, "children">;
|
|
11
|
+
collapseText?: string;
|
|
12
|
+
size?: TagProps["size"];
|
|
13
|
+
variant?: TagProps["variant"];
|
|
14
|
+
}
|
|
15
|
+
export declare const TagGroup: React.ForwardRefExoticComponent<TagGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TagGroupItem, TagGroupBaseTagProps } from '../types';
|
|
2
|
+
export interface TagGroupItemButtonProps {
|
|
3
|
+
tag: TagGroupItem;
|
|
4
|
+
baseTagProps: TagGroupBaseTagProps;
|
|
5
|
+
}
|
|
6
|
+
export declare function TagGroupItemButton({ tag, baseTagProps }: TagGroupItemButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TagGroupTag, TagGroupBaseTagProps } from '../types';
|
|
2
|
+
export interface TagGroupItemViewProps {
|
|
3
|
+
tag: TagGroupTag;
|
|
4
|
+
baseTagProps: TagGroupBaseTagProps;
|
|
5
|
+
}
|
|
6
|
+
export declare function TagGroupItemView({ tag, baseTagProps }: TagGroupItemViewProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TagProps } from '../Tag';
|
|
2
|
+
export interface TagGroupItem {
|
|
3
|
+
label: React.ReactNode;
|
|
4
|
+
href?: string;
|
|
5
|
+
onClick?: (event: React.MouseEvent<HTMLElement>) => void;
|
|
6
|
+
}
|
|
7
|
+
export type TagGroupTag = React.ReactNode | TagGroupItem;
|
|
8
|
+
export declare function isTagGroupItem(tag: TagGroupTag): tag is TagGroupItem;
|
|
9
|
+
export type TagGroupBaseTagProps = Partial<Pick<TagProps, "size" | "variant">>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export type TypographyVariant = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "body" | "caption" | "overline";
|
|
3
|
+
export type TypographySize = "xs" | "sm" | "base" | "lg" | "xl" | "2xl" | "3xl" | "4xl";
|
|
4
|
+
export type TypographyColor = "primary" | "secondary" | "disabled";
|
|
5
|
+
export interface TypographyProps extends React.HTMLAttributes<HTMLElement> {
|
|
6
|
+
variant?: TypographyVariant;
|
|
7
|
+
size?: TypographySize;
|
|
8
|
+
color?: TypographyColor;
|
|
9
|
+
as?: React.ElementType;
|
|
10
|
+
children: React.ReactNode;
|
|
11
|
+
}
|
|
12
|
+
export declare const Typography: React.ForwardRefExoticComponent<TypographyProps & React.RefAttributes<HTMLElement>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/global.d.ts
ADDED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { useTheme } from './useTheme';
|
|
2
|
+
export { useMouseScale } from './useMouseScale';
|
|
3
|
+
export { useMenuNavigation } from './useMenuNavigation';
|
|
4
|
+
export { useRovingTabIndex } from './useRovingTabIndex';
|
|
5
|
+
export { useExternalLink } from './useExternalLink';
|
|
6
|
+
export { useMenuItem } from './useMenuItem';
|
|
7
|
+
export type { UseMouseScaleOptions, UseMouseScaleReturn } from './useMouseScale';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface UseExternalLinkOptions {
|
|
2
|
+
onNavigate?: (url: string) => void;
|
|
3
|
+
}
|
|
4
|
+
export interface UseExternalLinkReturn {
|
|
5
|
+
openLink: (url: string) => void;
|
|
6
|
+
shouldUseButton: (isOuterLink?: boolean) => boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Хук для работы с внешними ссылками.
|
|
10
|
+
* Определяет, нужно ли использовать button вместо ссылки,
|
|
11
|
+
* и предоставляет функцию для открытия ссылок.
|
|
12
|
+
*
|
|
13
|
+
* @param options - Опции для настройки работы с ссылками
|
|
14
|
+
* @returns Утилиты для работы с внешними ссылками
|
|
15
|
+
*/
|
|
16
|
+
export declare function useExternalLink({ onNavigate, }?: UseExternalLinkOptions): UseExternalLinkReturn;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { SideMenuItem as SideMenuItemType } from '../components/navigation/SideMenu/SideMenu';
|
|
2
|
+
export interface UseMenuItemOptions {
|
|
3
|
+
item: SideMenuItemType;
|
|
4
|
+
index: number;
|
|
5
|
+
onItemClick?: ((item: SideMenuItemType, index: number) => void) | undefined;
|
|
6
|
+
onNavigate?: ((url: string) => void) | undefined;
|
|
7
|
+
}
|
|
8
|
+
export interface UseMenuItemReturn {
|
|
9
|
+
elementType: "button" | "a";
|
|
10
|
+
handleClick: (e: React.MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => void;
|
|
11
|
+
handleActivate: () => void;
|
|
12
|
+
linkProps: {
|
|
13
|
+
href?: string;
|
|
14
|
+
target?: string;
|
|
15
|
+
rel?: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Хук для определения логики элемента меню.
|
|
20
|
+
* Определяет тип элемента (button или a) и обрабатывает активацию.
|
|
21
|
+
*
|
|
22
|
+
* @param options - Опции для настройки элемента меню
|
|
23
|
+
* @returns Логика для элемента меню
|
|
24
|
+
*/
|
|
25
|
+
export declare function useMenuItem({ item, index, onItemClick, onNavigate, }: UseMenuItemOptions): UseMenuItemReturn;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface UseMenuNavigationOptions {
|
|
2
|
+
itemsCount: number;
|
|
3
|
+
orientation: "horizontal" | "vertical";
|
|
4
|
+
onNavigate?: (index: number) => void;
|
|
5
|
+
}
|
|
6
|
+
export interface UseMenuNavigationReturn {
|
|
7
|
+
handleNavigationKeyDown: (e: React.KeyboardEvent, currentIndex: number) => number | null;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Хук для обработки навигации по меню с помощью клавиатуры.
|
|
11
|
+
* Поддерживает стрелки, Home, End с циклической навигацией.
|
|
12
|
+
*
|
|
13
|
+
* @param options - Опции для настройки навигации
|
|
14
|
+
* @returns Обработчик навигации по клавиатуре
|
|
15
|
+
*/
|
|
16
|
+
export declare function useMenuNavigation({ itemsCount, orientation, onNavigate, }: UseMenuNavigationOptions): UseMenuNavigationReturn;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
export interface UseMouseScaleOptions {
|
|
3
|
+
itemRefs: RefObject<(HTMLElement | null)[]>;
|
|
4
|
+
containerRef: RefObject<HTMLElement>;
|
|
5
|
+
defaultSize: number;
|
|
6
|
+
maxScale?: number;
|
|
7
|
+
orientation?: "horizontal" | "vertical";
|
|
8
|
+
animationClassName?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface UseMouseScaleReturn {
|
|
11
|
+
handleMouseEnter: () => void;
|
|
12
|
+
handleMouseMove: (e: React.MouseEvent<HTMLElement>) => void;
|
|
13
|
+
handleMouseLeave: () => void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Хук для создания интерактивного масштабирования элементов при движении мыши.
|
|
17
|
+
* Элементы увеличиваются пропорционально близости курсора к их центру.
|
|
18
|
+
*
|
|
19
|
+
* @param options - Опции для настройки масштабирования
|
|
20
|
+
* @returns Обработчики событий мыши для привязки к контейнеру
|
|
21
|
+
*/
|
|
22
|
+
export declare function useMouseScale({ itemRefs, containerRef, defaultSize, maxScale, orientation, animationClassName, }: UseMouseScaleOptions): UseMouseScaleReturn;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
export interface UseRovingTabIndexOptions {
|
|
3
|
+
itemsCount: number;
|
|
4
|
+
initialFocusedIndex?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface UseRovingTabIndexReturn {
|
|
7
|
+
focusedIndex: number | null;
|
|
8
|
+
setFocusedIndex: (index: number) => void;
|
|
9
|
+
getTabIndex: (index: number) => number;
|
|
10
|
+
focusItem: (index: number, refs: RefObject<(HTMLElement | null)[]>) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Хук для управления roving tabindex паттерном.
|
|
14
|
+
* Обеспечивает, что только один элемент в меню имеет tabIndex={0},
|
|
15
|
+
* остальные имеют tabIndex={-1}.
|
|
16
|
+
*
|
|
17
|
+
* @param options - Опции для настройки roving tabindex
|
|
18
|
+
* @returns Утилиты для управления фокусом
|
|
19
|
+
*/
|
|
20
|
+
export declare function useRovingTabIndex({ initialFocusedIndex, }: UseRovingTabIndexOptions): UseRovingTabIndexReturn;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './components';
|
|
2
|
+
export * from './themes';
|
|
3
|
+
export type { Theme, Palette, Spacing, Typography as TypographyTokens, Shadows, BorderRadius, Transitions, ZIndex, } from './tokens/types';
|
|
4
|
+
export { baseTheme, lightTheme, darkTheme } from './tokens/themes';
|
|
5
|
+
export { mergeTheme } from './tokens/utils';
|
|
6
|
+
export { themeToCssVars } from './tokens/generate-css-vars';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function spacing(multiplier: number): string;
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
|
+
import { Theme } from '../tokens';
|
|
3
|
+
interface ThemeContextValue {
|
|
4
|
+
theme: Theme;
|
|
5
|
+
}
|
|
6
|
+
export interface ThemeProviderProps {
|
|
7
|
+
theme?: Theme | Partial<Theme>;
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export declare const ThemeProvider: FC<ThemeProviderProps>;
|
|
11
|
+
export declare function useThemeContext(): ThemeContextValue;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type { Theme, Palette, Spacing, Typography, Shadows, BorderRadius, Transitions, ZIndex } from './types';
|
|
2
|
+
export { baseTheme, lightTheme, darkTheme } from './themes';
|
|
3
|
+
export { mergeTheme, getSpacingVar } from './utils';
|
|
4
|
+
export { themeToCssVars } from './generate-css-vars';
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Темная тема
|
|
3
|
+
* Расширяет базовую тему, добавляя темную цветовую палитру
|
|
4
|
+
*/
|
|
5
|
+
export declare const darkTheme: {
|
|
6
|
+
palette: {
|
|
7
|
+
primary: {
|
|
8
|
+
main: string;
|
|
9
|
+
hover: string;
|
|
10
|
+
active: string;
|
|
11
|
+
contrastText: string;
|
|
12
|
+
};
|
|
13
|
+
secondary: {
|
|
14
|
+
main: string;
|
|
15
|
+
hover: string;
|
|
16
|
+
active: string;
|
|
17
|
+
contrastText: string;
|
|
18
|
+
};
|
|
19
|
+
error: {
|
|
20
|
+
main: string;
|
|
21
|
+
hover: string;
|
|
22
|
+
active: string;
|
|
23
|
+
};
|
|
24
|
+
warning: {
|
|
25
|
+
main: string;
|
|
26
|
+
hover: string;
|
|
27
|
+
active: string;
|
|
28
|
+
};
|
|
29
|
+
success: {
|
|
30
|
+
main: string;
|
|
31
|
+
hover: string;
|
|
32
|
+
active: string;
|
|
33
|
+
};
|
|
34
|
+
text: {
|
|
35
|
+
primary: string;
|
|
36
|
+
secondary: string;
|
|
37
|
+
disabled: string;
|
|
38
|
+
};
|
|
39
|
+
background: {
|
|
40
|
+
default: string;
|
|
41
|
+
accent: string;
|
|
42
|
+
paper: string;
|
|
43
|
+
};
|
|
44
|
+
border: {
|
|
45
|
+
default: string;
|
|
46
|
+
subtle: string;
|
|
47
|
+
strong: string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
border: import('../types').Border;
|
|
51
|
+
typography: import('..').Typography;
|
|
52
|
+
spacing: import('..').Spacing;
|
|
53
|
+
shadows: import('..').Shadows;
|
|
54
|
+
borderRadius: import('..').BorderRadius;
|
|
55
|
+
transitions: import('..').Transitions;
|
|
56
|
+
zIndex: import('..').ZIndex;
|
|
57
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export declare const lightTheme: {
|
|
2
|
+
palette: {
|
|
3
|
+
primary: {
|
|
4
|
+
main: string;
|
|
5
|
+
hover: string;
|
|
6
|
+
active: string;
|
|
7
|
+
contrastText: string;
|
|
8
|
+
};
|
|
9
|
+
secondary: {
|
|
10
|
+
main: string;
|
|
11
|
+
hover: string;
|
|
12
|
+
active: string;
|
|
13
|
+
contrastText: string;
|
|
14
|
+
};
|
|
15
|
+
error: {
|
|
16
|
+
main: string;
|
|
17
|
+
hover: string;
|
|
18
|
+
active: string;
|
|
19
|
+
};
|
|
20
|
+
warning: {
|
|
21
|
+
main: string;
|
|
22
|
+
hover: string;
|
|
23
|
+
active: string;
|
|
24
|
+
};
|
|
25
|
+
success: {
|
|
26
|
+
main: string;
|
|
27
|
+
hover: string;
|
|
28
|
+
active: string;
|
|
29
|
+
};
|
|
30
|
+
text: {
|
|
31
|
+
primary: string;
|
|
32
|
+
secondary: string;
|
|
33
|
+
disabled: string;
|
|
34
|
+
};
|
|
35
|
+
background: {
|
|
36
|
+
default: string;
|
|
37
|
+
accent: string;
|
|
38
|
+
paper: string;
|
|
39
|
+
};
|
|
40
|
+
border: {
|
|
41
|
+
default: string;
|
|
42
|
+
subtle: string;
|
|
43
|
+
strong: string;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
border: import('../types').Border;
|
|
47
|
+
typography: import('..').Typography;
|
|
48
|
+
spacing: import('..').Spacing;
|
|
49
|
+
shadows: import('..').Shadows;
|
|
50
|
+
borderRadius: import('..').BorderRadius;
|
|
51
|
+
transitions: import('..').Transitions;
|
|
52
|
+
zIndex: import('..').ZIndex;
|
|
53
|
+
};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
export interface Palette {
|
|
2
|
+
primary: {
|
|
3
|
+
main: string;
|
|
4
|
+
hover: string;
|
|
5
|
+
active: string;
|
|
6
|
+
contrastText: string;
|
|
7
|
+
};
|
|
8
|
+
secondary: {
|
|
9
|
+
main: string;
|
|
10
|
+
hover: string;
|
|
11
|
+
active: string;
|
|
12
|
+
contrastText: string;
|
|
13
|
+
};
|
|
14
|
+
error: {
|
|
15
|
+
main: string;
|
|
16
|
+
hover: string;
|
|
17
|
+
active: string;
|
|
18
|
+
};
|
|
19
|
+
warning: {
|
|
20
|
+
main: string;
|
|
21
|
+
hover: string;
|
|
22
|
+
active: string;
|
|
23
|
+
};
|
|
24
|
+
success: {
|
|
25
|
+
main: string;
|
|
26
|
+
hover: string;
|
|
27
|
+
active: string;
|
|
28
|
+
};
|
|
29
|
+
text: {
|
|
30
|
+
primary: string;
|
|
31
|
+
secondary: string;
|
|
32
|
+
disabled: string;
|
|
33
|
+
};
|
|
34
|
+
background: {
|
|
35
|
+
default: string;
|
|
36
|
+
accent: string;
|
|
37
|
+
paper: string;
|
|
38
|
+
};
|
|
39
|
+
border: {
|
|
40
|
+
default: string;
|
|
41
|
+
subtle: string;
|
|
42
|
+
strong: string;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export interface Spacing {
|
|
46
|
+
unit: number;
|
|
47
|
+
}
|
|
48
|
+
export interface Typography {
|
|
49
|
+
fontFamily: string;
|
|
50
|
+
fontSize: {
|
|
51
|
+
xs: string;
|
|
52
|
+
sm: string;
|
|
53
|
+
base: string;
|
|
54
|
+
lg: string;
|
|
55
|
+
xl: string;
|
|
56
|
+
'2xl': string;
|
|
57
|
+
'3xl': string;
|
|
58
|
+
'4xl': string;
|
|
59
|
+
};
|
|
60
|
+
fontWeight: {
|
|
61
|
+
normal: number;
|
|
62
|
+
medium: number;
|
|
63
|
+
semibold: number;
|
|
64
|
+
bold: number;
|
|
65
|
+
};
|
|
66
|
+
lineHeight: {
|
|
67
|
+
tight: number;
|
|
68
|
+
normal: number;
|
|
69
|
+
relaxed: number;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export interface Shadows {
|
|
73
|
+
sm: string;
|
|
74
|
+
base: string;
|
|
75
|
+
md: string;
|
|
76
|
+
lg: string;
|
|
77
|
+
xl: string;
|
|
78
|
+
'2xl': string;
|
|
79
|
+
none: string;
|
|
80
|
+
}
|
|
81
|
+
export interface Border {
|
|
82
|
+
base: string;
|
|
83
|
+
}
|
|
84
|
+
export interface BorderRadius {
|
|
85
|
+
none: string;
|
|
86
|
+
round: string;
|
|
87
|
+
sm: string;
|
|
88
|
+
base: string;
|
|
89
|
+
md: string;
|
|
90
|
+
lg: string;
|
|
91
|
+
xl: string;
|
|
92
|
+
'2xl': string;
|
|
93
|
+
full: string;
|
|
94
|
+
}
|
|
95
|
+
export interface Transitions {
|
|
96
|
+
duration: {
|
|
97
|
+
fast: string;
|
|
98
|
+
base: string;
|
|
99
|
+
slow: string;
|
|
100
|
+
};
|
|
101
|
+
easing: {
|
|
102
|
+
easeInOut: string;
|
|
103
|
+
easeIn: string;
|
|
104
|
+
easeOut: string;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
export interface ZIndex {
|
|
108
|
+
dropdown: number;
|
|
109
|
+
sticky: number;
|
|
110
|
+
fixed: number;
|
|
111
|
+
modalBackdrop: number;
|
|
112
|
+
modal: number;
|
|
113
|
+
popover: number;
|
|
114
|
+
tooltip: number;
|
|
115
|
+
}
|
|
116
|
+
export interface Theme {
|
|
117
|
+
palette: Palette;
|
|
118
|
+
spacing: Spacing;
|
|
119
|
+
typography: Typography;
|
|
120
|
+
shadows: Shadows;
|
|
121
|
+
border: Border;
|
|
122
|
+
borderRadius: BorderRadius;
|
|
123
|
+
transitions: Transitions;
|
|
124
|
+
zIndex: ZIndex;
|
|
125
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type SpacingVariant = number;
|
package/dist/ui-kit.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
._typography_11hr8_1{font-family:var(--typography-font-family);margin:0;padding:0}._typography--h1_11hr8_8{font-size:var(--typography-font-size-4xl);font-weight:var(--typography-font-weight-bold);line-height:var(--typography-line-height-tight);color:var(--palette-text-primary)}._typography--h2_11hr8_15{font-size:var(--typography-font-size-3xl);font-weight:var(--typography-font-weight-bold);line-height:var(--typography-line-height-tight);color:var(--palette-text-primary)}._typography--h3_11hr8_22{font-size:var(--typography-font-size-2xl);font-weight:var(--typography-font-weight-semibold);line-height:var(--typography-line-height-normal);color:var(--palette-text-primary)}._typography--h4_11hr8_29{font-size:var(--typography-font-size-xl);font-weight:var(--typography-font-weight-semibold);line-height:var(--typography-line-height-normal);color:var(--palette-text-primary)}._typography--h5_11hr8_36{font-size:var(--typography-font-size-lg);font-weight:var(--typography-font-weight-medium);line-height:var(--typography-line-height-normal);color:var(--palette-text-primary)}._typography--h6_11hr8_43{font-size:var(--typography-font-size-base);font-weight:var(--typography-font-weight-medium);line-height:var(--typography-line-height-normal);color:var(--palette-text-primary)}._typography--body_11hr8_50{font-size:var(--typography-font-size-base);font-weight:var(--typography-font-weight-normal);line-height:var(--typography-line-height-normal);color:var(--palette-text-primary)}._typography--caption_11hr8_57{font-size:var(--typography-font-size-sm);font-weight:var(--typography-font-weight-normal);line-height:var(--typography-line-height-normal);color:var(--palette-text-secondary)}._typography--overline_11hr8_64{font-size:var(--typography-font-size-xs);font-weight:var(--typography-font-weight-medium);line-height:var(--typography-line-height-normal);color:var(--palette-text-secondary);text-transform:uppercase;letter-spacing:.05em}._typography--xs_11hr8_74{font-size:var(--typography-font-size-xs)}._typography--sm_11hr8_78{font-size:var(--typography-font-size-sm)}._typography--base_11hr8_82{font-size:var(--typography-font-size-base)}._typography--lg_11hr8_86{font-size:var(--typography-font-size-lg)}._typography--xl_11hr8_90{font-size:var(--typography-font-size-xl)}._typography--2xl_11hr8_94{font-size:var(--typography-font-size-2xl)}._typography--3xl_11hr8_98{font-size:var(--typography-font-size-3xl)}._typography--4xl_11hr8_102{font-size:var(--typography-font-size-4xl)}._typography--color-primary_11hr8_107{color:var(--palette-text-primary)}._typography--color-secondary_11hr8_111{color:var(--palette-text-secondary)}._typography--color-disabled_11hr8_115{color:var(--palette-text-disabled)}._tag_10ar5_1{display:inline-flex;align-items:center;gap:calc(var(--spacing-unit) * 1 * 1px);border-radius:var(--border-radius-base);border:2px solid var(--palette-border-strong);font-family:var(--typography-font-family);font-weight:var(--typography-font-weight-medium);line-height:1;white-space:nowrap}._tag--link_10ar5_13{text-decoration:none;color:inherit}._tag--link_10ar5_13:focus-visible{outline:2px solid var(--palette-primary-main);outline-offset:2px}._tagContent_10ar5_23{display:inline-flex;align-items:center}._tagIcon_10ar5_28{display:inline-flex;align-items:center;flex-shrink:0}._tagClose_10ar5_34{display:inline-flex;align-items:center;justify-content:center;margin-left:calc(var(--spacing-unit) * 1 * 1px);padding:0;background:none;border:none;cursor:pointer;font-size:1.2em;line-height:1;color:inherit;opacity:.7;transition:opacity var(--transitions-duration-base) var(--transitions-easing-easeInOut)}._tagClose_10ar5_34:hover{opacity:1}._tagClose_10ar5_34:focus{outline:2px solid currentColor;outline-offset:2px}._tag--sm_10ar5_60{padding:calc(var(--spacing-unit) * 1 * 1px) calc(var(--spacing-unit) * 2 * 1px);font-size:var(--typography-font-size-xs)}._tag--md_10ar5_65{padding:calc(var(--spacing-unit) * 1 * 1px) calc(var(--spacing-unit) * 3 * 1px);font-size:var(--typography-font-size-sm)}._tag--lg_10ar5_70{padding:calc(var(--spacing-unit) * 2 * 1px) calc(var(--spacing-unit) * 4 * 1px);font-size:var(--typography-font-size-base)}._tag--primary_10ar5_76{background-color:var(--palette-primary-main);color:var(--palette-secondary-contrastText)}._tag--secondary_10ar5_81{background-color:var(--palette-secondary-main);color:var(--palette-secondary-contrastText)}._tag--success_10ar5_86{background-color:var(--palette-success-main);color:#fff}._tag--warning_10ar5_91{background-color:var(--palette-warning-main);color:#fff}._tag--error_10ar5_96{background-color:var(--palette-error-main);color:#fff}._tag--neutral_10ar5_101{background-color:var(--palette-border-default);color:var(--palette-text-primary)}._tagGroup_1b8va_1{display:flex;flex-wrap:wrap;gap:calc(var(--spacing-unit) * 1 * 1px);align-items:center}._button_t5esz_1{display:inline-flex;align-items:center;justify-content:center;gap:calc(var(--spacing-unit) * 2 * 1px);border:1px solid transparent;border-radius:var(--border-radius-lg);font-family:var(--typography-font-family);font-weight:var(--typography-font-weight-medium);line-height:1;cursor:pointer;transition:all var(--transitions-duration-base) var(--transitions-easing-easeInOut);text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;box-shadow:var(--shadows-sm)}._button_t5esz_1:focus-visible{outline:2px solid var(--palette-primary-main);outline-offset:2px}._button_t5esz_1:disabled,._button_t5esz_1[aria-disabled=true]{cursor:not-allowed;opacity:.6;box-shadow:none}._buttonContent_t5esz_32{display:inline-flex;align-items:center}._buttonIcon_t5esz_37{display:inline-flex;align-items:center;flex-shrink:0}._buttonSpinner_t5esz_43{display:inline-block;width:1em;height:1em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:_spin_t5esz_1 .6s linear infinite}@keyframes _spin_t5esz_1{to{transform:rotate(360deg)}}._button--sm_t5esz_60{padding:calc(var(--spacing-unit) * 1.5 * 1px) calc(var(--spacing-unit) * 3.5 * 1px);font-size:var(--typography-font-size-sm);min-height:36px}._button--md_t5esz_66{padding:calc(var(--spacing-unit) * 2.5 * 1px) calc(var(--spacing-unit) * 5 * 1px);font-size:var(--typography-font-size-base);min-height:44px}._button--lg_t5esz_72{padding:calc(var(--spacing-unit) * 3 * 1px) calc(var(--spacing-unit) * 6 * 1px);font-size:var(--typography-font-size-lg);min-height:52px}._button--fullWidth_t5esz_78{width:100%}._button--primary_t5esz_83{background-color:var(--palette-primary-hover);color:var(--palette-text-primary);border-color:var(--palette-primary-hover);box-shadow:var(--shadows-sm)}._button--primary_t5esz_83:hover:not(:disabled):not([aria-disabled=true]){background-color:var(--palette-primary-main);border-color:var(--palette-primary-main);color:var(--palette-primary-contrast-text);box-shadow:var(--shadows-base);transform:translateY(-1px)}._button--primary_t5esz_83:active:not(:disabled):not([aria-disabled=true]){background-color:var(--palette-primary-active);border-color:var(--palette-primary-active);color:var(--palette-primary-contrast-text);box-shadow:var(--shadows-sm);transform:translateY(0)}._button--secondary_t5esz_106{background-color:var(--palette-background-paper);color:var(--palette-secondary-contrast-text);border-color:var(--palette-secondary-main);box-shadow:var(--shadows-sm)}._button--secondary_t5esz_106:hover:not(:disabled):not([aria-disabled=true]){background-color:var(--palette-secondary-hover);border-color:var(--palette-secondary-hover);color:var(--palette-secondary-contrast-text);box-shadow:var(--shadows-base);transform:translateY(-1px)}._button--secondary_t5esz_106:active:not(:disabled):not([aria-disabled=true]){background-color:var(--palette-secondary-active);border-color:var(--palette-secondary-active);color:var(--palette-secondary-contrast-text);box-shadow:var(--shadows-sm);transform:translateY(0)}._button--outline_t5esz_129{background-color:var(--palette-background-paper);color:var(--palette-primary-main);border-color:var(--palette-primary-main);box-shadow:var(--shadows-sm)}._button--outline_t5esz_129:hover:not(:disabled):not([aria-disabled=true]){background-color:var(--palette-primary-hover);color:var(--palette-text-secondary);border-color:var(--palette-primary-hover);box-shadow:var(--shadows-base);transform:translateY(-1px)}._button--outline_t5esz_129:active:not(:disabled):not([aria-disabled=true]){background-color:var(--palette-primary-active);color:var(--palette-primary-contrast-text);border-color:var(--palette-primary-active);box-shadow:var(--shadows-sm);transform:translateY(0)}._button--ghost_t5esz_152{background-color:transparent;color:var(--palette-primary-main);border-color:transparent;box-shadow:none}._button--ghost_t5esz_152:hover:not(:disabled):not([aria-disabled=true]){background-color:#0000000d;box-shadow:var(--shadows-sm)}._button--ghost_t5esz_152:active:not(:disabled):not([aria-disabled=true]){background-color:#0000001a;box-shadow:none}[data-color-scheme=dark] ._button--ghost_t5esz_152:hover:not(:disabled):not([aria-disabled=true]){background-color:#ffffff1a;box-shadow:var(--shadows-sm)}[data-color-scheme=dark] ._button--ghost_t5esz_152:active:not(:disabled):not([aria-disabled=true]){background-color:#fff3;box-shadow:none}._button--loading_t5esz_181{position:relative;color:transparent}._icon_1se7w_1{display:inline-block;flex-shrink:0;vertical-align:middle;color:currentColor;fill:currentColor}._icon--custom_1se7w_9{fill:unset}._labelMenuItem_fjxw4_1{display:flex;flex-direction:column;align-items:center;gap:calc(var(--spacing-unit) * 2 * 1px);padding:calc(var(--spacing-unit) * 3 * 1px);border:none;background:transparent;cursor:pointer;transition:all var(--transitions-duration-base) var(--transitions-easing-easeInOut)}._labelMenuItem_fjxw4_1:hover:not(:disabled){opacity:.8}._labelMenuItem_fjxw4_1:active:not(:disabled){opacity:.6}._labelMenuItem_fjxw4_1:disabled{cursor:not-allowed;opacity:.5}._labelMenuItem_fjxw4_1:focus-visible{outline:2px solid var(--palette-primary-main);outline-offset:2px;border-radius:var(--border-radius-md)}._icon_fjxw4_32{display:flex;align-items:center;justify-content:center}._label_fjxw4_1{text-align:center}._heartIconOutline_137aq_1{fill:none}._likeButton_1nv5d_1{display:inline-flex;align-items:center;justify-content:center;gap:calc(var(--spacing-unit) * 2 * 1px);padding:calc(var(--spacing-unit) * 1.5 * 1px) calc(var(--spacing-unit) * 2 * 1px);border:none;border-radius:var(--border-radius-full);background:transparent;color:var(--palette-text-secondary);cursor:pointer;font-family:var(--typography-font-family);transition:color var(--transitions-duration-base) var(--transitions-easing-easeInOut),transform var(--transitions-duration-base) var(--transitions-easing-easeOut),filter var(--transitions-duration-base) var(--transitions-easing-easeInOut)}._likeButton_1nv5d_1:hover:not(._likeButton--disabled_1nv5d_19){color:var(--palette-primary-main);transform:scale(1.08);filter:drop-shadow(0 0 6px var(--palette-primary-main))}._likeButton--liked_1nv5d_25{color:var(--palette-primary-main)}._likeButton--liked_1nv5d_25:hover:not(._likeButton--disabled_1nv5d_19){color:var(--palette-primary-hover);filter:drop-shadow(0 0 8px var(--palette-primary-hover))}._likeButton_1nv5d_1:active:not(._likeButton--disabled_1nv5d_19){transform:scale(.98)}._likeButton_1nv5d_1:focus-visible{outline:2px solid var(--palette-primary-main);outline-offset:2px}._likeButton--disabled_1nv5d_19{cursor:not-allowed;opacity:.5}._likeButton--pop_1nv5d_49 ._heartWrap_1nv5d_49{animation:_heartPop_1nv5d_1 .55s cubic-bezier(.34,1.56,.64,1)}@keyframes _heartPop_1nv5d_1{0%{transform:scale(1)}25%{transform:scale(1.45)}50%{transform:scale(.92)}70%{transform:scale(1.12)}85%{transform:scale(.98)}to{transform:scale(1)}}._likeButton--liked_1nv5d_25:hover:not(._likeButton--disabled_1nv5d_19) ._heartWrap_1nv5d_49{animation:_heartBeat_1nv5d_1 .6s ease-in-out}@keyframes _heartBeat_1nv5d_1{0%,to{transform:scale(1)}20%{transform:scale(1.15)}40%{transform:scale(.95)}60%{transform:scale(1.08)}80%{transform:scale(1)}}._heartWrap_1nv5d_49{display:inline-flex;align-items:center;justify-content:center;width:1.25em;height:1.25em}._heart_1nv5d_49{width:100%;height:100%;transition:color var(--transitions-duration-base) var(--transitions-easing-easeInOut)}._countWrap_1nv5d_112{display:inline-flex;align-items:center;justify-content:flex-start;min-width:1.5em}._countWrap--bump_1nv5d_119{animation:_countBump_1nv5d_1 .5s cubic-bezier(.34,1.56,.64,1)}@keyframes _countBump_1nv5d_1{0%{transform:scale(1) translateY(0)}30%{transform:scale(1.35) translateY(-4px)}55%{transform:scale(.95) translateY(1px)}75%{transform:scale(1.08) translateY(-1px)}to{transform:scale(1) translateY(0)}}._count_1nv5d_112{margin:0;text-align:left}._stack_45gcn_1{display:flex}._stack--direction-row_45gcn_6{flex-direction:row}._stack--direction-column_45gcn_10{flex-direction:column}._stack--direction-row-reverse_45gcn_14{flex-direction:row-reverse}._stack--direction-column-reverse_45gcn_18{flex-direction:column-reverse}._stack--align-start_45gcn_23{align-items:flex-start}._stack--align-end_45gcn_27{align-items:flex-end}._stack--align-center_45gcn_31{align-items:center}._stack--align-stretch_45gcn_35{align-items:stretch}._stack--align-baseline_45gcn_39{align-items:baseline}._stack--justify-start_45gcn_44{justify-content:flex-start}._stack--justify-end_45gcn_48{justify-content:flex-end}._stack--justify-center_45gcn_52{justify-content:center}._stack--justify-between_45gcn_56{justify-content:space-between}._stack--justify-around_45gcn_60{justify-content:space-around}._stack--justify-evenly_45gcn_64{justify-content:space-evenly}._stack--wrap-nowrap_45gcn_69{flex-wrap:nowrap}._stack--wrap-wrap_45gcn_73{flex-wrap:wrap}._stack--wrap-wrap-reverse_45gcn_77{flex-wrap:wrap-reverse}._grid_16nbv_1{display:grid}@media(min-width:640px){._grid_16nbv_1{grid-template-columns:repeat(var(--grid-cols-sm, var(--grid-cols-xs, 1)),1fr)}}@media(min-width:768px){._grid_16nbv_1{grid-template-columns:repeat(var(--grid-cols-md, var(--grid-cols-sm, var(--grid-cols-xs, 1))),1fr)}}@media(min-width:1024px){._grid_16nbv_1{grid-template-columns:repeat(var(--grid-cols-lg, var(--grid-cols-md, var(--grid-cols-sm, var(--grid-cols-xs, 1)))),1fr)}}@media(min-width:1280px){._grid_16nbv_1{grid-template-columns:repeat(var(--grid-cols-xl, var(--grid-cols-lg, var(--grid-cols-md, var(--grid-cols-sm, var(--grid-cols-xs, 1))))),1fr)}}@media(min-width:1536px){._grid_16nbv_1{grid-template-columns:repeat(var(--grid-cols-2xl, var(--grid-cols-xl, var(--grid-cols-lg, var(--grid-cols-md, var(--grid-cols-sm, var(--grid-cols-xs, 1)))))),1fr)}}._content_8ltuo_1{display:flex;flex-direction:column;width:100%}._content--tile_8ltuo_8 ._previewWrap_8ltuo_8{width:100%;aspect-ratio:16 / 10;flex-shrink:0}._content--tile_8ltuo_8 ._body_8ltuo_14{padding:calc(var(--spacing-unit) * 3 * 1px) calc(var(--spacing-unit) * 4 * 1px);display:flex;flex-direction:column;gap:calc(var(--spacing-unit) * 1 * 1px)}._content--row_8ltuo_22{flex-direction:row}._content--row_8ltuo_22 ._previewWrap_8ltuo_8{width:160px;min-width:160px;aspect-ratio:1;flex-shrink:0}._content--row_8ltuo_22 ._body_8ltuo_14{padding:calc(var(--spacing-unit) * 3 * 1px) calc(var(--spacing-unit) * 4 * 1px);display:flex;flex-direction:column;gap:calc(var(--spacing-unit) * 1 * 1px);min-width:0;flex:1}._previewWrap_8ltuo_8{position:relative;background-color:var(--palette-background-default);overflow:hidden}._tagsSlotTile_8ltuo_48{position:absolute;top:0;left:0;z-index:1;padding:calc(var(--spacing-unit) * 2 * 1px) calc(var(--spacing-unit) * 3 * 1px);display:flex;flex-wrap:wrap;gap:calc(var(--spacing-unit) * 1 * 1px);pointer-events:auto}._tagsSlotRow_8ltuo_60{display:flex;flex-wrap:wrap;gap:calc(var(--spacing-unit) * 1 * 1px);margin-bottom:calc(var(--spacing-unit) * 1 * 1px);pointer-events:auto}._previewImage_8ltuo_68{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;display:block;vertical-align:middle}._previewPlaceholder_8ltuo_76{width:100%;height:100%;min-height:120px;background-color:var(--palette-border-subtle);background-image:repeating-linear-gradient(-45deg,transparent,transparent 8px,var(--palette-background-paper) 8px,var(--palette-background-paper) 10px)}._title_8ltuo_90{color:var(--palette-text-secondary);overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-clamp:2;margin:0}._date_8ltuo_101{margin:0;flex-shrink:0}._root_19jmt_1{display:block;background-color:var(--palette-background-paper);border:var(--border-base) solid var(--palette-border-subtle);border-radius:var(--border-radius-lg);overflow:hidden;box-shadow:var(--shadows-sm);text-decoration:none;color:inherit;transition:transform var(--transitions-duration-slow) var(--transitions-easing-easeInOut),box-shadow var(--transitions-duration-slow) var(--transitions-easing-easeInOut),border-color var(--transitions-duration-slow) var(--transitions-easing-easeInOut),background-color var(--transitions-duration-slow) var(--transitions-easing-easeInOut)}._root--interactive_19jmt_17{cursor:pointer}._root--interactive_19jmt_17:hover{transform:translateY(-2px);box-shadow:var(--shadows-lg);border-color:var(--palette-border-default);background-color:var(--palette-background-default)}._root--interactive_19jmt_17:focus-visible{outline:2px solid var(--palette-primary-main);outline-offset:2px}._root--tile_19jmt_33{max-width:360px}._root--row_19jmt_37{max-width:100%}
|
|
1
|
+
._typography_11hr8_1{font-family:var(--typography-font-family);margin:0;padding:0}._typography--h1_11hr8_8{font-size:var(--typography-font-size-4xl);font-weight:var(--typography-font-weight-bold);line-height:var(--typography-line-height-tight);color:var(--palette-text-primary)}._typography--h2_11hr8_15{font-size:var(--typography-font-size-3xl);font-weight:var(--typography-font-weight-bold);line-height:var(--typography-line-height-tight);color:var(--palette-text-primary)}._typography--h3_11hr8_22{font-size:var(--typography-font-size-2xl);font-weight:var(--typography-font-weight-semibold);line-height:var(--typography-line-height-normal);color:var(--palette-text-primary)}._typography--h4_11hr8_29{font-size:var(--typography-font-size-xl);font-weight:var(--typography-font-weight-semibold);line-height:var(--typography-line-height-normal);color:var(--palette-text-primary)}._typography--h5_11hr8_36{font-size:var(--typography-font-size-lg);font-weight:var(--typography-font-weight-medium);line-height:var(--typography-line-height-normal);color:var(--palette-text-primary)}._typography--h6_11hr8_43{font-size:var(--typography-font-size-base);font-weight:var(--typography-font-weight-medium);line-height:var(--typography-line-height-normal);color:var(--palette-text-primary)}._typography--body_11hr8_50{font-size:var(--typography-font-size-base);font-weight:var(--typography-font-weight-normal);line-height:var(--typography-line-height-normal);color:var(--palette-text-primary)}._typography--caption_11hr8_57{font-size:var(--typography-font-size-sm);font-weight:var(--typography-font-weight-normal);line-height:var(--typography-line-height-normal);color:var(--palette-text-secondary)}._typography--overline_11hr8_64{font-size:var(--typography-font-size-xs);font-weight:var(--typography-font-weight-medium);line-height:var(--typography-line-height-normal);color:var(--palette-text-secondary);text-transform:uppercase;letter-spacing:.05em}._typography--xs_11hr8_74{font-size:var(--typography-font-size-xs)}._typography--sm_11hr8_78{font-size:var(--typography-font-size-sm)}._typography--base_11hr8_82{font-size:var(--typography-font-size-base)}._typography--lg_11hr8_86{font-size:var(--typography-font-size-lg)}._typography--xl_11hr8_90{font-size:var(--typography-font-size-xl)}._typography--2xl_11hr8_94{font-size:var(--typography-font-size-2xl)}._typography--3xl_11hr8_98{font-size:var(--typography-font-size-3xl)}._typography--4xl_11hr8_102{font-size:var(--typography-font-size-4xl)}._typography--color-primary_11hr8_107{color:var(--palette-text-primary)}._typography--color-secondary_11hr8_111{color:var(--palette-text-secondary)}._typography--color-disabled_11hr8_115{color:var(--palette-text-disabled)}._tag_10ar5_1{display:inline-flex;align-items:center;gap:calc(var(--spacing-unit) * 1 * 1px);border-radius:var(--border-radius-base);border:2px solid var(--palette-border-strong);font-family:var(--typography-font-family);font-weight:var(--typography-font-weight-medium);line-height:1;white-space:nowrap}._tag--link_10ar5_13{text-decoration:none;color:inherit}._tag--link_10ar5_13:focus-visible{outline:2px solid var(--palette-primary-main);outline-offset:2px}._tagContent_10ar5_23{display:inline-flex;align-items:center}._tagIcon_10ar5_28{display:inline-flex;align-items:center;flex-shrink:0}._tagClose_10ar5_34{display:inline-flex;align-items:center;justify-content:center;margin-left:calc(var(--spacing-unit) * 1 * 1px);padding:0;background:none;border:none;cursor:pointer;font-size:1.2em;line-height:1;color:inherit;opacity:.7;transition:opacity var(--transitions-duration-base) var(--transitions-easing-easeInOut)}._tagClose_10ar5_34:hover{opacity:1}._tagClose_10ar5_34:focus{outline:2px solid currentColor;outline-offset:2px}._tag--sm_10ar5_60{padding:calc(var(--spacing-unit) * 1 * 1px) calc(var(--spacing-unit) * 2 * 1px);font-size:var(--typography-font-size-xs)}._tag--md_10ar5_65{padding:calc(var(--spacing-unit) * 1 * 1px) calc(var(--spacing-unit) * 3 * 1px);font-size:var(--typography-font-size-sm)}._tag--lg_10ar5_70{padding:calc(var(--spacing-unit) * 2 * 1px) calc(var(--spacing-unit) * 4 * 1px);font-size:var(--typography-font-size-base)}._tag--primary_10ar5_76{background-color:var(--palette-primary-main);color:var(--palette-secondary-contrastText)}._tag--secondary_10ar5_81{background-color:var(--palette-secondary-main);color:var(--palette-secondary-contrastText)}._tag--success_10ar5_86{background-color:var(--palette-success-main);color:#fff}._tag--warning_10ar5_91{background-color:var(--palette-warning-main);color:#fff}._tag--error_10ar5_96{background-color:var(--palette-error-main);color:#fff}._tag--neutral_10ar5_101{background-color:var(--palette-border-default);color:var(--palette-text-primary)}._tagGroup_1b8va_1{display:flex;flex-wrap:wrap;gap:calc(var(--spacing-unit) * 1 * 1px);align-items:center}._button_t5esz_1{display:inline-flex;align-items:center;justify-content:center;gap:calc(var(--spacing-unit) * 2 * 1px);border:1px solid transparent;border-radius:var(--border-radius-lg);font-family:var(--typography-font-family);font-weight:var(--typography-font-weight-medium);line-height:1;cursor:pointer;transition:all var(--transitions-duration-base) var(--transitions-easing-easeInOut);text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;box-shadow:var(--shadows-sm)}._button_t5esz_1:focus-visible{outline:2px solid var(--palette-primary-main);outline-offset:2px}._button_t5esz_1:disabled,._button_t5esz_1[aria-disabled=true]{cursor:not-allowed;opacity:.6;box-shadow:none}._buttonContent_t5esz_32{display:inline-flex;align-items:center}._buttonIcon_t5esz_37{display:inline-flex;align-items:center;flex-shrink:0}._buttonSpinner_t5esz_43{display:inline-block;width:1em;height:1em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:_spin_t5esz_1 .6s linear infinite}@keyframes _spin_t5esz_1{to{transform:rotate(360deg)}}._button--sm_t5esz_60{padding:calc(var(--spacing-unit) * 1.5 * 1px) calc(var(--spacing-unit) * 3.5 * 1px);font-size:var(--typography-font-size-sm);min-height:36px}._button--md_t5esz_66{padding:calc(var(--spacing-unit) * 2.5 * 1px) calc(var(--spacing-unit) * 5 * 1px);font-size:var(--typography-font-size-base);min-height:44px}._button--lg_t5esz_72{padding:calc(var(--spacing-unit) * 3 * 1px) calc(var(--spacing-unit) * 6 * 1px);font-size:var(--typography-font-size-lg);min-height:52px}._button--fullWidth_t5esz_78{width:100%}._button--primary_t5esz_83{background-color:var(--palette-primary-hover);color:var(--palette-text-primary);border-color:var(--palette-primary-hover);box-shadow:var(--shadows-sm)}._button--primary_t5esz_83:hover:not(:disabled):not([aria-disabled=true]){background-color:var(--palette-primary-main);border-color:var(--palette-primary-main);color:var(--palette-primary-contrast-text);box-shadow:var(--shadows-base);transform:translateY(-1px)}._button--primary_t5esz_83:active:not(:disabled):not([aria-disabled=true]){background-color:var(--palette-primary-active);border-color:var(--palette-primary-active);color:var(--palette-primary-contrast-text);box-shadow:var(--shadows-sm);transform:translateY(0)}._button--secondary_t5esz_106{background-color:var(--palette-background-paper);color:var(--palette-secondary-contrast-text);border-color:var(--palette-secondary-main);box-shadow:var(--shadows-sm)}._button--secondary_t5esz_106:hover:not(:disabled):not([aria-disabled=true]){background-color:var(--palette-secondary-hover);border-color:var(--palette-secondary-hover);color:var(--palette-secondary-contrast-text);box-shadow:var(--shadows-base);transform:translateY(-1px)}._button--secondary_t5esz_106:active:not(:disabled):not([aria-disabled=true]){background-color:var(--palette-secondary-active);border-color:var(--palette-secondary-active);color:var(--palette-secondary-contrast-text);box-shadow:var(--shadows-sm);transform:translateY(0)}._button--outline_t5esz_129{background-color:var(--palette-background-paper);color:var(--palette-primary-main);border-color:var(--palette-primary-main);box-shadow:var(--shadows-sm)}._button--outline_t5esz_129:hover:not(:disabled):not([aria-disabled=true]){background-color:var(--palette-primary-hover);color:var(--palette-text-secondary);border-color:var(--palette-primary-hover);box-shadow:var(--shadows-base);transform:translateY(-1px)}._button--outline_t5esz_129:active:not(:disabled):not([aria-disabled=true]){background-color:var(--palette-primary-active);color:var(--palette-primary-contrast-text);border-color:var(--palette-primary-active);box-shadow:var(--shadows-sm);transform:translateY(0)}._button--ghost_t5esz_152{background-color:transparent;color:var(--palette-primary-main);border-color:transparent;box-shadow:none}._button--ghost_t5esz_152:hover:not(:disabled):not([aria-disabled=true]){background-color:#0000000d;box-shadow:var(--shadows-sm)}._button--ghost_t5esz_152:active:not(:disabled):not([aria-disabled=true]){background-color:#0000001a;box-shadow:none}[data-color-scheme=dark] ._button--ghost_t5esz_152:hover:not(:disabled):not([aria-disabled=true]){background-color:#ffffff1a;box-shadow:var(--shadows-sm)}[data-color-scheme=dark] ._button--ghost_t5esz_152:active:not(:disabled):not([aria-disabled=true]){background-color:#fff3;box-shadow:none}._button--loading_t5esz_181{position:relative;color:transparent}._icon_1se7w_1{display:inline-block;flex-shrink:0;vertical-align:middle;color:currentColor;fill:currentColor}._icon--custom_1se7w_9{fill:unset}._labelMenuItem_fjxw4_1{display:flex;flex-direction:column;align-items:center;gap:calc(var(--spacing-unit) * 2 * 1px);padding:calc(var(--spacing-unit) * 3 * 1px);border:none;background:transparent;cursor:pointer;transition:all var(--transitions-duration-base) var(--transitions-easing-easeInOut)}._labelMenuItem_fjxw4_1:hover:not(:disabled){opacity:.8}._labelMenuItem_fjxw4_1:active:not(:disabled){opacity:.6}._labelMenuItem_fjxw4_1:disabled{cursor:not-allowed;opacity:.5}._labelMenuItem_fjxw4_1:focus-visible{outline:2px solid var(--palette-primary-main);outline-offset:2px;border-radius:var(--border-radius-md)}._icon_fjxw4_32{display:flex;align-items:center;justify-content:center}._label_fjxw4_1{text-align:center}._heartIconOutline_137aq_1{fill:none}._likeButton_1nv5d_1{display:inline-flex;align-items:center;justify-content:center;gap:calc(var(--spacing-unit) * 2 * 1px);padding:calc(var(--spacing-unit) * 1.5 * 1px) calc(var(--spacing-unit) * 2 * 1px);border:none;border-radius:var(--border-radius-full);background:transparent;color:var(--palette-text-secondary);cursor:pointer;font-family:var(--typography-font-family);transition:color var(--transitions-duration-base) var(--transitions-easing-easeInOut),transform var(--transitions-duration-base) var(--transitions-easing-easeOut),filter var(--transitions-duration-base) var(--transitions-easing-easeInOut)}._likeButton_1nv5d_1:hover:not(._likeButton--disabled_1nv5d_19){color:var(--palette-primary-main);transform:scale(1.08);filter:drop-shadow(0 0 6px var(--palette-primary-main))}._likeButton--liked_1nv5d_25{color:var(--palette-primary-main)}._likeButton--liked_1nv5d_25:hover:not(._likeButton--disabled_1nv5d_19){color:var(--palette-primary-hover);filter:drop-shadow(0 0 8px var(--palette-primary-hover))}._likeButton_1nv5d_1:active:not(._likeButton--disabled_1nv5d_19){transform:scale(.98)}._likeButton_1nv5d_1:focus-visible{outline:2px solid var(--palette-primary-main);outline-offset:2px}._likeButton--disabled_1nv5d_19{cursor:not-allowed;opacity:.5}._likeButton--pop_1nv5d_49 ._heartWrap_1nv5d_49{animation:_heartPop_1nv5d_1 .55s cubic-bezier(.34,1.56,.64,1)}@keyframes _heartPop_1nv5d_1{0%{transform:scale(1)}25%{transform:scale(1.45)}50%{transform:scale(.92)}70%{transform:scale(1.12)}85%{transform:scale(.98)}to{transform:scale(1)}}._likeButton--liked_1nv5d_25:hover:not(._likeButton--disabled_1nv5d_19) ._heartWrap_1nv5d_49{animation:_heartBeat_1nv5d_1 .6s ease-in-out}@keyframes _heartBeat_1nv5d_1{0%,to{transform:scale(1)}20%{transform:scale(1.15)}40%{transform:scale(.95)}60%{transform:scale(1.08)}80%{transform:scale(1)}}._heartWrap_1nv5d_49{display:inline-flex;align-items:center;justify-content:center;width:1.25em;height:1.25em}._heart_1nv5d_49{width:100%;height:100%;transition:color var(--transitions-duration-base) var(--transitions-easing-easeInOut)}._countWrap_1nv5d_112{display:inline-flex;align-items:center;justify-content:flex-start;min-width:1.5em}._countWrap--bump_1nv5d_119{animation:_countBump_1nv5d_1 .5s cubic-bezier(.34,1.56,.64,1)}@keyframes _countBump_1nv5d_1{0%{transform:scale(1) translateY(0)}30%{transform:scale(1.35) translateY(-4px)}55%{transform:scale(.95) translateY(1px)}75%{transform:scale(1.08) translateY(-1px)}to{transform:scale(1) translateY(0)}}._count_1nv5d_112{margin:0;text-align:left}._stack_45gcn_1{display:flex}._stack--direction-row_45gcn_6{flex-direction:row}._stack--direction-column_45gcn_10{flex-direction:column}._stack--direction-row-reverse_45gcn_14{flex-direction:row-reverse}._stack--direction-column-reverse_45gcn_18{flex-direction:column-reverse}._stack--align-start_45gcn_23{align-items:flex-start}._stack--align-end_45gcn_27{align-items:flex-end}._stack--align-center_45gcn_31{align-items:center}._stack--align-stretch_45gcn_35{align-items:stretch}._stack--align-baseline_45gcn_39{align-items:baseline}._stack--justify-start_45gcn_44{justify-content:flex-start}._stack--justify-end_45gcn_48{justify-content:flex-end}._stack--justify-center_45gcn_52{justify-content:center}._stack--justify-between_45gcn_56{justify-content:space-between}._stack--justify-around_45gcn_60{justify-content:space-around}._stack--justify-evenly_45gcn_64{justify-content:space-evenly}._stack--wrap-nowrap_45gcn_69{flex-wrap:nowrap}._stack--wrap-wrap_45gcn_73{flex-wrap:wrap}._stack--wrap-wrap-reverse_45gcn_77{flex-wrap:wrap-reverse}._grid_16nbv_1{display:grid}@media(min-width:640px){._grid_16nbv_1{grid-template-columns:repeat(var(--grid-cols-sm, var(--grid-cols-xs, 1)),1fr)}}@media(min-width:768px){._grid_16nbv_1{grid-template-columns:repeat(var(--grid-cols-md, var(--grid-cols-sm, var(--grid-cols-xs, 1))),1fr)}}@media(min-width:1024px){._grid_16nbv_1{grid-template-columns:repeat(var(--grid-cols-lg, var(--grid-cols-md, var(--grid-cols-sm, var(--grid-cols-xs, 1)))),1fr)}}@media(min-width:1280px){._grid_16nbv_1{grid-template-columns:repeat(var(--grid-cols-xl, var(--grid-cols-lg, var(--grid-cols-md, var(--grid-cols-sm, var(--grid-cols-xs, 1))))),1fr)}}@media(min-width:1536px){._grid_16nbv_1{grid-template-columns:repeat(var(--grid-cols-2xl, var(--grid-cols-xl, var(--grid-cols-lg, var(--grid-cols-md, var(--grid-cols-sm, var(--grid-cols-xs, 1)))))),1fr)}}._content_8ltuo_1{display:flex;flex-direction:column;width:100%}._content--tile_8ltuo_8 ._previewWrap_8ltuo_8{width:100%;aspect-ratio:16 / 10;flex-shrink:0}._content--tile_8ltuo_8 ._body_8ltuo_14{padding:calc(var(--spacing-unit) * 3 * 1px) calc(var(--spacing-unit) * 4 * 1px);display:flex;flex-direction:column;gap:calc(var(--spacing-unit) * 1 * 1px)}._content--row_8ltuo_22{flex-direction:row}._content--row_8ltuo_22 ._previewWrap_8ltuo_8{width:160px;min-width:160px;aspect-ratio:1;flex-shrink:0}._content--row_8ltuo_22 ._body_8ltuo_14{padding:calc(var(--spacing-unit) * 3 * 1px) calc(var(--spacing-unit) * 4 * 1px);display:flex;flex-direction:column;gap:calc(var(--spacing-unit) * 1 * 1px);min-width:0;flex:1}._previewWrap_8ltuo_8{position:relative;background-color:var(--palette-background-default);overflow:hidden}._tagsSlotTile_8ltuo_48{position:absolute;top:0;left:0;z-index:1;padding:calc(var(--spacing-unit) * 2 * 1px) calc(var(--spacing-unit) * 3 * 1px);display:flex;flex-wrap:wrap;gap:calc(var(--spacing-unit) * 1 * 1px);pointer-events:auto}._tagsSlotRow_8ltuo_60{display:flex;flex-wrap:wrap;gap:calc(var(--spacing-unit) * 1 * 1px);margin-bottom:calc(var(--spacing-unit) * 1 * 1px);pointer-events:auto}._previewImage_8ltuo_68{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;display:block;vertical-align:middle}._previewPlaceholder_8ltuo_76{width:100%;height:100%;min-height:120px;background-color:var(--palette-border-subtle);background-image:repeating-linear-gradient(-45deg,transparent,transparent 8px,var(--palette-background-paper) 8px,var(--palette-background-paper) 10px)}._title_8ltuo_90{color:var(--palette-text-secondary);overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-clamp:2;margin:0}._date_8ltuo_101{margin:0;flex-shrink:0}._root_19jmt_1{display:block;background-color:var(--palette-background-paper);border:var(--border-base) solid var(--palette-border-subtle);border-radius:var(--border-radius-lg);overflow:hidden;box-shadow:var(--shadows-sm);text-decoration:none;color:inherit;transition:transform var(--transitions-duration-slow) var(--transitions-easing-easeInOut),box-shadow var(--transitions-duration-slow) var(--transitions-easing-easeInOut),border-color var(--transitions-duration-slow) var(--transitions-easing-easeInOut),background-color var(--transitions-duration-slow) var(--transitions-easing-easeInOut)}._root--interactive_19jmt_17{cursor:pointer}._root--interactive_19jmt_17:hover{transform:translateY(-2px);box-shadow:var(--shadows-lg);border-color:var(--palette-border-default);background-color:var(--palette-background-default)}._root--interactive_19jmt_17:focus-visible{outline:2px solid var(--palette-primary-main);outline-offset:2px}._root--tile_19jmt_33{max-width:360px}._root--row_19jmt_37{max-width:100%}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;line-height:1.5;color:var(--palette-text-primary, #171717);background-color:#fff}button{font-family:inherit;font-size:inherit;line-height:inherit;cursor:pointer}input,textarea,select{font-family:inherit;font-size:inherit;line-height:inherit}:focus-visible{outline:2px solid var(--palette-primary-main, #0ea5e9);outline-offset:2px}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.2}p{margin:0}a{color:inherit;text-decoration:none}img{max-width:100%;height:auto;display:block}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function deepMerge<T>(target: T, source: Partial<T>): T;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function openExternalLink(url: string, target?: string, features?: string): void;
|
package/package.json
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atme-lab/ui-kit",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"description": "Component library for personal projects",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "./dist/index.js",
|
|
6
|
+
"main": "./dist/index.cjs.js",
|
|
7
7
|
"module": "./dist/index.esm.js",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
9
|
"exports": {
|
|
10
10
|
".": {
|
|
11
11
|
"types": "./dist/index.d.ts",
|
|
12
12
|
"import": "./dist/index.esm.js",
|
|
13
|
-
"require": "./dist/index.js"
|
|
13
|
+
"require": "./dist/index.cjs.js"
|
|
14
14
|
},
|
|
15
15
|
"./global": {
|
|
16
16
|
"types": "./dist/global.d.ts",
|
|
17
17
|
"import": "./dist/global.esm.js",
|
|
18
|
-
"require": "./dist/global.js"
|
|
18
|
+
"require": "./dist/global.cjs.js"
|
|
19
19
|
},
|
|
20
20
|
"./tokens": {
|
|
21
21
|
"types": "./dist/tokens/index.d.ts",
|
|
@@ -25,6 +25,28 @@
|
|
|
25
25
|
"files": [
|
|
26
26
|
"dist"
|
|
27
27
|
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"prepare": "husky",
|
|
30
|
+
"prepublishOnly": "npm run build",
|
|
31
|
+
"dev": "vite --config .configs/vite.config.ts",
|
|
32
|
+
"build": "tsc && vite build --config .configs/vite.config.ts",
|
|
33
|
+
"type-check": "tsc --noEmit",
|
|
34
|
+
"test": "vitest --config .configs/vitest.config.ts",
|
|
35
|
+
"test:ui": "vitest --config .configs/vitest.config.ts --ui",
|
|
36
|
+
"test:coverage": "vitest --config .configs/vitest.config.ts --coverage",
|
|
37
|
+
"storybook": "storybook dev -p 6006",
|
|
38
|
+
"build-storybook": "storybook build",
|
|
39
|
+
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0 --config .configs/eslintrc.cjs",
|
|
40
|
+
"lint:fix": "eslint . --ext ts,tsx --fix --config .configs/eslintrc.cjs",
|
|
41
|
+
"format": "prettier --write --config .configs/prettierrc \"**/*.{ts,tsx,js,jsx,json,css,md}\" --ignore-path .prettierignore",
|
|
42
|
+
"format:check": "prettier --check --config .configs/prettierrc \"**/*.{ts,tsx,js,jsx,json,css,md}\" --ignore-path .prettierignore",
|
|
43
|
+
"stylelint": "stylelint --config .configs/stylelintrc.json \"**/*.{css,pcss}\"",
|
|
44
|
+
"stylelint:fix": "stylelint --config .configs/stylelintrc.json \"**/*.{css,pcss}\" --fix",
|
|
45
|
+
"commit": "cz",
|
|
46
|
+
"release": "standard-version",
|
|
47
|
+
"release:minor": "standard-version --release-as minor",
|
|
48
|
+
"release:major": "standard-version --release-as major"
|
|
49
|
+
},
|
|
28
50
|
"keywords": [
|
|
29
51
|
"react",
|
|
30
52
|
"ui",
|
|
@@ -88,30 +110,11 @@
|
|
|
88
110
|
"tsx": "^4.21.0",
|
|
89
111
|
"typescript": "^5.7.2",
|
|
90
112
|
"vite": "^6.0.5",
|
|
91
|
-
"
|
|
92
|
-
"vite-
|
|
113
|
+
"vite-aliases": "^0.11.8",
|
|
114
|
+
"vite-plugin-dts": "^4.5.4",
|
|
115
|
+
"vitest": "^4.0.16"
|
|
93
116
|
},
|
|
94
117
|
"dependencies": {
|
|
95
118
|
"classnames": "^2.5.1"
|
|
96
|
-
},
|
|
97
|
-
"scripts": {
|
|
98
|
-
"dev": "vite --config .configs/vite.config.ts",
|
|
99
|
-
"build": "tsc && vite build --config .configs/vite.config.ts",
|
|
100
|
-
"type-check": "tsc --noEmit",
|
|
101
|
-
"test": "vitest --config .configs/vitest.config.ts",
|
|
102
|
-
"test:ui": "vitest --config .configs/vitest.config.ts --ui",
|
|
103
|
-
"test:coverage": "vitest --config .configs/vitest.config.ts --coverage",
|
|
104
|
-
"storybook": "storybook dev -p 6006",
|
|
105
|
-
"build-storybook": "storybook build",
|
|
106
|
-
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0 --config .configs/eslintrc.cjs",
|
|
107
|
-
"lint:fix": "eslint . --ext ts,tsx --fix --config .configs/eslintrc.cjs",
|
|
108
|
-
"format": "prettier --write --config .configs/prettierrc \"**/*.{ts,tsx,js,jsx,json,css,md}\" --ignore-path .prettierignore",
|
|
109
|
-
"format:check": "prettier --check --config .configs/prettierrc \"**/*.{ts,tsx,js,jsx,json,css,md}\" --ignore-path .prettierignore",
|
|
110
|
-
"stylelint": "stylelint --config .configs/stylelintrc.json \"**/*.{css,pcss}\"",
|
|
111
|
-
"stylelint:fix": "stylelint --config .configs/stylelintrc.json \"**/*.{css,pcss}\" --fix",
|
|
112
|
-
"commit": "cz",
|
|
113
|
-
"release": "standard-version",
|
|
114
|
-
"release:minor": "standard-version --release-as minor",
|
|
115
|
-
"release:major": "standard-version --release-as major"
|
|
116
119
|
}
|
|
117
|
-
}
|
|
120
|
+
}
|