etudes 1.2.0 → 2.1.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 (126) hide show
  1. package/README.md +1 -1
  2. package/lib/Accordion.d.ts +80 -71
  3. package/lib/Accordion.js +173 -183
  4. package/lib/Accordion.js.map +1 -1
  5. package/lib/BurgerButton.d.ts +20 -7
  6. package/lib/BurgerButton.js +113 -20
  7. package/lib/BurgerButton.js.map +1 -1
  8. package/lib/Conditional.d.ts +2 -3
  9. package/lib/Conditional.js +0 -1
  10. package/lib/Conditional.js.map +1 -1
  11. package/lib/DebugConsole.d.ts +14 -23
  12. package/lib/DebugConsole.js +86 -87
  13. package/lib/DebugConsole.js.map +1 -1
  14. package/lib/Dial.d.ts +53 -16
  15. package/lib/Dial.js +121 -35
  16. package/lib/Dial.js.map +1 -1
  17. package/lib/Dropdown.d.ts +68 -83
  18. package/lib/Dropdown.js +226 -161
  19. package/lib/Dropdown.js.map +1 -1
  20. package/lib/Each.d.ts +2 -2
  21. package/lib/Each.js.map +1 -1
  22. package/lib/ExtractChild.d.ts +5 -4
  23. package/lib/ExtractChild.js +13 -11
  24. package/lib/ExtractChild.js.map +1 -1
  25. package/lib/ExtractChildren.d.ts +2 -2
  26. package/lib/ExtractChildren.js +7 -5
  27. package/lib/ExtractChildren.js.map +1 -1
  28. package/lib/FlatSVG.d.ts +30 -25
  29. package/lib/FlatSVG.js +28 -37
  30. package/lib/FlatSVG.js.map +1 -1
  31. package/lib/List.d.ts +97 -54
  32. package/lib/List.js +124 -63
  33. package/lib/List.js.map +1 -1
  34. package/lib/MasonryGrid.d.ts +27 -15
  35. package/lib/MasonryGrid.js +163 -148
  36. package/lib/MasonryGrid.js.map +1 -1
  37. package/lib/Panorama.d.ts +100 -21
  38. package/lib/Panorama.js +45 -44
  39. package/lib/Panorama.js.map +1 -1
  40. package/lib/PanoramaSlider.d.ts +65 -23
  41. package/lib/PanoramaSlider.js +150 -45
  42. package/lib/PanoramaSlider.js.map +1 -1
  43. package/lib/RangeSlider.d.ts +29 -89
  44. package/lib/RangeSlider.js +272 -286
  45. package/lib/RangeSlider.js.map +1 -1
  46. package/lib/Repeat.d.ts +4 -3
  47. package/lib/Repeat.js +3 -2
  48. package/lib/Repeat.js.map +1 -1
  49. package/lib/RotatingGallery.d.ts +38 -36
  50. package/lib/RotatingGallery.js +47 -17
  51. package/lib/RotatingGallery.js.map +1 -1
  52. package/lib/SelectableButton.d.ts +13 -4
  53. package/lib/SelectableButton.js +3 -14
  54. package/lib/SelectableButton.js.map +1 -1
  55. package/lib/Slider.d.ts +103 -41
  56. package/lib/Slider.js +182 -82
  57. package/lib/Slider.js.map +1 -1
  58. package/lib/StepwiseSlider.d.ts +146 -59
  59. package/lib/StepwiseSlider.js +248 -142
  60. package/lib/StepwiseSlider.js.map +1 -1
  61. package/lib/SwipeContainer.d.ts +13 -5
  62. package/lib/SwipeContainer.js +5 -15
  63. package/lib/SwipeContainer.js.map +1 -1
  64. package/lib/TextField.d.ts +1 -1
  65. package/lib/TextField.js +5 -15
  66. package/lib/TextField.js.map +1 -1
  67. package/lib/Video.d.ts +30 -51
  68. package/lib/Video.js +77 -119
  69. package/lib/Video.js.map +1 -1
  70. package/lib/WithTooltip.d.ts +16 -18
  71. package/lib/WithTooltip.js +167 -101
  72. package/lib/WithTooltip.js.map +1 -1
  73. package/lib/hooks/useDocumentTitle.d.ts +2 -1
  74. package/lib/hooks/useDocumentTitle.js +2 -1
  75. package/lib/hooks/useDocumentTitle.js.map +1 -1
  76. package/lib/hooks/useDragEffect.d.ts +26 -17
  77. package/lib/hooks/useDragEffect.js +30 -20
  78. package/lib/hooks/useDragEffect.js.map +1 -1
  79. package/lib/hooks/useElementRect.d.ts +2 -1
  80. package/lib/hooks/useElementRect.js +5 -4
  81. package/lib/hooks/useElementRect.js.map +1 -1
  82. package/lib/hooks/useInterval.d.ts +3 -3
  83. package/lib/hooks/useInterval.js +1 -1
  84. package/lib/hooks/useInterval.js.map +1 -1
  85. package/lib/hooks/useLoadImageEffect.d.ts +8 -8
  86. package/lib/hooks/useLoadImageEffect.js.map +1 -1
  87. package/lib/hooks/usePrevious.d.ts +6 -0
  88. package/lib/hooks/usePrevious.js +17 -0
  89. package/lib/hooks/usePrevious.js.map +1 -0
  90. package/lib/hooks/useResizeEffect.d.ts +3 -3
  91. package/lib/hooks/useResizeEffect.js +5 -8
  92. package/lib/hooks/useResizeEffect.js.map +1 -1
  93. package/lib/hooks/useSearchParamState.d.ts +11 -8
  94. package/lib/hooks/useSearchParamState.js +14 -10
  95. package/lib/hooks/useSearchParamState.js.map +1 -1
  96. package/lib/providers/I18nProvider.d.ts +179 -0
  97. package/lib/providers/I18nProvider.js +470 -0
  98. package/lib/providers/I18nProvider.js.map +1 -0
  99. package/lib/providers/ScrollPositionProvider.d.ts +15 -0
  100. package/lib/providers/ScrollPositionProvider.js +112 -0
  101. package/lib/providers/ScrollPositionProvider.js.map +1 -0
  102. package/lib/utils/asClassNameDict.d.ts +3 -0
  103. package/lib/utils/asClassNameDict.js +7 -0
  104. package/lib/utils/asClassNameDict.js.map +1 -0
  105. package/lib/utils/asComponentDict.d.ts +5 -0
  106. package/lib/utils/asComponentDict.js +23 -0
  107. package/lib/utils/asComponentDict.js.map +1 -0
  108. package/lib/utils/asStyleDict.d.ts +4 -0
  109. package/lib/utils/asStyleDict.js +7 -0
  110. package/lib/utils/asStyleDict.js.map +1 -0
  111. package/lib/utils/cloneStyledElement.d.ts +18 -0
  112. package/lib/utils/cloneStyledElement.js +63 -0
  113. package/lib/utils/cloneStyledElement.js.map +1 -0
  114. package/lib/utils/styles.d.ts +2 -0
  115. package/lib/utils/styles.js +22 -0
  116. package/lib/utils/styles.js.map +1 -0
  117. package/lib/utils/useDebug.d.ts +2 -0
  118. package/lib/utils/useDebug.js +46 -0
  119. package/lib/utils/useDebug.js.map +1 -0
  120. package/package.json +31 -38
  121. package/lib/AbstractSelectableCollection.d.ts +0 -94
  122. package/lib/AbstractSelectableCollection.js +0 -151
  123. package/lib/AbstractSelectableCollection.js.map +0 -1
  124. package/lib/types/index.d.ts +0 -7
  125. package/lib/types/index.js +0 -3
  126. package/lib/types/index.js.map +0 -1
@@ -1,8 +1,4 @@
1
1
  "use strict";
2
- var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
3
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
- return cooked;
5
- };
6
2
  var __assign = (this && this.__assign) || function () {
7
3
  __assign = Object.assign || function(t) {
8
4
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -64,17 +60,14 @@ var __read = (this && this.__read) || function (o, n) {
64
60
  }
65
61
  return ar;
66
62
  };
67
- var __importDefault = (this && this.__importDefault) || function (mod) {
68
- return (mod && mod.__esModule) ? mod : { "default": mod };
69
- };
70
63
  Object.defineProperty(exports, "__esModule", { value: true });
71
64
  var react_1 = __importStar(require("react"));
72
65
  var spase_1 = require("spase");
73
- var styled_components_1 = __importDefault(require("styled-components"));
74
66
  /**
75
- * An empty component with a backing `<div>` element that detects swipe gestures.
67
+ * An empty component with a backing `<div>` element that detects swipe
68
+ * gestures.
76
69
  */
77
- function SwipeContainer(_a) {
70
+ exports.default = (0, react_1.forwardRef)(function (_a, ref) {
78
71
  var children = _a.children, _b = _a.isEnabled, isEnabled = _b === void 0 ? true : _b, _c = _a.threshold, threshold = _c === void 0 ? 0.5 : _c, onSwipeDown = _a.onSwipeDown, onSwipeLeft = _a.onSwipeLeft, onSwipeRight = _a.onSwipeRight, onSwipeUp = _a.onSwipeUp, props = __rest(_a, ["children", "isEnabled", "threshold", "onSwipeDown", "onSwipeLeft", "onSwipeRight", "onSwipeUp"]);
79
72
  var _d = __read((0, react_1.useState)(undefined), 2), dragStartPosition = _d[0], setDragStartPosition = _d[1];
80
73
  var _e = __read((0, react_1.useState)(undefined), 2), dragEndPosition = _e[0], setDragEndPosition = _e[1];
@@ -132,9 +125,6 @@ function SwipeContainer(_a) {
132
125
  setDragEndPosition(undefined);
133
126
  setDragStartTime(NaN);
134
127
  };
135
- return (react_1.default.createElement(StyledRoot, __assign({}, props, { onTouchStart: function (event) { return onDragStart(event.targetTouches[0].clientX, event.targetTouches[0].clientY); }, onTouchMove: function (event) { return onDragMove(event.targetTouches[0].clientX, event.targetTouches[0].clientY); }, onTouchEnd: function () { return onDragEnd(); }, onMouseDown: function (event) { return onDragStart(event.clientX, event.clientY); }, onMouseMove: function (event) { return onDragMove(event.clientX, event.clientY); }, onMouseUp: function () { return onDragEnd(); }, onMouseLeave: function () { return onDragCancel(); } }), children));
136
- }
137
- exports.default = SwipeContainer;
138
- var StyledRoot = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n\n"], ["\n\n"])));
139
- var templateObject_1;
128
+ return (react_1.default.createElement("div", __assign({}, props, { ref: ref, onMouseDown: function (event) { return onDragStart(event.clientX, event.clientY); }, onMouseLeave: function () { return onDragCancel(); }, onMouseMove: function (event) { return onDragMove(event.clientX, event.clientY); }, onMouseUp: function () { return onDragEnd(); }, onTouchEnd: function () { return onDragEnd(); }, onTouchMove: function (event) { return onDragMove(event.targetTouches[0].clientX, event.targetTouches[0].clientY); }, onTouchStart: function (event) { return onDragStart(event.targetTouches[0].clientX, event.targetTouches[0].clientY); } }), children));
129
+ });
140
130
  //# sourceMappingURL=SwipeContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SwipeContainer.js","sourceRoot":"/","sources":["SwipeContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { HTMLAttributes, useState } from 'react'\nimport { Point } from 'spase'\nimport styled from 'styled-components'\n\ntype Props = HTMLAttributes<HTMLDivElement> & {\n isEnabled?: boolean\n threshold?: number\n onSwipeDown?: () => void\n onSwipeLeft?: () => void\n onSwipeRight?: () => void\n onSwipeUp?: () => void\n}\n\n/**\n * An empty component with a backing `<div>` element that detects swipe gestures.\n */\nexport default function SwipeContainer({\n children,\n isEnabled = true,\n threshold = 0.5,\n onSwipeDown,\n onSwipeLeft,\n onSwipeRight,\n onSwipeUp,\n ...props\n}: Props) {\n const [dragStartPosition, setDragStartPosition] = useState<Point | undefined>(undefined)\n const [dragEndPosition, setDragEndPosition] = useState<Point | undefined>(undefined)\n const [dragStartTime, setDragStartTime] = useState(NaN)\n\n const onDragStart = (x: number, y: number) => {\n if (isNaN(x) || isNaN(y)) return onDragCancel()\n setDragStartPosition(new Point([x, y]))\n }\n\n const onDragMove = (x: number, y: number) => {\n const startPosition = dragStartPosition\n\n if (startPosition === undefined) return\n\n const hasMovement = startPosition.x !== x || startPosition.y !== y\n const hasStartTime = !isNaN(dragStartTime)\n\n if (!hasMovement) return\n\n if (!hasStartTime) setDragStartTime(Date.now())\n\n setDragEndPosition(new Point([x, y]))\n }\n\n const onDragEnd = () => {\n const time = dragStartTime\n const startPosition = dragStartPosition\n const endPosition = dragEndPosition\n\n if (isNaN(time) || startPosition === undefined || endPosition === undefined) return\n\n const dt = Date.now() - time\n const dx = endPosition.x - startPosition.x\n const dy = endPosition.y - endPosition.y\n const vx = dx / dt\n const vy = dy / dt\n\n if (isEnabled) {\n if (Math.abs(vx) >= threshold && Math.abs(vx) > Math.abs(vy)) {\n if (vx > 0) {\n onSwipeRight?.()\n }\n else {\n onSwipeLeft?.()\n }\n }\n else if (Math.abs(vy) >= threshold && Math.abs(vy) > Math.abs(vx)) {\n if (vy > 0) {\n onSwipeDown?.()\n }\n else {\n onSwipeUp?.()\n }\n }\n }\n\n onDragCancel()\n }\n\n const onDragCancel = () => {\n setDragStartPosition(undefined)\n setDragEndPosition(undefined)\n setDragStartTime(NaN)\n }\n\n return (\n <StyledRoot\n {...props}\n onTouchStart={event => onDragStart(event.targetTouches[0].clientX, event.targetTouches[0].clientY)}\n onTouchMove={event => onDragMove(event.targetTouches[0].clientX, event.targetTouches[0].clientY)}\n onTouchEnd={() => onDragEnd()}\n onMouseDown={event => onDragStart(event.clientX, event.clientY)}\n onMouseMove={event => onDragMove(event.clientX, event.clientY)}\n onMouseUp={() => onDragEnd()}\n onMouseLeave={() => onDragCancel()}\n >\n {children}\n </StyledRoot>\n )\n}\n\nconst StyledRoot = styled.div`\n\n`\n"]}
1
+ {"version":3,"file":"SwipeContainer.js","sourceRoot":"/","sources":["SwipeContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { forwardRef, HTMLAttributes, useState } from 'react'\nimport { Point } from 'spase'\n\nexport type SwipeContainerProps = HTMLAttributes<HTMLDivElement> & {\n isEnabled?: boolean\n threshold?: number\n onSwipeDown?: () => void\n onSwipeLeft?: () => void\n onSwipeRight?: () => void\n onSwipeUp?: () => void\n}\n\n/**\n * An empty component with a backing `<div>` element that detects swipe\n * gestures.\n */\nexport default forwardRef<HTMLDivElement, SwipeContainerProps>(({\n children,\n isEnabled = true,\n threshold = 0.5,\n onSwipeDown,\n onSwipeLeft,\n onSwipeRight,\n onSwipeUp,\n ...props\n}, ref) => {\n const [dragStartPosition, setDragStartPosition] = useState<Point | undefined>(undefined)\n const [dragEndPosition, setDragEndPosition] = useState<Point | undefined>(undefined)\n const [dragStartTime, setDragStartTime] = useState(NaN)\n\n const onDragStart = (x: number, y: number) => {\n if (isNaN(x) || isNaN(y)) return onDragCancel()\n setDragStartPosition(new Point([x, y]))\n }\n\n const onDragMove = (x: number, y: number) => {\n const startPosition = dragStartPosition\n\n if (startPosition === undefined) return\n\n const hasMovement = startPosition.x !== x || startPosition.y !== y\n const hasStartTime = !isNaN(dragStartTime)\n\n if (!hasMovement) return\n\n if (!hasStartTime) setDragStartTime(Date.now())\n\n setDragEndPosition(new Point([x, y]))\n }\n\n const onDragEnd = () => {\n const time = dragStartTime\n const startPosition = dragStartPosition\n const endPosition = dragEndPosition\n\n if (isNaN(time) || startPosition === undefined || endPosition === undefined) return\n\n const dt = Date.now() - time\n const dx = endPosition.x - startPosition.x\n const dy = endPosition.y - endPosition.y\n const vx = dx / dt\n const vy = dy / dt\n\n if (isEnabled) {\n if (Math.abs(vx) >= threshold && Math.abs(vx) > Math.abs(vy)) {\n if (vx > 0) {\n onSwipeRight?.()\n }\n else {\n onSwipeLeft?.()\n }\n }\n else if (Math.abs(vy) >= threshold && Math.abs(vy) > Math.abs(vx)) {\n if (vy > 0) {\n onSwipeDown?.()\n }\n else {\n onSwipeUp?.()\n }\n }\n }\n\n onDragCancel()\n }\n\n const onDragCancel = () => {\n setDragStartPosition(undefined)\n setDragEndPosition(undefined)\n setDragStartTime(NaN)\n }\n\n return (\n <div\n {...props}\n ref={ref}\n onMouseDown={event => onDragStart(event.clientX, event.clientY)}\n onMouseLeave={() => onDragCancel()}\n onMouseMove={event => onDragMove(event.clientX, event.clientY)}\n onMouseUp={() => onDragEnd()}\n onTouchEnd={() => onDragEnd()}\n onTouchMove={event => onDragMove(event.targetTouches[0].clientX, event.targetTouches[0].clientY)}\n onTouchStart={event => onDragStart(event.targetTouches[0].clientX, event.targetTouches[0].clientY)}\n >\n {children}\n </div>\n )\n})\n"]}
@@ -1,5 +1,5 @@
1
1
  import React, { HTMLAttributes } from 'react';
2
- export declare type Props = HTMLAttributes<HTMLInputElement> & {
2
+ export type TextFieldProps = HTMLAttributes<HTMLInputElement> & {
3
3
  value?: string;
4
4
  onFocus?: (value: string) => void;
5
5
  onUnfocus?: (value: string) => void;
package/lib/TextField.js CHANGED
@@ -1,8 +1,4 @@
1
1
  "use strict";
2
- var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
3
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
- return cooked;
5
- };
6
2
  var __assign = (this && this.__assign) || function () {
7
3
  __assign = Object.assign || function(t) {
8
4
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -48,25 +44,19 @@ var __rest = (this && this.__rest) || function (s, e) {
48
44
  }
49
45
  return t;
50
46
  };
51
- var __importDefault = (this && this.__importDefault) || function (mod) {
52
- return (mod && mod.__esModule) ? mod : { "default": mod };
53
- };
54
47
  Object.defineProperty(exports, "__esModule", { value: true });
55
48
  var react_1 = __importStar(require("react"));
56
- var styled_components_1 = __importDefault(require("styled-components"));
57
49
  exports.default = (0, react_1.forwardRef)(function (_a, ref) {
58
50
  var _b = _a.value, value = _b === void 0 ? '' : _b, onFocus = _a.onFocus, onUnfocus = _a.onUnfocus, onValueChange = _a.onValueChange, props = __rest(_a, ["value", "onFocus", "onUnfocus", "onValueChange"]);
59
- return (react_1.default.createElement(StyledRoot, __assign({}, props, { ref: ref, type: 'text', onChange: function (_a) {
51
+ return (react_1.default.createElement("input", __assign({}, props, { ref: ref, type: 'text', value: value, onBlur: function (_a) {
52
+ var target = _a.target;
53
+ return onUnfocus === null || onUnfocus === void 0 ? void 0 : onUnfocus(target.value);
54
+ }, onChange: function (_a) {
60
55
  var target = _a.target;
61
56
  return onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(target.value);
62
57
  }, onFocus: function (_a) {
63
58
  var target = _a.target;
64
59
  return onFocus === null || onFocus === void 0 ? void 0 : onFocus(target.value);
65
- }, onBlur: function (_a) {
66
- var target = _a.target;
67
- return onUnfocus === null || onUnfocus === void 0 ? void 0 : onUnfocus(target.value);
68
- }, value: value })));
60
+ } })));
69
61
  });
70
- var StyledRoot = styled_components_1.default.input(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n background: #fff;\n box-sizing: border-box;\n color: #000;\n display: block;\n height: 40px;\n padding: 0 1rem;\n text-align: left;\n width: 100px;\n"], ["\n background: #fff;\n box-sizing: border-box;\n color: #000;\n display: block;\n height: 40px;\n padding: 0 1rem;\n text-align: left;\n width: 100px;\n"])));
71
- var templateObject_1;
72
62
  //# sourceMappingURL=TextField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextField.js","sourceRoot":"/","sources":["TextField.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAkF;AAClF,wEAAsC;AAStC,kBAAe,IAAA,kBAAU,EAA0B,UAAC,EAMnD,EAAE,GAAG;IALJ,IAAA,aAAU,EAAV,KAAK,mBAAG,EAAE,KAAA,EACV,OAAO,aAAA,EACP,SAAS,eAAA,EACT,aAAa,mBAAA,EACV,KAAK,cAL0C,kDAMnD,CADS;IACC,OAAA,CACT,8BAAC,UAAU,eACL,KAAK,IACT,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,UAAC,EAAyC;gBAAvC,MAAM,YAAA;YAAsC,OAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAG,MAAM,CAAC,KAAK,CAAC;QAA7B,CAA6B,EACtF,OAAO,EAAE,UAAC,EAAwC;gBAAtC,MAAM,YAAA;YAAqC,OAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,MAAM,CAAC,KAAK,CAAC;QAAvB,CAAuB,EAC9E,MAAM,EAAE,UAAC,EAAwC;gBAAtC,MAAM,YAAA;YAAqC,OAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAG,MAAM,CAAC,KAAK,CAAC;QAAzB,CAAyB,EAC/E,KAAK,EAAE,KAAK,IACZ,CACH,CAAA;CAAA,CAAC,CAAA;AAEF,IAAM,UAAU,GAAG,2BAAM,CAAC,KAAK,qOAAA,kKAS9B,IAAA,CAAA","sourcesContent":["import React, { ChangeEvent, FocusEvent, forwardRef, HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nexport type Props = HTMLAttributes<HTMLInputElement> & {\n value?: string\n onFocus?: (value: string) => void\n onUnfocus?: (value: string) => void\n onValueChange?: (value: string) => void\n}\n\nexport default forwardRef<HTMLInputElement, Props>(({\n value = '',\n onFocus,\n onUnfocus,\n onValueChange,\n ...props\n}, ref) => (\n <StyledRoot\n {...props}\n ref={ref}\n type='text'\n onChange={({ target }: ChangeEvent<HTMLInputElement>) => onValueChange?.(target.value)}\n onFocus={({ target }: FocusEvent<HTMLInputElement>) => onFocus?.(target.value)}\n onBlur={({ target }: FocusEvent<HTMLInputElement>) => onUnfocus?.(target.value)}\n value={value}\n />\n))\n\nconst StyledRoot = styled.input`\n background: #fff;\n box-sizing: border-box;\n color: #000;\n display: block;\n height: 40px;\n padding: 0 1rem;\n text-align: left;\n width: 100px;\n`\n"]}
1
+ {"version":3,"file":"TextField.js","sourceRoot":"/","sources":["TextField.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAkF;AASlF,kBAAe,IAAA,kBAAU,EAAmC,UAAC,EAM5D,EAAE,GAAG;IALJ,IAAA,aAAU,EAAV,KAAK,mBAAG,EAAE,KAAA,EACV,OAAO,aAAA,EACP,SAAS,eAAA,EACT,aAAa,mBAAA,EACV,KAAK,cALmD,kDAM5D,CADS;IACC,OAAA,CACT,oDACM,KAAK,IACT,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,UAAC,EAAwC;gBAAtC,MAAM,YAAA;YAAqC,OAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAG,MAAM,CAAC,KAAK,CAAC;QAAzB,CAAyB,EAC/E,QAAQ,EAAE,UAAC,EAAyC;gBAAvC,MAAM,YAAA;YAAsC,OAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAG,MAAM,CAAC,KAAK,CAAC;QAA7B,CAA6B,EACtF,OAAO,EAAE,UAAC,EAAwC;gBAAtC,MAAM,YAAA;YAAqC,OAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,MAAM,CAAC,KAAK,CAAC;QAAvB,CAAuB,IAC9E,CACH,CAAA;CAAA,CAAC,CAAA","sourcesContent":["import React, { ChangeEvent, FocusEvent, forwardRef, HTMLAttributes } from 'react'\n\nexport type TextFieldProps = HTMLAttributes<HTMLInputElement> & {\n value?: string\n onFocus?: (value: string) => void\n onUnfocus?: (value: string) => void\n onValueChange?: (value: string) => void\n}\n\nexport default forwardRef<HTMLInputElement, TextFieldProps>(({\n value = '',\n onFocus,\n onUnfocus,\n onValueChange,\n ...props\n}, ref) => (\n <input\n {...props}\n ref={ref}\n type='text'\n value={value}\n onBlur={({ target }: FocusEvent<HTMLInputElement>) => onUnfocus?.(target.value)}\n onChange={({ target }: ChangeEvent<HTMLInputElement>) => onValueChange?.(target.value)}\n onFocus={({ target }: FocusEvent<HTMLInputElement>) => onFocus?.(target.value)}\n />\n))\n"]}
package/lib/Video.d.ts CHANGED
@@ -1,53 +1,32 @@
1
- import React, { CSSProperties, PureComponent } from 'react';
2
- export interface Props {
3
- autoLoop: boolean;
4
- autoPlay: boolean;
5
- className?: string;
6
- hasControls: boolean;
7
- isCover: boolean;
8
- isMuted: boolean;
9
- onCanPlay: () => void;
10
- onEnd: () => void;
11
- onFullscreenChange: (isFullscreen: boolean) => void;
12
- onPause: () => void;
13
- onPlay: () => void;
14
- playsInline: boolean;
1
+ import React, { HTMLAttributes } from 'react';
2
+ export type VideoProps = HTMLAttributes<HTMLDivElement> & {
3
+ autoLoop?: boolean;
4
+ autoPlay?: boolean;
5
+ hasControls?: boolean;
6
+ isCover?: boolean;
7
+ isMuted?: boolean;
8
+ playsInline?: boolean;
15
9
  posterSrc?: string;
16
10
  src: string;
17
- style: CSSProperties;
18
- }
19
- export interface State {
20
- }
21
- export default class Video extends PureComponent<Props, State> {
22
- static defaultProps: {
23
- autoLoop: boolean;
24
- autoPlay: boolean;
25
- hasControls: boolean;
26
- isCover: boolean;
27
- isMuted: boolean;
28
- onCanPlay: () => void;
29
- onEnd: () => void;
30
- onFullscreenChange: () => void;
31
- onPause: () => void;
32
- onPlay: () => void;
33
- playsInline: boolean;
34
- style: {};
35
- };
36
- nodeRefs: {
37
- root: React.RefObject<HTMLDivElement>;
38
- video: React.RefObject<HTMLVideoElement>;
39
- };
40
- constructor(props: Props);
41
- get isPaused(): boolean;
42
- componentDidMount(): void;
43
- componentWillUnmount(): void;
44
- componentDidUpdate(prevProps: Props, prevState: State): void;
45
- onFullscreenChange: (event: Event) => void;
46
- onCanPlay(element: HTMLVideoElement): void;
47
- onPlay(element: HTMLVideoElement): void;
48
- onPause(element: HTMLVideoElement): void;
49
- onEnd(element: HTMLVideoElement): void;
50
- play(): void;
51
- pause(): void;
52
- render(): JSX.Element;
53
- }
11
+ onCanPlay?: () => void;
12
+ onEnd?: () => void;
13
+ onFullscreenChange?: (isFullscreen: boolean) => void;
14
+ onPause?: () => void;
15
+ onPlay?: () => void;
16
+ };
17
+ declare const _default: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
18
+ autoLoop?: boolean | undefined;
19
+ autoPlay?: boolean | undefined;
20
+ hasControls?: boolean | undefined;
21
+ isCover?: boolean | undefined;
22
+ isMuted?: boolean | undefined;
23
+ playsInline?: boolean | undefined;
24
+ posterSrc?: string | undefined;
25
+ src: string;
26
+ onCanPlay?: (() => void) | undefined;
27
+ onEnd?: (() => void) | undefined;
28
+ onFullscreenChange?: ((isFullscreen: boolean) => void) | undefined;
29
+ onPause?: (() => void) | undefined;
30
+ onPlay?: (() => void) | undefined;
31
+ } & React.RefAttributes<HTMLDivElement>>;
32
+ export default _default;
package/lib/Video.js CHANGED
@@ -1,22 +1,14 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
15
10
  };
16
- })();
17
- var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
18
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
19
- return cooked;
11
+ return __assign.apply(this, arguments);
20
12
  };
21
13
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
22
14
  if (k2 === undefined) k2 = k;
@@ -41,126 +33,92 @@ var __importStar = (this && this.__importStar) || function (mod) {
41
33
  __setModuleDefault(result, mod);
42
34
  return result;
43
35
  };
36
+ var __rest = (this && this.__rest) || function (s, e) {
37
+ var t = {};
38
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
39
+ t[p] = s[p];
40
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
41
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
42
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
43
+ t[p[i]] = s[p[i]];
44
+ }
45
+ return t;
46
+ };
44
47
  var __importDefault = (this && this.__importDefault) || function (mod) {
45
48
  return (mod && mod.__esModule) ? mod : { "default": mod };
46
49
  };
47
50
  Object.defineProperty(exports, "__esModule", { value: true });
48
51
  var react_1 = __importStar(require("react"));
49
- var styled_components_1 = __importDefault(require("styled-components"));
50
- var debug = process.env.NODE_ENV === 'development' ? require('debug')('etudes:video') : function () { };
51
- var Video = /** @class */ (function (_super) {
52
- __extends(Video, _super);
53
- function Video(props) {
54
- var _this = _super.call(this, props) || this;
55
- _this.nodeRefs = {
56
- root: (0, react_1.createRef)(),
57
- video: (0, react_1.createRef)(),
58
- };
59
- _this.onFullscreenChange = function (event) {
60
- var isFullscreen = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen;
61
- if (isFullscreen === undefined)
62
- return;
63
- _this.props.onFullscreenChange(isFullscreen);
52
+ var asStyleDict_1 = __importDefault(require("./utils/asStyleDict"));
53
+ var useDebug_1 = __importDefault(require("./utils/useDebug"));
54
+ var debug = (0, useDebug_1.default)('video');
55
+ exports.default = (0, react_1.forwardRef)(function (_a, ref) {
56
+ var _b, _c;
57
+ var _d = _a.autoLoop, autoLoop = _d === void 0 ? true : _d, _e = _a.autoPlay, autoPlay = _e === void 0 ? true : _e, _f = _a.hasControls, hasControls = _f === void 0 ? false : _f, _g = _a.isCover, isCover = _g === void 0 ? true : _g, _h = _a.isMuted, isMuted = _h === void 0 ? true : _h, _j = _a.playsInline, playsInline = _j === void 0 ? true : _j, posterSrc = _a.posterSrc, src = _a.src, onCanPlay = _a.onCanPlay, onEnd = _a.onEnd, onFullscreenChange = _a.onFullscreenChange, onPause = _a.onPause, onPlay = _a.onPlay, props = __rest(_a, ["autoLoop", "autoPlay", "hasControls", "isCover", "isMuted", "playsInline", "posterSrc", "src", "onCanPlay", "onEnd", "onFullscreenChange", "onPause", "onPlay"]);
58
+ var bodyRef = (0, react_1.useRef)(null);
59
+ var isPaused = (_c = (_b = bodyRef.current) === null || _b === void 0 ? void 0 : _b.paused) !== null && _c !== void 0 ? _c : false;
60
+ (0, react_1.useEffect)(function () {
61
+ debug("Initializing video with src <".concat(src, ">..."), 'OK');
62
+ if (!bodyRef.current)
63
+ return;
64
+ bodyRef.current.muted = isMuted;
65
+ bodyRef.current.load();
66
+ bodyRef.current.addEventListener('webkitfullscreenchange', fullscreenChangeHandler);
67
+ bodyRef.current.addEventListener('mozfullscreenchange', fullscreenChangeHandler);
68
+ bodyRef.current.addEventListener('fullscreenchange', fullscreenChangeHandler);
69
+ return function () {
70
+ var _a, _b, _c;
71
+ debug("Deinitializing video with src <".concat(src, ">..."), 'OK');
72
+ pause();
73
+ (_a = bodyRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('webkitfullscreenchange', fullscreenChangeHandler);
74
+ (_b = bodyRef.current) === null || _b === void 0 ? void 0 : _b.removeEventListener('mozfullscreenchange', fullscreenChangeHandler);
75
+ (_c = bodyRef.current) === null || _c === void 0 ? void 0 : _c.removeEventListener('fullscreenchange', fullscreenChangeHandler);
64
76
  };
65
- debug("Initializing with src <".concat(_this.props.src, ">..."), 'OK');
66
- return _this;
67
- }
68
- Object.defineProperty(Video.prototype, "isPaused", {
69
- get: function () {
70
- if (!this.nodeRefs.video.current)
71
- return false;
72
- return this.nodeRefs.video.current.paused;
73
- },
74
- enumerable: false,
75
- configurable: true
76
- });
77
- Video.prototype.componentDidMount = function () {
78
- var videoNode = this.nodeRefs.video.current;
79
- if (videoNode) {
80
- // HACK: https://github.com/facebook/react/issues/10389
81
- videoNode.muted = this.props.isMuted;
82
- videoNode.load();
83
- videoNode.addEventListener('webkitfullscreenchange', this.onFullscreenChange);
84
- videoNode.addEventListener('mozfullscreenchange', this.onFullscreenChange);
85
- videoNode.addEventListener('fullscreenchange', this.onFullscreenChange);
86
- }
87
- };
88
- Video.prototype.componentWillUnmount = function () {
89
- var videoNode = this.nodeRefs.video.current;
90
- if (videoNode) {
91
- videoNode.removeEventListener('webkitfullscreenchange', this.onFullscreenChange);
92
- videoNode.removeEventListener('mozfullscreenchange', this.onFullscreenChange);
93
- videoNode.removeEventListener('fullscreenchange', this.onFullscreenChange);
94
- }
95
- this.pause();
96
- };
97
- Video.prototype.componentDidUpdate = function (prevProps, prevState) {
98
- if ((prevProps.isMuted !== this.props.isMuted) && this.nodeRefs.video.current) {
99
- // HACK: https://github.com/facebook/react/issues/10389
100
- this.nodeRefs.video.current.muted = this.props.isMuted;
101
- }
102
- if (prevProps.autoPlay !== this.props.autoPlay) {
103
- if (this.props.autoPlay) {
104
- this.play();
105
- }
106
- else {
107
- this.pause();
108
- }
109
- }
77
+ }, [src]);
78
+ var fullscreenChangeHandler = function (event) {
79
+ var isFullscreen = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen;
80
+ if (isFullscreen === undefined)
81
+ return;
82
+ onFullscreenChange === null || onFullscreenChange === void 0 ? void 0 : onFullscreenChange(isFullscreen);
110
83
  };
111
- Video.prototype.onCanPlay = function (element) {
84
+ var canPlayHandler = function (event) {
112
85
  debug('Checking if video is ready to play...', 'OK');
113
- if (this.props.autoPlay && this.isPaused) {
114
- this.play();
86
+ if (autoPlay && isPaused) {
87
+ play();
115
88
  }
116
- this.props.onCanPlay();
89
+ onCanPlay === null || onCanPlay === void 0 ? void 0 : onCanPlay();
117
90
  };
118
- Video.prototype.onPlay = function (element) {
91
+ var playHandler = function (event) {
119
92
  debug('Playing video...', 'OK');
120
- this.props.onPlay();
93
+ onPlay === null || onPlay === void 0 ? void 0 : onPlay();
121
94
  };
122
- Video.prototype.onPause = function (element) {
95
+ var pauseHandler = function (event) {
123
96
  debug('Pausing video...', 'OK');
124
- this.props.onPause();
97
+ onPause === null || onPause === void 0 ? void 0 : onPause();
125
98
  };
126
- Video.prototype.onEnd = function (element) {
99
+ var endHandler = function (event) {
127
100
  debug('Ending video...', 'OK');
128
- this.props.onEnd();
101
+ onEnd === null || onEnd === void 0 ? void 0 : onEnd();
129
102
  };
130
- Video.prototype.play = function () {
131
- if (!this.nodeRefs.video.current)
103
+ var play = function () {
104
+ if (!bodyRef.current)
132
105
  return;
133
- this.nodeRefs.video.current.play();
106
+ bodyRef.current.play();
134
107
  };
135
- Video.prototype.pause = function () {
136
- if (!this.nodeRefs.video.current)
108
+ var pause = function () {
109
+ if (!bodyRef.current)
137
110
  return;
138
- this.nodeRefs.video.current.pause();
111
+ bodyRef.current.pause();
139
112
  };
140
- Video.prototype.render = function () {
141
- var _this = this;
142
- // HACK: Need to dangerously insert HTML because https://github.com/facebook/react/issues/6544.
143
- return (react_1.default.createElement(StyledRoot, { className: this.props.className, isCover: this.props.isCover, ref: this.nodeRefs.root, style: this.props.style },
144
- react_1.default.createElement("video", { ref: this.nodeRefs.video, autoPlay: this.props.autoPlay, playsInline: this.props.playsInline, muted: this.props.isMuted, controls: this.props.hasControls, onCanPlay: function (event) { return _this.onCanPlay(event.currentTarget); }, onPlay: function (event) { return _this.onPlay(event.currentTarget); }, onPause: function (event) { return _this.onPause(event.currentTarget); }, onEnded: function (event) { return _this.onEnd(event.currentTarget); }, loop: this.props.autoLoop, poster: this.props.posterSrc },
145
- react_1.default.createElement("source", { src: this.props.src }))));
146
- };
147
- Video.defaultProps = {
148
- autoLoop: true,
149
- autoPlay: true,
150
- hasControls: false,
151
- isCover: true,
152
- isMuted: true,
153
- onCanPlay: function () { },
154
- onEnd: function () { },
155
- onFullscreenChange: function () { },
156
- onPause: function () { },
157
- onPlay: function () { },
158
- playsInline: true,
159
- style: {},
160
- };
161
- return Video;
162
- }(react_1.PureComponent));
163
- exports.default = Video;
164
- var StyledRoot = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n box-sizing: border-box;\n display: block;\n margin: 0;\n padding: 0;\n position: relative;\n\n video {\n display: block;\n height: 100%;\n margin: 0;\n object-fit: ", ";\n outline: none;\n padding: 0;\n width: 100%;\n }\n"], ["\n box-sizing: border-box;\n display: block;\n margin: 0;\n padding: 0;\n position: relative;\n\n video {\n display: block;\n height: 100%;\n margin: 0;\n object-fit: ", ";\n outline: none;\n padding: 0;\n width: 100%;\n }\n"])), function (props) { return props.isCover ? 'cover' : 'filled'; });
165
- var templateObject_1;
113
+ var fixedStyles = (0, asStyleDict_1.default)({
114
+ body: {
115
+ height: '100%',
116
+ width: '100%',
117
+ objectFit: isCover ? 'cover' : 'fill',
118
+ },
119
+ });
120
+ return (react_1.default.createElement("div", __assign({}, props, { ref: ref }),
121
+ react_1.default.createElement("video", { ref: bodyRef, style: fixedStyles.body, autoPlay: autoPlay, controls: hasControls, loop: autoLoop, muted: isMuted, playsInline: playsInline, poster: posterSrc, onCanPlay: canPlayHandler, onEnded: endHandler, onPause: pauseHandler, onPlay: playHandler },
122
+ react_1.default.createElement("source", { src: src }))));
123
+ });
166
124
  //# sourceMappingURL=Video.js.map
package/lib/Video.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Video.js","sourceRoot":"/","sources":["Video.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createRef, CSSProperties, PureComponent } from 'react'\nimport styled from 'styled-components'\n\nconst debug = process.env.NODE_ENV === 'development' ? require('debug')('etudes:video') : () => {}\n\nexport interface Props {\n autoLoop: boolean\n autoPlay: boolean\n className?: string\n hasControls: boolean\n isCover: boolean\n isMuted: boolean\n onCanPlay: () => void\n onEnd: () => void\n onFullscreenChange: (isFullscreen: boolean) => void\n onPause: () => void\n onPlay: () => void\n playsInline: boolean\n posterSrc?: string\n src: string\n style: CSSProperties\n}\n\nexport interface State {\n}\n\nexport default class Video extends PureComponent<Props, State> {\n static defaultProps = {\n autoLoop: true,\n autoPlay: true,\n hasControls: false,\n isCover: true,\n isMuted: true,\n onCanPlay: () => {},\n onEnd: () => {},\n onFullscreenChange: () => {},\n onPause: () => {},\n onPlay: () => {},\n playsInline: true,\n style: {},\n }\n\n nodeRefs = {\n root: createRef<HTMLDivElement>(),\n video: createRef<HTMLVideoElement>(),\n }\n\n constructor(props: Props) {\n super(props)\n debug(`Initializing with src <${this.props.src}>...`, 'OK')\n }\n\n get isPaused(): boolean {\n if (!this.nodeRefs.video.current) return false\n return this.nodeRefs.video.current.paused\n }\n\n componentDidMount() {\n const videoNode = this.nodeRefs.video.current\n\n if (videoNode) {\n // HACK: https://github.com/facebook/react/issues/10389\n videoNode.muted = this.props.isMuted\n videoNode.load()\n\n videoNode.addEventListener('webkitfullscreenchange', this.onFullscreenChange)\n videoNode.addEventListener('mozfullscreenchange', this.onFullscreenChange)\n videoNode.addEventListener('fullscreenchange', this.onFullscreenChange)\n }\n }\n\n componentWillUnmount() {\n const videoNode = this.nodeRefs.video.current\n\n if (videoNode) {\n videoNode.removeEventListener('webkitfullscreenchange', this.onFullscreenChange)\n videoNode.removeEventListener('mozfullscreenchange', this.onFullscreenChange)\n videoNode.removeEventListener('fullscreenchange', this.onFullscreenChange)\n }\n\n this.pause()\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if ((prevProps.isMuted !== this.props.isMuted) && this.nodeRefs.video.current) {\n // HACK: https://github.com/facebook/react/issues/10389\n this.nodeRefs.video.current.muted = this.props.isMuted\n }\n\n if (prevProps.autoPlay !== this.props.autoPlay) {\n if (this.props.autoPlay) {\n this.play()\n }\n else {\n this.pause()\n }\n }\n }\n\n onFullscreenChange = (event: Event) => {\n const isFullscreen: boolean | undefined = (document as any).fullScreen || (document as any).mozFullScreen || (document as any).webkitIsFullScreen\n\n if (isFullscreen === undefined) return\n\n this.props.onFullscreenChange(isFullscreen)\n }\n\n onCanPlay(element: HTMLVideoElement) {\n debug('Checking if video is ready to play...', 'OK')\n\n if (this.props.autoPlay && this.isPaused) {\n this.play()\n }\n\n this.props.onCanPlay()\n }\n\n onPlay(element: HTMLVideoElement) {\n debug('Playing video...', 'OK')\n\n this.props.onPlay()\n }\n\n onPause(element: HTMLVideoElement) {\n debug('Pausing video...', 'OK')\n\n this.props.onPause()\n }\n\n onEnd(element: HTMLVideoElement) {\n debug('Ending video...', 'OK')\n\n this.props.onEnd()\n }\n\n play() {\n if (!this.nodeRefs.video.current) return\n this.nodeRefs.video.current.play()\n }\n\n pause() {\n if (!this.nodeRefs.video.current) return\n this.nodeRefs.video.current.pause()\n }\n\n render() {\n // HACK: Need to dangerously insert HTML because https://github.com/facebook/react/issues/6544.\n return (\n <StyledRoot\n className={this.props.className}\n isCover={this.props.isCover}\n ref={this.nodeRefs.root}\n style={this.props.style}\n >\n <video\n ref={this.nodeRefs.video}\n autoPlay={this.props.autoPlay}\n playsInline={this.props.playsInline}\n muted={this.props.isMuted}\n controls={this.props.hasControls}\n onCanPlay={event => this.onCanPlay(event.currentTarget)}\n onPlay={event => this.onPlay(event.currentTarget)}\n onPause={event => this.onPause(event.currentTarget)}\n onEnded={event => this.onEnd(event.currentTarget)}\n loop={this.props.autoLoop}\n poster={this.props.posterSrc}\n >\n <source src={this.props.src}/>\n </video>\n </StyledRoot>\n )\n }\n}\n\nconst StyledRoot = styled.div<{\n isCover: boolean\n}>`\n box-sizing: border-box;\n display: block;\n margin: 0;\n padding: 0;\n position: relative;\n\n video {\n display: block;\n height: 100%;\n margin: 0;\n object-fit: ${props => props.isCover ? 'cover' : 'filled'};\n outline: none;\n padding: 0;\n width: 100%;\n }\n`\n"]}
1
+ {"version":3,"file":"Video.js","sourceRoot":"/","sources":["Video.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { forwardRef, HTMLAttributes, ReactEventHandler, useEffect, useRef } from 'react'\nimport asStyleDict from './utils/asStyleDict'\nimport useDebug from './utils/useDebug'\n\nconst debug = useDebug('video')\n\nexport type VideoProps = HTMLAttributes<HTMLDivElement> & {\n autoLoop?: boolean\n autoPlay?: boolean\n hasControls?: boolean\n isCover?: boolean\n isMuted?: boolean\n playsInline?: boolean\n posterSrc?: string\n src: string\n onCanPlay?: () => void\n onEnd?: () => void\n onFullscreenChange?: (isFullscreen: boolean) => void\n onPause?: () => void\n onPlay?: () => void\n}\n\nexport default forwardRef<HTMLDivElement, VideoProps>(({\n autoLoop = true,\n autoPlay = true,\n hasControls = false,\n isCover = true,\n isMuted = true,\n playsInline = true,\n posterSrc,\n src,\n onCanPlay,\n onEnd,\n onFullscreenChange,\n onPause,\n onPlay,\n ...props\n}, ref) => {\n const bodyRef = useRef<HTMLVideoElement>(null)\n const isPaused = bodyRef.current?.paused ?? false\n\n useEffect(() => {\n debug(`Initializing video with src <${src}>...`, 'OK')\n\n if (!bodyRef.current) return\n\n bodyRef.current.muted = isMuted\n bodyRef.current.load()\n bodyRef.current.addEventListener('webkitfullscreenchange', fullscreenChangeHandler)\n bodyRef.current.addEventListener('mozfullscreenchange', fullscreenChangeHandler)\n bodyRef.current.addEventListener('fullscreenchange', fullscreenChangeHandler)\n\n return () => {\n debug(`Deinitializing video with src <${src}>...`, 'OK')\n\n pause()\n\n bodyRef.current?.removeEventListener('webkitfullscreenchange', fullscreenChangeHandler)\n bodyRef.current?.removeEventListener('mozfullscreenchange', fullscreenChangeHandler)\n bodyRef.current?.removeEventListener('fullscreenchange', fullscreenChangeHandler)\n }\n }, [src])\n\n const fullscreenChangeHandler = (event: Event) => {\n const isFullscreen: boolean | undefined = (document as any).fullScreen || (document as any).mozFullScreen || (document as any).webkitIsFullScreen\n if (isFullscreen === undefined) return\n onFullscreenChange?.(isFullscreen)\n }\n\n const canPlayHandler: ReactEventHandler<HTMLVideoElement> = event => {\n debug('Checking if video is ready to play...', 'OK')\n\n if (autoPlay && isPaused) {\n play()\n }\n\n onCanPlay?.()\n }\n\n const playHandler: ReactEventHandler<HTMLVideoElement> = event => {\n debug('Playing video...', 'OK')\n onPlay?.()\n }\n\n const pauseHandler: ReactEventHandler<HTMLVideoElement> = event => {\n debug('Pausing video...', 'OK')\n onPause?.()\n }\n\n const endHandler: ReactEventHandler<HTMLVideoElement> = event => {\n debug('Ending video...', 'OK')\n onEnd?.()\n }\n\n const play = () => {\n if (!bodyRef.current) return\n bodyRef.current.play()\n }\n\n const pause = () => {\n if (!bodyRef.current) return\n bodyRef.current.pause()\n }\n\n const fixedStyles = asStyleDict({\n body: {\n height: '100%',\n width: '100%',\n objectFit: isCover ? 'cover' : 'fill',\n },\n })\n\n return (\n <div {...props} ref={ref}>\n <video\n ref={bodyRef}\n style={fixedStyles.body}\n autoPlay={autoPlay}\n controls={hasControls}\n loop={autoLoop}\n muted={isMuted}\n playsInline={playsInline}\n poster={posterSrc}\n onCanPlay={canPlayHandler}\n onEnded={endHandler}\n onPause={pauseHandler}\n onPlay={playHandler}\n >\n <source src={src}/>\n </video>\n </div>\n )\n})\n"]}
@@ -1,16 +1,18 @@
1
- import { HTMLAttributes } from 'react';
2
- import { CSSProp } from 'styled-components';
3
- export declare type Props = HTMLAttributes<HTMLElement> & {
1
+ import { HTMLAttributes, PropsWithChildren } from 'react';
2
+ export type WithToolTipProps = Pick<HTMLAttributes<HTMLElement>, 'className' | 'style'> & PropsWithChildren<{
4
3
  /**
5
- * The height of the arrow. The width (longest edge) of the arrow is always twice its height.
4
+ * The height of the arrow. The width (longest edge) of the arrow is always
5
+ * twice its height.
6
6
  */
7
7
  arrowHeight?: number;
8
8
  /**
9
- * Color of the dialog background, same format as a CSS color string (i.e. '#000').
9
+ * Color of the dialog background, same format as a CSS color string (i.e.
10
+ * '#000').
10
11
  */
11
12
  backgroundColor?: string;
12
13
  /**
13
- * Specifies if the tooltip should be disabled in touch devices (i.e. `html` has class `.touch`).
14
+ * Specifies if the tooltip should be disabled in touch devices (i.e. `html`
15
+ * has class `.touch`).
14
16
  */
15
17
  disabledOnTouch?: boolean;
16
18
  /**
@@ -18,22 +20,18 @@ export declare type Props = HTMLAttributes<HTMLElement> & {
18
20
  */
19
21
  hint: string;
20
22
  /**
21
- * The gap (in pixels) between the target element and the tooltip, defaults to zero.
23
+ * The gap (in pixels) between the target element and the tooltip, defaults to
24
+ * zero.
22
25
  */
23
26
  gap?: number;
24
27
  /**
25
- * Color of the dialog text, same format as a CSS color string (i.e. '#000').
28
+ * The maximum width (in pixels) of the hint text.
26
29
  */
27
- textColor?: string;
30
+ maxTextWidth?: number;
28
31
  /**
29
- * The minimum space (in pixels) between the target element and the edge of the window required to
30
- * trigger an alignment change, defaults to `100px`.
32
+ * The minimum space (in pixels) between the target element and the edge of
33
+ * the window required to trigger an alignment change, defaults to `100px`.
31
34
  */
32
35
  threshold?: number;
33
- /**
34
- * Custom CSS provided to the dialog. Not all CSS rules will take effect as they will be
35
- * overridden by internal rules.
36
- */
37
- cssDialog?: CSSProp<any>;
38
- };
39
- export default function WithTooltip({ arrowHeight, backgroundColor, cssDialog, disabledOnTouch, hint, gap, textColor, threshold, ...props }: Props): JSX.Element;
36
+ }>;
37
+ export default function WithTooltip({ children, className, style, arrowHeight, backgroundColor, gap, hint, maxTextWidth, threshold, }: WithToolTipProps): JSX.Element;