react-rx 1.0.0 → 2.0.1

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.
Files changed (123) hide show
  1. package/.idea/compiler.xml +1 -1
  2. package/.idea/inspectionProfiles/Project_Default.xml +1 -0
  3. package/.idea/markdown.xml +9 -0
  4. package/.idea/misc.xml +0 -6
  5. package/dist/cjs/displayName.js +1 -1
  6. package/dist/cjs/useAsObservable.js +9 -17
  7. package/dist/cjs/useObservable.js +25 -30
  8. package/dist/cjs/withPropsStream.js +5 -1
  9. package/dist/es2015/useAsObservable.js +10 -18
  10. package/dist/es2015/useObservable.js +24 -31
  11. package/dist/esm/displayName.js +1 -1
  12. package/dist/esm/useAsObservable.js +10 -18
  13. package/dist/esm/useObservable.js +26 -31
  14. package/package.json +6 -4
  15. package/src/useAsObservable.ts +13 -18
  16. package/src/useObservable.ts +39 -34
  17. package/.idea/workspace.xml +0 -226
  18. package/jest.config.js +0 -5
  19. package/website/.babelrc +0 -21
  20. package/website/.prettierrc +0 -7
  21. package/website/README.mdx +0 -1
  22. package/website/package.json +0 -84
  23. package/website/src/@types/babel.d.ts +0 -4
  24. package/website/src/@types/mdx.d.ts +0 -11
  25. package/website/src/@types/react-css-burger.d.ts +0 -4
  26. package/website/src/App.tsx +0 -68
  27. package/website/src/components/Header.tsx +0 -118
  28. package/website/src/components/Link.tsx +0 -18
  29. package/website/src/components/LoadPage.tsx +0 -60
  30. package/website/src/components/Sidebar.tsx +0 -88
  31. package/website/src/components/logos/Github.tsx +0 -10
  32. package/website/src/components/logos/React.tsx +0 -27
  33. package/website/src/components/logos/ReactRxLogo.tsx +0 -39
  34. package/website/src/components/logos/RxJs.tsx +0 -69
  35. package/website/src/components/repl/Checkerboard.tsx +0 -25
  36. package/website/src/components/repl/CodeBlock.tsx +0 -147
  37. package/website/src/components/repl/CodeMirror.tsx +0 -37
  38. package/website/src/components/repl/CodeMirrorMode.tsx +0 -67
  39. package/website/src/components/repl/EvalCode.tsx +0 -55
  40. package/website/src/components/repl/Prelude.tsx +0 -50
  41. package/website/src/components/repl/ShowError.tsx +0 -27
  42. package/website/src/components/repl/codemirror-lib.ts +0 -8
  43. package/website/src/components/repl/codemirror-theme.css +0 -131
  44. package/website/src/components/repl/compile/babel.ts +0 -21
  45. package/website/src/components/repl/eval/evalCallback.ts +0 -27
  46. package/website/src/components/repl/eval/evalCode.ts +0 -7
  47. package/website/src/components/repl/eval/evalExpression.ts +0 -4
  48. package/website/src/components/repl/eval/evalReactDomRender.ts +0 -23
  49. package/website/src/components/repl/index.ts +0 -1
  50. package/website/src/components/repl/runMode.ts +0 -42
  51. package/website/src/datastores/location.ts +0 -14
  52. package/website/src/datastores/page.ts +0 -11
  53. package/website/src/datastores/pageTransition.ts +0 -97
  54. package/website/src/entries/main.css +0 -2
  55. package/website/src/entries/main.tsx +0 -6
  56. package/website/src/examples/FizzBuzz/FizzBuzzExample.tsx +0 -39
  57. package/website/src/examples/FizzBuzz/index.tsx +0 -9
  58. package/website/src/examples/_utils/globalScope.ts +0 -45
  59. package/website/src/examples/animation/AnimationExample.tsx +0 -152
  60. package/website/src/examples/animation/easings.ts +0 -0
  61. package/website/src/examples/animation/index.tsx +0 -15
  62. package/website/src/examples/context/Context.example.jsx +0 -67
  63. package/website/src/examples/context/index.tsx +0 -9
  64. package/website/src/examples/errors/Errors.example.jsx +0 -69
  65. package/website/src/examples/errors/index.tsx +0 -9
  66. package/website/src/examples/event-handlers/EventHandlersExample.tsx +0 -48
  67. package/website/src/examples/event-handlers/index.tsx +0 -9
  68. package/website/src/examples/fetch/FetchExample.jsx +0 -43
  69. package/website/src/examples/fetch/a.txt +0 -1
  70. package/website/src/examples/fetch/b.txt +0 -1
  71. package/website/src/examples/fetch/index.tsx +0 -9
  72. package/website/src/examples/form-data/FormDataExample.jsx +0 -119
  73. package/website/src/examples/form-data/index.tsx +0 -12
  74. package/website/src/examples/form-data/storage.ts +0 -27
  75. package/website/src/examples/forward-ref/ForwardRefExample.tsx +0 -55
  76. package/website/src/examples/forward-ref/index.tsx +0 -9
  77. package/website/src/examples/hello-world/HelloWorld.example.jsx +0 -6
  78. package/website/src/examples/hello-world/index.tsx +0 -9
  79. package/website/src/examples/hooks-interop/HooksInterop.example.tsx +0 -42
  80. package/website/src/examples/hooks-interop/index.tsx +0 -9
  81. package/website/src/examples/passthrough-props/PassThroughPropsExample.jsx +0 -57
  82. package/website/src/examples/passthrough-props/index.tsx +0 -11
  83. package/website/src/examples/reactive-state/ReactiveState.example.jsx +0 -43
  84. package/website/src/examples/reactive-state/index.ts +0 -9
  85. package/website/src/examples/readme-examples/README.mdx +0 -0
  86. package/website/src/examples/readme-examples/index.ts +0 -11
  87. package/website/src/examples/shared-state/SharedState.example.tsx +0 -59
  88. package/website/src/examples/shared-state/index.tsx +0 -9
  89. package/website/src/examples/simple/Counter.example.tsx +0 -14
  90. package/website/src/examples/simple/index.tsx +0 -9
  91. package/website/src/examples/sync/Sync.example.tsx +0 -9
  92. package/website/src/examples/sync/index.tsx +0 -9
  93. package/website/src/examples/tick/TickExample.jsx +0 -51
  94. package/website/src/examples/tick/index.ts +0 -9
  95. package/website/src/examples/todo-app/TodoApp.example.tsx +0 -88
  96. package/website/src/examples/todo-app/index.tsx +0 -12
  97. package/website/src/examples/todo-app/storage.ts +0 -27
  98. package/website/src/examples/use-element/UseElementExample.tsx +0 -70
  99. package/website/src/examples/use-element/index.tsx +0 -9
  100. package/website/src/examples/use-observable/search/SearchExample.tsx +0 -82
  101. package/website/src/examples/use-observable/search/index.tsx +0 -8
  102. package/website/src/examples/use-observable/use-observable/UseObservableExample.tsx +0 -70
  103. package/website/src/examples/use-observable/use-observable/index.tsx +0 -9
  104. package/website/src/index.html +0 -10
  105. package/website/src/mdx-components.tsx +0 -74
  106. package/website/src/pages/Api/Api.mdx +0 -134
  107. package/website/src/pages/Api/ApiPage.tsx +0 -25
  108. package/website/src/pages/Examples/Examples.tsx +0 -105
  109. package/website/src/pages/Examples/ExamplesPage.tsx +0 -13
  110. package/website/src/pages/Guide/Guide.mdx +0 -275
  111. package/website/src/pages/Guide/GuidePage.tsx +0 -25
  112. package/website/src/pages/Index/IndexPage.tsx +0 -50
  113. package/website/src/pages/Index/ReactRxReadme.md +0 -20
  114. package/website/src/pages/NotFound.tsx +0 -3
  115. package/website/src/pages/pages.ts +0 -46
  116. package/website/src/pages/styles.tsx +0 -24
  117. package/website/src/theme.ts +0 -61
  118. package/website/src/utils/parseCodeFenceHeader.ts +0 -32
  119. package/website/tsconfig.json +0 -30
  120. package/website/vercel.json +0 -4
  121. package/website/webpack/config.js +0 -5
  122. package/website/webpack/createConfig.js +0 -95
  123. package/website/webpack/mdx-toc-loader.js +0 -38
@@ -1,131 +0,0 @@
1
- .cm-s-custom.CodeMirror {
2
- background: rgb(32, 35, 42);
3
- color: #f8f8f2;
4
- }
5
-
6
- .cm-s-custom div.CodeMirror-selected {
7
- background: rgba(101, 115, 126, 0.33);
8
- }
9
-
10
- .cm-s-custom .CodeMirror-line::selection,
11
- .cm-s-custom .CodeMirror-line > span::selection,
12
- .cm-s-custom .CodeMirror-line > span > span::selection {
13
- background: rgba(101, 115, 126, 0.33);
14
- }
15
-
16
- .cm-s-custom .CodeMirror-line::-moz-selection,
17
- .cm-s-custom .CodeMirror-line > span::-moz-selection,
18
- .cm-s-custom .CodeMirror-line > span > span::-moz-selection {
19
- background: rgba(101, 115, 126, 0.33);
20
- }
21
-
22
- .cm-s-custom .CodeMirror-gutters {
23
- background: #304148;
24
- border-right: 10px;
25
- }
26
-
27
- .cm-s-custom .CodeMirror-guttermarker {
28
- color: white;
29
- }
30
-
31
- .cm-s-custom .CodeMirror-guttermarker-subtle {
32
- color: #d0d0d0;
33
- }
34
-
35
- .cm-s-custom .CodeMirror-linenumber {
36
- color: #d0d0d0;
37
- }
38
-
39
- .cm-s-custom .CodeMirror-cursor {
40
- border-left: 1px solid #f8f8f0;
41
- }
42
-
43
- .cm-s-custom span.cm-comment {
44
- color: #65737e;
45
- }
46
-
47
- .cm-s-custom span.cm-atom {
48
- color: #c594c5;
49
- }
50
-
51
- .cm-s-custom span.cm-number {
52
- color: #f99157;
53
- }
54
-
55
- .cm-s-custom span.cm-type {
56
- color: #48aab5;
57
- }
58
-
59
- .cm-s-custom span.cm-property {
60
- color: rgb(121, 182, 242);
61
- }
62
-
63
- .cm-s-custom span.cm-attribute,
64
- .cm-s-custom span.cm-keyword {
65
- color: rgb(197, 165, 197);
66
- }
67
-
68
- .cm-s-custom span.cm-builtin {
69
- color: #66d9ef;
70
- }
71
-
72
- .cm-s-custom span.cm-string {
73
- color: #8dc891;
74
- }
75
-
76
- .cm-s-custom span.cm-variable {
77
- color: #d8d8d8;
78
- }
79
-
80
- .cm-s-custom span.cm-variable-2,
81
- .cm-s-custom span.cm-variable-3 {
82
- color: #f8f8f2;
83
- }
84
-
85
- .cm-s-custom span.cm-def {
86
- color: #fac863;
87
- }
88
-
89
- .cm-s-custom span.cm-bracket {
90
- color: #5fb3b3;
91
- }
92
-
93
- .cm-s-custom span.cm-tag {
94
- color: rgb(252, 146, 158);
95
- }
96
-
97
- .cm-s-custom span.cm-tag.cm-bracket {
98
- color: rgb(88, 200, 252);
99
- }
100
-
101
- .cm-s-custom span.cm-header {
102
- color: #c594c5;
103
- }
104
-
105
- .cm-s-custom span.cm-link {
106
- color: #c594c5;
107
- }
108
-
109
- .cm-s-custom span.cm-error {
110
- background: #c594c5;
111
- color: #f8f8f0;
112
- }
113
-
114
- .cm-s-custom .CodeMirror-activeline-background {
115
- background: rgba(101, 115, 126, 0.1);
116
- }
117
-
118
- .cm-s-custom .CodeMirror-nonmatchingbracket {
119
- color: #fa87b5 !important;
120
- }
121
-
122
- .cm-s-custom .CodeMirror-matchingbracket {
123
- color: #fa87b5 !important;
124
- background-color: rgba(255, 255, 255, 0.22) !important;
125
- border-radius: 2px;
126
- }
127
-
128
- .cm-s-custom .CodeMirror-matchingtag {
129
- background-color: rgba(255, 255, 255, 0.1) !important;
130
- border-radius: 2px;
131
- }
@@ -1,21 +0,0 @@
1
- import * as babel from '@babel/standalone'
2
- import transformTs from '@babel/plugin-transform-typescript'
3
- import transformJsx from '@babel/plugin-transform-react-jsx'
4
- import optionalChaining from '@babel/plugin-proposal-optional-chaining'
5
-
6
- interface Options {
7
- filename?: string
8
- plugins?: any[]
9
- }
10
-
11
- export function compile(code: string, options: Options = {}) {
12
- return babel.transform(code, {
13
- filename: options.filename || 'Unknown.tsx',
14
- plugins: [
15
- ...(options.plugins || []),
16
- optionalChaining,
17
- [transformTs, {allExtensions: true, isTSX: true}],
18
- transformJsx
19
- ]
20
- })
21
- }
@@ -1,27 +0,0 @@
1
- import {evalCode} from './evalCode'
2
-
3
- export const evalCallback = (
4
- code: string,
5
- callbackName = 'callback',
6
- scope = {}
7
- ): any => {
8
- let renderCount = 0
9
- let renderRes = null
10
-
11
- const callback = (arg: any) => {
12
- renderCount++
13
- renderRes = arg
14
- }
15
-
16
- evalCode(code, {...scope, [callbackName]: callback})
17
-
18
- if (renderCount === 0) {
19
- throw new Error(`${callbackName}() was not called`)
20
- }
21
-
22
- if (renderCount > 1) {
23
- throw new Error(`${callbackName}() was called more than once`)
24
- }
25
-
26
- return renderRes
27
- }
@@ -1,7 +0,0 @@
1
- export const evalCode = (code: string, scope: {[v: string]: any}) => {
2
- const scopeKeys = Object.keys(scope)
3
- const scopeValues = scopeKeys.map(key => scope[key])
4
- // eslint-disable-next-line no-new-func
5
- const res = new Function(...scopeKeys, code)
6
- return res(...scopeValues)
7
- }
@@ -1,4 +0,0 @@
1
- import {evalCode} from './evalCode'
2
-
3
- export const evalExpression = (code: string, scope = {}) =>
4
- evalCode(`return ${code}`, scope)
@@ -1,23 +0,0 @@
1
- import {evalCode} from './evalCode'
2
-
3
- export const evalReactDomRender = (code: string, scope = {}): any => {
4
- let renderCount = 0
5
- let renderRes = null
6
-
7
- const callback = (arg: any) => {
8
- renderCount++
9
- renderRes = arg
10
- }
11
-
12
- evalCode(code, {...scope, ReactDOM: {render: callback}})
13
-
14
- if (renderCount === 0) {
15
- throw new Error(`ReactDOM.render() was never called`)
16
- }
17
-
18
- if (renderCount > 1) {
19
- throw new Error(`ReactDOM.render() was called more than once`)
20
- }
21
-
22
- return renderRes
23
- }
@@ -1 +0,0 @@
1
- export {CodeBlock} from './CodeBlock'
@@ -1,42 +0,0 @@
1
- import {Mode} from 'codemirror'
2
- import CodeMirror from './codemirror-lib'
3
- import {Observable} from 'rxjs'
4
-
5
- interface Token {
6
- style: string | null
7
- token: string
8
- }
9
-
10
- export interface ModeSpec {
11
- name: string
12
-
13
- [key: string]: any
14
- }
15
-
16
- export function runMode(
17
- source: string,
18
- modespec: ModeSpec | null,
19
- options?: {state?: any; tabSize: number}
20
- ): Observable<Token[]> {
21
- return new Observable(subscriber => {
22
- const mode: Mode<any> = CodeMirror.getMode(CodeMirror.defaults, modespec)
23
- const lines = CodeMirror.splitLines(source)
24
- const state = (options && options.state) || CodeMirror.startState(mode)
25
-
26
- for (let i = 0, e = lines.length; i < e; ++i) {
27
- const tokens = []
28
- const stream = new CodeMirror.StringStream(lines[i])
29
- if (!stream.string && mode.blankLine) mode.blankLine(state)
30
- while (!stream.eol()) {
31
- const style = mode.token!(stream, state)
32
- tokens.push({token: stream.current(), style})
33
- stream.start = stream.pos
34
- }
35
- if (i !== lines.length - 1) {
36
- tokens.push({token: '\n', style: null})
37
- }
38
- subscriber.next(tokens)
39
- }
40
- subscriber.complete()
41
- })
42
- }
@@ -1,14 +0,0 @@
1
- import {createBrowserHistory, Location} from 'history'
2
- import {Observable} from 'rxjs'
3
- import {publishReplay, refCount} from 'rxjs/operators'
4
-
5
- const history = createBrowserHistory()
6
-
7
- export const location$ = new Observable<Location>((subscriber) => {
8
- subscriber.next(history.location)
9
- return history.listen((update) => subscriber.next(update.location))
10
- }).pipe(publishReplay(1), refCount())
11
-
12
- export const navigate = (url: string) => {
13
- history.push(url)
14
- }
@@ -1,11 +0,0 @@
1
- import {map} from 'rxjs/operators'
2
- import {location$} from './location'
3
- import {NOT_FOUND, Page, pages} from '../pages/pages'
4
- import {Observable} from 'rxjs'
5
-
6
- export const page$: Observable<Page> = location$.pipe(
7
- map(
8
- location =>
9
- pages.find(page => page.route === location.pathname) || NOT_FOUND
10
- )
11
- )
@@ -1,97 +0,0 @@
1
- import {
2
- map,
3
- publishReplay,
4
- refCount,
5
- scan,
6
- skip,
7
- switchMap,
8
- tap
9
- } from 'rxjs/operators'
10
- import {concat, from, Observable, of} from 'rxjs'
11
- import * as React from 'react'
12
- import {page$} from './page'
13
- import {Page} from '../pages/pages'
14
-
15
- interface PageTransition {
16
- title: string
17
- isTransitioning: boolean
18
- component: null | React.ComponentType<any>
19
- }
20
-
21
- interface TransitionStart {
22
- type: 'transitionStart'
23
- page: Page
24
- component: null
25
- }
26
-
27
- interface TransitionEnd {
28
- type: 'transitionEnd'
29
- page: Page
30
- component: React.ComponentType<any>
31
- }
32
-
33
- type TransitionEvent = TransitionStart | TransitionEnd
34
-
35
- interface TransitionState {
36
- isTransitioning: boolean
37
- prev: null | Page
38
- current: null | Page
39
- next: null | Page
40
- component: null | React.ComponentType
41
- }
42
-
43
- const transitionStart = (page: Page): TransitionStart => ({
44
- type: 'transitionStart',
45
- page,
46
- component: null
47
- })
48
-
49
- const transitionEnd = (page: Page) => (
50
- component: React.ComponentType<any>
51
- ): TransitionEnd => ({
52
- type: 'transitionEnd',
53
- page,
54
- component
55
- })
56
-
57
- const INITIAL_TRANSITION_STATE: TransitionState = {
58
- isTransitioning: true,
59
- component: null,
60
- next: null,
61
- current: null,
62
- prev: null
63
- }
64
-
65
- export const pageTransition$: Observable<TransitionState> = page$.pipe(
66
- switchMap(page =>
67
- concat(
68
- of(transitionStart(page)),
69
- from(page.load()).pipe(map(transitionEnd(page)))
70
- )
71
- ),
72
- scan(
73
- (
74
- acc: TransitionState,
75
- event: TransitionStart | TransitionEnd
76
- ): TransitionState => {
77
- return event.type === 'transitionStart'
78
- ? {
79
- isTransitioning: true,
80
- component: acc.component,
81
- prev: acc.next || acc.current,
82
- current: acc.current || null,
83
- next: event.page
84
- }
85
- : {
86
- isTransitioning: false,
87
- component: event.component,
88
- current: acc.next,
89
- next: null,
90
- prev: acc.current
91
- }
92
- },
93
- INITIAL_TRANSITION_STATE
94
- ),
95
- publishReplay(1),
96
- refCount()
97
- )
@@ -1,2 +0,0 @@
1
- @import '~codemirror/lib/codemirror.css';
2
- @import '../components/repl/codemirror-theme.css';
@@ -1,6 +0,0 @@
1
- import './main.css'
2
- import * as React from 'react'
3
- import * as ReactDOM from 'react-dom'
4
- import {App} from '../App'
5
-
6
- ReactDOM.render(<App />, document.getElementById('app'))
@@ -1,39 +0,0 @@
1
- import {
2
- map,
3
- React,
4
- ReactDOM,
5
- rxComponent,
6
- take,
7
- timer
8
- } from '../_utils/globalScope'
9
- //@endimport
10
-
11
- const FizzBuzzExample = rxComponent(
12
- timer(0, 500).pipe(
13
- map(n => n + 1),
14
- map(n => {
15
- const divBy3 = n % 3 === 0
16
- const divBy5 = n % 5 === 0
17
- const divBy3And5 = divBy3 && divBy5
18
- return divBy3And5
19
- ? 'Fizz Buzz'
20
- : divBy3
21
- ? 'Fizz'
22
- : divBy5
23
- ? 'Buzz'
24
- : String(n)
25
- }),
26
- // map((seq: string[], curr) => seq.concat(curr), []),
27
- map((n, i) => (
28
- <div key={n + i}>
29
- {i + 1}: {n}
30
- </div>
31
- )),
32
- take(100)
33
- )
34
- )
35
-
36
- ReactDOM.render(
37
- <FizzBuzzExample />,
38
- document.getElementById('fizz-buzz-example')
39
- )
@@ -1,9 +0,0 @@
1
- import {Example} from '../../pages/Examples/Examples'
2
-
3
- const fs = require('fs')
4
-
5
- export const FizzBuzzExample: Example = {
6
- id: 'fizz-buzz',
7
- title: 'Fizz Buzz',
8
- source: fs.readFileSync(`${__dirname}/FizzBuzzExample.tsx`, 'utf-8')
9
- }
@@ -1,45 +0,0 @@
1
- import * as React from 'react'
2
- import * as ReactDOM from 'react-dom'
3
- import * as RxJS from 'rxjs'
4
- import * as operators from 'rxjs/operators'
5
-
6
- const {of, from, concat, merge} = RxJS
7
- const {timer, interval, throwError, combineLatest, Observable} = RxJS
8
-
9
- const {map, filter, reduce, scan, tap} = operators
10
- const {concatMap, mergeMap, switchMap, mapTo} = operators
11
- const {startWith, catchError, take} = operators
12
- //@endimport
13
-
14
- export {of, from, timer, interval, concat, merge, throwError, combineLatest, Observable}
15
- export {
16
- map,
17
- filter,
18
- reduce,
19
- scan,
20
- concatMap,
21
- tap,
22
- mapTo,
23
- mergeMap,
24
- startWith,
25
- take,
26
- switchMap,
27
- catchError
28
- }
29
-
30
- export {React, ReactDOM}
31
- export {RxJS, operators}
32
-
33
- export {
34
- useObservable,
35
- useMemoObservable,
36
- rxComponent,
37
- context,
38
- handler,
39
- state,
40
- elementRef,
41
- forwardRef,
42
- useAsObservable
43
- } from 'react-rx'
44
-
45
- export {observableCallback} from 'observable-callback'
@@ -1,152 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-use-before-define */
2
- import {
3
- map,
4
- React,
5
- ReactDOM,
6
- rxComponent,
7
- switchMap,
8
- timer,
9
- state
10
- } from '../_utils/globalScope'
11
- import styled from 'styled-components'
12
- import bezier from 'bezier-easing'
13
- //@endimport
14
-
15
- const BALL_SIZE = 30
16
- const BOX_SIZE = 300
17
-
18
- const MAX_TOP = BOX_SIZE - BALL_SIZE
19
-
20
- function easeCustom(n: number) {
21
- // implement your own easing function here by returning a number in the range of [0, 1]
22
- return n
23
- }
24
-
25
- type EasingName = keyof typeof EASINGS
26
-
27
- const AnimationExample = rxComponent(() => {
28
- const [easing$, setEasing] = state<EasingName>('easeCustom')
29
- return easing$.pipe(
30
- switchMap((easing: EasingName) =>
31
- timer(0, 16).pipe(
32
- map((n) => (n % MAX_TOP) * 2),
33
- map((n) => (n > MAX_TOP ? MAX_TOP * 2 - n : n)),
34
- map((linearTop): [number, EasingName] => [
35
- EASINGS[easing](linearTop / MAX_TOP) * MAX_TOP,
36
- easing
37
- ])
38
- )
39
- ),
40
- map(([top, currentEasing]) => (
41
- <>
42
- <BoxWrapper>
43
- <Box>
44
- <Ball style={{top}} />
45
- </Box>
46
- </BoxWrapper>
47
- <SelectWrapperLabel>Easing function:</SelectWrapperLabel>
48
- <SelectWrapper>
49
- {Object.keys(EASINGS).map((easingName) => (
50
- <label key={easingName} className={easingName === currentEasing ? 'selected' : ''}>
51
- <input
52
- tabIndex={0}
53
- type="checkbox"
54
- checked={easingName === currentEasing}
55
- key={easingName}
56
- onChange={() => setEasing(easingName as EasingName)}
57
- />
58
- {easingName.substring(4)}
59
- </label>
60
- ))}
61
- </SelectWrapper>
62
- </>
63
- ))
64
- )
65
- })
66
-
67
- ReactDOM.render(
68
- <AnimationExample />,
69
- document.getElementById('animation-example')
70
- )
71
-
72
- // --- easing definitions and stylings
73
- const EASINGS = {
74
- easeCustom: easeCustom,
75
- easeInSine: bezier(0.47, 0, 0.745, 0.715),
76
- easeOutSine: bezier(0.39, 0.575, 0.565, 1),
77
- easeInOutSine: bezier(0.445, 0.05, 0.55, 0.95),
78
- easeInQuad: bezier(0.55, 0.085, 0.68, 0.53),
79
- easeOutQuad: bezier(0.25, 0.46, 0.45, 0.94),
80
- easeInOutQuad: bezier(0.455, 0.03, 0.515, 0.955),
81
- easeInCubic: bezier(0.55, 0.055, 0.675, 0.19),
82
- easeOutCubic: bezier(0.215, 0.61, 0.355, 1),
83
- easeInOutCubic: bezier(0.645, 0.045, 0.355, 1),
84
- easeInQuart: bezier(0.895, 0.03, 0.685, 0.22),
85
- easeOutQuart: bezier(0.165, 0.84, 0.44, 1),
86
- easeInOutQuart: bezier(0.77, 0, 0.175, 1),
87
- easeInQuint: bezier(0.755, 0.05, 0.855, 0.06),
88
- easeOutQuint: bezier(0.23, 1, 0.32, 1),
89
- easeInOutQuint: bezier(0.86, 0, 0.07, 1),
90
- easeInExpo: bezier(0.95, 0.05, 0.795, 0.035),
91
- easeOutExpo: bezier(0.19, 1, 0.22, 1),
92
- easeInOutExpo: bezier(1, 0, 0, 1),
93
- easeInCirc: bezier(0.6, 0.04, 0.98, 0.335),
94
- easeOutCirc: bezier(0.075, 0.82, 0.165, 1),
95
- easeInOutCirc: bezier(0.785, 0.135, 0.15, 0.86),
96
- easeInBack: bezier(0.6, -0.28, 0.735, 0.045),
97
- easeOutBack: bezier(0.175, 0.885, 0.32, 1.275),
98
- easeInOutBack: bezier(0.68, -0.55, 0.265, 1.55),
99
- easeLinear: (n: number) => n
100
- }
101
-
102
- const BoxWrapper = styled.div`
103
- display: flex;
104
- flex-direction: column;
105
- align-items: center;
106
- `
107
- const Box = styled.div`
108
- position: relative;
109
- border: 1px solid #555;
110
- height: ${BOX_SIZE}px;
111
- width: ${BOX_SIZE}px;
112
- `
113
-
114
- const Ball = styled.div`
115
- position: absolute;
116
- border-radius: 100%;
117
- background-color: #901a3b;
118
- width: ${BALL_SIZE}px;
119
- height: ${BALL_SIZE}px;
120
- left: ${BOX_SIZE / 2 - BALL_SIZE / 2}px;
121
- `
122
-
123
- const SelectWrapperLabel = styled.h2`
124
- margin-top: 2em;
125
- font-size: 0.8em;
126
- `
127
-
128
- const SelectWrapper = styled.div`
129
- display: flex;
130
- flex-wrap: wrap;
131
- flex-direction: row;
132
- input[type='checkbox'] {
133
- opacity: 0;
134
- position: absolute;
135
- height: 1px;
136
- width: 1px;
137
- }
138
- font-size: 90%;
139
- label {
140
- border-radius: 3px;
141
- padding: 0 2px;
142
- margin: 0 2px;
143
- }
144
- label:focus-within {
145
- color: #333;
146
- background-color: #ccc;
147
- }
148
- label.selected {
149
- background-color: #5588ee;
150
- color: #333;
151
- }
152
- `
File without changes
@@ -1,15 +0,0 @@
1
- import {Example} from '../../pages/Examples/Examples'
2
- import styled from 'styled-components'
3
- import bezier from 'bezier-easing'
4
-
5
- const fs = require('fs')
6
-
7
- export const AnimationExample: Example = {
8
- id: 'animation',
9
- title: 'Animation',
10
- prelude: `import styled from 'styled-components'
11
- import bezier from 'bezier-easing'
12
- `,
13
- scope: {bezier, styled},
14
- source: fs.readFileSync(`${__dirname}/AnimationExample.tsx`, 'utf-8')
15
- }