@teambit/react.ui.component-highlighter 0.0.479 → 0.0.483

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 (58) hide show
  1. package/component-highlighter/hover-highlighter/hover-highlighter.spec.tsx +38 -11
  2. package/component-highlighter/hover-highlighter/hover-highlighter.tsx +18 -15
  3. package/component-highlighter.docs.md +34 -7
  4. package/dist/component-highlighter/hover-highlighter/hover-highlighter.d.ts +3 -1
  5. package/dist/component-highlighter/hover-highlighter/hover-highlighter.js +6 -9
  6. package/dist/component-highlighter/hover-highlighter/hover-highlighter.js.map +1 -1
  7. package/dist/component-highlighter/hover-highlighter/hover-highlighter.spec.js +30 -12
  8. package/dist/component-highlighter/hover-highlighter/hover-highlighter.spec.js.map +1 -1
  9. package/dist/component-highlighter.docs.md +34 -7
  10. package/dist/element-highlighter/element-highlighter.compositions.d.ts +9 -3
  11. package/dist/element-highlighter/element-highlighter.compositions.js +21 -16
  12. package/dist/element-highlighter/element-highlighter.compositions.js.map +1 -1
  13. package/dist/element-highlighter/element-highlighter.d.ts +3 -1
  14. package/dist/element-highlighter/element-highlighter.js +3 -3
  15. package/dist/element-highlighter/element-highlighter.js.map +1 -1
  16. package/dist/element-highlighter/element-highlighter.module.scss +7 -0
  17. package/dist/frame/frame.d.ts +3 -2
  18. package/dist/frame/frame.js +3 -18
  19. package/dist/frame/frame.js.map +1 -1
  20. package/dist/index.d.ts +3 -1
  21. package/dist/index.js +5 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/label/label.d.ts +3 -1
  24. package/dist/label/label.js +4 -7
  25. package/dist/label/label.js.map +1 -1
  26. package/dist/multi-highlighter/index.d.ts +2 -0
  27. package/dist/multi-highlighter/index.js +6 -0
  28. package/dist/multi-highlighter/index.js.map +1 -0
  29. package/dist/multi-highlighter/multi-highlighter.composition.d.ts +2 -0
  30. package/dist/multi-highlighter/multi-highlighter.composition.js +36 -0
  31. package/dist/multi-highlighter/multi-highlighter.composition.js.map +1 -0
  32. package/dist/multi-highlighter/multi-highlighter.d.ts +15 -0
  33. package/dist/multi-highlighter/multi-highlighter.js +84 -0
  34. package/dist/multi-highlighter/multi-highlighter.js.map +1 -0
  35. package/dist/multi-highlighter/multi-highlighter.spec.d.ts +1 -0
  36. package/dist/multi-highlighter/multi-highlighter.spec.js +22 -0
  37. package/dist/multi-highlighter/multi-highlighter.spec.js.map +1 -0
  38. package/dist/use-animation-frame.d.ts +1 -0
  39. package/dist/use-animation-frame.js +23 -0
  40. package/dist/use-animation-frame.js.map +1 -0
  41. package/element-highlighter/element-highlighter.compositions.tsx +37 -22
  42. package/element-highlighter/element-highlighter.module.scss +7 -0
  43. package/element-highlighter/element-highlighter.tsx +14 -2
  44. package/frame/frame.tsx +6 -21
  45. package/index.ts +9 -1
  46. package/label/label.tsx +14 -12
  47. package/multi-highlighter/index.ts +2 -0
  48. package/multi-highlighter/multi-highlighter.composition.tsx +41 -0
  49. package/multi-highlighter/multi-highlighter.spec.tsx +22 -0
  50. package/multi-highlighter/multi-highlighter.tsx +85 -0
  51. package/package-tar/teambit-react.ui.component-highlighter-0.0.483.tgz +0 -0
  52. package/package.json +12 -11
  53. package/use-animation-frame.tsx +20 -0
  54. package/component-highlighter/bit-react-component.ts +0 -5
  55. package/dist/component-highlighter/bit-react-component.d.ts +0 -2
  56. package/dist/component-highlighter/bit-react-component.js +0 -8
  57. package/dist/component-highlighter/bit-react-component.js.map +0 -1
  58. package/package-tar/teambit-react.ui.component-highlighter-0.0.479.tgz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"element-highlighter.js","sourceRoot":"","sources":["../../element-highlighter/element-highlighter.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,4DAAoC;AACpC,oCAAiC;AACjC,oCAA4D;AAC5D,8DAA8D;AAC9D,wGAAuD;AA8BvD,SAAgB,kBAAkB,CAAC,EAMT;QANS,EACjC,MAAM,EACN,SAAS,GAAG,KAAK,EACjB,SAAS,EACT,OAAO,OAEiB,EADrB,KAAK,cALyB,+CAMlC,CADS;IAER,OAAO,CACL,uDAAS,KAAK,EAAM,0CAAqB,IAAE,SAAS,EAAE,IAAA,oBAAU,EAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAAE,yCAAM,CAAC,SAAS,EAAE,SAAS,CAAC;QAC/G,8BAAC,aAAK,IAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,GAAI;QAE9D,MAAM,CAAC,EAAE,IAAI,CACZ,8BAAC,sBAAc,IAAC,SAAS,EAAE,yCAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS;YACtF,8BAAC,aAAK,IACJ,WAAW,EAAE,MAAM,CAAC,EAAE,EACtB,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,SAAS,EAAE,MAAM,CAAC,SAAS,EAC3B,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,GACzB,CACa,CAClB,CACG,CACP,CAAC;AACJ,CAAC;AAxBD,gDAwBC"}
1
+ {"version":3,"file":"element-highlighter.js","sourceRoot":"","sources":["../../element-highlighter/element-highlighter.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,4DAAoC;AACpC,oCAAiC;AACjC,oCAA4D;AAC5D,8DAA8D;AAC9D,wGAAuD;AAgCvD,SAAgB,kBAAkB,CAAC,EAOT;QAPS,EACjC,MAAM,EACN,SAAS,GAAG,KAAK,EACjB,WAAW,GAAG,IAAI,EAClB,SAAS,EACT,OAAO,OAEiB,EADrB,KAAK,cANyB,8DAOlC,CADS;IAER,OAAO,CACL,uDAAS,KAAK,EAAM,0CAAqB,IAAE,SAAS,EAAE,IAAA,oBAAU,EAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAAE,yCAAM,CAAC,SAAS,EAAE,SAAS,CAAC;QAC/G,8BAAC,aAAK,IACJ,SAAS,EAAE,MAAM,CAAC,OAAO,EACzB,SAAS,EAAE,IAAA,oBAAU,EAAC,yCAAM,CAAC,KAAK,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,EACnD,WAAW,EAAE,WAAW,GACxB;QAED,MAAM,CAAC,EAAE,IAAI,CACZ,8BAAC,sBAAc,IACb,SAAS,EAAE,yCAAM,CAAC,KAAK,EACvB,SAAS,EAAE,MAAM,CAAC,OAAO,EACzB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW;YAExB,8BAAC,aAAK,IACJ,WAAW,EAAE,MAAM,CAAC,EAAE,EACtB,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,SAAS,EAAE,MAAM,CAAC,SAAS,EAC3B,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,GACzB,CACa,CAClB,CACG,CACP,CAAC;AACJ,CAAC;AAlCD,gDAkCC"}
@@ -1,3 +1,5 @@
1
+ @import '~@teambit/ui-foundation.ui.constants.z-indexes/z-indexes.module.scss';
2
+
1
3
  .container {
2
4
  font-size: 12px;
3
5
  }
@@ -6,3 +8,8 @@
6
8
  font-family: sans-serif;
7
9
  padding: 8px;
8
10
  }
11
+
12
+ .frame,
13
+ .label {
14
+ z-index: $highlighter-z-index;
15
+ }
@@ -3,6 +3,7 @@ import '@popperjs/core';
3
3
  export interface FrameProps extends React.HTMLAttributes<HTMLDivElement> {
4
4
  targetRef: HTMLElement | null;
5
5
  stylesClass?: string;
6
- motionTracking?: boolean;
6
+ /** continually update frame position to match moving elements */
7
+ watchMotion?: boolean;
7
8
  }
8
- export declare function Frame({ targetRef, motionTracking, className, stylesClass, style, }: FrameProps): JSX.Element;
9
+ export declare function Frame({ targetRef, watchMotion, className, stylesClass, style, }: FrameProps): JSX.Element;
@@ -25,11 +25,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.Frame = void 0;
26
26
  const react_1 = __importStar(require("react"));
27
27
  const react_popper_1 = require("react-popper");
28
- const use_animation_frame_1 = __importDefault(require("use-animation-frame"));
29
28
  const classnames_1 = __importDefault(require("classnames"));
30
29
  require("@popperjs/core");
31
30
  const base_ui_utils_popper_js_ignore_popper_size_1 = require("@teambit/base-ui.utils.popper-js.ignore-popper-size");
32
31
  const base_ui_utils_popper_js_resize_to_match_reference_1 = require("@teambit/base-ui.utils.popper-js.resize-to-match-reference");
32
+ const use_animation_frame_1 = require("../use-animation-frame");
33
33
  const frame_module_scss_1 = __importDefault(require("./frame.module.scss"));
34
34
  const BASE_OFFSET = +frame_module_scss_1.default.offset;
35
35
  const popperModifiers = [
@@ -48,28 +48,13 @@ const popperModifiers = [
48
48
  },
49
49
  },
50
50
  ];
51
- function Frame({ targetRef, motionTracking, className, stylesClass = frame_module_scss_1.default.overlayBorder, style, }) {
51
+ function Frame({ targetRef, watchMotion, className, stylesClass = frame_module_scss_1.default.overlayBorder, style, }) {
52
52
  const [referenceElement, setReferenceElement] = (0, react_1.useState)(null);
53
53
  const { styles, attributes, update } = (0, react_popper_1.usePopper)(targetRef, referenceElement, {
54
54
  modifiers: popperModifiers,
55
55
  placement: 'top-start',
56
56
  });
57
- (0, react_1.useEffect)(() => {
58
- const triggerRefocus = update;
59
- if (!triggerRefocus || !motionTracking)
60
- return () => { };
61
- let animationFrameId = 0;
62
- const f = () => {
63
- triggerRefocus().catch(() => { });
64
- animationFrameId = window.requestAnimationFrame(f);
65
- };
66
- f();
67
- return () => {
68
- if (animationFrameId > -1)
69
- window.cancelAnimationFrame(animationFrameId);
70
- };
71
- }, [update, motionTracking]);
72
- (0, use_animation_frame_1.default)(() => update === null || update === void 0 ? void 0 : update(), [update]);
57
+ (0, use_animation_frame_1.useAnimationFrame)(!!watchMotion && update);
73
58
  if (!targetRef)
74
59
  return null;
75
60
  return (react_1.default.createElement("div", Object.assign({ ref: setReferenceElement, className: (0, classnames_1.default)(className, stylesClass), style: Object.assign(Object.assign({}, styles.popper), style) }, attributes.popper)));
@@ -1 +1 @@
1
- {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../frame/frame.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAmD;AACnD,+CAAmD;AACnD,8EAAoD;AACpD,4DAAoC;AACpC,0BAAwB;AAExB,oHAAuF;AACvF,kIAAoG;AAEpG,4EAA8C;AAE9C,MAAM,WAAW,GAAG,CAAC,2BAAW,CAAC,MAAM,CAAC;AAExC,MAAM,eAAe,GAAoB;IACvC,6DAAgB;IAChB,0EAAsB;IACtB;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,KAAK;KACf;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,+CAA+C;YAC/C,gCAAgC;YAChC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;SAC9E;KACF;CACF,CAAC;AAQF,SAAgB,KAAK,CAAC,EACpB,SAAS,EACT,cAAc,EACd,SAAS,EACT,WAAW,GAAG,2BAAW,CAAC,aAAa,EACvC,KAAK,GACM;IACX,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,IAAA,gBAAQ,EAAwB,IAAI,CAAC,CAAC;IAEtF,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAA,wBAAS,EAAC,SAAS,EAAE,gBAAgB,EAAE;QAC5E,SAAS,EAAE,eAAe;QAC1B,SAAS,EAAE,WAAW;KACvB,CAAC,CAAC;IAEH,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,cAAc,GAAG,MAAM,CAAC;QAC9B,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc;YAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAExD,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,GAAG,EAAE;YACb,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACjC,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC;QACF,CAAC,EAAE,CAAC;QAEJ,OAAO,GAAG,EAAE;YACV,IAAI,gBAAgB,GAAG,CAAC,CAAC;gBAAE,MAAM,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QAC3E,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAE7B,IAAA,6BAAiB,EAAC,GAAG,EAAE,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,EAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9C,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,OAAO,CACL,qDACE,GAAG,EAAE,mBAAmB,EACxB,SAAS,EAAE,IAAA,oBAAU,EAAC,SAAS,EAAE,WAAW,CAAC,EAC7C,KAAK,kCAAO,MAAM,CAAC,MAAM,GAAK,KAAK,KAC/B,UAAU,CAAC,MAAM,EACrB,CACH,CAAC;AACJ,CAAC;AA1CD,sBA0CC"}
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../frame/frame.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAwC;AACxC,+CAAmD;AACnD,4DAAoC;AACpC,0BAAwB;AAExB,oHAAuF;AACvF,kIAAoG;AAEpG,gEAA2D;AAC3D,4EAA8C;AAE9C,MAAM,WAAW,GAAG,CAAC,2BAAW,CAAC,MAAM,CAAC;AAExC,MAAM,eAAe,GAAoB;IACvC,6DAAgB;IAChB,0EAAsB;IACtB;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,KAAK;KACf;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,+CAA+C;YAC/C,gCAAgC;YAChC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;SAC9E;KACF;CACF,CAAC;AASF,SAAgB,KAAK,CAAC,EACpB,SAAS,EACT,WAAW,EACX,SAAS,EACT,WAAW,GAAG,2BAAW,CAAC,aAAa,EACvC,KAAK,GACM;IACX,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,IAAA,gBAAQ,EAAwB,IAAI,CAAC,CAAC;IAEtF,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAA,wBAAS,EAAC,SAAS,EAAE,gBAAgB,EAAE;QAC5E,SAAS,EAAE,eAAe;QAC1B,SAAS,EAAE,WAAW;KACvB,CAAC,CAAC;IAEH,IAAA,uCAAiB,EAAC,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,CAAC;IAE3C,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,OAAO,CACL,qDACE,GAAG,EAAE,mBAAmB,EACxB,SAAS,EAAE,IAAA,oBAAU,EAAC,SAAS,EAAE,WAAW,CAAC,EAC7C,KAAK,kCAAO,MAAM,CAAC,MAAM,GAAK,KAAK,KAC/B,UAAU,CAAC,MAAM,EACrB,CACH,CAAC;AACJ,CAAC;AA1BD,sBA0BC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export { HoverHighlighter as ComponentHighlighter } from './component-highlighter';
2
2
  export type { HoverHighlighterProps as ComponentHighlightProps } from './component-highlighter';
3
+ export { MultiHighlighter } from './multi-highlighter';
4
+ export type { MultiHighlighterProps } from './multi-highlighter';
3
5
  export { ElementHighlighter } from './element-highlighter';
4
6
  export type { ElementHighlighterProps, HighlightTarget, Placement, HighlightClasses } from './element-highlighter';
5
- export { ExcludeHighlighter, excludeHighlighterAtt } from './ignore-highlighter';
7
+ export { ExcludeHighlighter, excludeHighlighterAtt, excludeHighlighterSelector, excludeHighlighterAttrName, } from './ignore-highlighter';
package/dist/index.js CHANGED
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.excludeHighlighterAtt = exports.ExcludeHighlighter = exports.ElementHighlighter = exports.ComponentHighlighter = void 0;
3
+ exports.excludeHighlighterAttrName = exports.excludeHighlighterSelector = exports.excludeHighlighterAtt = exports.ExcludeHighlighter = exports.ElementHighlighter = exports.MultiHighlighter = exports.ComponentHighlighter = void 0;
4
4
  var component_highlighter_1 = require("./component-highlighter");
5
5
  Object.defineProperty(exports, "ComponentHighlighter", { enumerable: true, get: function () { return component_highlighter_1.HoverHighlighter; } });
6
+ var multi_highlighter_1 = require("./multi-highlighter");
7
+ Object.defineProperty(exports, "MultiHighlighter", { enumerable: true, get: function () { return multi_highlighter_1.MultiHighlighter; } });
6
8
  var element_highlighter_1 = require("./element-highlighter");
7
9
  Object.defineProperty(exports, "ElementHighlighter", { enumerable: true, get: function () { return element_highlighter_1.ElementHighlighter; } });
8
10
  var ignore_highlighter_1 = require("./ignore-highlighter");
9
11
  Object.defineProperty(exports, "ExcludeHighlighter", { enumerable: true, get: function () { return ignore_highlighter_1.ExcludeHighlighter; } });
10
12
  Object.defineProperty(exports, "excludeHighlighterAtt", { enumerable: true, get: function () { return ignore_highlighter_1.excludeHighlighterAtt; } });
13
+ Object.defineProperty(exports, "excludeHighlighterSelector", { enumerable: true, get: function () { return ignore_highlighter_1.excludeHighlighterSelector; } });
14
+ Object.defineProperty(exports, "excludeHighlighterAttrName", { enumerable: true, get: function () { return ignore_highlighter_1.excludeHighlighterAttrName; } });
11
15
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,iEAAmF;AAA1E,6HAAA,gBAAgB,OAAwB;AAGjD,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA;AAG3B,2DAAiF;AAAxE,wHAAA,kBAAkB,OAAA;AAAE,2HAAA,qBAAqB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,iEAAmF;AAA1E,6HAAA,gBAAgB,OAAwB;AAGjD,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AAGzB,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA;AAG3B,2DAK8B;AAJ5B,wHAAA,kBAAkB,OAAA;AAClB,2HAAA,qBAAqB,OAAA;AACrB,gIAAA,0BAA0B,OAAA;AAC1B,gIAAA,0BAA0B,OAAA"}
@@ -7,9 +7,11 @@ export interface LabelContainerProps extends React.HTMLAttributes<HTMLDivElement
7
7
  offset?: [number, number];
8
8
  placement?: Placement;
9
9
  flip?: boolean;
10
+ /** continually update label position to match moving elements */
11
+ watchMotion?: boolean;
10
12
  }
11
13
  export type { Placement };
12
- export declare function LabelContainer({ targetRef, offset, placement, flip, className, ...rest }: LabelContainerProps): JSX.Element;
14
+ export declare function LabelContainer({ targetRef, offset, placement, flip, watchMotion, className, ...rest }: LabelContainerProps): JSX.Element;
13
15
  export interface LabelProps extends CardProps {
14
16
  componentId: string;
15
17
  link?: string;
@@ -29,31 +29,28 @@ var __rest = (this && this.__rest) || function (s, e) {
29
29
  }
30
30
  return t;
31
31
  };
32
- var __importDefault = (this && this.__importDefault) || function (mod) {
33
- return (mod && mod.__esModule) ? mod : { "default": mod };
34
- };
35
32
  Object.defineProperty(exports, "__esModule", { value: true });
36
33
  exports.Label = exports.LabelContainer = void 0;
37
34
  const react_1 = __importStar(require("react"));
38
35
  const react_popper_1 = require("react-popper");
39
36
  const component_id_1 = require("@teambit/component-id");
40
- const use_animation_frame_1 = __importDefault(require("use-animation-frame"));
41
37
  require("@popperjs/core");
42
38
  const default_label_1 = require("./default-label");
43
39
  const component_label_1 = require("./component-label");
40
+ const use_animation_frame_1 = require("../use-animation-frame");
44
41
  // TODO - replace this with TippyJS, when it supports a `targetElement={targetRef.current}` prop
45
42
  function LabelContainer(_a) {
46
- var { targetRef, offset, placement, flip = true, className } = _a, rest = __rest(_a, ["targetRef", "offset", "placement", "flip", "className"]);
43
+ var { targetRef, offset, placement, flip = true, watchMotion, className } = _a, rest = __rest(_a, ["targetRef", "offset", "placement", "flip", "watchMotion", "className"]);
47
44
  const [sourceRef, setSourceRef] = (0, react_1.useState)(null);
48
45
  const modifiers = (0, react_1.useMemo)(() => [{ name: 'offset', options: { offset } }], [flip, offset]);
49
46
  const { styles, attributes, update } = (0, react_popper_1.usePopper)(targetRef, sourceRef, {
50
47
  modifiers,
51
48
  placement,
52
49
  });
53
- (0, use_animation_frame_1.default)(() => update === null || update === void 0 ? void 0 : update(), [update]);
50
+ (0, use_animation_frame_1.useAnimationFrame)(!!watchMotion && update);
54
51
  if (!targetRef)
55
52
  return null;
56
- return (react_1.default.createElement("div", Object.assign({}, rest, { ref: setSourceRef, className: className, style: styles.popper }, attributes.popper)));
53
+ return react_1.default.createElement("div", Object.assign({}, rest, { ref: setSourceRef, className: className, style: styles.popper }, attributes.popper));
57
54
  }
58
55
  exports.LabelContainer = LabelContainer;
59
56
  function Label(_a) {
@@ -1 +1 @@
1
- {"version":3,"file":"label.js","sourceRoot":"","sources":["../../label/label.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiD;AACjD,+CAAyC;AACzC,wDAAoD;AAEpD,8EAAoD;AAEpD,0BAAwB;AAExB,mDAA+C;AAC/C,uDAAmD;AAWnD,gGAAgG;AAChG,SAAgB,cAAc,CAAC,EAAsF;QAAtF,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,OAAgC,EAA3B,IAAI,cAA/D,yDAAiE,CAAF;IAC5F,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAwB,IAAI,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,IAAA,eAAO,EACvB,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAC/C,CAAC,IAAI,EAAE,MAAM,CAAC,CACf,CAAC;IAEF,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAA,wBAAS,EAAC,SAAS,EAAE,SAAS,EAAE;QACrE,SAAS;QACT,SAAS;KACV,CAAC,CAAC;IAEH,IAAA,6BAAiB,EAAC,GAAG,EAAE,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,EAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9C,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,OAAO,CACL,uDACM,IAAI,IACR,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,IAChB,UAAU,CAAC,MAAM,EACrB,CACH,CAAC;AACJ,CAAC;AA1BD,wCA0BC;AASD,SAAgB,KAAK,CAAC,EAA4D;QAA5D,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,OAAuB,EAAlB,IAAI,cAA9C,6CAAgD,CAAF;IAClE,MAAM,QAAQ,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,0BAAW,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAEtF,IAAI,CAAC,QAAQ;QACX,OAAO,CACL,8BAAC,4BAAY,oBAAK,IAAI,IAAE,IAAI,EAAE,IAAI,KAC/B,WAAW,CACC,CAChB,CAAC;IAEJ,OAAO,8BAAC,gCAAc,oBAAK,IAAI,IAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,IAAI,CAAC;AAC7G,CAAC;AAXD,sBAWC"}
1
+ {"version":3,"file":"label.js","sourceRoot":"","sources":["../../label/label.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiD;AACjD,+CAAyC;AACzC,wDAAoD;AAGpD,0BAAwB;AAExB,mDAA+C;AAC/C,uDAAmD;AACnD,gEAA2D;AAa3D,gGAAgG;AAChG,SAAgB,cAAc,CAAC,EAQT;QARS,EAC7B,SAAS,EACT,MAAM,EACN,SAAS,EACT,IAAI,GAAG,IAAI,EACX,WAAW,EACX,SAAS,OAEW,EADjB,IAAI,cAPsB,wEAQ9B,CADQ;IAEP,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAwB,IAAI,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,IAAA,eAAO,EACvB,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAC/C,CAAC,IAAI,EAAE,MAAM,CAAC,CACf,CAAC;IAEF,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAA,wBAAS,EAAC,SAAS,EAAE,SAAS,EAAE;QACrE,SAAS;QACT,SAAS;KACV,CAAC,CAAC;IAEH,IAAA,uCAAiB,EAAC,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,CAAC;IAE3C,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,OAAO,uDAAS,IAAI,IAAE,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,IAAM,UAAU,CAAC,MAAM,EAAI,CAAC;AACjH,CAAC;AA1BD,wCA0BC;AASD,SAAgB,KAAK,CAAC,EAA4D;QAA5D,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,OAAuB,EAAlB,IAAI,cAA9C,6CAAgD,CAAF;IAClE,MAAM,QAAQ,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,0BAAW,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAEtF,IAAI,CAAC,QAAQ;QACX,OAAO,CACL,8BAAC,4BAAY,oBAAK,IAAI,IAAE,IAAI,EAAE,IAAI,KAC/B,WAAW,CACC,CAChB,CAAC;IAEJ,OAAO,8BAAC,gCAAc,oBAAK,IAAI,IAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,IAAI,CAAC;AAC7G,CAAC;AAXD,sBAWC"}
@@ -0,0 +1,2 @@
1
+ export { MultiHighlighter } from './multi-highlighter';
2
+ export type { MultiHighlighterProps } from './multi-highlighter';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MultiHighlighter = void 0;
4
+ var multi_highlighter_1 = require("./multi-highlighter");
5
+ Object.defineProperty(exports, "MultiHighlighter", { enumerable: true, get: function () { return multi_highlighter_1.MultiHighlighter; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../multi-highlighter/index.ts"],"names":[],"mappings":";;;AAAA,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const MultiHighlighterPreview: () => JSX.Element;
2
+ export declare const MultiHighlighterWithCustomColors: () => JSX.Element;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MultiHighlighterWithCustomColors = exports.MultiHighlighterPreview = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ // import { EnterpriseOffering } from '@teambit/evangelist.pages.enterprise-offering';
9
+ const react_ui_highlighter_component_metadata_bit_component_meta_1 = require("@teambit/react.ui.highlighter.component-metadata.bit-component-meta");
10
+ const multi_highlighter_1 = require("./multi-highlighter");
11
+ const MultiHighlighterPreview = () => {
12
+ return (react_1.default.createElement(multi_highlighter_1.MultiHighlighter, { style: { padding: 40 } },
13
+ react_1.default.createElement(react_ui_highlighter_component_metadata_bit_component_meta_1.MockedComponentWithMeta, null, "hover here"),
14
+ react_1.default.createElement("br", null),
15
+ react_1.default.createElement("br", null),
16
+ react_1.default.createElement("br", null),
17
+ react_1.default.createElement(react_ui_highlighter_component_metadata_bit_component_meta_1.MockedComponentWithMeta, null, "also here")));
18
+ };
19
+ exports.MultiHighlighterPreview = MultiHighlighterPreview;
20
+ const MultiHighlighterWithCustomColors = () => {
21
+ return (react_1.default.createElement(multi_highlighter_1.MultiHighlighter, { style: { padding: 40, color: 'yellow' }, bgColor: "cornflowerblue", bgColorHover: "blue", bgColorActive: "DarkSlateBlue" },
22
+ react_1.default.createElement(react_ui_highlighter_component_metadata_bit_component_meta_1.MockedComponentWithMeta, null, "hover here"),
23
+ react_1.default.createElement("br", null),
24
+ react_1.default.createElement("br", null),
25
+ react_1.default.createElement("br", null),
26
+ react_1.default.createElement(react_ui_highlighter_component_metadata_bit_component_meta_1.MockedComponentWithMeta, null, "also here")));
27
+ };
28
+ exports.MultiHighlighterWithCustomColors = MultiHighlighterWithCustomColors;
29
+ // export const HighlightingAllElementsInTheEnterprisePage = () => {
30
+ // return (
31
+ // <MultiHighlighter>
32
+ // <EnterpriseOffering style={{ height: 300 }} />
33
+ // </MultiHighlighter>
34
+ // );
35
+ // };
36
+ //# sourceMappingURL=multi-highlighter.composition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-highlighter.composition.js","sourceRoot":"","sources":["../../multi-highlighter/multi-highlighter.composition.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,sFAAsF;AACtF,oJAA8G;AAC9G,2DAAuD;AAEhD,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC1C,OAAO,CACL,8BAAC,oCAAgB,IAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACtC,8BAAC,oFAAuB,qBAAqC;QAC7D,yCAAM;QACN,yCAAM;QACN,yCAAM;QACN,8BAAC,oFAAuB,oBAAoC,CAC3C,CACpB,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,uBAAuB,2BAUlC;AAEK,MAAM,gCAAgC,GAAG,GAAG,EAAE;IACnD,OAAO,CACL,8BAAC,oCAAgB,IACf,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EACvC,OAAO,EAAC,gBAAgB,EACxB,YAAY,EAAC,MAAM,EACnB,aAAa,EAAC,eAAe;QAE7B,8BAAC,oFAAuB,qBAAqC;QAC7D,yCAAM;QACN,yCAAM;QACN,yCAAM;QACN,8BAAC,oFAAuB,oBAAoC,CAC3C,CACpB,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,gCAAgC,oCAe3C;AAEF,oEAAoE;AACpE,aAAa;AACb,yBAAyB;AACzB,uDAAuD;AACvD,0BAA0B;AAC1B,OAAO;AACP,KAAK"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { ElementHighlighterProps } from '@teambit/react.ui.component-highlighter';
3
+ export interface MultiHighlighterProps extends React.HTMLAttributes<HTMLDivElement> {
4
+ disabled?: boolean;
5
+ /**
6
+ * continually update highlighter position to match dom elements as they move. Use with caution, might be slow
7
+ * @default false
8
+ */
9
+ watchMotion?: boolean;
10
+ bgColor?: string;
11
+ bgColorHover?: string;
12
+ bgColorActive?: string;
13
+ highlighterOptions?: ElementHighlighterProps;
14
+ }
15
+ export declare function MultiHighlighter({ children, disabled, watchMotion, style, bgColor, bgColorActive, bgColorHover, highlighterOptions, ...rest }: MultiHighlighterProps): JSX.Element;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __rest = (this && this.__rest) || function (s, e) {
22
+ var t = {};
23
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
24
+ t[p] = s[p];
25
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
26
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
27
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
28
+ t[p[i]] = s[p[i]];
29
+ }
30
+ return t;
31
+ };
32
+ var __importDefault = (this && this.__importDefault) || function (mod) {
33
+ return (mod && mod.__esModule) ? mod : { "default": mod };
34
+ };
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MultiHighlighter = void 0;
37
+ const react_1 = __importStar(require("react"));
38
+ const get_xpath_1 = __importDefault(require("get-xpath"));
39
+ const react_ui_component_highlighter_1 = require("@teambit/react.ui.component-highlighter");
40
+ const react_modules_dom_to_react_1 = require("@teambit/react.modules.dom-to-react");
41
+ const react_ui_highlighter_component_metadata_bit_component_meta_1 = require("@teambit/react.ui.highlighter.component-metadata.bit-component-meta");
42
+ const ignore_highlighter_1 = require("../ignore-highlighter");
43
+ // TODO - reuse selector from @teambit/react.ui.component-highlighter
44
+ const allExceptHighlighterQuery = `:not(${ignore_highlighter_1.excludeHighlighterSelector}, ${ignore_highlighter_1.excludeHighlighterSelector} *)`;
45
+ function MultiHighlighter(_a) {
46
+ var { children, disabled, watchMotion = false, style, bgColor, bgColorActive, bgColorHover, highlighterOptions } = _a, rest = __rest(_a, ["children", "disabled", "watchMotion", "style", "bgColor", "bgColorActive", "bgColorHover", "highlighterOptions"]);
47
+ const ref = (0, react_1.createRef)();
48
+ const [targets, setTargets] = (0, react_1.useState)({});
49
+ (0, react_1.useEffect)(() => {
50
+ if (disabled) {
51
+ setTargets({});
52
+ return;
53
+ }
54
+ const { current } = ref;
55
+ if (!current)
56
+ return;
57
+ // select all non-highlighter elements
58
+ const allElements = Array.from(current.querySelectorAll(allExceptHighlighterQuery));
59
+ // converge on the root element of components
60
+ const rootElements = allElements.map(react_modules_dom_to_react_1.toRootElement).filter((x) => !!x);
61
+ // deduplicate
62
+ const uniqueRoots = new Set(rootElements);
63
+ const nextTargets = {};
64
+ uniqueRoots.forEach((element) => {
65
+ const comp = (0, react_modules_dom_to_react_1.domToReact)(element);
66
+ if (!element || !(0, react_ui_highlighter_component_metadata_bit_component_meta_1.hasComponentMeta)(comp))
67
+ return;
68
+ const key = (0, get_xpath_1.default)(element);
69
+ // eslint-disable-next-line no-underscore-dangle
70
+ nextTargets[key] = { element, id: comp.__bit_component.id };
71
+ });
72
+ setTargets(nextTargets);
73
+ }, [disabled]);
74
+ const colors = {
75
+ '--bit-highlighter-color': bgColor,
76
+ '--bit-highlighter-color-hover': bgColorHover,
77
+ '--bit-highlighter-color-active': bgColorActive,
78
+ };
79
+ return (react_1.default.createElement("div", Object.assign({ ref: ref }, rest, { style: Object.assign(Object.assign({}, colors), style) }),
80
+ children,
81
+ Object.entries(targets).map(([key, target]) => (react_1.default.createElement(react_ui_component_highlighter_1.ElementHighlighter, Object.assign({ key: key, target: target, watchMotion: watchMotion }, highlighterOptions))))));
82
+ }
83
+ exports.MultiHighlighter = MultiHighlighter;
84
+ //# sourceMappingURL=multi-highlighter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-highlighter.js","sourceRoot":"","sources":["../../multi-highlighter/multi-highlighter.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA8D;AAC9D,0DAAiC;AACjC,4FAAuH;AACvH,oFAAgF;AAChF,oJAAuG;AACvG,8DAAmE;AAEnE,qEAAqE;AACrE,MAAM,yBAAyB,GAAG,QAAQ,+CAA0B,KAAK,+CAA0B,KAAK,CAAC;AAkBzG,SAAgB,gBAAgB,CAAC,EAUT;QAVS,EAC/B,QAAQ,EACR,QAAQ,EACR,WAAW,GAAG,KAAK,EACnB,KAAK,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,kBAAkB,OAEI,EADnB,IAAI,cATwB,kHAUhC,CADQ;IAEP,MAAM,GAAG,GAAG,IAAA,iBAAS,GAAkB,CAAC;IACxC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAkC,EAAE,CAAC,CAAC;IAE5E,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,QAAQ,EAAE;YACZ,UAAU,CAAC,EAAE,CAAC,CAAC;YACf,OAAO;SACR;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;QACxB,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,sCAAsC;QACtC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAc,yBAAyB,CAAC,CAAC,CAAC;QAEjG,6CAA6C;QAC7C,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,0CAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,cAAc;QACd,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QAE1C,MAAM,WAAW,GAAoC,EAAE,CAAC;QACxD,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,IAAA,uCAAU,EAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAA,6EAAgB,EAAC,IAAI,CAAC;gBAAE,OAAO;YAEhD,MAAM,GAAG,GAAG,IAAA,mBAAQ,EAAC,OAAO,CAAC,CAAC;YAC9B,gDAAgD;YAChD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,MAAM,GAAG;QACb,yBAAyB,EAAE,OAAO;QAClC,+BAA+B,EAAE,YAAY;QAC7C,gCAAgC,EAAE,aAAa;KAChD,CAAC;IAEF,OAAO,CACL,qDAAK,GAAG,EAAE,GAAG,IAAM,IAAI,IAAE,KAAK,kCAAO,MAAM,GAAK,KAAK;QAClD,QAAQ;QACR,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAC9C,8BAAC,mDAAkB,kBAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,IAAM,kBAAkB,EAAI,CACnG,CAAC,CACE,CACP,CAAC;AACJ,CAAC;AA1DD,4CA0DC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const react_2 = require("@testing-library/react");
8
+ const multi_highlighter_composition_1 = require("./multi-highlighter.composition");
9
+ it('should not throw when rendering the multi-highlighter', () => {
10
+ const { getByText } = (0, react_2.render)(react_1.default.createElement(multi_highlighter_composition_1.MultiHighlighterPreview, null));
11
+ const rendered = getByText('hover here');
12
+ expect(rendered).toBeInstanceOf(HTMLElement);
13
+ });
14
+ // .querySelectorAll() is not working as expected during the test, ignoring for now :(
15
+ // it('should render highlighter for all children components', async () => {
16
+ // const { queryAllByText } = render(<Preview />);
17
+ // // allow useEffect to run
18
+ // await new Promise((res) => setTimeout(res, 200));
19
+ // const rendered = queryAllByText('input/button');
20
+ // expect(rendered).toHaveLength(2);
21
+ // });
22
+ //# sourceMappingURL=multi-highlighter.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-highlighter.spec.js","sourceRoot":"","sources":["../../multi-highlighter/multi-highlighter.spec.tsx"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,kDAAgD;AAChD,mFAA0E;AAE1E,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;IAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAAC,8BAAC,uDAAuB,OAAG,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IAEzC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,sFAAsF;AACtF,4EAA4E;AAC5E,oDAAoD;AAEpD,8BAA8B;AAC9B,sDAAsD;AAEtD,qDAAqD;AACrD,sCAAsC;AACtC,MAAM"}
@@ -0,0 +1 @@
1
+ export declare function useAnimationFrame(cb?: false | null | (() => any), deps?: []): void;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useAnimationFrame = void 0;
4
+ const react_1 = require("react");
5
+ // TODO - extract to its own component
6
+ function useAnimationFrame(cb, deps = []) {
7
+ (0, react_1.useEffect)(() => {
8
+ if (!cb)
9
+ return () => { };
10
+ let animationFrameId = -1;
11
+ const animate = () => {
12
+ cb();
13
+ animationFrameId = window.requestAnimationFrame(animate);
14
+ };
15
+ animate();
16
+ return () => {
17
+ if (animationFrameId > -1)
18
+ window.cancelAnimationFrame(animationFrameId);
19
+ };
20
+ }, [cb, ...deps]);
21
+ }
22
+ exports.useAnimationFrame = useAnimationFrame;
23
+ //# sourceMappingURL=use-animation-frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-animation-frame.js","sourceRoot":"","sources":["../use-animation-frame.tsx"],"names":[],"mappings":";;;AAAA,iCAAkC;AAElC,sCAAsC;AAEtC,SAAgB,iBAAiB,CAAC,EAA+B,EAAE,OAAW,EAAE;IAC9E,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,EAAE;YAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAEzB,IAAI,gBAAgB,GAAG,CAAC,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,EAAE,EAAE,CAAC;YACL,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC,CAAC;QACF,OAAO,EAAE,CAAC;QAEV,OAAO,GAAG,EAAE;YACV,IAAI,gBAAgB,GAAG,CAAC,CAAC;gBAAE,MAAM,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QAC3E,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AACpB,CAAC;AAfD,8CAeC"}
@@ -1,30 +1,32 @@
1
- import React, { useState, createRef, useEffect } from 'react';
1
+ import React, { useState, createRef, useEffect, CSSProperties } from 'react';
2
2
  import { ElementHighlighter, HighlightTarget } from './element-highlighter';
3
3
 
4
- const mockTargetId = 'teambit.design/ui/icon-button';
4
+ const mockTarget: Partial<HighlightTarget> = {
5
+ id: 'teambit.design/ui/icon-button',
6
+ link: 'https://bit.dev/teambit/design/ui/icon-button',
7
+ scopeLink: 'https://bit.dev/teambit/design',
8
+ };
9
+
10
+ type HighlightedElementProps = {
11
+ style?: CSSProperties;
12
+ targetStyle?: CSSProperties;
13
+ className?: string;
14
+ watchMotion?: boolean;
15
+ };
5
16
 
6
- export const HighlightedElement = ({ style, className }: { style?: Record<string, string>; className?: string }) => {
17
+ export const HighlightedElement = ({ style, targetStyle, watchMotion, className }: HighlightedElementProps) => {
7
18
  const [targetElement, setTargetElement] = useState<HTMLElement | undefined>(undefined);
8
19
  const targetRef = createRef<HTMLDivElement>();
9
20
 
10
- useEffect(() => {
11
- const { current } = targetRef;
12
- setTargetElement(current || undefined);
13
- }, [targetRef.current]);
14
-
15
- const target: HighlightTarget | undefined = targetElement && {
16
- element: targetElement,
17
- id: mockTargetId,
18
- link: 'https://bit.dev/teambit/design/ui/icon-button',
19
- scopeLink: 'https://bit.dev/teambit/design',
20
- };
21
+ useEffect(() => setTargetElement(targetRef.current || undefined), [targetRef.current]);
22
+ const target = targetElement && { ...mockTarget, element: targetElement };
21
23
 
22
24
  return (
23
- <div className={className} style={{ padding: '16px 160px 50px 16px' }}>
24
- <div ref={targetRef} style={{ width: 100 }}>
25
+ <div className={className} style={{ padding: '16px 16px 50px 16px', width: 300 }}>
26
+ <div ref={targetRef} style={{ width: 100, ...targetStyle }}>
25
27
  highlight target
26
28
  </div>
27
- {target && <ElementHighlighter target={target} style={style} placement="bottom" />}
29
+ {target && <ElementHighlighter target={target} style={style} watchMotion={watchMotion} placement="bottom" />}
28
30
  </div>
29
31
  );
30
32
  };
@@ -32,11 +34,13 @@ export const HighlightedElement = ({ style, className }: { style?: Record<string
32
34
  export const Customized = () => {
33
35
  return (
34
36
  <HighlightedElement
35
- style={{
36
- '--bit-highlighter-color': '#94deb4',
37
- '--bit-highlighter-color-hover': '#d0f1de',
38
- '--bit-highlighter-color-active': '#37b26c',
39
- }}
37
+ style={
38
+ {
39
+ '--bit-highlighter-color': '#94deb4',
40
+ '--bit-highlighter-color-hover': '#d0f1de',
41
+ '--bit-highlighter-color-active': '#37b26c',
42
+ } as CSSProperties
43
+ }
40
44
  />
41
45
  );
42
46
  };
@@ -44,3 +48,14 @@ export const Customized = () => {
44
48
  export const Sizes = () => {
45
49
  return <HighlightedElement style={{ fontSize: '16px' }} />;
46
50
  };
51
+
52
+ export const MovingElement = () => {
53
+ const [margin, setMargin] = useState(0);
54
+
55
+ useEffect(() => {
56
+ const intervalId = setInterval(() => setMargin((x) => (x + 1) % 100), 80);
57
+ return () => clearInterval(intervalId);
58
+ }, []);
59
+
60
+ return <HighlightedElement targetStyle={{ marginLeft: margin }} />;
61
+ };
@@ -1,3 +1,5 @@
1
+ @import '~@teambit/ui-foundation.ui.constants.z-indexes/z-indexes.module.scss';
2
+
1
3
  .container {
2
4
  font-size: 12px;
3
5
  }
@@ -6,3 +8,8 @@
6
8
  font-family: sans-serif;
7
9
  padding: 8px;
8
10
  }
11
+
12
+ .frame,
13
+ .label {
14
+ z-index: $highlighter-z-index;
15
+ }
@@ -12,6 +12,8 @@ export interface ElementHighlighterProps extends React.HTMLAttributes<HTMLDivEle
12
12
  placement?: Placement;
13
13
  /** customize styles */
14
14
  classes?: HighlightClasses;
15
+ /** continually update highlighter to match moving elements */
16
+ watchMotion?: boolean;
15
17
  }
16
18
 
17
19
  export { Placement };
@@ -36,16 +38,26 @@ export type HighlightClasses = {
36
38
  export function ElementHighlighter({
37
39
  target,
38
40
  placement = 'top',
41
+ watchMotion = true,
39
42
  className,
40
43
  classes,
41
44
  ...props
42
45
  }: ElementHighlighterProps) {
43
46
  return (
44
47
  <div {...props} {...excludeHighlighterAtt} className={classnames(classes?.container, styles.container, className)}>
45
- <Frame targetRef={target.element} className={classes?.frame} />
48
+ <Frame
49
+ targetRef={target.element}
50
+ className={classnames(styles.frame, classes?.frame)}
51
+ watchMotion={watchMotion}
52
+ />
46
53
 
47
54
  {target.id && (
48
- <LabelContainer className={styles.label} targetRef={target.element} placement={placement}>
55
+ <LabelContainer
56
+ className={styles.label}
57
+ targetRef={target.element}
58
+ placement={placement}
59
+ watchMotion={watchMotion}
60
+ >
49
61
  <Label
50
62
  componentId={target.id}
51
63
  link={target.link}
package/frame/frame.tsx CHANGED
@@ -1,12 +1,12 @@
1
- import React, { useState, useEffect } from 'react';
1
+ import React, { useState } from 'react';
2
2
  import { usePopper, Modifier } from 'react-popper';
3
- import useAnimationFrame from 'use-animation-frame';
4
3
  import classnames from 'classnames';
5
4
  import '@popperjs/core';
6
5
 
7
6
  import { ignorePopperSize } from '@teambit/base-ui.utils.popper-js.ignore-popper-size';
8
7
  import { resizeToMatchReference } from '@teambit/base-ui.utils.popper-js.resize-to-match-reference';
9
8
 
9
+ import { useAnimationFrame } from '../use-animation-frame';
10
10
  import classStyles from './frame.module.scss';
11
11
 
12
12
  const BASE_OFFSET = +classStyles.offset;
@@ -31,12 +31,13 @@ const popperModifiers: Modifier<any>[] = [
31
31
  export interface FrameProps extends React.HTMLAttributes<HTMLDivElement> {
32
32
  targetRef: HTMLElement | null;
33
33
  stylesClass?: string;
34
- motionTracking?: boolean;
34
+ /** continually update frame position to match moving elements */
35
+ watchMotion?: boolean;
35
36
  }
36
37
 
37
38
  export function Frame({
38
39
  targetRef,
39
- motionTracking,
40
+ watchMotion,
40
41
  className,
41
42
  stylesClass = classStyles.overlayBorder,
42
43
  style,
@@ -48,23 +49,7 @@ export function Frame({
48
49
  placement: 'top-start',
49
50
  });
50
51
 
51
- useEffect(() => {
52
- const triggerRefocus = update;
53
- if (!triggerRefocus || !motionTracking) return () => {};
54
-
55
- let animationFrameId = 0;
56
- const f = () => {
57
- triggerRefocus().catch(() => {});
58
- animationFrameId = window.requestAnimationFrame(f);
59
- };
60
- f();
61
-
62
- return () => {
63
- if (animationFrameId > -1) window.cancelAnimationFrame(animationFrameId);
64
- };
65
- }, [update, motionTracking]);
66
-
67
- useAnimationFrame(() => update?.(), [update]);
52
+ useAnimationFrame(!!watchMotion && update);
68
53
 
69
54
  if (!targetRef) return null;
70
55
 
package/index.ts CHANGED
@@ -1,7 +1,15 @@
1
1
  export { HoverHighlighter as ComponentHighlighter } from './component-highlighter';
2
2
  export type { HoverHighlighterProps as ComponentHighlightProps } from './component-highlighter';
3
3
 
4
+ export { MultiHighlighter } from './multi-highlighter';
5
+ export type { MultiHighlighterProps } from './multi-highlighter';
6
+
4
7
  export { ElementHighlighter } from './element-highlighter';
5
8
  export type { ElementHighlighterProps, HighlightTarget, Placement, HighlightClasses } from './element-highlighter';
6
9
 
7
- export { ExcludeHighlighter, excludeHighlighterAtt } from './ignore-highlighter';
10
+ export {
11
+ ExcludeHighlighter,
12
+ excludeHighlighterAtt,
13
+ excludeHighlighterSelector,
14
+ excludeHighlighterAttrName,
15
+ } from './ignore-highlighter';