@de-kit/st-ui 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.
@@ -31,7 +31,8 @@ const renderContent = (children, loading) => {
31
31
  const Button = (0, react.forwardRef)(function Button(props, ref) {
32
32
  const { loading } = props;
33
33
  const className = getClassName(props);
34
- const { children, href, ...domProps } = omitStyleProps(props);
34
+ const { children, href, ref: propsRef, ...domProps } = omitStyleProps(props);
35
+ const nodeRef = ref ?? propsRef;
35
36
  const content = renderContent(children, loading);
36
37
  if (typeof href === "string") {
37
38
  const anchorProps = domProps;
@@ -40,7 +41,7 @@ const Button = (0, react.forwardRef)(function Button(props, ref) {
40
41
  };
41
42
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
42
43
  ...anchorProps,
43
- ref,
44
+ ref: nodeRef,
44
45
  className,
45
46
  "aria-busy": loading || void 0,
46
47
  "aria-disabled": loading || void 0,
@@ -52,7 +53,7 @@ const Button = (0, react.forwardRef)(function Button(props, ref) {
52
53
  const { type = "button", disabled, onClick, ...buttonProps } = domProps;
53
54
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
54
55
  ...buttonProps,
55
- ref,
56
+ ref: nodeRef,
56
57
  className,
57
58
  type,
58
59
  disabled: disabled || loading,
@@ -1 +1 @@
1
- {"version":3,"file":"button.cjs","names":["cn","when","IconSpinner","forwardRef"],"sources":["../../../src/components/button/button.tsx"],"sourcesContent":["import {\n forwardRef,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type ForwardedRef,\n type MouseEventHandler,\n type ReactElement,\n type ReactNode,\n type Ref,\n type RefAttributes,\n} from 'react';\n\nimport { IconSpinner } from '@/icons/icon-spinner';\nimport { cn, when } from '@/lib/cn';\nimport './button.scss';\n\nexport type ButtonVariant = 'default' | 'outline' | 'link';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\ninterface ButtonStyleProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n fullWidth?: boolean;\n loading?: boolean;\n className?: string;\n children?: ReactNode;\n}\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>, ButtonStyleProps {\n href?: undefined;\n}\n\nexport interface ButtonLinkProps\n extends\n Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>,\n ButtonStyleProps {\n href: string;\n}\n\nexport type ButtonComponentProps = ButtonProps | ButtonLinkProps;\n\ninterface ButtonComponent {\n (\n props: ButtonLinkProps & RefAttributes<HTMLAnchorElement>,\n ): ReactElement | null;\n (props: ButtonProps & RefAttributes<HTMLButtonElement>): ReactElement | null;\n}\n\nconst styleKeys = [\n 'variant',\n 'size',\n 'fullWidth',\n 'loading',\n 'className',\n] as const;\n\nconst getClassName = ({\n variant = 'default',\n size = 'md',\n fullWidth = false,\n loading = false,\n className,\n}: ButtonStyleProps) =>\n cn(\n 'button',\n className,\n when(variant !== 'default', `button--${variant}`),\n when(size !== 'md', `button--${size}`),\n when(fullWidth, 'button--full-width'),\n when(loading, 'button--loading'),\n );\n\nconst omitStyleProps = <T extends ButtonStyleProps>(\n props: T,\n): Omit<T, (typeof styleKeys)[number]> => {\n const next: Record<string, unknown> = {};\n const skipped = new Set<string>(styleKeys);\n\n for (const [key, value] of Object.entries(props)) {\n if (!skipped.has(key)) next[key] = value;\n }\n\n return next as Omit<T, (typeof styleKeys)[number]>;\n};\n\nconst renderContent = (children: ReactNode, loading?: boolean) => {\n if (!loading) return children;\n\n return (\n <>\n <span className=\"button__label\">{children}</span>\n <span className=\"button__spinner\">\n <IconSpinner className=\"button__icon--spin\" />\n </span>\n </>\n );\n};\n\n// forwardRef остаётся: в React 18 ref ещё не обычный проп, peer — ^18.3 || ^19.\nexport const Button = forwardRef(function Button(\n props: ButtonComponentProps,\n ref: ForwardedRef<HTMLButtonElement | HTMLAnchorElement>,\n) {\n const { loading } = props;\n const className = getClassName(props);\n const { children, href, ...domProps } = omitStyleProps(props);\n const content = renderContent(children, loading);\n\n if (typeof href === 'string') {\n const anchorProps = domProps as AnchorHTMLAttributes<HTMLAnchorElement>;\n const handleClick: MouseEventHandler<HTMLAnchorElement> = event => {\n event.preventDefault();\n };\n\n return (\n <a\n {...anchorProps}\n ref={ref as Ref<HTMLAnchorElement>}\n className={className}\n aria-busy={loading || undefined}\n // Ссылку нельзя выключить нативно: клик гасим, состояние объявляем.\n aria-disabled={loading || undefined}\n onClick={loading ? handleClick : anchorProps.onClick}\n href={href}\n >\n {content}\n </a>\n );\n }\n\n const {\n type = 'button',\n disabled,\n onClick,\n ...buttonProps\n } = domProps as ButtonHTMLAttributes<HTMLButtonElement>;\n\n return (\n <button\n {...buttonProps}\n ref={ref as Ref<HTMLButtonElement>}\n className={className}\n type={type}\n disabled={disabled || loading}\n onClick={onClick}\n aria-busy={loading || undefined}\n >\n {content}\n </button>\n );\n}) as ButtonComponent;\n"],"mappings":";;;;;;AAiDA,MAAM,YAAY;CAChB;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,gBAAgB,EACpB,UAAU,WACV,OAAO,MACP,YAAY,OACZ,UAAU,OACV,gBAEAA,WAAAA,GACE,UACA,WACAC,WAAAA,KAAK,YAAY,WAAW,WAAW,SAAS,GAChDA,WAAAA,KAAK,SAAS,MAAM,WAAW,MAAM,GACrCA,WAAAA,KAAK,WAAW,oBAAoB,GACpCA,WAAAA,KAAK,SAAS,iBAAiB,CACjC;AAEF,MAAM,kBACJ,UACwC;CACxC,MAAM,OAAgC,CAAC;CACvC,MAAM,UAAU,IAAI,IAAY,SAAS;CAEzC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,GAC7C,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,KAAK,OAAO;CAGrC,OAAO;AACT;AAEA,MAAM,iBAAiB,UAAqB,YAAsB;CAChE,IAAI,CAAC,SAAS,OAAO;CAErB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAAiB;CAAe,CAAA,GAChD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EACd,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,qBAAAA,aAAD,EAAa,WAAU,qBAAsB,CAAA;CACzC,CAAA,CACN,EAAA,CAAA;AAEN;AAGA,MAAa,UAAA,GAASC,MAAAA,WAAAA,CAAW,SAAS,OACxC,OACA,KACA;CACA,MAAM,EAAE,YAAY;CACpB,MAAM,YAAY,aAAa,KAAK;CACpC,MAAM,EAAE,UAAU,MAAM,GAAG,aAAa,eAAe,KAAK;CAC5D,MAAM,UAAU,cAAc,UAAU,OAAO;CAE/C,IAAI,OAAO,SAAS,UAAU;EAC5B,MAAM,cAAc;EACpB,MAAM,eAAoD,UAAS;GACjE,MAAM,eAAe;EACvB;EAEA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;GACE,GAAI;GACC;GACM;GACX,aAAW,WAAW,KAAA;GAEtB,iBAAe,WAAW,KAAA;GAC1B,SAAS,UAAU,cAAc,YAAY;GACvC;GAEL,UAAA;EACA,CAAA;CAEP;CAEA,MAAM,EACJ,OAAO,UACP,UACA,SACA,GAAG,gBACD;CAEJ,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EACE,GAAI;EACC;EACM;EACL;EACN,UAAU,YAAY;EACb;EACT,aAAW,WAAW,KAAA;EAErB,UAAA;CACK,CAAA;AAEZ,CAAC"}
1
+ {"version":3,"file":"button.cjs","names":["cn","when","IconSpinner","forwardRef"],"sources":["../../../src/components/button/button.tsx"],"sourcesContent":["import {\n forwardRef,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type ForwardedRef,\n type MouseEventHandler,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\n\nimport { IconSpinner } from '@/icons/icon-spinner';\nimport { cn, when } from '@/lib/cn';\nimport './button.scss';\n\nexport type ButtonVariant = 'default' | 'outline' | 'link' | 'image' | 'icon';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\ninterface ButtonStyleProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n fullWidth?: boolean;\n loading?: boolean;\n className?: string;\n children?: ReactNode;\n}\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>, ButtonStyleProps {\n href?: undefined;\n ref?: Ref<HTMLButtonElement> | ((element: HTMLElement | null) => void);\n}\n\nexport interface ButtonLinkProps\n extends\n Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>,\n ButtonStyleProps {\n href: string;\n ref?: Ref<HTMLAnchorElement> | ((element: HTMLElement | null) => void);\n}\n\nexport type ButtonComponentProps = ButtonProps | ButtonLinkProps;\n\ninterface ButtonComponent {\n (props: ButtonLinkProps): ReactElement | null;\n (props: ButtonProps): ReactElement | null;\n}\n\nconst styleKeys = [\n 'variant',\n 'size',\n 'fullWidth',\n 'loading',\n 'className',\n] as const;\n\nconst getClassName = ({\n variant = 'default',\n size = 'md',\n fullWidth = false,\n loading = false,\n className,\n}: ButtonStyleProps) =>\n cn(\n 'button',\n className,\n when(variant !== 'default', `button--${variant}`),\n when(size !== 'md', `button--${size}`),\n when(fullWidth, 'button--full-width'),\n when(loading, 'button--loading'),\n );\n\nconst omitStyleProps = <T extends ButtonStyleProps>(\n props: T,\n): Omit<T, (typeof styleKeys)[number]> => {\n const next: Record<string, unknown> = {};\n const skipped = new Set<string>(styleKeys);\n\n for (const [key, value] of Object.entries(props)) {\n if (!skipped.has(key)) next[key] = value;\n }\n\n return next as Omit<T, (typeof styleKeys)[number]>;\n};\n\nconst renderContent = (children: ReactNode, loading?: boolean) => {\n if (!loading) return children;\n\n return (\n <>\n <span className=\"button__label\">{children}</span>\n <span className=\"button__spinner\">\n <IconSpinner className=\"button__icon--spin\" />\n </span>\n </>\n );\n};\n\n// forwardRef остаётся: в React 18 ref ещё не обычный проп, peer — ^18.3 || ^19.\nexport const Button = forwardRef(function Button(\n props: ButtonComponentProps,\n ref: ForwardedRef<HTMLButtonElement | HTMLAnchorElement>,\n) {\n const { loading } = props;\n const className = getClassName(props);\n const { children, href, ref: propsRef, ...domProps } = omitStyleProps(props);\n const nodeRef = ref ?? propsRef;\n const content = renderContent(children, loading);\n\n if (typeof href === 'string') {\n const anchorProps = domProps as AnchorHTMLAttributes<HTMLAnchorElement>;\n const handleClick: MouseEventHandler<HTMLAnchorElement> = event => {\n event.preventDefault();\n };\n\n return (\n <a\n {...anchorProps}\n ref={nodeRef as Ref<HTMLAnchorElement>}\n className={className}\n aria-busy={loading || undefined}\n // Ссылку нельзя выключить нативно: клик гасим, состояние объявляем.\n aria-disabled={loading || undefined}\n onClick={loading ? handleClick : anchorProps.onClick}\n href={href}\n >\n {content}\n </a>\n );\n }\n\n const {\n type = 'button',\n disabled,\n onClick,\n ...buttonProps\n } = domProps as ButtonHTMLAttributes<HTMLButtonElement>;\n\n return (\n <button\n {...buttonProps}\n ref={nodeRef as Ref<HTMLButtonElement>}\n className={className}\n type={type}\n disabled={disabled || loading}\n onClick={onClick}\n aria-busy={loading || undefined}\n >\n {content}\n </button>\n );\n}) as ButtonComponent;\n"],"mappings":";;;;;;AAgDA,MAAM,YAAY;CAChB;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,gBAAgB,EACpB,UAAU,WACV,OAAO,MACP,YAAY,OACZ,UAAU,OACV,gBAEAA,WAAAA,GACE,UACA,WACAC,WAAAA,KAAK,YAAY,WAAW,WAAW,SAAS,GAChDA,WAAAA,KAAK,SAAS,MAAM,WAAW,MAAM,GACrCA,WAAAA,KAAK,WAAW,oBAAoB,GACpCA,WAAAA,KAAK,SAAS,iBAAiB,CACjC;AAEF,MAAM,kBACJ,UACwC;CACxC,MAAM,OAAgC,CAAC;CACvC,MAAM,UAAU,IAAI,IAAY,SAAS;CAEzC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,GAC7C,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,KAAK,OAAO;CAGrC,OAAO;AACT;AAEA,MAAM,iBAAiB,UAAqB,YAAsB;CAChE,IAAI,CAAC,SAAS,OAAO;CAErB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAAiB;CAAe,CAAA,GAChD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EACd,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,qBAAAA,aAAD,EAAa,WAAU,qBAAsB,CAAA;CACzC,CAAA,CACN,EAAA,CAAA;AAEN;AAGA,MAAa,UAAA,GAASC,MAAAA,WAAAA,CAAW,SAAS,OACxC,OACA,KACA;CACA,MAAM,EAAE,YAAY;CACpB,MAAM,YAAY,aAAa,KAAK;CACpC,MAAM,EAAE,UAAU,MAAM,KAAK,UAAU,GAAG,aAAa,eAAe,KAAK;CAC3E,MAAM,UAAU,OAAO;CACvB,MAAM,UAAU,cAAc,UAAU,OAAO;CAE/C,IAAI,OAAO,SAAS,UAAU;EAC5B,MAAM,cAAc;EACpB,MAAM,eAAoD,UAAS;GACjE,MAAM,eAAe;EACvB;EAEA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;GACE,GAAI;GACJ,KAAK;GACM;GACX,aAAW,WAAW,KAAA;GAEtB,iBAAe,WAAW,KAAA;GAC1B,SAAS,UAAU,cAAc,YAAY;GACvC;GAEL,UAAA;EACA,CAAA;CAEP;CAEA,MAAM,EACJ,OAAO,UACP,UACA,SACA,GAAG,gBACD;CAEJ,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EACE,GAAI;EACJ,KAAK;EACM;EACL;EACN,UAAU,YAAY;EACb;EACT,aAAW,WAAW,KAAA;EAErB,UAAA;CACK,CAAA;AAEZ,CAAC"}
@@ -1,5 +1,5 @@
1
- import { AnchorHTMLAttributes, ButtonHTMLAttributes, ReactElement, ReactNode, RefAttributes } from "react";
2
- export type ButtonVariant = 'default' | 'outline' | 'link';
1
+ import { AnchorHTMLAttributes, ButtonHTMLAttributes, ReactElement, ReactNode, Ref } from "react";
2
+ export type ButtonVariant = 'default' | 'outline' | 'link' | 'image' | 'icon';
3
3
  export type ButtonSize = 'sm' | 'md' | 'lg';
4
4
  interface ButtonStyleProps {
5
5
  variant?: ButtonVariant;
@@ -11,14 +11,16 @@ interface ButtonStyleProps {
11
11
  }
12
12
  export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, ButtonStyleProps {
13
13
  href?: undefined;
14
+ ref?: Ref<HTMLButtonElement> | ((element: HTMLElement | null) => void);
14
15
  }
15
16
  export interface ButtonLinkProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>, ButtonStyleProps {
16
17
  href: string;
18
+ ref?: Ref<HTMLAnchorElement> | ((element: HTMLElement | null) => void);
17
19
  }
18
20
  export type ButtonComponentProps = ButtonProps | ButtonLinkProps;
19
21
  interface ButtonComponent {
20
- (props: ButtonLinkProps & RefAttributes<HTMLAnchorElement>): ReactElement | null;
21
- (props: ButtonProps & RefAttributes<HTMLButtonElement>): ReactElement | null;
22
+ (props: ButtonLinkProps): ReactElement | null;
23
+ (props: ButtonProps): ReactElement | null;
22
24
  }
23
25
  export declare const Button: ButtonComponent;
24
26
  export {};
@@ -1,5 +1,5 @@
1
- import { AnchorHTMLAttributes, ButtonHTMLAttributes, ReactElement, ReactNode, RefAttributes } from "react";
2
- export type ButtonVariant = 'default' | 'outline' | 'link';
1
+ import { AnchorHTMLAttributes, ButtonHTMLAttributes, ReactElement, ReactNode, Ref } from "react";
2
+ export type ButtonVariant = 'default' | 'outline' | 'link' | 'image' | 'icon';
3
3
  export type ButtonSize = 'sm' | 'md' | 'lg';
4
4
  interface ButtonStyleProps {
5
5
  variant?: ButtonVariant;
@@ -11,14 +11,16 @@ interface ButtonStyleProps {
11
11
  }
12
12
  export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, ButtonStyleProps {
13
13
  href?: undefined;
14
+ ref?: Ref<HTMLButtonElement> | ((element: HTMLElement | null) => void);
14
15
  }
15
16
  export interface ButtonLinkProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>, ButtonStyleProps {
16
17
  href: string;
18
+ ref?: Ref<HTMLAnchorElement> | ((element: HTMLElement | null) => void);
17
19
  }
18
20
  export type ButtonComponentProps = ButtonProps | ButtonLinkProps;
19
21
  interface ButtonComponent {
20
- (props: ButtonLinkProps & RefAttributes<HTMLAnchorElement>): ReactElement | null;
21
- (props: ButtonProps & RefAttributes<HTMLButtonElement>): ReactElement | null;
22
+ (props: ButtonLinkProps): ReactElement | null;
23
+ (props: ButtonProps): ReactElement | null;
22
24
  }
23
25
  export declare const Button: ButtonComponent;
24
26
  export {};
@@ -31,7 +31,8 @@ const renderContent = (children, loading) => {
31
31
  const Button = forwardRef(function Button(props, ref) {
32
32
  const { loading } = props;
33
33
  const className = getClassName(props);
34
- const { children, href, ...domProps } = omitStyleProps(props);
34
+ const { children, href, ref: propsRef, ...domProps } = omitStyleProps(props);
35
+ const nodeRef = ref ?? propsRef;
35
36
  const content = renderContent(children, loading);
36
37
  if (typeof href === "string") {
37
38
  const anchorProps = domProps;
@@ -40,7 +41,7 @@ const Button = forwardRef(function Button(props, ref) {
40
41
  };
41
42
  return /* @__PURE__ */ jsx("a", {
42
43
  ...anchorProps,
43
- ref,
44
+ ref: nodeRef,
44
45
  className,
45
46
  "aria-busy": loading || void 0,
46
47
  "aria-disabled": loading || void 0,
@@ -52,7 +53,7 @@ const Button = forwardRef(function Button(props, ref) {
52
53
  const { type = "button", disabled, onClick, ...buttonProps } = domProps;
53
54
  return /* @__PURE__ */ jsx("button", {
54
55
  ...buttonProps,
55
- ref,
56
+ ref: nodeRef,
56
57
  className,
57
58
  type,
58
59
  disabled: disabled || loading,
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","names":[],"sources":["../../../src/components/button/button.tsx"],"sourcesContent":["import {\n forwardRef,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type ForwardedRef,\n type MouseEventHandler,\n type ReactElement,\n type ReactNode,\n type Ref,\n type RefAttributes,\n} from 'react';\n\nimport { IconSpinner } from '@/icons/icon-spinner';\nimport { cn, when } from '@/lib/cn';\nimport './button.scss';\n\nexport type ButtonVariant = 'default' | 'outline' | 'link';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\ninterface ButtonStyleProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n fullWidth?: boolean;\n loading?: boolean;\n className?: string;\n children?: ReactNode;\n}\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>, ButtonStyleProps {\n href?: undefined;\n}\n\nexport interface ButtonLinkProps\n extends\n Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>,\n ButtonStyleProps {\n href: string;\n}\n\nexport type ButtonComponentProps = ButtonProps | ButtonLinkProps;\n\ninterface ButtonComponent {\n (\n props: ButtonLinkProps & RefAttributes<HTMLAnchorElement>,\n ): ReactElement | null;\n (props: ButtonProps & RefAttributes<HTMLButtonElement>): ReactElement | null;\n}\n\nconst styleKeys = [\n 'variant',\n 'size',\n 'fullWidth',\n 'loading',\n 'className',\n] as const;\n\nconst getClassName = ({\n variant = 'default',\n size = 'md',\n fullWidth = false,\n loading = false,\n className,\n}: ButtonStyleProps) =>\n cn(\n 'button',\n className,\n when(variant !== 'default', `button--${variant}`),\n when(size !== 'md', `button--${size}`),\n when(fullWidth, 'button--full-width'),\n when(loading, 'button--loading'),\n );\n\nconst omitStyleProps = <T extends ButtonStyleProps>(\n props: T,\n): Omit<T, (typeof styleKeys)[number]> => {\n const next: Record<string, unknown> = {};\n const skipped = new Set<string>(styleKeys);\n\n for (const [key, value] of Object.entries(props)) {\n if (!skipped.has(key)) next[key] = value;\n }\n\n return next as Omit<T, (typeof styleKeys)[number]>;\n};\n\nconst renderContent = (children: ReactNode, loading?: boolean) => {\n if (!loading) return children;\n\n return (\n <>\n <span className=\"button__label\">{children}</span>\n <span className=\"button__spinner\">\n <IconSpinner className=\"button__icon--spin\" />\n </span>\n </>\n );\n};\n\n// forwardRef остаётся: в React 18 ref ещё не обычный проп, peer — ^18.3 || ^19.\nexport const Button = forwardRef(function Button(\n props: ButtonComponentProps,\n ref: ForwardedRef<HTMLButtonElement | HTMLAnchorElement>,\n) {\n const { loading } = props;\n const className = getClassName(props);\n const { children, href, ...domProps } = omitStyleProps(props);\n const content = renderContent(children, loading);\n\n if (typeof href === 'string') {\n const anchorProps = domProps as AnchorHTMLAttributes<HTMLAnchorElement>;\n const handleClick: MouseEventHandler<HTMLAnchorElement> = event => {\n event.preventDefault();\n };\n\n return (\n <a\n {...anchorProps}\n ref={ref as Ref<HTMLAnchorElement>}\n className={className}\n aria-busy={loading || undefined}\n // Ссылку нельзя выключить нативно: клик гасим, состояние объявляем.\n aria-disabled={loading || undefined}\n onClick={loading ? handleClick : anchorProps.onClick}\n href={href}\n >\n {content}\n </a>\n );\n }\n\n const {\n type = 'button',\n disabled,\n onClick,\n ...buttonProps\n } = domProps as ButtonHTMLAttributes<HTMLButtonElement>;\n\n return (\n <button\n {...buttonProps}\n ref={ref as Ref<HTMLButtonElement>}\n className={className}\n type={type}\n disabled={disabled || loading}\n onClick={onClick}\n aria-busy={loading || undefined}\n >\n {content}\n </button>\n );\n}) as ButtonComponent;\n"],"mappings":";;;;;;AAiDA,MAAM,YAAY;CAChB;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,gBAAgB,EACpB,UAAU,WACV,OAAO,MACP,YAAY,OACZ,UAAU,OACV,gBAEA,GACE,UACA,WACA,KAAK,YAAY,WAAW,WAAW,SAAS,GAChD,KAAK,SAAS,MAAM,WAAW,MAAM,GACrC,KAAK,WAAW,oBAAoB,GACpC,KAAK,SAAS,iBAAiB,CACjC;AAEF,MAAM,kBACJ,UACwC;CACxC,MAAM,OAAgC,CAAC;CACvC,MAAM,UAAU,IAAI,IAAY,SAAS;CAEzC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,GAC7C,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,KAAK,OAAO;CAGrC,OAAO;AACT;AAEA,MAAM,iBAAiB,UAAqB,YAAsB;CAChE,IAAI,CAAC,SAAS,OAAO;CAErB,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;EAAM,WAAU;EAAiB;CAAe,CAAA,GAChD,oBAAC,QAAD;EAAM,WAAU;EACd,UAAA,oBAAC,aAAD,EAAa,WAAU,qBAAsB,CAAA;CACzC,CAAA,CACN,EAAA,CAAA;AAEN;AAGA,MAAa,SAAS,WAAW,SAAS,OACxC,OACA,KACA;CACA,MAAM,EAAE,YAAY;CACpB,MAAM,YAAY,aAAa,KAAK;CACpC,MAAM,EAAE,UAAU,MAAM,GAAG,aAAa,eAAe,KAAK;CAC5D,MAAM,UAAU,cAAc,UAAU,OAAO;CAE/C,IAAI,OAAO,SAAS,UAAU;EAC5B,MAAM,cAAc;EACpB,MAAM,eAAoD,UAAS;GACjE,MAAM,eAAe;EACvB;EAEA,OACE,oBAAC,KAAD;GACE,GAAI;GACC;GACM;GACX,aAAW,WAAW,KAAA;GAEtB,iBAAe,WAAW,KAAA;GAC1B,SAAS,UAAU,cAAc,YAAY;GACvC;GAEL,UAAA;EACA,CAAA;CAEP;CAEA,MAAM,EACJ,OAAO,UACP,UACA,SACA,GAAG,gBACD;CAEJ,OACE,oBAAC,UAAD;EACE,GAAI;EACC;EACM;EACL;EACN,UAAU,YAAY;EACb;EACT,aAAW,WAAW,KAAA;EAErB,UAAA;CACK,CAAA;AAEZ,CAAC"}
1
+ {"version":3,"file":"button.js","names":[],"sources":["../../../src/components/button/button.tsx"],"sourcesContent":["import {\n forwardRef,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type ForwardedRef,\n type MouseEventHandler,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\n\nimport { IconSpinner } from '@/icons/icon-spinner';\nimport { cn, when } from '@/lib/cn';\nimport './button.scss';\n\nexport type ButtonVariant = 'default' | 'outline' | 'link' | 'image' | 'icon';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\ninterface ButtonStyleProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n fullWidth?: boolean;\n loading?: boolean;\n className?: string;\n children?: ReactNode;\n}\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>, ButtonStyleProps {\n href?: undefined;\n ref?: Ref<HTMLButtonElement> | ((element: HTMLElement | null) => void);\n}\n\nexport interface ButtonLinkProps\n extends\n Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>,\n ButtonStyleProps {\n href: string;\n ref?: Ref<HTMLAnchorElement> | ((element: HTMLElement | null) => void);\n}\n\nexport type ButtonComponentProps = ButtonProps | ButtonLinkProps;\n\ninterface ButtonComponent {\n (props: ButtonLinkProps): ReactElement | null;\n (props: ButtonProps): ReactElement | null;\n}\n\nconst styleKeys = [\n 'variant',\n 'size',\n 'fullWidth',\n 'loading',\n 'className',\n] as const;\n\nconst getClassName = ({\n variant = 'default',\n size = 'md',\n fullWidth = false,\n loading = false,\n className,\n}: ButtonStyleProps) =>\n cn(\n 'button',\n className,\n when(variant !== 'default', `button--${variant}`),\n when(size !== 'md', `button--${size}`),\n when(fullWidth, 'button--full-width'),\n when(loading, 'button--loading'),\n );\n\nconst omitStyleProps = <T extends ButtonStyleProps>(\n props: T,\n): Omit<T, (typeof styleKeys)[number]> => {\n const next: Record<string, unknown> = {};\n const skipped = new Set<string>(styleKeys);\n\n for (const [key, value] of Object.entries(props)) {\n if (!skipped.has(key)) next[key] = value;\n }\n\n return next as Omit<T, (typeof styleKeys)[number]>;\n};\n\nconst renderContent = (children: ReactNode, loading?: boolean) => {\n if (!loading) return children;\n\n return (\n <>\n <span className=\"button__label\">{children}</span>\n <span className=\"button__spinner\">\n <IconSpinner className=\"button__icon--spin\" />\n </span>\n </>\n );\n};\n\n// forwardRef остаётся: в React 18 ref ещё не обычный проп, peer — ^18.3 || ^19.\nexport const Button = forwardRef(function Button(\n props: ButtonComponentProps,\n ref: ForwardedRef<HTMLButtonElement | HTMLAnchorElement>,\n) {\n const { loading } = props;\n const className = getClassName(props);\n const { children, href, ref: propsRef, ...domProps } = omitStyleProps(props);\n const nodeRef = ref ?? propsRef;\n const content = renderContent(children, loading);\n\n if (typeof href === 'string') {\n const anchorProps = domProps as AnchorHTMLAttributes<HTMLAnchorElement>;\n const handleClick: MouseEventHandler<HTMLAnchorElement> = event => {\n event.preventDefault();\n };\n\n return (\n <a\n {...anchorProps}\n ref={nodeRef as Ref<HTMLAnchorElement>}\n className={className}\n aria-busy={loading || undefined}\n // Ссылку нельзя выключить нативно: клик гасим, состояние объявляем.\n aria-disabled={loading || undefined}\n onClick={loading ? handleClick : anchorProps.onClick}\n href={href}\n >\n {content}\n </a>\n );\n }\n\n const {\n type = 'button',\n disabled,\n onClick,\n ...buttonProps\n } = domProps as ButtonHTMLAttributes<HTMLButtonElement>;\n\n return (\n <button\n {...buttonProps}\n ref={nodeRef as Ref<HTMLButtonElement>}\n className={className}\n type={type}\n disabled={disabled || loading}\n onClick={onClick}\n aria-busy={loading || undefined}\n >\n {content}\n </button>\n );\n}) as ButtonComponent;\n"],"mappings":";;;;;;AAgDA,MAAM,YAAY;CAChB;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,gBAAgB,EACpB,UAAU,WACV,OAAO,MACP,YAAY,OACZ,UAAU,OACV,gBAEA,GACE,UACA,WACA,KAAK,YAAY,WAAW,WAAW,SAAS,GAChD,KAAK,SAAS,MAAM,WAAW,MAAM,GACrC,KAAK,WAAW,oBAAoB,GACpC,KAAK,SAAS,iBAAiB,CACjC;AAEF,MAAM,kBACJ,UACwC;CACxC,MAAM,OAAgC,CAAC;CACvC,MAAM,UAAU,IAAI,IAAY,SAAS;CAEzC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,GAC7C,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,KAAK,OAAO;CAGrC,OAAO;AACT;AAEA,MAAM,iBAAiB,UAAqB,YAAsB;CAChE,IAAI,CAAC,SAAS,OAAO;CAErB,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;EAAM,WAAU;EAAiB;CAAe,CAAA,GAChD,oBAAC,QAAD;EAAM,WAAU;EACd,UAAA,oBAAC,aAAD,EAAa,WAAU,qBAAsB,CAAA;CACzC,CAAA,CACN,EAAA,CAAA;AAEN;AAGA,MAAa,SAAS,WAAW,SAAS,OACxC,OACA,KACA;CACA,MAAM,EAAE,YAAY;CACpB,MAAM,YAAY,aAAa,KAAK;CACpC,MAAM,EAAE,UAAU,MAAM,KAAK,UAAU,GAAG,aAAa,eAAe,KAAK;CAC3E,MAAM,UAAU,OAAO;CACvB,MAAM,UAAU,cAAc,UAAU,OAAO;CAE/C,IAAI,OAAO,SAAS,UAAU;EAC5B,MAAM,cAAc;EACpB,MAAM,eAAoD,UAAS;GACjE,MAAM,eAAe;EACvB;EAEA,OACE,oBAAC,KAAD;GACE,GAAI;GACJ,KAAK;GACM;GACX,aAAW,WAAW,KAAA;GAEtB,iBAAe,WAAW,KAAA;GAC1B,SAAS,UAAU,cAAc,YAAY;GACvC;GAEL,UAAA;EACA,CAAA;CAEP;CAEA,MAAM,EACJ,OAAO,UACP,UACA,SACA,GAAG,gBACD;CAEJ,OACE,oBAAC,UAAD;EACE,GAAI;EACJ,KAAK;EACM;EACL;EACN,UAAU,YAAY;EACb;EACT,aAAW,WAAW,KAAA;EAErB,UAAA;CACK,CAAA;AAEZ,CAAC"}
@@ -1,3 +1,5 @@
1
+ @use '../../styles/mixins.scss' as mixins;
2
+
1
3
  .button {
2
4
  box-sizing: border-box;
3
5
  width: fit-content;
@@ -19,7 +21,7 @@
19
21
  gap: 8px;
20
22
  text-decoration: none;
21
23
 
22
- &:hover:not(:active):not(:disabled) {
24
+ &:hover:not(:active, :disabled) {
23
25
  background-color: var(--color-primary-hover);
24
26
  border-color: var(--color-primary-hover);
25
27
  }
@@ -57,8 +59,8 @@
57
59
  fill: currentColor;
58
60
  border: 2px solid var(--color-foreground);
59
61
 
60
- &:hover:not(:active):not(:disabled) {
61
- background-color: var(--color-secondary);
62
+ &:hover:not(:active, :disabled) {
63
+ background-color: transparent;
62
64
  border-color: var(--color-foreground);
63
65
  color: var(--color-foreground);
64
66
  fill: currentColor;
@@ -77,9 +79,8 @@
77
79
  border-radius: 0;
78
80
  padding: 0;
79
81
 
80
- &:hover:not(:active):not(:disabled) {
82
+ &:hover:not(:active, :disabled) {
81
83
  background-color: transparent;
82
- text-decoration: underline;
83
84
  }
84
85
 
85
86
  &:active,
@@ -88,24 +89,54 @@
88
89
  }
89
90
  }
90
91
 
91
- &--loading {
92
+ &--image {
93
+ --size: 60px;
94
+ background-color: var(--color-secondary);
95
+ border: none;
96
+ padding: 0;
97
+ border-radius: var(--radius-sm);
98
+ width: var(--size);
99
+ height: var(--size);
92
100
  position: relative;
93
- }
94
101
 
95
- &__label {
96
- display: flex;
97
- align-items: center;
98
- gap: inherit;
99
- opacity: 0;
102
+ @include mixins.min-width(md) {
103
+ --size: 100px;
104
+ }
105
+
106
+ &:hover:not(:active, :disabled) {
107
+ background-color: var(--color-secondary);
108
+ }
109
+
110
+ &__icon {
111
+ --size-icon: 32px;
112
+ position: absolute;
113
+ top: 50%;
114
+ left: 50%;
115
+ z-index: 1;
116
+ display: flex;
117
+ width: var(--size-icon);
118
+ height: var(--size-icon);
119
+ border-radius: 50%;
120
+ background-color: var(--color-primary);
121
+ color: var(--color-primary-foreground);
122
+ justify-content: center;
123
+ align-items: center;
124
+ transform: translate(-50%, -50%);
125
+ pointer-events: none;
126
+
127
+ @include mixins.min-width(md) {
128
+ --size-icon: 40px;
129
+ }
130
+ }
100
131
  }
101
132
 
102
- &__spinner {
103
- position: absolute;
104
- inset: 0;
105
- display: flex;
106
- align-items: center;
133
+ &--icon {
134
+ --size: 40px;
135
+ width: var(--size);
136
+ height: var(--size);
137
+ border-radius: 50%;
107
138
  justify-content: center;
108
- pointer-events: none;
139
+ padding: 0;
109
140
  }
110
141
 
111
142
  // 12/16 и 16/24 у sm и lg сняты со старого макета и в шкалу --text-* не попадают.
@@ -113,9 +144,11 @@
113
144
  padding: 5px 12px;
114
145
  font-size: 12px;
115
146
  line-height: 16px;
147
+ --size: 30px;
116
148
  }
117
149
 
118
150
  &--lg {
151
+ --size: 52px;
119
152
  padding: 12px 24px;
120
153
  font-size: 16px;
121
154
  line-height: 24px;
@@ -126,6 +159,26 @@
126
159
  justify-content: center;
127
160
  }
128
161
 
162
+ &--loading {
163
+ position: relative;
164
+ }
165
+
166
+ &__label {
167
+ display: flex;
168
+ align-items: center;
169
+ gap: inherit;
170
+ opacity: 0;
171
+ }
172
+
173
+ &__spinner {
174
+ position: absolute;
175
+ inset: 0;
176
+ display: flex;
177
+ align-items: center;
178
+ justify-content: center;
179
+ pointer-events: none;
180
+ }
181
+
129
182
  svg {
130
183
  flex-shrink: 0;
131
184
  }
@@ -9,19 +9,19 @@ const IconLabelOzon = (props) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(req
9
9
  children: [
10
10
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
11
11
  fill: "#005BFF",
12
- d: "M12,4H8C5.79,4,4,5.79,4,8v4c0,2.21,1.79,4,4,4h4c2.21,0,4-1.79,4-4V8\nC16,5.79,14.21,4,12,4z"
12
+ d: "M12,4H8C5.79,4,4,5.79,4,8v4c0,2.21,1.79,4,4,4h4c2.21,0,4-1.79,4-4V8\r\nC16,5.79,14.21,4,12,4z"
13
13
  }),
14
14
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
15
15
  fill: "#F91155",
16
- d: "M12.78,9.19L7,10.62v5.23C7.32,15.94,7.65,16,8,16h4c1.92,0,3.53-1.36,3.91-3.17\nL12.78,9.19z"
16
+ d: "M12.78,9.19L7,10.62v5.23C7.32,15.94,7.65,16,8,16h4c1.92,0,3.53-1.36,3.91-3.17\r\nL12.78,9.19z"
17
17
  }),
18
18
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
19
19
  fill: "#FFFFFF",
20
- d: "M14.27,8.98c-0.4-1.69-2.65-2.6-5.01-2.03c-2.36,0.56-3.95,2.39-3.54,4.08\nc0.4,1.69,2.65,2.6,5.01,2.03C13.09,12.49,14.68,10.66,14.27,8.98z"
20
+ d: "M14.27,8.98c-0.4-1.69-2.65-2.6-5.01-2.03c-2.36,0.56-3.95,2.39-3.54,4.08\r\nc0.4,1.69,2.65,2.6,5.01,2.03C13.09,12.49,14.68,10.66,14.27,8.98z"
21
21
  }),
22
22
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
23
23
  fill: "#F91155",
24
- d: "M12.65,9.37c-0.17-0.71-1.49-1.24-3.01-0.88c-1.51,0.36-2.46,1.43-2.29,2.15\nc0.17,0.71,1.49,1.24,3.01,0.88C11.88,11.15,12.82,10.08,12.65,9.37z"
24
+ d: "M12.65,9.37c-0.17-0.71-1.49-1.24-3.01-0.88c-1.51,0.36-2.46,1.43-2.29,2.15\r\nc0.17,0.71,1.49,1.24,3.01,0.88C11.88,11.15,12.82,10.08,12.65,9.37z"
25
25
  })
26
26
  ]
27
27
  });
@@ -1 +1 @@
1
- {"version":3,"file":"icon-label-ozon.cjs","names":["Svg"],"sources":["../../src/icons/icon-label-ozon.tsx"],"sourcesContent":["// Generated by scripts/build-icons.mjs. Do not edit.\nimport { Svg, type IconProps } from './svg';\n\nexport const IconLabelOzon = (props: IconProps) => (\n <Svg viewBox=\"0 0 20 20\" width={20} height={20} {...props}>\n <path\n fill=\"#005BFF\"\n d={\n 'M12,4H8C5.79,4,4,5.79,4,8v4c0,2.21,1.79,4,4,4h4c2.21,0,4-1.79,4-4V8\\nC16,5.79,14.21,4,12,4z'\n }\n />\n <path\n fill=\"#F91155\"\n d={\n 'M12.78,9.19L7,10.62v5.23C7.32,15.94,7.65,16,8,16h4c1.92,0,3.53-1.36,3.91-3.17\\nL12.78,9.19z'\n }\n />\n <path\n fill=\"#FFFFFF\"\n d={\n 'M14.27,8.98c-0.4-1.69-2.65-2.6-5.01-2.03c-2.36,0.56-3.95,2.39-3.54,4.08\\nc0.4,1.69,2.65,2.6,5.01,2.03C13.09,12.49,14.68,10.66,14.27,8.98z'\n }\n />\n <path\n fill=\"#F91155\"\n d={\n 'M12.65,9.37c-0.17-0.71-1.49-1.24-3.01-0.88c-1.51,0.36-2.46,1.43-2.29,2.15\\nc0.17,0.71,1.49,1.24,3.01,0.88C11.88,11.15,12.82,10.08,12.65,9.37z'\n }\n />\n </Svg>\n);\n"],"mappings":";;;AAGA,MAAa,iBAAiB,UAC5B,iBAAA,GAAA,kBAAA,KAAA,CAACA,YAAAA,KAAD;CAAK,SAAQ;CAAY,OAAO;CAAI,QAAQ;CAAI,GAAI;CAApD,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;EACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;EACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;EACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;CACE"}
1
+ {"version":3,"file":"icon-label-ozon.cjs","names":["Svg"],"sources":["../../src/icons/icon-label-ozon.tsx"],"sourcesContent":["// Generated by scripts/build-icons.mjs. Do not edit.\nimport { Svg, type IconProps } from './svg';\n\nexport const IconLabelOzon = (props: IconProps) => (\n <Svg viewBox=\"0 0 20 20\" width={20} height={20} {...props}>\n <path\n fill=\"#005BFF\"\n d={\n 'M12,4H8C5.79,4,4,5.79,4,8v4c0,2.21,1.79,4,4,4h4c2.21,0,4-1.79,4-4V8\\r\\nC16,5.79,14.21,4,12,4z'\n }\n />\n <path\n fill=\"#F91155\"\n d={\n 'M12.78,9.19L7,10.62v5.23C7.32,15.94,7.65,16,8,16h4c1.92,0,3.53-1.36,3.91-3.17\\r\\nL12.78,9.19z'\n }\n />\n <path\n fill=\"#FFFFFF\"\n d={\n 'M14.27,8.98c-0.4-1.69-2.65-2.6-5.01-2.03c-2.36,0.56-3.95,2.39-3.54,4.08\\r\\nc0.4,1.69,2.65,2.6,5.01,2.03C13.09,12.49,14.68,10.66,14.27,8.98z'\n }\n />\n <path\n fill=\"#F91155\"\n d={\n 'M12.65,9.37c-0.17-0.71-1.49-1.24-3.01-0.88c-1.51,0.36-2.46,1.43-2.29,2.15\\r\\nc0.17,0.71,1.49,1.24,3.01,0.88C11.88,11.15,12.82,10.08,12.65,9.37z'\n }\n />\n </Svg>\n);\n"],"mappings":";;;AAGA,MAAa,iBAAiB,UAC5B,iBAAA,GAAA,kBAAA,KAAA,CAACA,YAAAA,KAAD;CAAK,SAAQ;CAAY,OAAO;CAAI,QAAQ;CAAI,GAAI;CAApD,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;EACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;EACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;EACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;CACE"}
@@ -9,19 +9,19 @@ const IconLabelOzon = (props) => /* @__PURE__ */ jsxs(Svg, {
9
9
  children: [
10
10
  /* @__PURE__ */ jsx("path", {
11
11
  fill: "#005BFF",
12
- d: "M12,4H8C5.79,4,4,5.79,4,8v4c0,2.21,1.79,4,4,4h4c2.21,0,4-1.79,4-4V8\nC16,5.79,14.21,4,12,4z"
12
+ d: "M12,4H8C5.79,4,4,5.79,4,8v4c0,2.21,1.79,4,4,4h4c2.21,0,4-1.79,4-4V8\r\nC16,5.79,14.21,4,12,4z"
13
13
  }),
14
14
  /* @__PURE__ */ jsx("path", {
15
15
  fill: "#F91155",
16
- d: "M12.78,9.19L7,10.62v5.23C7.32,15.94,7.65,16,8,16h4c1.92,0,3.53-1.36,3.91-3.17\nL12.78,9.19z"
16
+ d: "M12.78,9.19L7,10.62v5.23C7.32,15.94,7.65,16,8,16h4c1.92,0,3.53-1.36,3.91-3.17\r\nL12.78,9.19z"
17
17
  }),
18
18
  /* @__PURE__ */ jsx("path", {
19
19
  fill: "#FFFFFF",
20
- d: "M14.27,8.98c-0.4-1.69-2.65-2.6-5.01-2.03c-2.36,0.56-3.95,2.39-3.54,4.08\nc0.4,1.69,2.65,2.6,5.01,2.03C13.09,12.49,14.68,10.66,14.27,8.98z"
20
+ d: "M14.27,8.98c-0.4-1.69-2.65-2.6-5.01-2.03c-2.36,0.56-3.95,2.39-3.54,4.08\r\nc0.4,1.69,2.65,2.6,5.01,2.03C13.09,12.49,14.68,10.66,14.27,8.98z"
21
21
  }),
22
22
  /* @__PURE__ */ jsx("path", {
23
23
  fill: "#F91155",
24
- d: "M12.65,9.37c-0.17-0.71-1.49-1.24-3.01-0.88c-1.51,0.36-2.46,1.43-2.29,2.15\nc0.17,0.71,1.49,1.24,3.01,0.88C11.88,11.15,12.82,10.08,12.65,9.37z"
24
+ d: "M12.65,9.37c-0.17-0.71-1.49-1.24-3.01-0.88c-1.51,0.36-2.46,1.43-2.29,2.15\r\nc0.17,0.71,1.49,1.24,3.01,0.88C11.88,11.15,12.82,10.08,12.65,9.37z"
25
25
  })
26
26
  ]
27
27
  });
@@ -1 +1 @@
1
- {"version":3,"file":"icon-label-ozon.js","names":[],"sources":["../../src/icons/icon-label-ozon.tsx"],"sourcesContent":["// Generated by scripts/build-icons.mjs. Do not edit.\nimport { Svg, type IconProps } from './svg';\n\nexport const IconLabelOzon = (props: IconProps) => (\n <Svg viewBox=\"0 0 20 20\" width={20} height={20} {...props}>\n <path\n fill=\"#005BFF\"\n d={\n 'M12,4H8C5.79,4,4,5.79,4,8v4c0,2.21,1.79,4,4,4h4c2.21,0,4-1.79,4-4V8\\nC16,5.79,14.21,4,12,4z'\n }\n />\n <path\n fill=\"#F91155\"\n d={\n 'M12.78,9.19L7,10.62v5.23C7.32,15.94,7.65,16,8,16h4c1.92,0,3.53-1.36,3.91-3.17\\nL12.78,9.19z'\n }\n />\n <path\n fill=\"#FFFFFF\"\n d={\n 'M14.27,8.98c-0.4-1.69-2.65-2.6-5.01-2.03c-2.36,0.56-3.95,2.39-3.54,4.08\\nc0.4,1.69,2.65,2.6,5.01,2.03C13.09,12.49,14.68,10.66,14.27,8.98z'\n }\n />\n <path\n fill=\"#F91155\"\n d={\n 'M12.65,9.37c-0.17-0.71-1.49-1.24-3.01-0.88c-1.51,0.36-2.46,1.43-2.29,2.15\\nc0.17,0.71,1.49,1.24,3.01,0.88C11.88,11.15,12.82,10.08,12.65,9.37z'\n }\n />\n </Svg>\n);\n"],"mappings":";;;AAGA,MAAa,iBAAiB,UAC5B,qBAAC,KAAD;CAAK,SAAQ;CAAY,OAAO;CAAI,QAAQ;CAAI,GAAI;CAApD,UAAA;EACE,oBAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;EACD,oBAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;EACD,oBAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;EACD,oBAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;CACE"}
1
+ {"version":3,"file":"icon-label-ozon.js","names":[],"sources":["../../src/icons/icon-label-ozon.tsx"],"sourcesContent":["// Generated by scripts/build-icons.mjs. Do not edit.\nimport { Svg, type IconProps } from './svg';\n\nexport const IconLabelOzon = (props: IconProps) => (\n <Svg viewBox=\"0 0 20 20\" width={20} height={20} {...props}>\n <path\n fill=\"#005BFF\"\n d={\n 'M12,4H8C5.79,4,4,5.79,4,8v4c0,2.21,1.79,4,4,4h4c2.21,0,4-1.79,4-4V8\\r\\nC16,5.79,14.21,4,12,4z'\n }\n />\n <path\n fill=\"#F91155\"\n d={\n 'M12.78,9.19L7,10.62v5.23C7.32,15.94,7.65,16,8,16h4c1.92,0,3.53-1.36,3.91-3.17\\r\\nL12.78,9.19z'\n }\n />\n <path\n fill=\"#FFFFFF\"\n d={\n 'M14.27,8.98c-0.4-1.69-2.65-2.6-5.01-2.03c-2.36,0.56-3.95,2.39-3.54,4.08\\r\\nc0.4,1.69,2.65,2.6,5.01,2.03C13.09,12.49,14.68,10.66,14.27,8.98z'\n }\n />\n <path\n fill=\"#F91155\"\n d={\n 'M12.65,9.37c-0.17-0.71-1.49-1.24-3.01-0.88c-1.51,0.36-2.46,1.43-2.29,2.15\\r\\nc0.17,0.71,1.49,1.24,3.01,0.88C11.88,11.15,12.82,10.08,12.65,9.37z'\n }\n />\n </Svg>\n);\n"],"mappings":";;;AAGA,MAAa,iBAAiB,UAC5B,qBAAC,KAAD;CAAK,SAAQ;CAAY,OAAO;CAAI,QAAQ;CAAI,GAAI;CAApD,UAAA;EACE,oBAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;EACD,oBAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;EACD,oBAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;EACD,oBAAC,QAAD;GACE,MAAK;GACL,GACE;EAEH,CAAA;CACE"}
@@ -13,7 +13,7 @@ const IconLabelYandex = (props) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(r
13
13
  r: "6"
14
14
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
15
15
  fill: "#FFFFFF",
16
- d: "M10.28,6.31c-1.85,0-2.82,0.94-2.82,2.33c0,1.11,0.53,1.76,1.48,2.44L7.3,13.51h1.37\nl1.84-2.73l-0.64-0.43C9.09,9.84,8.72,9.44,8.72,8.57c0-0.77,0.54-1.29,1.58-1.29h0.56v6.23h1.26V6.31H10.28z"
16
+ d: "M10.28,6.31c-1.85,0-2.82,0.94-2.82,2.33c0,1.11,0.53,1.76,1.48,2.44L7.3,13.51h1.37\r\nl1.84-2.73l-0.64-0.43C9.09,9.84,8.72,9.44,8.72,8.57c0-0.77,0.54-1.29,1.58-1.29h0.56v6.23h1.26V6.31H10.28z"
17
17
  })]
18
18
  });
19
19
  exports.IconLabelYandex = IconLabelYandex;
@@ -1 +1 @@
1
- {"version":3,"file":"icon-label-yandex.cjs","names":["Svg"],"sources":["../../src/icons/icon-label-yandex.tsx"],"sourcesContent":["// Generated by scripts/build-icons.mjs. Do not edit.\nimport { Svg, type IconProps } from './svg';\n\nexport const IconLabelYandex = (props: IconProps) => (\n <Svg viewBox=\"0 0 20 20\" width={20} height={20} {...props}>\n <circle fill=\"#FC3F1D\" cx=\"10\" cy=\"10\" r=\"6\" />\n <path\n fill=\"#FFFFFF\"\n d={\n 'M10.28,6.31c-1.85,0-2.82,0.94-2.82,2.33c0,1.11,0.53,1.76,1.48,2.44L7.3,13.51h1.37\\nl1.84-2.73l-0.64-0.43C9.09,9.84,8.72,9.44,8.72,8.57c0-0.77,0.54-1.29,1.58-1.29h0.56v6.23h1.26V6.31H10.28z'\n }\n />\n </Svg>\n);\n"],"mappings":";;;AAGA,MAAa,mBAAmB,UAC9B,iBAAA,GAAA,kBAAA,KAAA,CAACA,YAAAA,KAAD;CAAK,SAAQ;CAAY,OAAO;CAAI,QAAQ;CAAI,GAAI;CAApD,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EAAQ,MAAK;EAAU,IAAG;EAAK,IAAG;EAAK,GAAE;CAAK,CAAA,GAC9C,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EACE,MAAK;EACL,GACE;CAEH,CAAA,CACE"}
1
+ {"version":3,"file":"icon-label-yandex.cjs","names":["Svg"],"sources":["../../src/icons/icon-label-yandex.tsx"],"sourcesContent":["// Generated by scripts/build-icons.mjs. Do not edit.\nimport { Svg, type IconProps } from './svg';\n\nexport const IconLabelYandex = (props: IconProps) => (\n <Svg viewBox=\"0 0 20 20\" width={20} height={20} {...props}>\n <circle fill=\"#FC3F1D\" cx=\"10\" cy=\"10\" r=\"6\" />\n <path\n fill=\"#FFFFFF\"\n d={\n 'M10.28,6.31c-1.85,0-2.82,0.94-2.82,2.33c0,1.11,0.53,1.76,1.48,2.44L7.3,13.51h1.37\\r\\nl1.84-2.73l-0.64-0.43C9.09,9.84,8.72,9.44,8.72,8.57c0-0.77,0.54-1.29,1.58-1.29h0.56v6.23h1.26V6.31H10.28z'\n }\n />\n </Svg>\n);\n"],"mappings":";;;AAGA,MAAa,mBAAmB,UAC9B,iBAAA,GAAA,kBAAA,KAAA,CAACA,YAAAA,KAAD;CAAK,SAAQ;CAAY,OAAO;CAAI,QAAQ;CAAI,GAAI;CAApD,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EAAQ,MAAK;EAAU,IAAG;EAAK,IAAG;EAAK,GAAE;CAAK,CAAA,GAC9C,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EACE,MAAK;EACL,GACE;CAEH,CAAA,CACE"}
@@ -13,7 +13,7 @@ const IconLabelYandex = (props) => /* @__PURE__ */ jsxs(Svg, {
13
13
  r: "6"
14
14
  }), /* @__PURE__ */ jsx("path", {
15
15
  fill: "#FFFFFF",
16
- d: "M10.28,6.31c-1.85,0-2.82,0.94-2.82,2.33c0,1.11,0.53,1.76,1.48,2.44L7.3,13.51h1.37\nl1.84-2.73l-0.64-0.43C9.09,9.84,8.72,9.44,8.72,8.57c0-0.77,0.54-1.29,1.58-1.29h0.56v6.23h1.26V6.31H10.28z"
16
+ d: "M10.28,6.31c-1.85,0-2.82,0.94-2.82,2.33c0,1.11,0.53,1.76,1.48,2.44L7.3,13.51h1.37\r\nl1.84-2.73l-0.64-0.43C9.09,9.84,8.72,9.44,8.72,8.57c0-0.77,0.54-1.29,1.58-1.29h0.56v6.23h1.26V6.31H10.28z"
17
17
  })]
18
18
  });
19
19
  export { IconLabelYandex };
@@ -1 +1 @@
1
- {"version":3,"file":"icon-label-yandex.js","names":[],"sources":["../../src/icons/icon-label-yandex.tsx"],"sourcesContent":["// Generated by scripts/build-icons.mjs. Do not edit.\nimport { Svg, type IconProps } from './svg';\n\nexport const IconLabelYandex = (props: IconProps) => (\n <Svg viewBox=\"0 0 20 20\" width={20} height={20} {...props}>\n <circle fill=\"#FC3F1D\" cx=\"10\" cy=\"10\" r=\"6\" />\n <path\n fill=\"#FFFFFF\"\n d={\n 'M10.28,6.31c-1.85,0-2.82,0.94-2.82,2.33c0,1.11,0.53,1.76,1.48,2.44L7.3,13.51h1.37\\nl1.84-2.73l-0.64-0.43C9.09,9.84,8.72,9.44,8.72,8.57c0-0.77,0.54-1.29,1.58-1.29h0.56v6.23h1.26V6.31H10.28z'\n }\n />\n </Svg>\n);\n"],"mappings":";;;AAGA,MAAa,mBAAmB,UAC9B,qBAAC,KAAD;CAAK,SAAQ;CAAY,OAAO;CAAI,QAAQ;CAAI,GAAI;CAApD,UAAA,CACE,oBAAC,UAAD;EAAQ,MAAK;EAAU,IAAG;EAAK,IAAG;EAAK,GAAE;CAAK,CAAA,GAC9C,oBAAC,QAAD;EACE,MAAK;EACL,GACE;CAEH,CAAA,CACE"}
1
+ {"version":3,"file":"icon-label-yandex.js","names":[],"sources":["../../src/icons/icon-label-yandex.tsx"],"sourcesContent":["// Generated by scripts/build-icons.mjs. Do not edit.\nimport { Svg, type IconProps } from './svg';\n\nexport const IconLabelYandex = (props: IconProps) => (\n <Svg viewBox=\"0 0 20 20\" width={20} height={20} {...props}>\n <circle fill=\"#FC3F1D\" cx=\"10\" cy=\"10\" r=\"6\" />\n <path\n fill=\"#FFFFFF\"\n d={\n 'M10.28,6.31c-1.85,0-2.82,0.94-2.82,2.33c0,1.11,0.53,1.76,1.48,2.44L7.3,13.51h1.37\\r\\nl1.84-2.73l-0.64-0.43C9.09,9.84,8.72,9.44,8.72,8.57c0-0.77,0.54-1.29,1.58-1.29h0.56v6.23h1.26V6.31H10.28z'\n }\n />\n </Svg>\n);\n"],"mappings":";;;AAGA,MAAa,mBAAmB,UAC9B,qBAAC,KAAD;CAAK,SAAQ;CAAY,OAAO;CAAI,QAAQ;CAAI,GAAI;CAApD,UAAA,CACE,oBAAC,UAAD;EAAQ,MAAK;EAAU,IAAG;EAAK,IAAG;EAAK,GAAE;CAAK,CAAA,GAC9C,oBAAC,QAAD;EACE,MAAK;EACL,GACE;CAEH,CAAA,CACE"}
@@ -13,7 +13,7 @@
13
13
  // Залитая кнопка: фон и текст на нём. Outline берёт --color-foreground, не primary.
14
14
  --color-primary: #000;
15
15
  --color-primary-foreground: #fff;
16
- --color-primary-hover: #727272;
16
+ --color-primary-hover: #000;
17
17
 
18
18
  // Ховер outline. Выключенный контрол и вторичный текст/иконка.
19
19
  --color-secondary: #f7f7f7;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@de-kit/st-ui",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "React-компоненты splittest: глобальный SCSS и токены из основного фронтенда",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {