@tremolo-ui/react 0.0.11 → 0.1.0-alpha.0

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 (153) hide show
  1. package/dist/cjs/index.js +711 -395
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/components/AnimationCanvas/index.d.ts +2 -2
  4. package/dist/cjs/types/components/AnimationCanvas/index.d.ts.map +1 -1
  5. package/dist/cjs/types/components/AnimationKnob/index.d.ts +10 -3
  6. package/dist/cjs/types/components/AnimationKnob/index.d.ts.map +1 -1
  7. package/dist/cjs/types/components/Knob/index.d.ts +25 -3
  8. package/dist/cjs/types/components/Knob/index.d.ts.map +1 -1
  9. package/dist/cjs/types/components/NumberInput/DecrementStepper.d.ts +2 -0
  10. package/dist/cjs/types/components/NumberInput/DecrementStepper.d.ts.map +1 -1
  11. package/dist/cjs/types/components/NumberInput/IncrementStepper.d.ts +2 -0
  12. package/dist/cjs/types/components/NumberInput/IncrementStepper.d.ts.map +1 -1
  13. package/dist/cjs/types/components/NumberInput/InternalInput.d.ts +18 -0
  14. package/dist/cjs/types/components/NumberInput/InternalInput.d.ts.map +1 -0
  15. package/dist/cjs/types/components/NumberInput/Stepper.d.ts +2 -0
  16. package/dist/cjs/types/components/NumberInput/Stepper.d.ts.map +1 -1
  17. package/dist/cjs/types/components/NumberInput/context.d.ts +3 -2
  18. package/dist/cjs/types/components/NumberInput/context.d.ts.map +1 -1
  19. package/dist/cjs/types/components/NumberInput/index.d.ts +12 -3
  20. package/dist/cjs/types/components/NumberInput/index.d.ts.map +1 -1
  21. package/dist/cjs/types/components/Piano/KeyLabel.d.ts +1 -3
  22. package/dist/cjs/types/components/Piano/KeyLabel.d.ts.map +1 -1
  23. package/dist/cjs/types/components/Piano/context.d.ts +24 -0
  24. package/dist/cjs/types/components/Piano/context.d.ts.map +1 -0
  25. package/dist/cjs/types/components/Piano/index.d.ts +15 -12
  26. package/dist/cjs/types/components/Piano/index.d.ts.map +1 -1
  27. package/dist/cjs/types/components/Piano/key.d.ts +14 -19
  28. package/dist/cjs/types/components/Piano/key.d.ts.map +1 -1
  29. package/dist/cjs/types/components/Piano/keyboardShortcuts.d.ts +2 -2
  30. package/dist/cjs/types/components/Slider/Scale.d.ts +1 -3
  31. package/dist/cjs/types/components/Slider/Scale.d.ts.map +1 -1
  32. package/dist/cjs/types/components/Slider/Thumb.d.ts +1 -0
  33. package/dist/cjs/types/components/Slider/Thumb.d.ts.map +1 -1
  34. package/dist/cjs/types/components/Slider/Track.d.ts +2 -2
  35. package/dist/cjs/types/components/Slider/Track.d.ts.map +1 -1
  36. package/dist/cjs/types/components/Slider/index.d.ts +5 -1
  37. package/dist/cjs/types/components/Slider/index.d.ts.map +1 -1
  38. package/dist/cjs/types/components/WheelObserver/index.d.ts +3 -3
  39. package/dist/cjs/types/components/WheelObserver/index.d.ts.map +1 -1
  40. package/dist/cjs/types/components/XYPad/Area.d.ts +3 -3
  41. package/dist/cjs/types/components/XYPad/Area.d.ts.map +1 -1
  42. package/dist/cjs/types/components/XYPad/Thumb.d.ts +1 -0
  43. package/dist/cjs/types/components/XYPad/Thumb.d.ts.map +1 -1
  44. package/dist/cjs/types/components/XYPad/index.d.ts +6 -1
  45. package/dist/cjs/types/components/XYPad/index.d.ts.map +1 -1
  46. package/dist/cjs/types/hooks/useDrag.d.ts.map +1 -1
  47. package/dist/cjs/types/hooks/useDragWithElement.d.ts +16 -0
  48. package/dist/cjs/types/hooks/useDragWithElement.d.ts.map +1 -0
  49. package/dist/cjs/types/hooks/useInterval.d.ts +2 -0
  50. package/dist/cjs/types/hooks/useInterval.d.ts.map +1 -0
  51. package/dist/cjs/types/hooks/useLongPress.d.ts +2 -0
  52. package/dist/cjs/types/hooks/useLongPress.d.ts.map +1 -0
  53. package/dist/cjs/types/index.d.ts +5 -0
  54. package/dist/cjs/types/index.d.ts.map +1 -1
  55. package/dist/esm/index.js +706 -396
  56. package/dist/esm/index.js.map +1 -1
  57. package/dist/esm/types/components/AnimationCanvas/index.d.ts +2 -2
  58. package/dist/esm/types/components/AnimationCanvas/index.d.ts.map +1 -1
  59. package/dist/esm/types/components/AnimationKnob/index.d.ts +10 -3
  60. package/dist/esm/types/components/AnimationKnob/index.d.ts.map +1 -1
  61. package/dist/esm/types/components/Knob/index.d.ts +25 -3
  62. package/dist/esm/types/components/Knob/index.d.ts.map +1 -1
  63. package/dist/esm/types/components/NumberInput/DecrementStepper.d.ts +2 -0
  64. package/dist/esm/types/components/NumberInput/DecrementStepper.d.ts.map +1 -1
  65. package/dist/esm/types/components/NumberInput/IncrementStepper.d.ts +2 -0
  66. package/dist/esm/types/components/NumberInput/IncrementStepper.d.ts.map +1 -1
  67. package/dist/esm/types/components/NumberInput/InternalInput.d.ts +18 -0
  68. package/dist/esm/types/components/NumberInput/InternalInput.d.ts.map +1 -0
  69. package/dist/esm/types/components/NumberInput/Stepper.d.ts +2 -0
  70. package/dist/esm/types/components/NumberInput/Stepper.d.ts.map +1 -1
  71. package/dist/esm/types/components/NumberInput/context.d.ts +3 -2
  72. package/dist/esm/types/components/NumberInput/context.d.ts.map +1 -1
  73. package/dist/esm/types/components/NumberInput/index.d.ts +12 -3
  74. package/dist/esm/types/components/NumberInput/index.d.ts.map +1 -1
  75. package/dist/esm/types/components/Piano/KeyLabel.d.ts +1 -3
  76. package/dist/esm/types/components/Piano/KeyLabel.d.ts.map +1 -1
  77. package/dist/esm/types/components/Piano/context.d.ts +24 -0
  78. package/dist/esm/types/components/Piano/context.d.ts.map +1 -0
  79. package/dist/esm/types/components/Piano/index.d.ts +15 -12
  80. package/dist/esm/types/components/Piano/index.d.ts.map +1 -1
  81. package/dist/esm/types/components/Piano/key.d.ts +14 -19
  82. package/dist/esm/types/components/Piano/key.d.ts.map +1 -1
  83. package/dist/esm/types/components/Piano/keyboardShortcuts.d.ts +2 -2
  84. package/dist/esm/types/components/Slider/Scale.d.ts +1 -3
  85. package/dist/esm/types/components/Slider/Scale.d.ts.map +1 -1
  86. package/dist/esm/types/components/Slider/Thumb.d.ts +1 -0
  87. package/dist/esm/types/components/Slider/Thumb.d.ts.map +1 -1
  88. package/dist/esm/types/components/Slider/Track.d.ts +2 -2
  89. package/dist/esm/types/components/Slider/Track.d.ts.map +1 -1
  90. package/dist/esm/types/components/Slider/index.d.ts +5 -1
  91. package/dist/esm/types/components/Slider/index.d.ts.map +1 -1
  92. package/dist/esm/types/components/WheelObserver/index.d.ts +3 -3
  93. package/dist/esm/types/components/WheelObserver/index.d.ts.map +1 -1
  94. package/dist/esm/types/components/XYPad/Area.d.ts +3 -3
  95. package/dist/esm/types/components/XYPad/Area.d.ts.map +1 -1
  96. package/dist/esm/types/components/XYPad/Thumb.d.ts +1 -0
  97. package/dist/esm/types/components/XYPad/Thumb.d.ts.map +1 -1
  98. package/dist/esm/types/components/XYPad/index.d.ts +6 -1
  99. package/dist/esm/types/components/XYPad/index.d.ts.map +1 -1
  100. package/dist/esm/types/hooks/useDrag.d.ts.map +1 -1
  101. package/dist/esm/types/hooks/useDragWithElement.d.ts +16 -0
  102. package/dist/esm/types/hooks/useDragWithElement.d.ts.map +1 -0
  103. package/dist/esm/types/hooks/useInterval.d.ts +2 -0
  104. package/dist/esm/types/hooks/useInterval.d.ts.map +1 -0
  105. package/dist/esm/types/hooks/useLongPress.d.ts +2 -0
  106. package/dist/esm/types/hooks/useLongPress.d.ts.map +1 -0
  107. package/dist/esm/types/index.d.ts +5 -0
  108. package/dist/esm/types/index.d.ts.map +1 -1
  109. package/dist/styles/index.css +117 -33
  110. package/package.json +3 -2
  111. package/src/components/AnimationCanvas/index.tsx +14 -6
  112. package/src/components/AnimationKnob/index.tsx +216 -187
  113. package/src/components/Knob/index.tsx +244 -171
  114. package/src/components/NumberInput/DecrementStepper.tsx +9 -2
  115. package/src/components/NumberInput/IncrementStepper.tsx +9 -2
  116. package/src/components/NumberInput/InternalInput.tsx +219 -0
  117. package/src/components/NumberInput/Stepper.tsx +2 -0
  118. package/src/components/NumberInput/context.tsx +20 -8
  119. package/src/components/NumberInput/index.css +76 -22
  120. package/src/components/NumberInput/index.tsx +94 -162
  121. package/src/components/Piano/KeyLabel.tsx +9 -5
  122. package/src/components/Piano/context.tsx +108 -0
  123. package/src/components/Piano/index.css +24 -6
  124. package/src/components/Piano/index.tsx +192 -122
  125. package/src/components/Piano/key.tsx +215 -0
  126. package/src/components/Piano/keyboardShortcuts.ts +2 -2
  127. package/src/components/Slider/Scale.tsx +1 -4
  128. package/src/components/Slider/Thumb.tsx +4 -0
  129. package/src/components/Slider/Track.tsx +5 -2
  130. package/src/components/Slider/index.css +5 -2
  131. package/src/components/Slider/index.tsx +84 -71
  132. package/src/components/WheelObserver/index.tsx +4 -2
  133. package/src/components/XYPad/Area.tsx +7 -6
  134. package/src/components/XYPad/Thumb.tsx +6 -0
  135. package/src/components/XYPad/index.css +12 -2
  136. package/src/components/XYPad/index.tsx +116 -90
  137. package/src/hooks/useDrag.ts +6 -7
  138. package/src/hooks/useDragWithElement.ts +76 -0
  139. package/src/hooks/useInterval.ts +27 -0
  140. package/src/hooks/useLongPress.ts +31 -0
  141. package/src/index.ts +6 -0
  142. package/src/styles/index.css +0 -1
  143. package/dist/cjs/types/components/Piano/BlackKey.d.ts +0 -5
  144. package/dist/cjs/types/components/Piano/BlackKey.d.ts.map +0 -1
  145. package/dist/cjs/types/components/Piano/WhiteKey.d.ts +0 -7
  146. package/dist/cjs/types/components/Piano/WhiteKey.d.ts.map +0 -1
  147. package/dist/esm/types/components/Piano/BlackKey.d.ts +0 -5
  148. package/dist/esm/types/components/Piano/BlackKey.d.ts.map +0 -1
  149. package/dist/esm/types/components/Piano/WhiteKey.d.ts +0 -7
  150. package/dist/esm/types/components/Piano/WhiteKey.d.ts.map +0 -1
  151. package/src/components/Piano/BlackKey.tsx +0 -118
  152. package/src/components/Piano/WhiteKey.tsx +0 -120
  153. package/src/components/Piano/key.ts +0 -46
@@ -1,6 +1,9 @@
1
1
  import React, { ReactElement } from 'react';
2
2
  import { InputEventOption } from '@tremolo-ui/functions';
3
- /** @category XYPad */
3
+ /**
4
+ * Two-dimensional slider component.
5
+ * @category XYPad
6
+ */
4
7
  export interface ValueOptions {
5
8
  value: number;
6
9
  min: number;
@@ -25,6 +28,8 @@ export interface XYPadProps {
25
28
  disabled?: boolean;
26
29
  readonly?: boolean;
27
30
  onChange?: (valueX: number, valueY: number) => void;
31
+ onDragStart?: (valueX: number, valueY: number) => void;
32
+ onDragEnd?: (valueX: number, valueY: number) => void;
28
33
  /** \<XYPadThumb /> | \<XYPadArea /> */
29
34
  children?: ReactElement | ReactElement[];
30
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/XYPad/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAGZ,YAAY,EAKb,MAAM,OAAO,CAAA;AAEd,OAAO,EAML,gBAAgB,EAEjB,MAAM,uBAAuB,CAAA;AAS9B,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAE3B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IAGX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC/B;;OAEG;IACH,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;CACnC;AAED,sBAAsB;AACtB,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,YAAY,CAAA;IACf,CAAC,EAAE,YAAY,CAAA;IAEf,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACnD,uCAAuC;IACvC,QAAQ,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAA;CACzC;AAED,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,IAAI,EAAE,MAAM,IAAI,CAAA;CACjB;AAaD;;;GAGG;AACH,eAAO,MAAM,KAAK,sMA0OjB,CAAA;AAED,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/XYPad/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAGZ,YAAY,EAKb,MAAM,OAAO,CAAA;AAEd,OAAO,EAML,gBAAgB,EAEjB,MAAM,uBAAuB,CAAA;AAS9B;;;GAGG;AACH,MAAM,WAAW,YAAY;IAE3B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IAGX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC/B;;OAEG;IACH,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;CACnC;AAED,sBAAsB;AACtB,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,YAAY,CAAA;IACf,CAAC,EAAE,YAAY,CAAA;IAEf,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACnD,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACtD,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACpD,uCAAuC;IACvC,QAAQ,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAA;CACzC;AAED,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,IAAI,EAAE,MAAM,IAAI,CAAA;CACjB;AAaD;;;GAGG;AACH,eAAO,MAAM,KAAK,sMA+PjB,CAAA;AAED,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDrag.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useDrag.ts"],"names":[],"mappings":"AAKA,UAAU,KAAK;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACtE,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EACzC,SAAa,EACb,MAAM,EACN,WAAW,EACX,SAAS,GACV,EAAE,KAAK,GAAG;IACT,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI;IACjC,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI;CACvC,CAmEA"}
1
+ {"version":3,"file":"useDrag.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useDrag.ts"],"names":[],"mappings":"AAKA,UAAU,KAAK;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACtE,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EACzC,SAAa,EACb,MAAM,EACN,WAAW,EACX,SAAS,GACV,EAAE,KAAK,GAAG;IACT,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI;IACjC,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI;CACvC,CAkEA"}
@@ -0,0 +1,16 @@
1
+ import { RefObject } from 'react';
2
+ interface Props<T extends Element> {
3
+ baseElementRef: RefObject<T | null>;
4
+ onDrag: (normalizedX: number, normalizedY: number) => void;
5
+ onDragStart?: (normalizedX: number, normalizedY: number) => void;
6
+ onDragEnd?: (normalizedX: number, normalizedY: number) => void;
7
+ }
8
+ /**
9
+ * @returns [refCallback, pointerDownHandler]
10
+ */
11
+ export declare function useDragWithElement<T extends Element>({ baseElementRef, onDrag, onDragStart, onDragEnd, }: Props<T>): [
12
+ (div: EventTarget | null) => void,
13
+ (event: React.PointerEvent<T>) => void
14
+ ];
15
+ export {};
16
+ //# sourceMappingURL=useDragWithElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDragWithElement.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useDragWithElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAE,MAAM,OAAO,CAAA;AAOtD,UAAU,KAAK,CAAC,CAAC,SAAS,OAAO;IAC/B,cAAc,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IACnC,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1D,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IAChE,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,OAAO,EAAE,EACpD,cAAc,EACd,MAAM,EACN,WAAW,EACX,SAAS,GACV,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG;IACZ,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI;IACjC,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI;CACvC,CAkDA"}
@@ -0,0 +1,2 @@
1
+ export declare function useInterval(callback: () => void, delay: number | null): void;
2
+ //# sourceMappingURL=useInterval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInterval.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useInterval.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,QAwBrE"}
@@ -0,0 +1,2 @@
1
+ export declare function useLongPress(callback: () => void, initialDelay?: number, interval?: number): () => void;
2
+ //# sourceMappingURL=useLongPress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLongPress.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useLongPress.ts"],"names":[],"mappings":"AAKA,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,IAAI,EACpB,YAAY,SAAM,EAClB,QAAQ,SAAK,cAsBd"}
@@ -13,4 +13,9 @@ export * from './components/Piano';
13
13
  export * from './components/Slider';
14
14
  export * from './components/WheelObserver';
15
15
  export * from './components/XYPad';
16
+ export * from './hooks/useAnimationFrame';
17
+ export * from './hooks/useDrag';
18
+ export * from './hooks/useEventListener';
19
+ export * from './hooks/useInterval';
20
+ export * from './hooks/useLongPress';
16
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAC3B,OAAO,6BAA6B,CAAA;AACpC,OAAO,oCAAoC,CAAA;AAC3C,OAAO,8BAA8B,CAAA;AACrC,OAAO,+BAA+B,CAAA;AACtC,OAAO,8BAA8B,CAAA;AAErC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAC3B,OAAO,6BAA6B,CAAA;AACpC,OAAO,oCAAoC,CAAA;AAC3C,OAAO,8BAA8B,CAAA;AACrC,OAAO,+BAA+B,CAAA;AACtC,OAAO,8BAA8B,CAAA;AAErC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAElC,cAAc,2BAA2B,CAAA;AACzC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA"}
@@ -1,6 +1,5 @@
1
1
  :root {
2
2
  --tremolo-theme-color: #4e76e6;
3
- --tremolo-theme-color-rgb: 78, 118, 230;
4
3
  }
5
4
 
6
5
  .tremolo-no-select {
@@ -57,42 +56,80 @@
57
56
  }
58
57
 
59
58
  .tremolo-number-input-wrapper {
60
- --tremolo-number-input-border-radius: 4px;
61
- --tremolo-number-input-stepper-width: 20px;
59
+ --border-radius: 4px;
60
+ --stepper-width: 20px;
61
+ --active-color: var(--tremolo-theme-color);
62
62
 
63
63
  display: inline-flex;
64
64
  flex-direction: row;
65
65
  position: relative;
66
-
67
- border-style: solid;
68
- border-width: 1px;
69
- border-color: #bbb;
70
- border-radius: var(--tremolo-number-input-border-radius);
71
-
72
66
  width: 140px;
73
67
  height: min-content;
74
-
75
- &:hover {
76
- border-color: var(--tremolo-theme-color);
77
- }
68
+ border-style: solid;
69
+ border-color: #c1c1c1;
70
+ border-width: 0px;
71
+ outline: none;
72
+ transition: all 0.1s;
78
73
 
79
74
  &:not(:focus-within):has(> .tremolo-number-input[data-error='true']) {
80
75
  border-color: #f34343;
81
76
  }
82
77
 
83
- &:focus-within {
84
- border-color: var(--tremolo-theme-color);
85
- box-shadow: 0px 0px 0px 2px rgba(var(--tremolo-theme-color-rgb), 0.1);
78
+ &[data-variant='outline'] {
79
+ border-width: 1px;
80
+ border-radius: var(--border-radius);
81
+
82
+ &:hover {
83
+ border-color: #909090;
84
+ }
85
+
86
+ &:focus-within {
87
+ border-color: var(--active-color);
88
+ box-shadow: 0px 0px 0px 2px
89
+ color-mix(in srgb, var(--active-color) 10%, transparent);
90
+ }
91
+ }
92
+
93
+ &[data-variant='filled'] {
94
+ border-width: 1px;
95
+ border-radius: var(--border-radius);
96
+ border-color: transparent;
97
+ background-color: #edf2f7;
98
+
99
+ &:hover {
100
+ background-color: #e4e9ee;
101
+ }
102
+
103
+ &:focus-within {
104
+ background-color: inherit;
105
+ border-color: var(--active-color);
106
+ box-shadow: 0px 0px 0px 2px
107
+ color-mix(in srgb, var(--active-color) 10%, transparent);
108
+ }
109
+ }
110
+
111
+ &[data-variant='flushed'] {
112
+ border-bottom-width: 1px;
113
+
114
+ &:hover {
115
+ border-color: #909090;
116
+ }
117
+
118
+ &:focus-within {
119
+ border-color: var(--active-color);
120
+ box-shadow: 0px 2px 0px 0px
121
+ color-mix(in srgb, var(--active-color) 10%, transparent);
122
+ }
86
123
  }
87
124
 
88
125
  &[data-stepper='false'] {
89
- --tremolo-number-input-stepper-width: 0px;
126
+ --stepper-width: 0px;
90
127
  }
91
128
  }
92
129
 
93
130
  .tremolo-number-input {
94
131
  display: block;
95
- width: calc(100% - 20px - var(--tremolo-number-input-stepper-width));
132
+ width: calc(100% - 20px - var(--stepper-width));
96
133
  background-color: inherit;
97
134
  font: inherit;
98
135
  padding: 6px 10px;
@@ -100,7 +137,11 @@
100
137
  margin: 0;
101
138
  border: none;
102
139
  outline: none;
103
- appearance: textfield;
140
+ appearance: none;
141
+
142
+ &[aria-readonly='true'] {
143
+ cursor: not-allowed;
144
+ }
104
145
  }
105
146
 
106
147
  .tremolo-number-input-stepper {
@@ -110,7 +151,7 @@
110
151
  position: absolute;
111
152
  top: 0;
112
153
  right: 0;
113
- width: var(--tremolo-number-input-stepper-width);
154
+ width: var(--stepper-width);
114
155
  transition: all 0.1s linear;
115
156
 
116
157
  &[data-dynamic='true'] {
@@ -119,7 +160,11 @@
119
160
  }
120
161
  }
121
162
 
122
- .tremolo-number-input-wrapper:hover .tremolo-number-input-stepper {
163
+ :is(
164
+ .tremolo-number-input-wrapper:hover,
165
+ .tremolo-number-input-wrapper:focus-within
166
+ )
167
+ .tremolo-number-input-stepper {
123
168
  opacity: 1;
124
169
  transform: translateX(0);
125
170
  }
@@ -136,7 +181,7 @@
136
181
  max-height: 50%;
137
182
  user-select: none;
138
183
  cursor: pointer;
139
- border-top-right-radius: var(--tremolo-number-input-border-radius);
184
+ border-top-right-radius: var(--border-radius);
140
185
 
141
186
  &[aria-disabled='false']:active {
142
187
  background-color: #3443560e;
@@ -145,6 +190,10 @@
145
190
  &[aria-disabled='true'] {
146
191
  cursor: not-allowed;
147
192
  }
193
+
194
+ &[aria-readonly='true'] {
195
+ cursor: not-allowed;
196
+ }
148
197
  }
149
198
 
150
199
  .tremolo-number-input-decrement-stepper {
@@ -160,7 +209,7 @@
160
209
  max-height: 50%;
161
210
  user-select: none;
162
211
  cursor: pointer;
163
- border-bottom-right-radius: var(--tremolo-number-input-border-radius);
212
+ border-bottom-right-radius: var(--border-radius);
164
213
 
165
214
  &[aria-disabled='false']:active {
166
215
  background-color: #3443560e;
@@ -169,26 +218,39 @@
169
218
  &[aria-disabled='true'] {
170
219
  cursor: not-allowed;
171
220
  }
221
+
222
+ &[aria-readonly='true'] {
223
+ cursor: not-allowed;
224
+ }
172
225
  }
173
226
 
174
227
  .tremolo-piano {
175
228
  display: inline-block;
176
229
  box-sizing: border-box;
177
230
  user-select: none;
231
+ touch-action: none;
178
232
  position: relative;
179
233
  }
180
234
 
181
235
  .tremolo-piano-white-key {
236
+ --bg: white;
237
+ --color: black;
238
+ --active-bg: #ccc;
239
+ --active-color: black;
240
+
241
+ box-sizing: border-box;
182
242
  position: absolute;
183
- background-color: white;
184
- color: black;
243
+ background-color: var(--bg);
244
+ -webkit-tap-highlight-color: transparent;
245
+ color: var(--color);
185
246
  border: 1px solid #555;
186
247
  border-radius: 0px 0px 8px 8px;
187
248
  cursor: pointer;
188
249
  z-index: 1;
189
250
 
190
251
  &[data-active='true'] {
191
- background-color: #ccc;
252
+ background-color: var(--active-bg);
253
+ color: var(--active-color);
192
254
  }
193
255
 
194
256
  &[aria-disabled='true'] {
@@ -197,16 +259,24 @@
197
259
  }
198
260
 
199
261
  .tremolo-piano-black-key {
262
+ --color: white;
263
+ --bg: #333;
264
+ --active-color: white;
265
+ --active-bg: #666;
266
+
267
+ box-sizing: border-box;
200
268
  position: absolute;
201
- background-color: #333;
202
- color: white;
269
+ background-color: var(--bg);
270
+ -webkit-tap-highlight-color: transparent;
271
+ color: var(--color);
203
272
  border: 1px solid #555;
204
273
  border-radius: 0px 0px 8px 8px;
205
274
  cursor: pointer;
206
275
  z-index: 2;
207
276
 
208
277
  &[data-active='true'] {
209
- background-color: #666;
278
+ background-color: var(--active-bg);
279
+ color: var(--active-color);
210
280
  }
211
281
 
212
282
  &[aria-disabled='true'] {
@@ -222,6 +292,7 @@
222
292
  }
223
293
 
224
294
  .tremolo-piano-key-label {
295
+ box-sizing: content-box;
225
296
  display: flex;
226
297
  justify-content: center;
227
298
  align-items: center;
@@ -253,7 +324,9 @@
253
324
  }
254
325
 
255
326
  .tremolo-slider-thumb {
256
- background: #4e76e6;
327
+ --color: var(--tremolo-theme-color);
328
+
329
+ background: var(--color);
257
330
  border-radius: 50%;
258
331
  outline: none;
259
332
 
@@ -262,7 +335,8 @@
262
335
  }
263
336
 
264
337
  &[aria-readonly='false']:focus {
265
- box-shadow: 0px 0px 0px 3px rgba(var(--tremolo-theme-color-rgb), 0.2);
338
+ box-shadow: 0px 0px 0px 3px
339
+ color-mix(in srgb, var(--color) 20%, transparent);
266
340
  }
267
341
  }
268
342
 
@@ -325,6 +399,13 @@
325
399
  cursor: pointer;
326
400
  }
327
401
 
402
+ .tremolo-xy-pad-area {
403
+ --color: #eee;
404
+
405
+ position: relative;
406
+ background-color: var(--color);
407
+ }
408
+
328
409
  .tremolo-xy-pad-thumb-wrapper {
329
410
  position: absolute;
330
411
  translate: -50% -50%;
@@ -332,15 +413,18 @@
332
413
  }
333
414
 
334
415
  .tremolo-xy-pad-thumb {
416
+ --color: var(--tremolo-theme-color);
417
+
335
418
  border-radius: 50%;
336
419
  outline: none;
337
- background-color: #4e76e6;
420
+ background-color: var(--color);
338
421
 
339
422
  &[aria-disabled='true'] {
340
423
  background-color: #5d6478;
341
424
  }
342
425
 
343
426
  &:focus {
344
- box-shadow: 0px 0px 0px 3px rgba(var(--tremolo-theme-color-rgb), 0.2);
427
+ box-shadow: 0px 0px 0px 3px
428
+ color-mix(in srgb, var(--color) 20%, transparent);
345
429
  }
346
430
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tremolo-ui/react",
3
- "version": "0.0.11",
3
+ "version": "0.1.0-alpha.0",
4
4
  "description": "React component library for audio app",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -20,6 +20,7 @@
20
20
  "clean:sb": "rimraf ./storybook-static"
21
21
  },
22
22
  "devDependencies": {
23
+ "@storybook/addon-a11y": "^8.6.7",
23
24
  "@storybook/addon-essentials": "^8.6.7",
24
25
  "@storybook/addon-interactions": "^8.6.7",
25
26
  "@storybook/addon-links": "^8.6.7",
@@ -42,7 +43,7 @@
42
43
  "react-dom": "^18 || ^19"
43
44
  },
44
45
  "dependencies": {
45
- "@tremolo-ui/functions": "0.0.11",
46
+ "@tremolo-ui/functions": "0.0.12",
46
47
  "clsx": "^2.1.1",
47
48
  "zustand": "^5.0.3"
48
49
  },
@@ -1,8 +1,8 @@
1
1
  import clsx from 'clsx'
2
2
  import {
3
3
  ComponentPropsWithoutRef,
4
- MutableRefObject,
5
4
  ReactElement,
5
+ RefObject,
6
6
  useCallback,
7
7
  useEffect,
8
8
  useRef,
@@ -29,8 +29,8 @@ export type DrawFunction = (
29
29
  // TODO: saving scale and translate
30
30
  // context: Omit<CanvasRenderingContext2D, 'save' | 'restore' | 'scale'>,
31
31
  context: CanvasRenderingContext2D,
32
- width: MutableRefObject<number>,
33
- height: MutableRefObject<number>,
32
+ width: RefObject<number>,
33
+ height: RefObject<number>,
34
34
  count: number,
35
35
  ) => void
36
36
 
@@ -84,6 +84,7 @@ export function AnimationCanvas({
84
84
  init,
85
85
  draw,
86
86
  className,
87
+ onContextMenu = (event) => event.preventDefault(),
87
88
  ...props
88
89
  }: AnimationCanvasProps &
89
90
  Omit<
@@ -99,8 +100,8 @@ export function AnimationCanvas({
99
100
  const loop = useCallback(
100
101
  (
101
102
  context: CanvasRenderingContext2D,
102
- width: MutableRefObject<number>,
103
- height: MutableRefObject<number>,
103
+ width: RefObject<number>,
104
+ height: RefObject<number>,
104
105
  count: number,
105
106
  ) => {
106
107
  reqIdRef.current = requestAnimationFrame(() =>
@@ -154,7 +155,13 @@ export function AnimationCanvas({
154
155
  ;(context[prop] as DrawingStateValue) = contextMemo[prop]
155
156
  }
156
157
 
157
- if (reduceFlickering && memoContext) {
158
+ if (
159
+ reduceFlickering &&
160
+ memoContext &&
161
+ memoCanvas &&
162
+ memoCanvas.width > 0 &&
163
+ memoCanvas.height > 0
164
+ ) {
158
165
  context.drawImage(memoContext.canvas, 0, 0)
159
166
  }
160
167
  }
@@ -194,6 +201,7 @@ export function AnimationCanvas({
194
201
  width={relativeSize ? 0 : width}
195
202
  height={relativeSize ? 0 : height}
196
203
  ref={canvasRef}
204
+ onContextMenu={onContextMenu}
197
205
  {...props}
198
206
  ></canvas>
199
207
  {relativeSize && reduceFlickering && (