├── .gitignore ├── .prettierrc ├── .storybook ├── main.js ├── preview-head.html └── preview.js ├── LICENSE ├── README.md ├── package.json ├── public ├── favicon.ico ├── index.html ├── logo192.png ├── logo512.png ├── manifest.json └── robots.txt ├── src ├── App.tsx ├── assets │ ├── profile-with-circle.jpg │ └── sheep.png ├── components │ ├── Accordion │ │ ├── Accordion.tsx │ │ └── index.ts │ ├── AnimatedEyesFollowMouseCursor │ │ ├── AnimatedEyesFollowMouseCursor.tsx │ │ └── index.ts │ ├── Banners │ │ ├── AnimatedBanner1.tsx │ │ ├── Banners.tsx │ │ ├── index.ts │ │ └── type.ts │ ├── Canvas │ │ ├── BouncingBall │ │ │ ├── Ball.ts │ │ │ ├── Block.ts │ │ │ ├── BouncingBall.tsx │ │ │ └── index.ts │ │ ├── MovingBox │ │ │ ├── Dialog.ts │ │ │ ├── MovingBox.tsx │ │ │ ├── Point.ts │ │ │ └── index.ts │ │ ├── MovingGradation │ │ │ ├── GlowParticle.ts │ │ │ ├── MovingGradation.tsx │ │ │ ├── constants.ts │ │ │ └── index.ts │ │ ├── RotatingPolygon │ │ │ ├── Polygon.ts │ │ │ ├── RotatingPolygon.tsx │ │ │ └── index.ts │ │ ├── Wavy │ │ │ ├── Point.ts │ │ │ ├── Wave.ts │ │ │ ├── WaveGroup.ts │ │ │ ├── Wavy.tsx │ │ │ └── index.ts │ │ └── index.ts │ ├── ClimbEffects │ │ ├── ClimbEffects.tsx │ │ ├── README.md │ │ └── index.ts │ ├── ClipPathCircle │ │ ├── ClipPathCircle.tsx │ │ └── index.ts │ ├── CustomScrollbar │ │ ├── CustomScrollbar.tsx │ │ └── index.ts │ ├── Drag │ │ ├── DragItem.tsx │ │ ├── DragItemList.tsx │ │ └── index.ts │ ├── Dropdown │ │ ├── Dropdown.tsx │ │ └── index.ts │ ├── FakeScrollSpy │ │ ├── FakeScrollSpy.tsx │ │ └── index.ts │ ├── GhostText │ │ ├── GhostText.tsx │ │ └── index.ts │ ├── GlowingBackground │ │ ├── GlowingBackground.tsx │ │ └── index.ts │ ├── GlowingCheckbox │ │ ├── GlowingCheckbox.tsx │ │ └── index.ts │ ├── GlowingRadio │ │ ├── GlowingRadio.tsx │ │ └── index.ts │ ├── GlowingText │ │ ├── GlowingText.tsx │ │ ├── README.md │ │ └── index.ts │ ├── HalfCircularBackground │ │ ├── HalfCircularBackground.tsx │ │ └── index.ts │ ├── HeartAnimation │ │ ├── HeartAnimation.tsx │ │ └── index.ts │ ├── HideScrollOnScrollDown │ │ ├── HideScrollOnScrollDown.tsx │ │ └── index.ts │ ├── HoverEffectCard │ │ ├── HoverEffectCard.tsx │ │ └── index.ts │ ├── ListHoverEffects │ │ ├── ListHoverEffects.tsx │ │ └── index.ts │ ├── Loader │ │ ├── GradientLoader.tsx │ │ ├── Loader.tsx │ │ ├── TwoRingLoader.tsx │ │ └── index.ts │ ├── LongTextShadow │ │ ├── LongTextShadow.tsx │ │ └── index.ts │ ├── Menu │ │ ├── Menu.tsx │ │ ├── MenuItem.tsx │ │ └── index.ts │ ├── MiniWavy │ │ ├── MiniWavy.tsx │ │ └── index.ts │ ├── Modal │ │ ├── Modal.tsx │ │ └── index.ts │ ├── MouseCursor │ │ ├── DotMouseCursor.tsx │ │ └── index.ts │ ├── MoveSheep │ │ ├── Hill.ts │ │ ├── MoveSheep.tsx │ │ ├── Sheep.ts │ │ ├── SheepController.ts │ │ ├── Sun.ts │ │ └── index.ts │ ├── MovingText │ │ ├── MovingText.tsx │ │ └── index.ts │ ├── NeonButton │ │ ├── NeonButton.tsx │ │ └── index.ts │ ├── NumberCounter │ │ ├── NumberCounter.tsx │ │ └── index.ts │ ├── PasswordInput │ │ ├── PasswordInput.tsx │ │ └── index.ts │ ├── Portal │ │ ├── Portal.tsx │ │ └── index.ts │ ├── RangeInput │ │ ├── RangeInput.tsx │ │ └── index.ts │ ├── RippleEffectsButton │ │ ├── RippleEffectsButton.tsx │ │ └── index.ts │ ├── ScrollDownIndicator │ │ ├── ScrollDownIndicator.tsx │ │ └── index.ts │ ├── ScrollProgressBar │ │ ├── ScrollProgressBar.tsx │ │ └── index.ts │ ├── ShadowEffects │ │ ├── ShadowEffects.tsx │ │ └── index.ts │ ├── SidebarMenu │ │ ├── SidebarMenu.tsx │ │ └── index.ts │ ├── Skeleton │ │ ├── Skeleton.tsx │ │ ├── Skeleton2.tsx │ │ └── index.ts │ ├── SlidingMenuIndicator │ │ ├── SlidingMenuIndicator.tsx │ │ └── index.ts │ ├── StickyElementsScrollingEffects │ │ ├── StickyElementsScrollingEffects.tsx │ │ └── index.ts │ ├── TextArea │ │ ├── TextArea.tsx │ │ └── index.ts │ ├── TextTyping │ │ ├── TextTyping.tsx │ │ └── index.ts │ ├── ThreeDimensionBackground │ │ ├── ThreeDimensionBackground.tsx │ │ └── index.ts │ ├── ThreeDimensionDebitCard │ │ ├── ThreeDimensionDebitCard.tsx │ │ └── index.ts │ ├── Timeline │ │ ├── Timeline.tsx │ │ └── index.ts │ ├── Tooltip │ │ ├── Tooltip.tsx │ │ ├── TooltipWithPortal.tsx │ │ └── index.ts │ ├── WaveBorderCard │ │ ├── WaveBorderCard.tsx │ │ └── index.ts │ ├── WavySection │ │ ├── WavySection.tsx │ │ └── index.ts │ ├── WebGlAndThreeJS │ │ ├── BasicScene.tsx │ │ ├── BasicScene2.tsx │ │ ├── BasicScene3.tsx │ │ └── index.ts │ └── index.ts ├── hooks │ └── useScreenSize.ts ├── index.css ├── index.tsx ├── logo.svg ├── react-app-env.d.ts ├── stories │ ├── Accordion.stories.tsx │ ├── AnimatedEyesFollowMouseCursor.stories.tsx │ ├── Banners.stories.tsx │ ├── ClimbEffects.stories.tsx │ ├── ClipPathCircle.stories.tsx │ ├── CustomScrollbar.stories.tsx │ ├── Drag.stories.tsx │ ├── DropDown.stories.tsx │ ├── FakeScrollSpy.stories.tsx │ ├── GhostText.stories.tsx │ ├── GlowingBackground.stories.tsx │ ├── GlowingCheckbox.stories.tsx │ ├── GlowingText.stories.tsx │ ├── HalfCircularBackground.stories.tsx │ ├── HeartAnimation.stories.tsx │ ├── HideScrollOnScrollDown.stories.tsx │ ├── HoverEffectCard.stories.tsx │ ├── Introduction.stories.mdx │ ├── ListHoverEffects.stories.tsx │ ├── Loader.stories.tsx │ ├── LongBoxShadow.stories.tsx │ ├── Menu.stories.tsx │ ├── MiniWavy.stories.tsx │ ├── Modal.stories.tsx │ ├── MouseCursor.stories.tsx │ ├── MovingText.stories.tsx │ ├── NeonButton.stories.tsx │ ├── NumberCounter.stories.tsx │ ├── PasswordInput.stories.tsx │ ├── RangeInput.stories.tsx │ ├── RippleEffectsButton.stories.tsx │ ├── ScrollDownIndicator.stories.tsx │ ├── ScrollProgressBar.stories.tsx │ ├── ShadowEffects.stories.tsx │ ├── SidebarMenu.stories.tsx │ ├── Skeleton.stories.tsx │ ├── SlidingMenuIndicator.stories.tsx │ ├── StickyElementsScrollingEffects.stories.tsx │ ├── TextArea.stories.tsx │ ├── TextTyping.stories.tsx │ ├── ThreeDimensionBackground.stories.tsx │ ├── ThreeDimensionDebitCard.stories.tsx │ ├── Timeline.stories.tsx │ ├── Tooltip.stories.tsx │ ├── WaveBorderCard.stories.tsx │ ├── WavySection.stories.tsx │ ├── assets │ │ ├── code-brackets.svg │ │ ├── colors.svg │ │ ├── comments.svg │ │ ├── direction.svg │ │ ├── flow.svg │ │ ├── plugin.svg │ │ ├── repo.svg │ │ └── stackalt.svg │ ├── canvasTutorial │ │ ├── BouncingBall.stories.tsx │ │ ├── MoveSheep.stories.tsx │ │ ├── MovingBox.stories.tsx │ │ ├── MovingGradation.stories.tsx │ │ ├── Readme.stories.mdx │ │ ├── RotatingPolygon.stories.tsx │ │ └── Wavy.stories.tsx │ ├── dummy │ │ └── dummyData.js │ └── threejs │ │ └── BasicScene.stories.tsx └── utils │ ├── DomUtils.ts │ ├── RefUtils.ts │ ├── WebGLUtils.ts │ └── index.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | 25 | .eslintcache 26 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "semi": true, 4 | "useTabs": false, 5 | "tabWidth": 2, 6 | "trailingComma": "es5", 7 | "printWidth": 120 8 | } 9 | -------------------------------------------------------------------------------- /.storybook/main.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | typescript: { 3 | check: false, 4 | checkOptions: {}, 5 | reactDocgen: 'react-docgen-typescript', 6 | reactDocgenTypescriptOptions: { 7 | shouldExtractLiteralValuesFromEnum: true, 8 | propFilter: (prop) => 9 | prop.parent ? !/node_modules/.test(prop.parent.fileName) : true, 10 | }, 11 | }, 12 | stories: ['../src/**/*.stories.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'], 13 | addons: [ 14 | '@storybook/addon-links', 15 | '@storybook/addon-essentials', 16 | '@storybook/preset-create-react-app', 17 | '@storybook/addon-storysource', 18 | '@storybook/addon-knobs', 19 | ], 20 | }; 21 | -------------------------------------------------------------------------------- /.storybook/preview-head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 |
22 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos 23 | voluptates quae nostrum totam quaerat, commodi asperiores ullam. 24 | Neque enim beatae, cum, optio, tempora autem est a sint vitae ipsum 25 | debitis! Lorem ipsum dolor sit amet consectetur adipisicing elit. 26 | Quos voluptates quae nostrum totam quaerat, commodi asperiores 27 | ullam. Neque enim beatae, cum, optio, tempora autem est a sint vitae 28 | ipsum debitis! 29 |
30 |13 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Reprehenderit 14 | odit porro ex voluptatum dolorum deserunt eligendi nostrum quisquam 15 | tempora earum nam alias error, aliquam nisi, odio autem? Neque, 16 | deleniti libero! 17 |
18 |cavas
공부의 결과물을 담습니다.
8 |
9 | - 대부분의 cavas
예제 코드는 김종민님의 튜토리얼 강의에서 가져왔습니다.
10 |
11 | - 예제 코드(JS)를 React
로 컨버팅하면서, React
에서 인터렉티브한 화면을 만들기 위한
12 | 고민을 추가하였고,
13 |
14 | - Typescript
적용을 통해 cavas
의 인터페이스를 더 이해하기 위한 용도로 사용했습니다.
15 |
16 |
21 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Deleniti eaque nisi aliquid quisquam, quibusdam incidunt
22 | sint quis ad eos, atque, nesciunt ea! Earum pariatur ducimus beatae, consequatur quisquam dolore natus!
23 |