@alfalab/core-components-tabs 10.0.7 → 10.0.8-alfasans
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/components/primary-tablist/Component.collapsible.js.map +1 -1
- package/components/primary-tablist/Component.js.map +1 -1
- package/components/primary-tablist/Component.mobile.d.ts +1 -1
- package/components/primary-tablist/index.css +180 -167
- package/components/primary-tablist/index.module.css.js +1 -1
- package/components/primary-tablist/index.module.css.js.map +1 -1
- package/components/primary-tablist/mobile.css +317 -291
- package/components/primary-tablist/mobile.module.css.js +1 -1
- package/components/primary-tablist/mobile.module.css.js.map +1 -1
- package/components/scroll-controls/Component.d.ts +1 -1
- package/components/scroll-controls/Component.js.map +1 -1
- package/components/scroll-controls/index.css +11 -11
- package/components/scroll-controls/index.module.css.js +1 -1
- package/components/scroll-controls/index.module.css.js.map +1 -1
- package/components/scroll-controls/utils.js.map +1 -1
- package/components/scrollable-container/Component.d.ts +2 -2
- package/components/scrollable-container/Component.js.map +1 -1
- package/components/scrollable-container/index.css +5 -5
- package/components/scrollable-container/index.module.css.js +1 -1
- package/components/scrollable-container/index.module.css.js.map +1 -1
- package/components/secondary-tablist/Component.desktop.d.ts +1 -1
- package/components/secondary-tablist/Component.js.map +1 -1
- package/components/secondary-tablist/Component.mobile.d.ts +1 -1
- package/components/secondary-tablist/index.css +18 -18
- package/components/secondary-tablist/index.module.css.js +1 -1
- package/components/secondary-tablist/index.module.css.js.map +1 -1
- package/components/secondary-tablist/mobile.css +22 -22
- package/components/secondary-tablist/mobile.module.css.js +1 -1
- package/components/tab/Component.d.ts +2 -2
- package/components/tab/Component.js.map +1 -1
- package/components/tab/index.css +2 -2
- package/components/tab/index.module.css.js +1 -1
- package/components/tabs/Component.collapsible.d.ts +1 -1
- package/components/tabs/Component.d.ts +1 -1
- package/components/tabs/Component.desktop.d.ts +1 -1
- package/components/tabs/Component.mobile.d.ts +1 -1
- package/components/tabs/Component.responsive.d.ts +1 -1
- package/components/title/Component.d.ts +5 -5
- package/components/title/Component.js.map +1 -1
- package/cssm/components/primary-tablist/Component.collapsible.js.map +1 -1
- package/cssm/components/primary-tablist/Component.js.map +1 -1
- package/cssm/components/primary-tablist/Component.mobile.d.ts +1 -1
- package/cssm/components/primary-tablist/index.module.css +48 -35
- package/cssm/components/primary-tablist/mobile.module.css +48 -35
- package/cssm/components/scroll-controls/Component.d.ts +1 -1
- package/cssm/components/scroll-controls/Component.js.map +1 -1
- package/cssm/components/scroll-controls/utils.js.map +1 -1
- package/cssm/components/scrollable-container/Component.d.ts +2 -2
- package/cssm/components/scrollable-container/Component.js.map +1 -1
- package/cssm/components/secondary-tablist/Component.desktop.d.ts +1 -1
- package/cssm/components/secondary-tablist/Component.js.map +1 -1
- package/cssm/components/secondary-tablist/Component.mobile.d.ts +1 -1
- package/cssm/components/tab/Component.d.ts +2 -2
- package/cssm/components/tab/Component.js.map +1 -1
- package/cssm/components/tabs/Component.collapsible.d.ts +1 -1
- package/cssm/components/tabs/Component.d.ts +1 -1
- package/cssm/components/tabs/Component.desktop.d.ts +1 -1
- package/cssm/components/tabs/Component.mobile.d.ts +1 -1
- package/cssm/components/tabs/Component.responsive.d.ts +1 -1
- package/cssm/components/title/Component.d.ts +5 -5
- package/cssm/components/title/Component.js.map +1 -1
- package/cssm/hooks/use-collapsible-elements.js.map +1 -1
- package/cssm/hooks/use-tablist-titles.d.ts +16 -17
- package/cssm/hooks/use-tablist-titles.js.map +1 -1
- package/cssm/hooks/use-tabs.d.ts +1 -1
- package/cssm/hooks/use-tabs.js.map +1 -1
- package/cssm/typings.d.ts +5 -5
- package/esm/components/primary-tablist/Component.collapsible.js.map +1 -1
- package/esm/components/primary-tablist/Component.js.map +1 -1
- package/esm/components/primary-tablist/Component.mobile.d.ts +1 -1
- package/esm/components/primary-tablist/index.css +180 -167
- package/esm/components/primary-tablist/index.module.css.js +1 -1
- package/esm/components/primary-tablist/index.module.css.js.map +1 -1
- package/esm/components/primary-tablist/mobile.css +317 -291
- package/esm/components/primary-tablist/mobile.module.css.js +1 -1
- package/esm/components/primary-tablist/mobile.module.css.js.map +1 -1
- package/esm/components/scroll-controls/Component.d.ts +1 -1
- package/esm/components/scroll-controls/Component.js.map +1 -1
- package/esm/components/scroll-controls/index.css +11 -11
- package/esm/components/scroll-controls/index.module.css.js +1 -1
- package/esm/components/scroll-controls/index.module.css.js.map +1 -1
- package/esm/components/scroll-controls/utils.js.map +1 -1
- package/esm/components/scrollable-container/Component.d.ts +2 -2
- package/esm/components/scrollable-container/Component.js.map +1 -1
- package/esm/components/scrollable-container/index.css +5 -5
- package/esm/components/scrollable-container/index.module.css.js +1 -1
- package/esm/components/scrollable-container/index.module.css.js.map +1 -1
- package/esm/components/secondary-tablist/Component.desktop.d.ts +1 -1
- package/esm/components/secondary-tablist/Component.js.map +1 -1
- package/esm/components/secondary-tablist/Component.mobile.d.ts +1 -1
- package/esm/components/secondary-tablist/index.css +18 -18
- package/esm/components/secondary-tablist/index.module.css.js +1 -1
- package/esm/components/secondary-tablist/index.module.css.js.map +1 -1
- package/esm/components/secondary-tablist/mobile.css +22 -22
- package/esm/components/secondary-tablist/mobile.module.css.js +1 -1
- package/esm/components/tab/Component.d.ts +2 -2
- package/esm/components/tab/Component.js.map +1 -1
- package/esm/components/tab/index.css +2 -2
- package/esm/components/tab/index.module.css.js +1 -1
- package/esm/components/tabs/Component.collapsible.d.ts +1 -1
- package/esm/components/tabs/Component.d.ts +1 -1
- package/esm/components/tabs/Component.desktop.d.ts +1 -1
- package/esm/components/tabs/Component.mobile.d.ts +1 -1
- package/esm/components/tabs/Component.responsive.d.ts +1 -1
- package/esm/components/title/Component.d.ts +5 -5
- package/esm/components/title/Component.js.map +1 -1
- package/esm/hooks/use-collapsible-elements.js.map +1 -1
- package/esm/hooks/use-tablist-titles.d.ts +16 -17
- package/esm/hooks/use-tablist-titles.js.map +1 -1
- package/esm/hooks/use-tabs.d.ts +1 -1
- package/esm/hooks/use-tabs.js.map +1 -1
- package/esm/typings.d.ts +5 -5
- package/hooks/use-collapsible-elements.js.map +1 -1
- package/hooks/use-tablist-titles.d.ts +16 -16
- package/hooks/use-tablist-titles.js.map +1 -1
- package/hooks/use-tabs.d.ts +1 -1
- package/hooks/use-tabs.js.map +1 -1
- package/modern/components/primary-tablist/Component.collapsible.js.map +1 -1
- package/modern/components/primary-tablist/Component.js.map +1 -1
- package/modern/components/primary-tablist/Component.mobile.d.ts +1 -1
- package/modern/components/primary-tablist/index.css +180 -167
- package/modern/components/primary-tablist/index.module.css.js +1 -1
- package/modern/components/primary-tablist/index.module.css.js.map +1 -1
- package/modern/components/primary-tablist/mobile.css +317 -291
- package/modern/components/primary-tablist/mobile.module.css.js +1 -1
- package/modern/components/primary-tablist/mobile.module.css.js.map +1 -1
- package/modern/components/scroll-controls/Component.d.ts +1 -1
- package/modern/components/scroll-controls/Component.js.map +1 -1
- package/modern/components/scroll-controls/index.css +11 -11
- package/modern/components/scroll-controls/index.module.css.js +1 -1
- package/modern/components/scroll-controls/index.module.css.js.map +1 -1
- package/modern/components/scroll-controls/utils.js.map +1 -1
- package/modern/components/scrollable-container/Component.d.ts +2 -2
- package/modern/components/scrollable-container/Component.js.map +1 -1
- package/modern/components/scrollable-container/index.css +5 -5
- package/modern/components/scrollable-container/index.module.css.js +1 -1
- package/modern/components/scrollable-container/index.module.css.js.map +1 -1
- package/modern/components/secondary-tablist/Component.desktop.d.ts +1 -1
- package/modern/components/secondary-tablist/Component.js.map +1 -1
- package/modern/components/secondary-tablist/Component.mobile.d.ts +1 -1
- package/modern/components/secondary-tablist/index.css +18 -18
- package/modern/components/secondary-tablist/index.module.css.js +1 -1
- package/modern/components/secondary-tablist/index.module.css.js.map +1 -1
- package/modern/components/secondary-tablist/mobile.css +22 -22
- package/modern/components/secondary-tablist/mobile.module.css.js +1 -1
- package/modern/components/tab/Component.d.ts +2 -2
- package/modern/components/tab/Component.js.map +1 -1
- package/modern/components/tab/index.css +2 -2
- package/modern/components/tab/index.module.css.js +1 -1
- package/modern/components/tabs/Component.collapsible.d.ts +1 -1
- package/modern/components/tabs/Component.d.ts +1 -1
- package/modern/components/tabs/Component.desktop.d.ts +1 -1
- package/modern/components/tabs/Component.mobile.d.ts +1 -1
- package/modern/components/tabs/Component.responsive.d.ts +1 -1
- package/modern/components/title/Component.d.ts +5 -5
- package/modern/components/title/Component.js.map +1 -1
- package/modern/hooks/use-collapsible-elements.js.map +1 -1
- package/modern/hooks/use-tablist-titles.d.ts +16 -17
- package/modern/hooks/use-tablist-titles.js.map +1 -1
- package/modern/hooks/use-tabs.d.ts +1 -1
- package/modern/hooks/use-tabs.js.map +1 -1
- package/modern/typings.d.ts +5 -5
- package/moderncssm/components/primary-tablist/Component.collapsible.js.map +1 -1
- package/moderncssm/components/primary-tablist/Component.js.map +1 -1
- package/moderncssm/components/primary-tablist/Component.mobile.d.ts +1 -1
- package/moderncssm/components/primary-tablist/index.module.css +45 -30
- package/moderncssm/components/primary-tablist/mobile.module.css +45 -30
- package/moderncssm/components/scroll-controls/Component.d.ts +1 -1
- package/moderncssm/components/scroll-controls/Component.js.map +1 -1
- package/moderncssm/components/scroll-controls/utils.js.map +1 -1
- package/moderncssm/components/scrollable-container/Component.d.ts +2 -2
- package/moderncssm/components/scrollable-container/Component.js.map +1 -1
- package/moderncssm/components/secondary-tablist/Component.desktop.d.ts +1 -1
- package/moderncssm/components/secondary-tablist/Component.js.map +1 -1
- package/moderncssm/components/secondary-tablist/Component.mobile.d.ts +1 -1
- package/moderncssm/components/tab/Component.d.ts +2 -2
- package/moderncssm/components/tab/Component.js.map +1 -1
- package/moderncssm/components/tabs/Component.collapsible.d.ts +1 -1
- package/moderncssm/components/tabs/Component.d.ts +1 -1
- package/moderncssm/components/tabs/Component.desktop.d.ts +1 -1
- package/moderncssm/components/tabs/Component.mobile.d.ts +1 -1
- package/moderncssm/components/tabs/Component.responsive.d.ts +1 -1
- package/moderncssm/components/title/Component.d.ts +5 -5
- package/moderncssm/components/title/Component.js.map +1 -1
- package/moderncssm/hooks/use-collapsible-elements.js.map +1 -1
- package/moderncssm/hooks/use-tablist-titles.d.ts +16 -17
- package/moderncssm/hooks/use-tablist-titles.js.map +1 -1
- package/moderncssm/hooks/use-tabs.d.ts +1 -1
- package/moderncssm/hooks/use-tabs.js.map +1 -1
- package/moderncssm/typings.d.ts +5 -5
- package/package.json +12 -12
- package/src/components/primary-tablist/index.module.css +1 -1
- package/src/components/primary-tablist/mobile.module.css +1 -1
- package/src/components/primary-tablist/text-styles.module.css +1 -1
- package/src/components/scroll-controls/index.module.css +1 -1
- package/src/components/scrollable-container/index.module.css +1 -1
- package/src/components/secondary-tablist/index.module.css +1 -1
- package/src/components/tab/Component.tsx +3 -3
- package/src/vars.css +1 -1
- package/typings.d.ts +5 -5
|
@@ -2,9 +2,9 @@ import React from 'react';
|
|
|
2
2
|
import { type SkeletonProps } from '@alfalab/core-components-skeleton';
|
|
3
3
|
import { type Styles, type TabListTitle } from '../../typings';
|
|
4
4
|
export declare const Title: React.ForwardRefExoticComponent<TabListTitle & Styles & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "id" | "title"> & {
|
|
5
|
-
focused?: boolean
|
|
6
|
-
isOption?: boolean
|
|
7
|
-
showSkeleton?: boolean
|
|
8
|
-
skeletonProps?: Omit<SkeletonProps, "visible"
|
|
9
|
-
onResize?: (
|
|
5
|
+
focused?: boolean;
|
|
6
|
+
isOption?: boolean;
|
|
7
|
+
showSkeleton?: boolean;
|
|
8
|
+
skeletonProps?: Omit<SkeletonProps, "visible">;
|
|
9
|
+
onResize?: () => void;
|
|
10
10
|
} & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Component.js","sources":["../../src/components/title/Component.tsx"],"sourcesContent":["import React, { type ButtonHTMLAttributes, forwardRef, useEffect, useRef } from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport cn from 'classnames';\n\nimport { Skeleton, type SkeletonProps } from '@alfalab/core-components-skeleton';\n\nimport { type Styles, type TabListTitle } from '../../typings';\n\ntype Props = TabListTitle &\n Styles &\n Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'id' | 'title'> & {\n focused?: boolean;\n isOption?: boolean;\n showSkeleton?: boolean;\n skeletonProps?: Omit<SkeletonProps, 'visible'>;\n onResize?: () => void;\n };\n\nexport const Title = forwardRef<HTMLButtonElement, Props>(\n (\n {\n id,\n toggleClassName,\n title,\n styles = {},\n rightAddons = null,\n hidden = false,\n selected = false,\n disabled = false,\n collapsed = false,\n focused = false,\n isOption = false,\n showSkeleton = false,\n skeletonProps,\n onResize,\n dataTestId,\n className,\n ...restProps\n },\n ref,\n ) => {\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n const titleClassName = cn(styles.content, {\n [styles.focused]: focused,\n });\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver(() => {\n if (onResize) {\n onResize();\n }\n });\n\n const button = buttonRef.current;\n\n if (button) {\n resizeObserver.observe(button);\n }\n\n return () => {\n if (button) {\n resizeObserver.unobserve(button);\n }\n };\n }, [onResize]);\n\n return hidden ? null : (\n <button\n {...restProps}\n data-test-id={dataTestId}\n ref={mergeRefs([ref, buttonRef])}\n disabled={disabled || showSkeleton}\n type='button'\n id={String(id)}\n className={cn(\n styles.title,\n {\n [styles.selected]: selected,\n [styles.disabled]: disabled,\n [styles.collapsed]: collapsed && !isOption,\n [styles.option]: isOption,\n },\n toggleClassName,\n className,\n )}\n >\n {showSkeleton ? (\n <Skeleton\n {...skeletonProps}\n className={cn(titleClassName, skeletonProps?.className)}\n visible={true}\n >\n {title}\n </Skeleton>\n ) : (\n <span className={titleClassName}>{title}</span>\n )}\n\n {rightAddons && (\n <span\n className={cn(styles.rightAddons, {\n [styles.rightAddonsMarginZero]: !title,\n })}\n >\n {rightAddons}\n </span>\n )}\n </button>\n );\n },\n);\n"],"names":["forwardRef","__rest","useRef","cn","useEffect","React","__assign","mergeRefs","Skeleton"],"mappings":";;;;;;;;;;;;;;;;IAkBa,KAAK,GAAGA,gBAAU,CAC3B,UACI,EAkBC,EACD,GAAG,EAAA;;AAlBC,IAAA,IAAA,EAAE,GAAA,EAAA,CAAA,EAAA,EACF,eAAe,GAAA,EAAA,CAAA,eAAA,EACf,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,EAAW,GAAA,EAAA,CAAA,MAAA,EAAX,MAAM,GAAG,EAAA,KAAA,MAAA,GAAA,EAAE,KAAA,EACX,EAAA,GAAA,EAAA,CAAA,WAAkB,EAAlB,WAAW,GAAA,EAAA,KAAA,MAAA,GAAG,IAAI,GAAA,EAAA,EAClB,EAAc,GAAA,EAAA,CAAA,MAAA,EAAd,MAAM,GAAG,EAAA,KAAA,MAAA,GAAA,KAAK,KAAA,EACd,EAAA,GAAA,EAAA,CAAA,QAAgB,EAAhB,QAAQ,GAAA,EAAA,KAAA,MAAA,GAAG,KAAK,GAAA,EAAA,EAChB,gBAAgB,EAAhB,QAAQ,mBAAG,KAAK,GAAA,EAAA,EAChB,EAAA,GAAA,EAAA,CAAA,SAAiB,EAAjB,SAAS,GAAA,EAAA,KAAA,MAAA,GAAG,KAAK,GAAA,EAAA,EACjB,eAAe,EAAf,OAAO,mBAAG,KAAK,GAAA,EAAA,EACf,EAAgB,GAAA,EAAA,CAAA,QAAA,EAAhB,QAAQ,GAAG,EAAA,KAAA,MAAA,GAAA,KAAK,KAAA,EAChB,EAAA,GAAA,EAAA,CAAA,YAAoB,EAApB,YAAY,mBAAG,KAAK,GAAA,EAAA,EACpB,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,UAAU,GAAA,EAAA,CAAA,UAAA,EACV,SAAS,GAAA,EAAA,CAAA,SAAA,EACN,SAAS,GAAAC,YAAA,CAAA,EAAA,EAjBhB,yMAkBC,CADe;AAIhB,IAAA,IAAM,SAAS,GAAGC,YAAM,CAA2B,IAAI,CAAC;AAExD,IAAA,IAAM,cAAc,GAAGC,mBAAE,CAAC,MAAM,CAAC,OAAO,GAAA,EAAA,GAAA,EAAA;AACpC,QAAA,EAAA,CAAC,MAAM,CAAC,OAAO,CAAA,GAAG,OAAO;YAC3B;AAEF,IAAAC,eAAS,CAAC,YAAA;AACN,QAAA,IAAM,cAAc,GAAG,IAAI,cAAc,CAAC,YAAA;
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../../src/components/title/Component.tsx"],"sourcesContent":["import React, { type ButtonHTMLAttributes, forwardRef, useEffect, useRef } from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport cn from 'classnames';\n\nimport { Skeleton, type SkeletonProps } from '@alfalab/core-components-skeleton';\n\nimport { type Styles, type TabListTitle } from '../../typings';\n\ntype Props = TabListTitle &\n Styles &\n Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'id' | 'title'> & {\n focused?: boolean;\n isOption?: boolean;\n showSkeleton?: boolean;\n skeletonProps?: Omit<SkeletonProps, 'visible'>;\n onResize?: () => void;\n };\n\nexport const Title = forwardRef<HTMLButtonElement, Props>(\n (\n {\n id,\n toggleClassName,\n title,\n styles = {},\n rightAddons = null,\n hidden = false,\n selected = false,\n disabled = false,\n collapsed = false,\n focused = false,\n isOption = false,\n showSkeleton = false,\n skeletonProps,\n onResize,\n dataTestId,\n className,\n ...restProps\n },\n ref,\n ) => {\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n const titleClassName = cn(styles.content, {\n [styles.focused]: focused,\n });\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver(() => {\n if (onResize) {\n onResize();\n }\n });\n\n const button = buttonRef.current;\n\n if (button) {\n resizeObserver.observe(button);\n }\n\n return () => {\n if (button) {\n resizeObserver.unobserve(button);\n }\n };\n }, [onResize]);\n\n return hidden ? null : (\n <button\n {...restProps}\n data-test-id={dataTestId}\n ref={mergeRefs([ref, buttonRef])}\n disabled={disabled || showSkeleton}\n type='button'\n id={String(id)}\n className={cn(\n styles.title,\n {\n [styles.selected]: selected,\n [styles.disabled]: disabled,\n [styles.collapsed]: collapsed && !isOption,\n [styles.option]: isOption,\n },\n toggleClassName,\n className,\n )}\n >\n {showSkeleton ? (\n <Skeleton\n {...skeletonProps}\n className={cn(titleClassName, skeletonProps?.className)}\n visible={true}\n >\n {title}\n </Skeleton>\n ) : (\n <span className={titleClassName}>{title}</span>\n )}\n\n {rightAddons && (\n <span\n className={cn(styles.rightAddons, {\n [styles.rightAddonsMarginZero]: !title,\n })}\n >\n {rightAddons}\n </span>\n )}\n </button>\n );\n },\n);\n"],"names":["forwardRef","__rest","useRef","cn","useEffect","React","__assign","mergeRefs","Skeleton"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Component.collapsible.js","sources":["../../../src/components/primary-tablist/Component.collapsible.tsx"],"sourcesContent":["import React, { type Ref, useEffect, useMemo, useRef } from 'react';\nimport cn from 'classnames';\n\nimport { Badge } from '@alfalab/core-components-badge';\nimport { KeyboardFocusable } from '@alfalab/core-components-keyboard-focusable';\nimport {\n PickerButtonDesktop,\n type PickerButtonDesktopProps,\n} from '@alfalab/core-components-picker-button/desktop';\n\nimport { useTablistTitles } from '../../hooks/use-tablist-titles';\nimport { createSyntheticMouseEvent } from '../../synthetic-events';\nimport { type TabListProps } from '../../typings';\nimport { Title } from '../title';\n\nimport styles from './index.module.css';\n\nexport const CollapsiblePrimaryTabList = ({\n size = 'm',\n className,\n containerClassName,\n titles = [],\n selectedId = titles.length ? titles[0].id : undefined,\n collapsedTabsIds,\n fullWidthScroll,\n onChange,\n dataTestId,\n breakpoint,\n client,\n defaultMatchMediaValue,\n textStyle,\n showSkeleton,\n skeletonProps,\n}: TabListProps) => {\n const lineRef = useRef<HTMLDivElement>(null);\n\n const { containerRef, addonRef, tablistTitles, selectedTab, getTabListItemProps } =\n useTablistTitles({\n titles,\n selectedId,\n collapsedTabsIds,\n onChange,\n breakpoint,\n client,\n defaultMatchMediaValue,\n });\n\n useEffect(() => {\n if (selectedTab && lineRef.current) {\n lineRef.current.style.width = `${selectedTab.offsetWidth}px`;\n lineRef.current.style.transform = `translateX(${selectedTab.offsetLeft}px)`;\n }\n }, [selectedTab, tablistTitles]);\n\n const collapsedOptions = useMemo(\n () =>\n tablistTitles.reduce<PickerButtonDesktopProps['options']>(\n (options, { toggleRef, ...title }) => {\n if (title.collapsed) {\n options.push({\n key: String(title.id),\n value: title.id,\n content: (\n <Title\n {...title}\n ref={toggleRef as Ref<HTMLButtonElement>}\n styles={styles}\n isOption={true}\n className={styles.noTextStyle}\n />\n ),\n });\n }\n\n return options;\n },\n [],\n ),\n [tablistTitles],\n );\n\n const collapsedAddonsLength = tablistTitles.filter(\n (title) => title.collapsed && title.rightAddons,\n ).length;\n\n const handleOptionsChange = (\n payload: Parameters<Required<PickerButtonDesktopProps>['onChange']>[0],\n ) => {\n if (payload.selected?.value && onChange) {\n const nativeMouseEvent = new MouseEvent('change');\n const syntheticMouseEvent = createSyntheticMouseEvent(nativeMouseEvent);\n\n onChange(syntheticMouseEvent, { selectedId: payload.selected.value });\n }\n };\n\n const renderContent = () => (\n <div\n role='tablist'\n data-test-id={dataTestId}\n className={cn(styles.component, className, !textStyle && size && styles[size], {\n [styles.fullWidthScroll]: fullWidthScroll,\n })}\n >\n {tablistTitles.map(({ dataTestId: _, toggleRef: __, ...restTitleProps }, index) => (\n <KeyboardFocusable key={restTitleProps.id}>\n {(ref, focused) => (\n <Title\n {...getTabListItemProps(index, ref)}\n {...restTitleProps}\n focused={focused}\n styles={styles}\n showSkeleton={showSkeleton}\n skeletonProps={skeletonProps}\n className={cn({ [styles.noTextStyle]: !textStyle })}\n />\n )}\n </KeyboardFocusable>\n ))}\n\n {collapsedOptions.length ? (\n <span ref={addonRef} role='menu' className={styles.pickerWrapper}>\n <PickerButtonDesktop\n fieldClassName={styles.title}\n optionClassName={cn(size && styles[size])}\n options={collapsedOptions}\n onChange={handleOptionsChange}\n rightAddons={\n collapsedAddonsLength ? (\n <Badge view='count' content={collapsedAddonsLength} />\n ) : null\n }\n size={56}\n view='text'\n label='Ещё'\n popoverPosition='bottom-end'\n disabled={showSkeleton}\n />\n </span>\n ) : null}\n\n <div className={styles.line} ref={lineRef} />\n </div>\n );\n\n return (\n <div\n ref={containerRef}\n className={cn(\n styles.container,\n textStyle && styles[textStyle],\n styles.desktop,\n containerClassName,\n )}\n >\n {renderContent()}\n </div>\n );\n};\n"],"names":["useRef","useTablistTitles","useEffect","useMemo","__rest","React","Title","__assign","styles","createSyntheticMouseEvent","cn","KeyboardFocusable","PickerButtonDesktop","Badge"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Component.collapsible.js","sources":["../../../src/components/primary-tablist/Component.collapsible.tsx"],"sourcesContent":["import React, { type Ref, useEffect, useMemo, useRef } from 'react';\nimport cn from 'classnames';\n\nimport { Badge } from '@alfalab/core-components-badge';\nimport { KeyboardFocusable } from '@alfalab/core-components-keyboard-focusable';\nimport {\n PickerButtonDesktop,\n type PickerButtonDesktopProps,\n} from '@alfalab/core-components-picker-button/desktop';\n\nimport { useTablistTitles } from '../../hooks/use-tablist-titles';\nimport { createSyntheticMouseEvent } from '../../synthetic-events';\nimport { type TabListProps } from '../../typings';\nimport { Title } from '../title';\n\nimport styles from './index.module.css';\n\nexport const CollapsiblePrimaryTabList = ({\n size = 'm',\n className,\n containerClassName,\n titles = [],\n selectedId = titles.length ? titles[0].id : undefined,\n collapsedTabsIds,\n fullWidthScroll,\n onChange,\n dataTestId,\n breakpoint,\n client,\n defaultMatchMediaValue,\n textStyle,\n showSkeleton,\n skeletonProps,\n}: TabListProps) => {\n const lineRef = useRef<HTMLDivElement>(null);\n\n const { containerRef, addonRef, tablistTitles, selectedTab, getTabListItemProps } =\n useTablistTitles({\n titles,\n selectedId,\n collapsedTabsIds,\n onChange,\n breakpoint,\n client,\n defaultMatchMediaValue,\n });\n\n useEffect(() => {\n if (selectedTab && lineRef.current) {\n lineRef.current.style.width = `${selectedTab.offsetWidth}px`;\n lineRef.current.style.transform = `translateX(${selectedTab.offsetLeft}px)`;\n }\n }, [selectedTab, tablistTitles]);\n\n const collapsedOptions = useMemo(\n () =>\n tablistTitles.reduce<PickerButtonDesktopProps['options']>(\n (options, { toggleRef, ...title }) => {\n if (title.collapsed) {\n options.push({\n key: String(title.id),\n value: title.id,\n content: (\n <Title\n {...title}\n ref={toggleRef as Ref<HTMLButtonElement>}\n styles={styles}\n isOption={true}\n className={styles.noTextStyle}\n />\n ),\n });\n }\n\n return options;\n },\n [],\n ),\n [tablistTitles],\n );\n\n const collapsedAddonsLength = tablistTitles.filter(\n (title) => title.collapsed && title.rightAddons,\n ).length;\n\n const handleOptionsChange = (\n payload: Parameters<Required<PickerButtonDesktopProps>['onChange']>[0],\n ) => {\n if (payload.selected?.value && onChange) {\n const nativeMouseEvent = new MouseEvent('change');\n const syntheticMouseEvent = createSyntheticMouseEvent(nativeMouseEvent);\n\n onChange(syntheticMouseEvent, { selectedId: payload.selected.value });\n }\n };\n\n const renderContent = () => (\n <div\n role='tablist'\n data-test-id={dataTestId}\n className={cn(styles.component, className, !textStyle && size && styles[size], {\n [styles.fullWidthScroll]: fullWidthScroll,\n })}\n >\n {tablistTitles.map(({ dataTestId: _, toggleRef: __, ...restTitleProps }, index) => (\n <KeyboardFocusable key={restTitleProps.id}>\n {(ref, focused) => (\n <Title\n {...getTabListItemProps(index, ref)}\n {...restTitleProps}\n focused={focused}\n styles={styles}\n showSkeleton={showSkeleton}\n skeletonProps={skeletonProps}\n className={cn({ [styles.noTextStyle]: !textStyle })}\n />\n )}\n </KeyboardFocusable>\n ))}\n\n {collapsedOptions.length ? (\n <span ref={addonRef} role='menu' className={styles.pickerWrapper}>\n <PickerButtonDesktop\n fieldClassName={styles.title}\n optionClassName={cn(size && styles[size])}\n options={collapsedOptions}\n onChange={handleOptionsChange}\n rightAddons={\n collapsedAddonsLength ? (\n <Badge view='count' content={collapsedAddonsLength} />\n ) : null\n }\n size={56}\n view='text'\n label='Ещё'\n popoverPosition='bottom-end'\n disabled={showSkeleton}\n />\n </span>\n ) : null}\n\n <div className={styles.line} ref={lineRef} />\n </div>\n );\n\n return (\n <div\n ref={containerRef}\n className={cn(\n styles.container,\n textStyle && styles[textStyle],\n styles.desktop,\n containerClassName,\n )}\n >\n {renderContent()}\n </div>\n );\n};\n"],"names":["useRef","useTablistTitles","useEffect","useMemo","__rest","React","Title","__assign","styles","createSyntheticMouseEvent","cn","KeyboardFocusable","PickerButtonDesktop","Badge"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Component.js","sources":["../../../src/components/primary-tablist/Component.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from 'react';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport cn from 'classnames';\n\nimport { KeyboardFocusable } from '@alfalab/core-components-keyboard-focusable';\nimport { fnUtils } from '@alfalab/core-components-shared';\n\nimport { useTabs } from '../../hooks/use-tabs';\nimport { type PlatformProps, type Styles, type TabListProps } from '../../typings';\nimport { ScrollableContainer } from '../scrollable-container';\nimport { Title } from '../title';\n\nexport const PrimaryTabList = ({\n size,\n styles = {},\n className,\n containerClassName,\n titles = [],\n selectedId = titles.length ? titles[0].id : undefined,\n scrollable = true,\n fullWidthScroll,\n onChange,\n dataTestId,\n platform,\n textStyle,\n inlineStyle,\n showSkeleton,\n skeletonProps,\n}: TabListProps & Styles & PlatformProps) => {\n const lineRef = useRef<HTMLDivElement>(null);\n\n const { selectedTab, focusedTab, getTabListItemProps } = useTabs({\n titles,\n selectedId,\n onChange,\n });\n\n // расчет размера и положения нижней полосы\n useEffect(() => {\n if (selectedTab) {\n const updateLineWidth = () => {\n if (lineRef.current) {\n lineRef.current.style.width = `${selectedTab.offsetWidth}px`;\n lineRef.current.style.transform = `translateX(${selectedTab.offsetLeft}px)`;\n }\n };\n\n const ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n const observer = new ResizeObserver(updateLineWidth);\n\n observer.observe(selectedTab);\n\n return () => observer.disconnect();\n }\n\n return fnUtils.noop;\n }, [selectedTab, titles]);\n\n const handleTitleResize = useCallback(() => {\n if (selectedTab && lineRef.current) {\n lineRef.current.style.width = `${selectedTab.offsetWidth}px`;\n lineRef.current.style.transform = `translateX(${selectedTab.offsetLeft}px)`;\n }\n }, [selectedTab]);\n\n const renderContent = () => (\n <div\n role='tablist'\n data-test-id={dataTestId}\n className={cn(styles.component, className, !textStyle && size && styles[size], {\n [styles.fullWidthScroll]: fullWidthScroll,\n })}\n >\n {titles.map(({ dataTestId: _, toggleRef: __, ...restTitleProps }, index) => (\n <KeyboardFocusable key={restTitleProps.id}>\n {(ref, focused) => (\n <Title\n {...getTabListItemProps(index, ref)}\n {...restTitleProps}\n focused={focused}\n styles={styles}\n showSkeleton={showSkeleton}\n skeletonProps={skeletonProps}\n onResize={handleTitleResize}\n className={cn({ [styles.noTextStyle]: !textStyle })}\n />\n )}\n </KeyboardFocusable>\n ))}\n\n <div className={styles.line} ref={lineRef} />\n </div>\n );\n\n const wrapperClassName = cn(textStyle && styles[textStyle], styles[platform]);\n\n return scrollable ? (\n <ScrollableContainer\n containerWrapperClassName={wrapperClassName}\n activeChild={focusedTab || selectedTab}\n containerClassName={containerClassName}\n scrollControlsClassName={cn(textStyle && styles.scrollControls)}\n fullWidthScroll={fullWidthScroll}\n view='primary'\n size={textStyle ? undefined : size}\n platform={platform}\n inlineStyle={inlineStyle}\n showSkeleton={showSkeleton}\n >\n {renderContent()}\n </ScrollableContainer>\n ) : (\n <div\n className={cn(styles.container, wrapperClassName, containerClassName)}\n style={inlineStyle}\n >\n {renderContent()}\n </div>\n );\n};\n"],"names":["useRef","useTabs","useEffect","ResizeObserverPolyfill","fnUtils","useCallback","React","cn","__rest","KeyboardFocusable","Title","__assign","ScrollableContainer"],"mappings":";;;;;;;;;;;;;;;;;;;AAYO,IAAM,cAAc,GAAG,UAAC,EAgBS,EAAA;AAfpC,IAAA,IAAA,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,EAAW,GAAA,EAAA,CAAA,MAAA,EAAX,MAAM,GAAG,EAAA,KAAA,MAAA,GAAA,EAAE,GAAA,EAAA,EACX,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,kBAAkB,GAAA,EAAA,CAAA,kBAAA,EAClB,EAAW,GAAA,EAAA,CAAA,MAAA,EAAX,MAAM,GAAA,EAAA,KAAA,MAAA,GAAG,EAAE,GAAA,EAAA,EACX,EAAA,GAAA,EAAA,CAAA,UAAqD,EAArD,UAAU,GAAA,EAAA,KAAA,MAAA,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,KAAA,EACrD,EAAA,GAAA,EAAA,CAAA,UAAiB,EAAjB,UAAU,mBAAG,IAAI,GAAA,EAAA,EACjB,eAAe,qBAAA,EACf,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,UAAU,GAAA,EAAA,CAAA,UAAA,EACV,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,WAAW,iBAAA,EACX,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,aAAa,GAAA,EAAA,CAAA,aAAA;AAEb,IAAA,IAAM,OAAO,GAAGA,YAAM,CAAiB,IAAI,CAAC;IAEtC,IAAA,EAAA,GAAmDC,eAAO,CAAC;AAC7D,QAAA,MAAM,EAAA,MAAA;AACN,QAAA,UAAU,EAAA,UAAA;AACV,QAAA,QAAQ,EAAA,QAAA;KACX,CAAC,EAJM,WAAW,GAAA,EAAA,CAAA,WAAA,EAAE,UAAU,GAAA,EAAA,CAAA,UAAA,EAAE,mBAAmB,GAAA,EAAA,CAAA,mBAIlD;;AAGF,IAAAC,eAAS,CAAC,YAAA;
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../../../src/components/primary-tablist/Component.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from 'react';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport cn from 'classnames';\n\nimport { KeyboardFocusable } from '@alfalab/core-components-keyboard-focusable';\nimport { fnUtils } from '@alfalab/core-components-shared';\n\nimport { useTabs } from '../../hooks/use-tabs';\nimport { type PlatformProps, type Styles, type TabListProps } from '../../typings';\nimport { ScrollableContainer } from '../scrollable-container';\nimport { Title } from '../title';\n\nexport const PrimaryTabList = ({\n size,\n styles = {},\n className,\n containerClassName,\n titles = [],\n selectedId = titles.length ? titles[0].id : undefined,\n scrollable = true,\n fullWidthScroll,\n onChange,\n dataTestId,\n platform,\n textStyle,\n inlineStyle,\n showSkeleton,\n skeletonProps,\n}: TabListProps & Styles & PlatformProps) => {\n const lineRef = useRef<HTMLDivElement>(null);\n\n const { selectedTab, focusedTab, getTabListItemProps } = useTabs({\n titles,\n selectedId,\n onChange,\n });\n\n // расчет размера и положения нижней полосы\n useEffect(() => {\n if (selectedTab) {\n const updateLineWidth = () => {\n if (lineRef.current) {\n lineRef.current.style.width = `${selectedTab.offsetWidth}px`;\n lineRef.current.style.transform = `translateX(${selectedTab.offsetLeft}px)`;\n }\n };\n\n const ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n const observer = new ResizeObserver(updateLineWidth);\n\n observer.observe(selectedTab);\n\n return () => observer.disconnect();\n }\n\n return fnUtils.noop;\n }, [selectedTab, titles]);\n\n const handleTitleResize = useCallback(() => {\n if (selectedTab && lineRef.current) {\n lineRef.current.style.width = `${selectedTab.offsetWidth}px`;\n lineRef.current.style.transform = `translateX(${selectedTab.offsetLeft}px)`;\n }\n }, [selectedTab]);\n\n const renderContent = () => (\n <div\n role='tablist'\n data-test-id={dataTestId}\n className={cn(styles.component, className, !textStyle && size && styles[size], {\n [styles.fullWidthScroll]: fullWidthScroll,\n })}\n >\n {titles.map(({ dataTestId: _, toggleRef: __, ...restTitleProps }, index) => (\n <KeyboardFocusable key={restTitleProps.id}>\n {(ref, focused) => (\n <Title\n {...getTabListItemProps(index, ref)}\n {...restTitleProps}\n focused={focused}\n styles={styles}\n showSkeleton={showSkeleton}\n skeletonProps={skeletonProps}\n onResize={handleTitleResize}\n className={cn({ [styles.noTextStyle]: !textStyle })}\n />\n )}\n </KeyboardFocusable>\n ))}\n\n <div className={styles.line} ref={lineRef} />\n </div>\n );\n\n const wrapperClassName = cn(textStyle && styles[textStyle], styles[platform]);\n\n return scrollable ? (\n <ScrollableContainer\n containerWrapperClassName={wrapperClassName}\n activeChild={focusedTab || selectedTab}\n containerClassName={containerClassName}\n scrollControlsClassName={cn(textStyle && styles.scrollControls)}\n fullWidthScroll={fullWidthScroll}\n view='primary'\n size={textStyle ? undefined : size}\n platform={platform}\n inlineStyle={inlineStyle}\n showSkeleton={showSkeleton}\n >\n {renderContent()}\n </ScrollableContainer>\n ) : (\n <div\n className={cn(styles.container, wrapperClassName, containerClassName)}\n style={inlineStyle}\n >\n {renderContent()}\n </div>\n );\n};\n"],"names":["useRef","useTabs","useEffect","ResizeObserverPolyfill","fnUtils","useCallback","React","cn","__rest","KeyboardFocusable","Title","__assign","ScrollableContainer"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { type TabListProps } from '../../typings';
|
|
3
|
-
export
|
|
3
|
+
export type PrimaryTabListMobileProps = Omit<TabListProps, 'size' | 'collapsedTabsIds'>;
|
|
4
4
|
export declare const PrimaryTabListMobile: (props: PrimaryTabListMobileProps) => React.JSX.Element;
|
|
@@ -28,11 +28,9 @@
|
|
|
28
28
|
--gap-4-neg: var(--gap-2xs-neg);
|
|
29
29
|
}
|
|
30
30
|
:root {
|
|
31
|
-
--font-family-
|
|
32
|
-
system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue',
|
|
33
|
-
|
|
34
|
-
'Styrene UI', system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Helvetica,
|
|
35
|
-
sans-serif;
|
|
31
|
+
--font-family-alfasans:
|
|
32
|
+
'Alfa Interface Sans', system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue',
|
|
33
|
+
Helvetica, sans-serif;
|
|
36
34
|
}
|
|
37
35
|
:root {
|
|
38
36
|
--focus-color: var(--color-light-status-info);
|
|
@@ -72,55 +70,64 @@
|
|
|
72
70
|
font-size: 18px;
|
|
73
71
|
line-height: 24px;
|
|
74
72
|
font-weight: 400;
|
|
75
|
-
|
|
73
|
+
letter-spacing: -0.36px;
|
|
74
|
+
font-family: var(--font-family-alfasans);
|
|
76
75
|
}
|
|
77
76
|
.desktop.paragraph-primary-medium .title {
|
|
78
77
|
font-size: 16px;
|
|
79
78
|
line-height: 24px;
|
|
80
79
|
font-weight: 400;
|
|
81
|
-
|
|
80
|
+
letter-spacing: -0.24px;
|
|
81
|
+
font-family: var(--font-family-alfasans);
|
|
82
82
|
}
|
|
83
83
|
.desktop.paragraph-primary-small .title {
|
|
84
84
|
font-size: 14px;
|
|
85
85
|
line-height: 20px;
|
|
86
86
|
font-weight: 400;
|
|
87
|
-
|
|
87
|
+
letter-spacing: -0.08px;
|
|
88
|
+
font-family: var(--font-family-alfasans);
|
|
88
89
|
}
|
|
89
90
|
.desktop.action-primary-large .title {
|
|
90
91
|
font-size: 18px;
|
|
91
92
|
line-height: 24px;
|
|
92
93
|
font-weight: 500;
|
|
93
|
-
|
|
94
|
+
letter-spacing: -0.17px;
|
|
95
|
+
font-family: var(--font-family-alfasans);
|
|
94
96
|
}
|
|
95
97
|
.desktop.action-primary-medium .title {
|
|
96
98
|
font-size: 16px;
|
|
97
99
|
line-height: 24px;
|
|
98
100
|
font-weight: 500;
|
|
99
|
-
|
|
101
|
+
letter-spacing: -0.05px;
|
|
102
|
+
font-family: var(--font-family-alfasans);
|
|
100
103
|
}
|
|
101
104
|
.desktop.action-primary-small .title {
|
|
102
105
|
font-size: 14px;
|
|
103
106
|
line-height: 20px;
|
|
104
107
|
font-weight: 500;
|
|
105
|
-
|
|
108
|
+
letter-spacing: 0.07px;
|
|
109
|
+
font-family: var(--font-family-alfasans);
|
|
106
110
|
}
|
|
107
111
|
.desktop.accent-primary-large .title {
|
|
108
112
|
font-size: 18px;
|
|
109
113
|
line-height: 24px;
|
|
110
114
|
font-weight: 700;
|
|
111
|
-
|
|
115
|
+
letter-spacing: 0.38px;
|
|
116
|
+
font-family: var(--font-family-alfasans);
|
|
112
117
|
}
|
|
113
118
|
.desktop.accent-primary-medium .title {
|
|
114
119
|
font-size: 16px;
|
|
115
120
|
line-height: 24px;
|
|
116
121
|
font-weight: 700;
|
|
117
|
-
|
|
122
|
+
letter-spacing: 0.43px;
|
|
123
|
+
font-family: var(--font-family-alfasans);
|
|
118
124
|
}
|
|
119
125
|
.desktop.accent-primary-small .title {
|
|
120
126
|
font-size: 14px;
|
|
121
127
|
line-height: 20px;
|
|
122
128
|
font-weight: 700;
|
|
123
|
-
|
|
129
|
+
letter-spacing: 0.47px;
|
|
130
|
+
font-family: var(--font-family-alfasans);
|
|
124
131
|
}
|
|
125
132
|
.desktop.paragraph-primary-large .title, .desktop.paragraph-primary-medium .title, .desktop.accent-primary-large .title, .desktop.accent-primary-medium .title, .desktop.action-primary-large .title, .desktop.action-primary-medium .title {
|
|
126
133
|
padding-bottom: calc(24px / 2);
|
|
@@ -178,66 +185,71 @@
|
|
|
178
185
|
font-size: 48px;
|
|
179
186
|
line-height: 52px;
|
|
180
187
|
font-weight: 700;
|
|
181
|
-
|
|
188
|
+
letter-spacing: 0.1px;
|
|
189
|
+
font-family: var(--font-family-alfasans);
|
|
182
190
|
}
|
|
183
191
|
.desktop.headline-system-large .title {
|
|
184
192
|
font-size: 40px;
|
|
185
193
|
line-height: 48px;
|
|
186
194
|
font-weight: 700;
|
|
187
|
-
|
|
195
|
+
letter-spacing: 0.1px;
|
|
196
|
+
font-family: var(--font-family-alfasans);
|
|
188
197
|
}
|
|
189
198
|
.desktop.headline-system-medium .title {
|
|
190
199
|
font-size: 30px;
|
|
191
200
|
line-height: 36px;
|
|
192
201
|
font-weight: 700;
|
|
193
|
-
|
|
202
|
+
letter-spacing: 0.1px;
|
|
203
|
+
font-family: var(--font-family-alfasans);
|
|
194
204
|
}
|
|
195
205
|
.desktop.headline-system-small .title {
|
|
196
206
|
font-size: 22px;
|
|
197
207
|
line-height: 26px;
|
|
198
208
|
font-weight: 700;
|
|
199
|
-
|
|
209
|
+
letter-spacing: 0.2px;
|
|
210
|
+
font-family: var(--font-family-alfasans);
|
|
200
211
|
}
|
|
201
212
|
.desktop.headline-system-xsmall .title {
|
|
202
213
|
font-size: 18px;
|
|
203
214
|
line-height: 22px;
|
|
204
215
|
font-weight: 700;
|
|
205
|
-
|
|
216
|
+
letter-spacing: 0.38px;
|
|
217
|
+
font-family: var(--font-family-alfasans);
|
|
206
218
|
}
|
|
207
219
|
.desktop.headline-xlarge .title {
|
|
208
220
|
font-size: 48px;
|
|
209
221
|
line-height: 64px;
|
|
210
|
-
font-weight:
|
|
211
|
-
|
|
212
|
-
font-family: var(--font-family-
|
|
222
|
+
font-weight: 700;
|
|
223
|
+
letter-spacing: 0.1px;
|
|
224
|
+
font-family: var(--font-family-alfasans);
|
|
213
225
|
}
|
|
214
226
|
.desktop.headline-large .title {
|
|
215
227
|
font-size: 40px;
|
|
216
228
|
line-height: 48px;
|
|
217
|
-
font-weight:
|
|
218
|
-
|
|
219
|
-
font-family: var(--font-family-
|
|
229
|
+
font-weight: 700;
|
|
230
|
+
letter-spacing: 0.1px;
|
|
231
|
+
font-family: var(--font-family-alfasans);
|
|
220
232
|
}
|
|
221
233
|
.desktop.headline-medium .title {
|
|
222
234
|
font-size: 32px;
|
|
223
235
|
line-height: 40px;
|
|
224
|
-
font-weight:
|
|
225
|
-
|
|
226
|
-
font-family: var(--font-family-
|
|
236
|
+
font-weight: 700;
|
|
237
|
+
letter-spacing: 0.3px;
|
|
238
|
+
font-family: var(--font-family-alfasans);
|
|
227
239
|
}
|
|
228
240
|
.desktop.headline-small .title {
|
|
229
241
|
font-size: 24px;
|
|
230
242
|
line-height: 32px;
|
|
231
|
-
font-weight:
|
|
232
|
-
|
|
233
|
-
font-family: var(--font-family-
|
|
243
|
+
font-weight: 700;
|
|
244
|
+
letter-spacing: 0.39px;
|
|
245
|
+
font-family: var(--font-family-alfasans);
|
|
234
246
|
}
|
|
235
247
|
.desktop.headline-xsmall .title {
|
|
236
248
|
font-size: 20px;
|
|
237
249
|
line-height: 24px;
|
|
238
|
-
font-weight:
|
|
239
|
-
|
|
240
|
-
font-family: var(--font-family-
|
|
250
|
+
font-weight: 700;
|
|
251
|
+
letter-spacing: 0.33px;
|
|
252
|
+
font-family: var(--font-family-alfasans);
|
|
241
253
|
}
|
|
242
254
|
.desktop.headline-system-xlarge .title {
|
|
243
255
|
padding-bottom: calc(52px / 2);
|
|
@@ -532,5 +544,6 @@
|
|
|
532
544
|
font-size: 18px;
|
|
533
545
|
line-height: 24px;
|
|
534
546
|
font-weight: 400;
|
|
535
|
-
|
|
547
|
+
letter-spacing: -0.36px;
|
|
548
|
+
font-family: var(--font-family-alfasans);
|
|
536
549
|
}
|
|
@@ -6,11 +6,9 @@
|
|
|
6
6
|
--gap-24: var(--gap-xl);
|
|
7
7
|
}
|
|
8
8
|
:root {
|
|
9
|
-
--font-family-
|
|
10
|
-
system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue',
|
|
11
|
-
|
|
12
|
-
'Styrene UI', system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Helvetica,
|
|
13
|
-
sans-serif;
|
|
9
|
+
--font-family-alfasans:
|
|
10
|
+
'Alfa Interface Sans', system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue',
|
|
11
|
+
Helvetica, sans-serif;
|
|
14
12
|
}
|
|
15
13
|
:root {
|
|
16
14
|
--primary-tablist-mobile-gaps: var(--gap-24);
|
|
@@ -29,55 +27,64 @@
|
|
|
29
27
|
font-size: 18px;
|
|
30
28
|
line-height: 24px;
|
|
31
29
|
font-weight: 400;
|
|
32
|
-
|
|
30
|
+
letter-spacing: -0.36px;
|
|
31
|
+
font-family: var(--font-family-alfasans);
|
|
33
32
|
}
|
|
34
33
|
.mobile.paragraph-primary-medium .title {
|
|
35
34
|
font-size: 16px;
|
|
36
35
|
line-height: 24px;
|
|
37
36
|
font-weight: 400;
|
|
38
|
-
|
|
37
|
+
letter-spacing: -0.24px;
|
|
38
|
+
font-family: var(--font-family-alfasans);
|
|
39
39
|
}
|
|
40
40
|
.mobile.paragraph-primary-small .title {
|
|
41
41
|
font-size: 14px;
|
|
42
42
|
line-height: 20px;
|
|
43
43
|
font-weight: 400;
|
|
44
|
-
|
|
44
|
+
letter-spacing: -0.08px;
|
|
45
|
+
font-family: var(--font-family-alfasans);
|
|
45
46
|
}
|
|
46
47
|
.mobile.action-primary-large .title {
|
|
47
48
|
font-size: 18px;
|
|
48
49
|
line-height: 24px;
|
|
49
50
|
font-weight: 500;
|
|
50
|
-
|
|
51
|
+
letter-spacing: -0.17px;
|
|
52
|
+
font-family: var(--font-family-alfasans);
|
|
51
53
|
}
|
|
52
54
|
.mobile.action-primary-medium .title {
|
|
53
55
|
font-size: 16px;
|
|
54
56
|
line-height: 24px;
|
|
55
57
|
font-weight: 500;
|
|
56
|
-
|
|
58
|
+
letter-spacing: -0.05px;
|
|
59
|
+
font-family: var(--font-family-alfasans);
|
|
57
60
|
}
|
|
58
61
|
.mobile.action-primary-small .title {
|
|
59
62
|
font-size: 14px;
|
|
60
63
|
line-height: 20px;
|
|
61
64
|
font-weight: 500;
|
|
62
|
-
|
|
65
|
+
letter-spacing: 0.07px;
|
|
66
|
+
font-family: var(--font-family-alfasans);
|
|
63
67
|
}
|
|
64
68
|
.mobile.accent-primary-large .title {
|
|
65
69
|
font-size: 18px;
|
|
66
70
|
line-height: 24px;
|
|
67
71
|
font-weight: 700;
|
|
68
|
-
|
|
72
|
+
letter-spacing: 0.38px;
|
|
73
|
+
font-family: var(--font-family-alfasans);
|
|
69
74
|
}
|
|
70
75
|
.mobile.accent-primary-medium .title {
|
|
71
76
|
font-size: 16px;
|
|
72
77
|
line-height: 24px;
|
|
73
78
|
font-weight: 700;
|
|
74
|
-
|
|
79
|
+
letter-spacing: 0.43px;
|
|
80
|
+
font-family: var(--font-family-alfasans);
|
|
75
81
|
}
|
|
76
82
|
.mobile.accent-primary-small .title {
|
|
77
83
|
font-size: 14px;
|
|
78
84
|
line-height: 20px;
|
|
79
85
|
font-weight: 700;
|
|
80
|
-
|
|
86
|
+
letter-spacing: 0.47px;
|
|
87
|
+
font-family: var(--font-family-alfasans);
|
|
81
88
|
}
|
|
82
89
|
.mobile.paragraph-primary-large .title, .mobile.paragraph-primary-medium .title, .mobile.accent-primary-large .title, .mobile.accent-primary-medium .title, .mobile.action-primary-large .title, .mobile.action-primary-medium .title {
|
|
83
90
|
padding-bottom: calc(24px / 2);
|
|
@@ -134,67 +141,72 @@
|
|
|
134
141
|
.mobile.headline-system-xlarge .title {
|
|
135
142
|
font-size: 34px;
|
|
136
143
|
line-height: 40px;
|
|
137
|
-
font-weight:
|
|
138
|
-
|
|
144
|
+
font-weight: 500;
|
|
145
|
+
letter-spacing: -0.32px;
|
|
146
|
+
font-family: var(--font-family-alfasans);
|
|
139
147
|
}
|
|
140
148
|
.mobile.headline-system-large .title {
|
|
141
149
|
font-size: 30px;
|
|
142
150
|
line-height: 36px;
|
|
143
|
-
font-weight:
|
|
144
|
-
|
|
151
|
+
font-weight: 500;
|
|
152
|
+
letter-spacing: -0.25px;
|
|
153
|
+
font-family: var(--font-family-alfasans);
|
|
145
154
|
}
|
|
146
155
|
.mobile.headline-system-medium .title {
|
|
147
156
|
font-size: 26px;
|
|
148
157
|
line-height: 32px;
|
|
149
|
-
font-weight:
|
|
150
|
-
|
|
158
|
+
font-weight: 500;
|
|
159
|
+
letter-spacing: -0.25px;
|
|
160
|
+
font-family: var(--font-family-alfasans);
|
|
151
161
|
}
|
|
152
162
|
.mobile.headline-system-small .title {
|
|
153
163
|
font-size: 20px;
|
|
154
164
|
line-height: 28px;
|
|
155
|
-
font-weight:
|
|
156
|
-
|
|
165
|
+
font-weight: 500;
|
|
166
|
+
letter-spacing: -0.15px;
|
|
167
|
+
font-family: var(--font-family-alfasans);
|
|
157
168
|
}
|
|
158
169
|
.mobile.headline-system-xsmall .title {
|
|
159
170
|
font-size: 16px;
|
|
160
171
|
line-height: 20px;
|
|
161
|
-
font-weight:
|
|
162
|
-
|
|
172
|
+
font-weight: 500;
|
|
173
|
+
letter-spacing: 0.17px;
|
|
174
|
+
font-family: var(--font-family-alfasans);
|
|
163
175
|
}
|
|
164
176
|
.mobile.headline-xlarge .title {
|
|
165
177
|
font-size: 34px;
|
|
166
178
|
line-height: 40px;
|
|
167
179
|
font-weight: 500;
|
|
168
|
-
|
|
169
|
-
font-family: var(--font-family-
|
|
180
|
+
letter-spacing: -0.32px;
|
|
181
|
+
font-family: var(--font-family-alfasans);
|
|
170
182
|
}
|
|
171
183
|
.mobile.headline-large .title {
|
|
172
184
|
font-size: 30px;
|
|
173
185
|
line-height: 36px;
|
|
174
186
|
font-weight: 500;
|
|
175
|
-
|
|
176
|
-
font-family: var(--font-family-
|
|
187
|
+
letter-spacing: -0.25px;
|
|
188
|
+
font-family: var(--font-family-alfasans);
|
|
177
189
|
}
|
|
178
190
|
.mobile.headline-medium .title {
|
|
179
191
|
font-size: 26px;
|
|
180
192
|
line-height: 32px;
|
|
181
193
|
font-weight: 500;
|
|
182
|
-
|
|
183
|
-
font-family: var(--font-family-
|
|
194
|
+
letter-spacing: -0.25px;
|
|
195
|
+
font-family: var(--font-family-alfasans);
|
|
184
196
|
}
|
|
185
197
|
.mobile.headline-small .title {
|
|
186
198
|
font-size: 20px;
|
|
187
199
|
line-height: 28px;
|
|
188
200
|
font-weight: 500;
|
|
189
|
-
|
|
190
|
-
font-family: var(--font-family-
|
|
201
|
+
letter-spacing: -0.15px;
|
|
202
|
+
font-family: var(--font-family-alfasans);
|
|
191
203
|
}
|
|
192
204
|
.mobile.headline-xsmall .title {
|
|
193
205
|
font-size: 16px;
|
|
194
206
|
line-height: 20px;
|
|
195
207
|
font-weight: 500;
|
|
196
|
-
|
|
197
|
-
font-family: var(--font-family-
|
|
208
|
+
letter-spacing: 0.17px;
|
|
209
|
+
font-family: var(--font-family-alfasans);
|
|
198
210
|
}
|
|
199
211
|
.mobile.headline-system-xlarge .title, .mobile.headline-xlarge .title {
|
|
200
212
|
padding-bottom: calc(40px / 2);
|
|
@@ -305,5 +317,6 @@
|
|
|
305
317
|
font-size: 16px;
|
|
306
318
|
line-height: 24px;
|
|
307
319
|
font-weight: 400;
|
|
308
|
-
|
|
320
|
+
letter-spacing: -0.24px;
|
|
321
|
+
font-family: var(--font-family-alfasans);
|
|
309
322
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Component.js","sources":["../../../src/components/scroll-controls/Component.tsx"],"sourcesContent":["import React, { forwardRef, type RefObject, useEffect, useState } from 'react';\nimport cn from 'classnames';\nimport _debounce from 'lodash/debounce';\n\nimport { IconButton } from '@alfalab/core-components-icon-button';\nimport { ChevronLeftCompactSIcon } from '@alfalab/icons-glyph/ChevronLeftCompactSIcon';\nimport { ChevronRightCompactSIcon } from '@alfalab/icons-glyph/ChevronRightCompactSIcon';\n\nimport { type TabsProps } from '../../typings';\n\nimport { getDisabledState, scrollIntoFirstTab, scrollIntoLastTab } from './utils';\n\nimport styles from './index.module.css';\n\ntype ScrollControlsProps = {\n className?: string;\n view: Exclude<TabsProps['view'], undefined>;\n size: TabsProps['size'];\n containerRef: RefObject<HTMLDivElement>;\n showSkeleton?: boolean;\n};\n\nexport const ScrollControls = forwardRef<HTMLDivElement, ScrollControlsProps>(\n ({ containerRef, view, size: sizeProp, className, showSkeleton }, ref) => {\n const container = containerRef.current;\n const [disabledState, updateDisabledState] = useState(() => getDisabledState(container));\n\n useEffect(() => {\n const handleScroll = _debounce(\n () => updateDisabledState(getDisabledState(container)),\n 100,\n { leading: true, maxWait: 100, trailing: true },\n );\n\n container?.addEventListener('scroll', handleScroll);\n\n return () => container?.removeEventListener('scroll', handleScroll);\n }, [container]);\n\n const getSize = () => {\n if (view === 'primary') {\n return sizeProp === 'xl' ? 32 : 24;\n }\n\n return sizeProp && ['s', 'm', 'l', 'xl'].includes(sizeProp) ? 48 : 32;\n };\n\n const handleScrollLeft = () => scrollIntoFirstTab(container);\n\n const handleScrollRight = () => scrollIntoLastTab(container);\n\n const commonButtonProps = {\n className: styles.button,\n size: getSize(),\n view: 'secondary',\n } as const;\n\n return (\n <div\n ref={ref}\n className={cn(\n styles.component,\n styles[view],\n sizeProp && styles[sizeProp],\n className,\n {\n [styles.borderVisible]: !disabledState.toRight,\n },\n )}\n >\n <IconButton\n {...commonButtonProps}\n icon={ChevronLeftCompactSIcon}\n disabled={disabledState.toLeft || showSkeleton}\n onClick={handleScrollLeft}\n />\n <IconButton\n {...commonButtonProps}\n icon={ChevronRightCompactSIcon}\n disabled={disabledState.toRight || showSkeleton}\n onClick={handleScrollRight}\n />\n </div>\n );\n },\n);\n\nScrollControls.displayName = 'ScrollControls';\n"],"names":["forwardRef","useState","getDisabledState","useEffect","_debounce","scrollIntoFirstTab","scrollIntoLastTab","styles","React","cn","IconButton","__assign","ChevronLeftCompactSIcon","ChevronRightCompactSIcon"],"mappings":";;;;;;;;;;;;;;;;;;;;;IAsBa,cAAc,GAAGA,gBAAU,CACpC,UAAC,EAA+D,EAAE,GAAG,EAAA;;AAAlE,IAAA,IAAA,YAAY,GAAA,EAAA,CAAA,YAAA,EAAE,IAAI,GAAA,EAAA,CAAA,IAAA,EAAQ,QAAQ,GAAA,EAAA,CAAA,IAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA;AAC1D,IAAA,IAAM,SAAS,GAAG,YAAY,CAAC,OAAO;AAChC,IAAA,IAAA,KAAuCC,cAAQ,CAAC,cAAM,OAAAC,sBAAgB,CAAC,SAAS,CAAC,CAA3B,EAA2B,CAAC,EAAjF,aAAa,QAAA,EAAE,mBAAmB,QAA+C;AAExF,IAAAC,eAAS,CAAC,YAAA;AACN,QAAA,IAAM,YAAY,GAAGC,0BAAS,CAC1B,cAAM,OAAA,mBAAmB,CAACF,sBAAgB,CAAC,SAAS,CAAC,CAAC,GAAA,EACtD,GAAG,EACH,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAClD;QAED,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC;AAEnD,QAAA,OAAO,cAAM,OAAA,SAAS,KAAT,IAAA,IAAA,SAAS,uBAAT,SAAS,CAAE,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA,EAAA;AACvE,KAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAEf,IAAA,IAAM,OAAO,GAAG,YAAA;
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../../../src/components/scroll-controls/Component.tsx"],"sourcesContent":["import React, { forwardRef, type RefObject, useEffect, useState } from 'react';\nimport cn from 'classnames';\nimport _debounce from 'lodash/debounce';\n\nimport { IconButton } from '@alfalab/core-components-icon-button';\nimport { ChevronLeftCompactSIcon } from '@alfalab/icons-glyph/ChevronLeftCompactSIcon';\nimport { ChevronRightCompactSIcon } from '@alfalab/icons-glyph/ChevronRightCompactSIcon';\n\nimport { type TabsProps } from '../../typings';\n\nimport { getDisabledState, scrollIntoFirstTab, scrollIntoLastTab } from './utils';\n\nimport styles from './index.module.css';\n\ntype ScrollControlsProps = {\n className?: string;\n view: Exclude<TabsProps['view'], undefined>;\n size: TabsProps['size'];\n containerRef: RefObject<HTMLDivElement>;\n showSkeleton?: boolean;\n};\n\nexport const ScrollControls = forwardRef<HTMLDivElement, ScrollControlsProps>(\n ({ containerRef, view, size: sizeProp, className, showSkeleton }, ref) => {\n const container = containerRef.current;\n const [disabledState, updateDisabledState] = useState(() => getDisabledState(container));\n\n useEffect(() => {\n const handleScroll = _debounce(\n () => updateDisabledState(getDisabledState(container)),\n 100,\n { leading: true, maxWait: 100, trailing: true },\n );\n\n container?.addEventListener('scroll', handleScroll);\n\n return () => container?.removeEventListener('scroll', handleScroll);\n }, [container]);\n\n const getSize = () => {\n if (view === 'primary') {\n return sizeProp === 'xl' ? 32 : 24;\n }\n\n return sizeProp && ['s', 'm', 'l', 'xl'].includes(sizeProp) ? 48 : 32;\n };\n\n const handleScrollLeft = () => scrollIntoFirstTab(container);\n\n const handleScrollRight = () => scrollIntoLastTab(container);\n\n const commonButtonProps = {\n className: styles.button,\n size: getSize(),\n view: 'secondary',\n } as const;\n\n return (\n <div\n ref={ref}\n className={cn(\n styles.component,\n styles[view],\n sizeProp && styles[sizeProp],\n className,\n {\n [styles.borderVisible]: !disabledState.toRight,\n },\n )}\n >\n <IconButton\n {...commonButtonProps}\n icon={ChevronLeftCompactSIcon}\n disabled={disabledState.toLeft || showSkeleton}\n onClick={handleScrollLeft}\n />\n <IconButton\n {...commonButtonProps}\n icon={ChevronRightCompactSIcon}\n disabled={disabledState.toRight || showSkeleton}\n onClick={handleScrollRight}\n />\n </div>\n );\n },\n);\n\nScrollControls.displayName = 'ScrollControls';\n"],"names":["forwardRef","useState","getDisabledState","useEffect","_debounce","scrollIntoFirstTab","scrollIntoLastTab","styles","React","cn","IconButton","__assign","ChevronLeftCompactSIcon","ChevronRightCompactSIcon"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/components/scroll-controls/utils.ts"],"sourcesContent":["const ADDITIONAL_OFFSET = 15;\n\nfunction getTabs(container: HTMLDivElement) {\n return Array.from(container.querySelectorAll<HTMLButtonElement>('button[role=\"tab\"]'));\n}\n\nfunction findLastVisibleTab(container: HTMLDivElement) {\n const tabs = getTabs(container);\n\n return tabs.reduce((res, tab) => {\n if (tab.offsetLeft + ADDITIONAL_OFFSET < container.clientWidth + container.scrollLeft) {\n return tab;\n }\n\n return res;\n }, tabs[0]);\n}\n\nfunction findFirstVisibleTab(container: HTMLDivElement) {\n const tabs = getTabs(container);\n\n return tabs.reduceRight(\n (res, tab) => {\n if (tab.offsetLeft + tab.clientWidth > container.scrollLeft + ADDITIONAL_OFFSET) {\n return tab;\n }\n\n return res;\n },\n tabs[tabs.length - 1],\n );\n}\n\nexport function scrollIntoLastTab(container: HTMLDivElement | null) {\n if (!container) return;\n\n findLastVisibleTab(container).scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'start',\n });\n}\n\nexport function scrollIntoFirstTab(container: HTMLDivElement | null) {\n if (!container) return;\n\n findFirstVisibleTab(container).scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'end',\n });\n}\n\nexport function getDisabledState(container: HTMLDivElement | null) {\n if (!container) return { toLeft: false, toRight: false };\n const scrollOffset = 2;\n\n const toLeft = container.scrollLeft <= scrollOffset;\n const toRight =\n container.scrollLeft + container.clientWidth >= container.scrollWidth - scrollOffset;\n\n return { toLeft, toRight };\n}\n"],"names":[],"mappings":";;;;AAAA,IAAM,iBAAiB,GAAG,EAAE;AAE5B,SAAS,OAAO,CAAC,SAAyB,EAAA;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAoB,oBAAoB,CAAC,CAAC;AAC1F;AAEA,SAAS,kBAAkB,CAAC,SAAyB,EAAA;AACjD,IAAA,IAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;AAE/B,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,GAAG,EAAA;AACxB,QAAA,IAAI,GAAG,CAAC,UAAU,GAAG,iBAAiB,GAAG,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,EAAE;AACnF,YAAA,OAAO,GAAG
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/components/scroll-controls/utils.ts"],"sourcesContent":["const ADDITIONAL_OFFSET = 15;\n\nfunction getTabs(container: HTMLDivElement) {\n return Array.from(container.querySelectorAll<HTMLButtonElement>('button[role=\"tab\"]'));\n}\n\nfunction findLastVisibleTab(container: HTMLDivElement) {\n const tabs = getTabs(container);\n\n return tabs.reduce((res, tab) => {\n if (tab.offsetLeft + ADDITIONAL_OFFSET < container.clientWidth + container.scrollLeft) {\n return tab;\n }\n\n return res;\n }, tabs[0]);\n}\n\nfunction findFirstVisibleTab(container: HTMLDivElement) {\n const tabs = getTabs(container);\n\n return tabs.reduceRight(\n (res, tab) => {\n if (tab.offsetLeft + tab.clientWidth > container.scrollLeft + ADDITIONAL_OFFSET) {\n return tab;\n }\n\n return res;\n },\n tabs[tabs.length - 1],\n );\n}\n\nexport function scrollIntoLastTab(container: HTMLDivElement | null) {\n if (!container) return;\n\n findLastVisibleTab(container).scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'start',\n });\n}\n\nexport function scrollIntoFirstTab(container: HTMLDivElement | null) {\n if (!container) return;\n\n findFirstVisibleTab(container).scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'end',\n });\n}\n\nexport function getDisabledState(container: HTMLDivElement | null) {\n if (!container) return { toLeft: false, toRight: false };\n const scrollOffset = 2;\n\n const toLeft = container.scrollLeft <= scrollOffset;\n const toRight =\n container.scrollLeft + container.clientWidth >= container.scrollWidth - scrollOffset;\n\n return { toLeft, toRight };\n}\n"],"names":[],"mappings":";;;;AAAA,IAAM,iBAAiB,GAAG,EAAE;AAE5B,SAAS,OAAO,CAAC,SAAyB,EAAA;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAoB,oBAAoB,CAAC,CAAC;AAC1F;AAEA,SAAS,kBAAkB,CAAC,SAAyB,EAAA;AACjD,IAAA,IAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;AAE/B,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,GAAG,EAAA;AACxB,QAAA,IAAI,GAAG,CAAC,UAAU,GAAG,iBAAiB,GAAG,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,EAAE;AACnF,YAAA,OAAO,GAAG;;AAGd,QAAA,OAAO,GAAG;AACd,KAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACf;AAEA,SAAS,mBAAmB,CAAC,SAAyB,EAAA;AAClD,IAAA,IAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;AAE/B,IAAA,OAAO,IAAI,CAAC,WAAW,CACnB,UAAC,GAAG,EAAE,GAAG,EAAA;AACL,QAAA,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,GAAG,iBAAiB,EAAE;AAC7E,YAAA,OAAO,GAAG;;AAGd,QAAA,OAAO,GAAG;KACb,EACD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CACxB;AACL;AAEM,SAAU,iBAAiB,CAAC,SAAgC,EAAA;AAC9D,IAAA,IAAI,CAAC,SAAS;QAAE;AAEhB,IAAA,kBAAkB,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC;AACzC,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,MAAM,EAAE,OAAO;AAClB,KAAA,CAAC;AACN;AAEM,SAAU,kBAAkB,CAAC,SAAgC,EAAA;AAC/D,IAAA,IAAI,CAAC,SAAS;QAAE;AAEhB,IAAA,mBAAmB,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC;AAC1C,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,MAAM,EAAE,KAAK;AAChB,KAAA,CAAC;AACN;AAEM,SAAU,gBAAgB,CAAC,SAAgC,EAAA;AAC7D,IAAA,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACxD,IAAM,YAAY,GAAG,CAAC;AAEtB,IAAA,IAAM,MAAM,GAAG,SAAS,CAAC,UAAU,IAAI,YAAY;AACnD,IAAA,IAAM,OAAO,GACT,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,GAAG,YAAY;AAExF,IAAA,OAAO,EAAE,MAAM,EAAA,MAAA,EAAE,OAAO,EAAA,OAAA,EAAE;AAC9B;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { type ReactNode } from 'react';
|
|
2
2
|
import { type PlatformProps, type TabsProps } from '../../typings';
|
|
3
|
-
export
|
|
3
|
+
export type ScrollableContainerProps = {
|
|
4
4
|
/**
|
|
5
5
|
* Дополнительный класс враппера контейнера
|
|
6
6
|
*/
|
|
@@ -38,4 +38,4 @@ export declare type ScrollableContainerProps = {
|
|
|
38
38
|
*/
|
|
39
39
|
showSkeleton?: boolean;
|
|
40
40
|
};
|
|
41
|
-
export declare const ScrollableContainer: ({ containerWrapperClassName, containerClassName, scrollControlsClassName, children, activeChild, fullWidthScroll, view, size, platform, inlineStyle, showSkeleton, }: ScrollableContainerProps & Pick<TabsProps,
|
|
41
|
+
export declare const ScrollableContainer: ({ containerWrapperClassName, containerClassName, scrollControlsClassName, children, activeChild, fullWidthScroll, view, size, platform, inlineStyle, showSkeleton, }: ScrollableContainerProps & Pick<TabsProps, "fullWidthScroll"> & PlatformProps) => React.JSX.Element;
|