@tremolo-ui/react 0.0.12 → 0.1.0-alpha.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 (63) hide show
  1. package/dist/cjs/index.js +320 -233
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/components/Knob/index.d.ts +12 -0
  4. package/dist/cjs/types/components/Knob/index.d.ts.map +1 -1
  5. package/dist/cjs/types/components/Piano/KeyLabel.d.ts +1 -3
  6. package/dist/cjs/types/components/Piano/KeyLabel.d.ts.map +1 -1
  7. package/dist/cjs/types/components/Piano/context.d.ts +24 -0
  8. package/dist/cjs/types/components/Piano/context.d.ts.map +1 -0
  9. package/dist/cjs/types/components/Piano/index.d.ts +9 -9
  10. package/dist/cjs/types/components/Piano/index.d.ts.map +1 -1
  11. package/dist/cjs/types/components/Piano/key.d.ts +10 -19
  12. package/dist/cjs/types/components/Piano/key.d.ts.map +1 -1
  13. package/dist/cjs/types/components/Slider/index.d.ts.map +1 -1
  14. package/dist/cjs/types/components/XYPad/index.d.ts.map +1 -1
  15. package/dist/cjs/types/hooks/useDrag.d.ts.map +1 -1
  16. package/dist/cjs/types/hooks/useDragWithElement.d.ts +16 -0
  17. package/dist/cjs/types/hooks/useDragWithElement.d.ts.map +1 -0
  18. package/dist/cjs/types/index.d.ts +1 -0
  19. package/dist/cjs/types/index.d.ts.map +1 -1
  20. package/dist/esm/index.js +319 -234
  21. package/dist/esm/index.js.map +1 -1
  22. package/dist/esm/types/components/Knob/index.d.ts +12 -0
  23. package/dist/esm/types/components/Knob/index.d.ts.map +1 -1
  24. package/dist/esm/types/components/Piano/KeyLabel.d.ts +1 -3
  25. package/dist/esm/types/components/Piano/KeyLabel.d.ts.map +1 -1
  26. package/dist/esm/types/components/Piano/context.d.ts +24 -0
  27. package/dist/esm/types/components/Piano/context.d.ts.map +1 -0
  28. package/dist/esm/types/components/Piano/index.d.ts +9 -9
  29. package/dist/esm/types/components/Piano/index.d.ts.map +1 -1
  30. package/dist/esm/types/components/Piano/key.d.ts +10 -19
  31. package/dist/esm/types/components/Piano/key.d.ts.map +1 -1
  32. package/dist/esm/types/components/Slider/index.d.ts.map +1 -1
  33. package/dist/esm/types/components/XYPad/index.d.ts.map +1 -1
  34. package/dist/esm/types/hooks/useDrag.d.ts.map +1 -1
  35. package/dist/esm/types/hooks/useDragWithElement.d.ts +16 -0
  36. package/dist/esm/types/hooks/useDragWithElement.d.ts.map +1 -0
  37. package/dist/esm/types/index.d.ts +1 -0
  38. package/dist/esm/types/index.d.ts.map +1 -1
  39. package/dist/styles/index.css +2 -0
  40. package/package.json +2 -1
  41. package/src/components/AnimationCanvas/index.tsx +3 -1
  42. package/src/components/Knob/index.tsx +14 -0
  43. package/src/components/Piano/KeyLabel.tsx +9 -5
  44. package/src/components/Piano/context.tsx +108 -0
  45. package/src/components/Piano/index.css +2 -0
  46. package/src/components/Piano/index.tsx +186 -114
  47. package/src/components/Piano/key.tsx +215 -0
  48. package/src/components/Slider/index.tsx +40 -52
  49. package/src/components/XYPad/index.tsx +64 -54
  50. package/src/hooks/useDrag.ts +6 -7
  51. package/src/hooks/useDragWithElement.ts +76 -0
  52. package/src/index.ts +1 -0
  53. package/dist/cjs/types/components/Piano/BlackKey.d.ts +0 -5
  54. package/dist/cjs/types/components/Piano/BlackKey.d.ts.map +0 -1
  55. package/dist/cjs/types/components/Piano/WhiteKey.d.ts +0 -7
  56. package/dist/cjs/types/components/Piano/WhiteKey.d.ts.map +0 -1
  57. package/dist/esm/types/components/Piano/BlackKey.d.ts +0 -5
  58. package/dist/esm/types/components/Piano/BlackKey.d.ts.map +0 -1
  59. package/dist/esm/types/components/Piano/WhiteKey.d.ts +0 -7
  60. package/dist/esm/types/components/Piano/WhiteKey.d.ts.map +0 -1
  61. package/src/components/Piano/BlackKey.tsx +0 -132
  62. package/src/components/Piano/WhiteKey.tsx +0 -134
  63. package/src/components/Piano/key.ts +0 -51
@@ -1,134 +0,0 @@
1
- import clsx from 'clsx'
2
- import React, {
3
- ComponentPropsWithoutRef,
4
- forwardRef,
5
- useImperativeHandle,
6
- useState,
7
- } from 'react'
8
-
9
- import { KeyMethods, KeyProps } from './key'
10
- import { KeyLabel, KeyLabelProps } from './KeyLabel'
11
-
12
- type Props = KeyProps & Omit<ComponentPropsWithoutRef<'div'>, keyof KeyProps>
13
-
14
- /** @category Piano */
15
- export const defaultWhiteKeyWidth = 40
16
-
17
- /** @category Piano */
18
- export const WhiteKey = forwardRef<KeyMethods, Props>(
19
- (
20
- {
21
- width = defaultWhiteKeyWidth,
22
- height = '100%',
23
- bg,
24
- color,
25
- activeBg,
26
- activeColor,
27
- className,
28
- style,
29
- children,
30
- __glissando,
31
- __position,
32
- __note,
33
- __disabled,
34
- __index,
35
- __fill,
36
- __width,
37
- __onPlayNote,
38
- __onStopNote,
39
- __label,
40
- onContextMenu = (e) => e.preventDefault(),
41
- ...props
42
- }: Props,
43
- ref,
44
- ) => {
45
- const [played, setPlayed] = useState(false)
46
-
47
- const colors = {
48
- '--bg': bg,
49
- '--color': color,
50
- '--active-bg': activeBg,
51
- '--active-color': activeColor,
52
- }
53
-
54
- useImperativeHandle(ref, () => {
55
- return {
56
- play() {
57
- if (__disabled) return
58
- setPlayed(true)
59
- if (__onPlayNote) __onPlayNote(__note!)
60
- },
61
- stop() {
62
- setPlayed(false)
63
- if (__onStopNote) __onStopNote(__note!)
64
- },
65
- played() {
66
- return played
67
- },
68
- }
69
- }, [__disabled, __note, __onPlayNote, __onStopNote, played])
70
-
71
- let keyLabelProps: KeyLabelProps = {}
72
- if (children != undefined) {
73
- React.Children.forEach(children, (child) => {
74
- if (React.isValidElement(child)) {
75
- if (child.type == KeyLabel) {
76
- keyLabelProps = child.props as KeyLabelProps
77
- } else {
78
- throw new Error('only <KeyLabel>')
79
- }
80
- } else {
81
- throw new Error('children is an invalid element.')
82
- }
83
- })
84
- }
85
-
86
- return (
87
- <div
88
- className={clsx(`tremolo-piano-white-key`, className)}
89
- aria-disabled={__disabled}
90
- data-active={played}
91
- style={{
92
- ...colors,
93
- left: __position,
94
- width: __fill ? __width : (width ?? __width),
95
- height: height,
96
- ...style,
97
- }}
98
- onPointerDown={() => {
99
- if (__disabled) return
100
- setPlayed(true)
101
- if (__onPlayNote) __onPlayNote(__note!)
102
- }}
103
- onPointerEnter={() => {
104
- if (__disabled) return
105
- if (__glissando) {
106
- setPlayed(true)
107
- if (__onPlayNote) __onPlayNote(__note!)
108
- }
109
- }}
110
- onPointerUp={() => {
111
- if (__disabled) return
112
- setPlayed(false)
113
- if (__onStopNote) __onStopNote(__note!)
114
- }}
115
- onPointerLeave={() => {
116
- if (__disabled) return
117
- if (__glissando) {
118
- setPlayed(false)
119
- if (__onStopNote) __onStopNote(__note!)
120
- }
121
- }}
122
- onContextMenu={onContextMenu}
123
- {...props}
124
- >
125
- <KeyLabel
126
- __note={__note}
127
- __label={__label}
128
- __index={__index}
129
- {...keyLabelProps}
130
- />
131
- </div>
132
- )
133
- },
134
- )
@@ -1,51 +0,0 @@
1
- import { CSSProperties, ReactElement, ReactNode } from 'react'
2
-
3
- /**
4
- * @category Piano
5
- */
6
- export interface KeyProps {
7
- width?: number
8
- height?: number | `${number}%`
9
-
10
- bg?: string
11
- color?: string
12
- activeBg?: string
13
- activeColor?: string
14
-
15
- style?: CSSProperties
16
-
17
- /**
18
- * \<KeyLabel />
19
- */
20
- children?: ReactElement
21
-
22
- /** @internal */
23
- __glissando?: boolean
24
- /** @internal */
25
- __position?: number
26
- /** @internal */
27
- __note?: number
28
- /** @internal */
29
- __disabled?: boolean
30
- /** @internal */
31
- __index?: number
32
- /** @internal */
33
- __fill?: boolean
34
- /** @internal */
35
- __width?: number
36
- /** @internal */
37
- __onPlayNote?: (noteNumber: number) => void
38
- /** @internal */
39
- __onStopNote?: (noteNumber: number) => void
40
- /** @internal */
41
- __label?: (note: number, index: number) => ReactNode
42
- }
43
-
44
- /**
45
- * @category Piano
46
- */
47
- export interface KeyMethods {
48
- play: () => void
49
- stop: () => void
50
- played: () => boolean
51
- }