Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(CustomScrollView): add horizontal scroll support #7130

Merged
merged 31 commits into from
Aug 1, 2024
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
1978c23
feat(CustomScrollView): add horizontal scroll support
EldarMuhamethanov Jul 5, 2024
5f7270f
feat(CustomScrollView): add prop enableHorizontalScroll
EldarMuhamethanov Jul 5, 2024
a8bf115
fix(CustomScrollView): add doc to prop
EldarMuhamethanov Jul 5, 2024
b6da2c7
fix: run prettier
EldarMuhamethanov Jul 5, 2024
8bf0cf5
Merge branch 'master' into e.muhamethanov/6056/custom-horizontal-scro…
EldarMuhamethanov Jul 8, 2024
4d418ba
Merge branch 'master' into e.muhamethanov/6056/custom-horizontal-scro…
EldarMuhamethanov Jul 9, 2024
2b87e84
Merge branch 'master' into e.muhamethanov/6056/custom-horizontal-scro…
EldarMuhamethanov Jul 9, 2024
588154f
Merge branch 'master' into e.muhamethanov/6056/custom-horizontal-scro…
EldarMuhamethanov Jul 11, 2024
01cf86d
feat(CustomScrollView): add doc page to component.
EldarMuhamethanov Jul 11, 2024
4f6b090
feat(CustomScrollView): add story to component
EldarMuhamethanov Jul 11, 2024
909d17b
fix(CustomScrollView): rewrite description to CustomScrollView
EldarMuhamethanov Jul 11, 2024
b49305d
fix(CustomScrollView): fix text mistake
EldarMuhamethanov Jul 11, 2024
10c4f9f
Merge branch 'master' into e.muhamethanov/6056/custom-horizontal-scro…
EldarMuhamethanov Jul 16, 2024
81a60e6
fix(CustomScrollView): fix style
EldarMuhamethanov Jul 16, 2024
ce2062c
Merge branch 'master' into e.muhamethanov/6056/custom-horizontal-scro…
EldarMuhamethanov Jul 17, 2024
58c32b3
fix(CustomScrollView): avoid reflow in hooks
EldarMuhamethanov Jul 17, 2024
dd1c292
fix(CustomScrollView): run prettier
EldarMuhamethanov Jul 17, 2024
6b8986c
Merge branch 'master' into e.muhamethanov/6056/custom-horizontal-scro…
EldarMuhamethanov Jul 18, 2024
5970b9d
Merge branch 'master' into e.muhamethanov/6056/custom-horizontal-scro…
EldarMuhamethanov Jul 22, 2024
49f0d53
fix(CustomScrollView): add warning about using enableHorizontalScroll…
EldarMuhamethanov Jul 22, 2024
1f25b63
Merge branch 'master' into e.muhamethanov/6056/custom-horizontal-scro…
EldarMuhamethanov Jul 24, 2024
bea6ace
Merge branch 'master' into e.muhamethanov/6056/custom-horizontal-scro…
EldarMuhamethanov Jul 26, 2024
1406ce9
Merge branch 'master' into e.muhamethanov/6056/custom-horizontal-scro…
EldarMuhamethanov Jul 31, 2024
f28f262
fix(CustomScrollView): remove transform prop calculating
EldarMuhamethanov Jul 31, 2024
009ef4e
feat(CustomScrollView): refactor component logic
EldarMuhamethanov Jul 31, 2024
6e966f0
fix(CustomScrollView): rename methods
EldarMuhamethanov Jul 31, 2024
042f180
fix(useVerticalScrollController): fix transform declaration
EldarMuhamethanov Jul 31, 2024
319a596
fix(useVerticalScrollController): fix transform declaration
EldarMuhamethanov Jul 31, 2024
7b412a7
fix: move barRefs in hooks
EldarMuhamethanov Jul 31, 2024
eb688b7
fix: fix barHandlers declaration(add null)
EldarMuhamethanov Jul 31, 2024
4d4abda
fix: redactor useDetectScrollDirection
EldarMuhamethanov Jul 31, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import * as React from 'react';

export interface CustomScrollBarController {
barRef: React.RefObject<HTMLDivElement>;
trackerRef: React.RefObject<HTMLDivElement>;
trackerVisible: boolean;
onResize: () => void;
onMove: (e: MouseEvent) => void;
onUp: () => void;
onScroll: () => void;
onDragStart: (e: React.MouseEvent) => void;
inomdzhon marked this conversation as resolved.
Show resolved Hide resolved
onTrackerMouseEnter: () => void;
onTrackerMouseLeave: () => void;
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
block-size: 100%;
overflow-y: scroll;
overflow-x: hidden;
padding-inline-end: 100px;
position: relative;
outline: none;
}

.CustomScrollView__box--overscrollBehavior-contain {
Expand All @@ -23,41 +23,69 @@
overscroll-behavior: none;
}

.CustomScrollView__box--horizontalEnabled {
overflow-x: scroll;
}

.CustomScrollView__box-content {
position: relative;
inline-size: 100%;
block-size: 100%;
}

.CustomScrollView__barY:active + .CustomScrollView__box {
.CustomScrollView__barY:active + .CustomScrollView__box,
.CustomScrollView__barX:active + .CustomScrollView__box {
pointer-events: none;
}

.CustomScrollView__barY {
.CustomScrollView__barY,
.CustomScrollView__barX {
position: absolute;
}

.CustomScrollView__barY {
inset-block-start: 0;
inset-inline-end: 0;
block-size: 100%;
inline-size: 10px;
}

.CustomScrollView__barX {
inset-block-end: 0;
inset-inline-start: 0;
inline-size: 100%;
block-size: 10px;
}

.CustomScrollView__trackerY,
.CustomScrollView__trackerX {
position: absolute;
user-select: none;
box-sizing: border-box;
inset-block-start: 0;
inset-inline-start: 0;
}

.CustomScrollView__trackerY {
inline-size: 10px;
box-sizing: border-box;
padding-block: 4px;
padding-inline: 0 4px;
position: absolute;
inset-block-start: 0;
inset-inline-start: 0;
user-select: none;
}

.CustomScrollView__trackerY--hidden {
.CustomScrollView__trackerX {
block-size: 10px;
padding-inline: 4px;
padding-block: 0 4px;
}

.CustomScrollView__trackerY--hidden,
.CustomScrollView__trackerX--hidden {
opacity: 0;
transition: opacity 200ms;
}

.CustomScrollView__trackerY::before {
.CustomScrollView__trackerY::before,
.CustomScrollView__trackerX::before {
content: '';
opacity: 0.48;
display: block;
Expand All @@ -76,6 +104,12 @@
transform: scaleX(1.3333);
}

.CustomScrollView__trackerX:hover::before,
.CustomScrollView__trackerX:active::before {
opacity: 0.8;
transform: scaleY(1.3333);
}

/**
* CMP:
* CustomSelectDropdown
Expand Down Expand Up @@ -119,12 +153,14 @@
/**
* Не отрисовываем полосу прокрутки, если у устройства отсутствует мышь
*/
.CustomScrollView--hasPointer-false .CustomScrollView__barY {
.CustomScrollView--hasPointer-false .CustomScrollView__barY,
.CustomScrollView--hasPointer-false .CustomScrollView__barX {
display: none;
}

@media (--pointer-has-not) {
.CustomScrollView--hasPointer-none .CustomScrollView__barY {
.CustomScrollView--hasPointer-none .CustomScrollView__barY,
.CustomScrollView--hasPointer-none .CustomScrollView__barX {
display: none;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import { Meta, ReactRenderer, StoryObj } from '@storybook/react';
import { PartialStoryFn } from '@storybook/types';
import { CanvasFullLayout, DisableCartesianParam } from '../../storybook/constants';
import { Div } from '../Div/Div';
import { CustomScrollView, CustomScrollViewProps } from './CustomScrollView';

const Wrapper = (Story: PartialStoryFn<ReactRenderer>) => (
<div
style={{
borderRadius: 10,
border: '1px solid #000',
}}
>
<Story />
</div>
);

const story: Meta<CustomScrollViewProps> = {
title: 'Layout/CustomScrollView',
component: CustomScrollView,
parameters: { ...CanvasFullLayout, ...DisableCartesianParam },
};

export default story;

type Story = StoryObj<CustomScrollViewProps>;

export const Playground: Story = {
args: {
style: { height: 300, width: 600 },
enableHorizontalScroll: true,
children: (
<Div
style={{
width: 1440,
}}
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a sollicitudin lectus, a
commodo sapien. Vivamus a urna leo. Integer iaculis dignissim urna, sit amet vestibulum diam
bibendum a. Donec eu arcu ut augue porttitor faucibus. Vestibulum nec pretium tortor, sit
amet congue nunc. Aenean ullamcorper ex sem, sed interdum quam consequat et. Vestibulum a ex
non diam fringilla feugiat. Nunc eu tellus sed leo elementum cursus. Mauris blandit porta
egestas. Curabitur eget justo elementum, malesuada lacus ut, congue mauris. Integer orci
nisi, convallis vitae dapibus sit amet, molestie a risus. Aenean ultricies lacus eros, sit
amet condimentum urna malesuada et. Sed quis dolor tempus orci fringilla volutpat in sed
velit. Aenean aliquet bibendum pretium.
<br />
<br />
Cras pulvinar lobortis purus. Donec placerat suscipit leo vitae sodales. Phasellus convallis
lorem vitae arcu finibus pellentesque. In imperdiet vel leo a euismod. Nam sed odio a neque
venenatis suscipit a placerat magna. Mauris magna nisl, consequat nec augue vitae, ultricies
scelerisque ante. Phasellus pharetra risus eget imperdiet sodales. Integer dignissim auctor
semper. Nulla odio odio, euismod ut interdum in, bibendum sed massa. Proin rutrum molestie
massa in ultrices. Donec eu euismod turpis, eget lobortis lorem. Nulla facilisi. Nam lacinia
posuere turpis, sed laoreet turpis auctor nec.
<br />
<br />
Curabitur eu fermentum mauris. Phasellus malesuada consectetur mollis. Pellentesque pulvinar
mauris turpis. Integer neque dolor, semper quis neque et, gravida commodo eros. Duis
efficitur ex a turpis blandit tincidunt. Mauris sem mi, imperdiet quis ligula sit amet,
fermentum vulputate felis. Phasellus eu ullamcorper dolor, porttitor pulvinar diam. Aliquam
euismod, mauris nec varius lacinia, ligula libero vulputate leo, ut tristique massa nisi
vitae tortor. Phasellus purus elit, gravida sit amet neque id, aliquam rutrum dui. Maecenas
luctus sem vitae molestie porttitor. Cras viverra mauris risus, at sollicitudin ipsum
interdum eu. Sed sit amet tempor enim.
<br />
<br />
In hac habitasse platea dictumst. Etiam luctus erat metus, quis efficitur quam vulputate
quis. Duis ultricies non mauris condimentum molestie. Maecenas sollicitudin ex sem, quis
ultrices libero blandit eu. Vivamus in turpis pulvinar, malesuada enim at, hendrerit magna.
Proin eu nulla eget arcu pretium pharetra. Sed ullamcorper pulvinar est eu dapibus. Cras at
varius justo. In ex odio, condimentum id pellentesque a, sodales ut diam.
<br />
<br />
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam
aliquet tempor laoreet. Maecenas eu pulvinar diam. Pellentesque habitant morbi tristique
senectus et netus et malesuada fames ac turpis egestas. Maecenas et elit eros. Quisque
ullamcorper sodales nisi, eleifend aliquet metus venenatis in. Aliquam ornare a lacus in
tincidunt. Cras vel tristique metus. Sed vitae nisl at nisl imperdiet sollicitudin. Sed sit
amet enim in lectus imperdiet interdum condimentum et diam. Proin venenatis sit amet diam ac
vulputate. Donec mauris orci, semper volutpat nunc ut, efficitur condimentum dolor. Vivamus
in quam eget quam lacinia pharetra. Phasellus ipsum magna, aliquet id elit eget, cursus
tincidunt ex. In rhoncus turpis turpis, et viverra ex malesuada vel. Donec nisi tellus,
mollis et posuere vel, dictum eget neque.
</Div>
),
},
decorators: [Wrapper],
};
Loading