@teambit/react.ui.component-highlighter 0.0.510 → 0.0.513

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 (64) hide show
  1. package/children-highlighter/use-children-highlighter.tsx +5 -3
  2. package/component-highlighter.docs.md +3 -14
  3. package/dist/children-highlighter/use-children-highlighter.d.ts +7 -2
  4. package/dist/children-highlighter/use-children-highlighter.js.map +1 -1
  5. package/dist/component-highlighter.docs.md +3 -14
  6. package/dist/element-highlighter/element-highlighter.compositions.d.ts +1 -0
  7. package/dist/element-highlighter/element-highlighter.compositions.js +17 -17
  8. package/dist/element-highlighter/element-highlighter.compositions.js.map +1 -1
  9. package/dist/element-highlighter/element-highlighter.d.ts +6 -10
  10. package/dist/element-highlighter/element-highlighter.js +4 -4
  11. package/dist/element-highlighter/element-highlighter.js.map +1 -1
  12. package/dist/element-highlighter/index.d.ts +1 -1
  13. package/dist/frame/frame.d.ts +8 -4
  14. package/dist/frame/frame.js +67 -31
  15. package/dist/frame/frame.js.map +1 -1
  16. package/dist/frame/frame.module.scss +8 -1
  17. package/dist/hover-highlighter/bubble-to-component.d.ts +19 -0
  18. package/dist/hover-highlighter/bubble-to-component.js +43 -0
  19. package/dist/hover-highlighter/bubble-to-component.js.map +1 -0
  20. package/dist/hover-highlighter/bubble-to-component.spec.d.ts +1 -0
  21. package/dist/hover-highlighter/bubble-to-component.spec.js +38 -0
  22. package/dist/hover-highlighter/bubble-to-component.spec.js.map +1 -0
  23. package/dist/hover-highlighter/use-hover-highlighter.d.ts +6 -1
  24. package/dist/hover-highlighter/use-hover-highlighter.js +2 -23
  25. package/dist/hover-highlighter/use-hover-highlighter.js.map +1 -1
  26. package/dist/hybrid-highlighter/hybrid-highlighter.js +1 -1
  27. package/dist/hybrid-highlighter/hybrid-highlighter.js.map +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/label/component-strip.d.ts +1 -1
  30. package/dist/label/component-strip.js +7 -1
  31. package/dist/label/component-strip.js.map +1 -1
  32. package/dist/label/label-container.d.ts +4 -5
  33. package/dist/label/label-container.js +26 -13
  34. package/dist/label/label-container.js.map +1 -1
  35. package/dist/label/label.d.ts +1 -1
  36. package/dist/label/label.module.scss +6 -0
  37. package/dist/label/other-components.d.ts +1 -1
  38. package/dist/mock-component.d.ts +2 -0
  39. package/dist/mock-component.js +30 -0
  40. package/dist/mock-component.js.map +1 -0
  41. package/element-highlighter/element-highlighter.compositions.tsx +29 -19
  42. package/element-highlighter/element-highlighter.tsx +13 -25
  43. package/element-highlighter/index.ts +1 -1
  44. package/frame/frame.module.scss +8 -1
  45. package/frame/frame.tsx +91 -44
  46. package/hover-highlighter/bubble-to-component.spec.tsx +57 -0
  47. package/hover-highlighter/bubble-to-component.tsx +69 -0
  48. package/hover-highlighter/use-hover-highlighter.tsx +5 -36
  49. package/hybrid-highlighter/hybrid-highlighter.tsx +7 -2
  50. package/index.ts +1 -1
  51. package/label/component-strip.tsx +11 -2
  52. package/label/label-container.tsx +40 -20
  53. package/label/label.module.scss +6 -0
  54. package/label/label.tsx +1 -1
  55. package/label/other-components.tsx +1 -1
  56. package/mock-component.tsx +9 -0
  57. package/package-tar/teambit-react.ui.component-highlighter-0.0.513.tgz +0 -0
  58. package/package.json +8 -9
  59. package/{__preview-1645365357220.js → preview-1649042627943.js} +2 -2
  60. package/dist/use-animation-frame.d.ts +0 -1
  61. package/dist/use-animation-frame.js +0 -23
  62. package/dist/use-animation-frame.js.map +0 -1
  63. package/package-tar/teambit-react.ui.component-highlighter-0.0.510.tgz +0 -0
  64. package/use-animation-frame.tsx +0 -20
@@ -3,15 +3,17 @@ import getXPath from 'get-xpath';
3
3
  import { domToReacts, toRootElement } from '@teambit/react.modules.dom-to-react';
4
4
  import {
5
5
  componentMetaField,
6
+ ComponentMetaHolder,
6
7
  hasComponentMeta,
7
8
  ReactComponentMetaHolder,
8
9
  } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta';
9
- import { HighlightTarget } from '../element-highlighter';
10
10
  import { excludeHighlighterSelector } from '../ignore-highlighter';
11
11
  import { ruleMatcher, MatchRule, ComponentMatchRule, componentRuleMatcher } from '../rule-matcher';
12
12
 
13
+ type HighlighterTarget = Record<string, { element: HTMLElement; components: ComponentMetaHolder[] }>;
14
+
13
15
  export type ChildrenHighlighterOptions = {
14
- onChange: (highlighterTargets: Record<string, HighlightTarget>) => void;
16
+ onChange: (highlighterTargets: HighlighterTarget) => void;
15
17
  disabled?: boolean;
16
18
  scopeRef: RefObject<HTMLElement>;
17
19
  scopeClass?: string;
@@ -32,7 +34,7 @@ export function useChildrenHighlighter({
32
34
  componentRule,
33
35
  }: ChildrenHighlighterOptions) {
34
36
  useEffect(() => {
35
- const nextTargets: Record<string, HighlightTarget> = {};
37
+ const nextTargets: HighlighterTarget = {};
36
38
  const scopeElement = scopeRef.current;
37
39
  if (!scopeElement || disabled) return;
38
40
 
@@ -34,23 +34,12 @@ You can also use it manually, to have more control:
34
34
  import { ElementHighlighter } from '@teambit/react.ui.component-highlighter';
35
35
 
36
36
  function ManualHighlight() {
37
- const [element, setElement] = useState<HTMLElement | undefined>(undefined);
38
-
39
- useEffect(() => setElement(document.getElementById('to-highlight')), [targetRef.current]);
40
-
41
- const target = targetElement && {
42
- element: targetElement,
43
- id: 'teambit.design/ui/icon-button',
44
-
45
- // explicit overrides:
46
- link: 'https://bit.dev/teambit/design/ui/icon-button',
47
- scopeLink: 'https://bit.dev/teambit/design',
48
- };
37
+ const targetRef = createRef<HTMLElement | undefined>(null);
49
38
 
50
39
  return (
51
40
  <div>
52
- <div id="to-highlight">highlight target</div>
53
- {target && <ElementHighlighter target={target} />}
41
+ <div ref={targetRef}>highlight target</div>
42
+ <ElementHighlighter targetRef={targetRef} components={['teambit.design/ui/icon-button']} />
54
43
  </div>
55
44
  );
56
45
  }
@@ -1,8 +1,12 @@
1
1
  import { RefObject } from 'react';
2
- import { HighlightTarget } from '../element-highlighter';
2
+ import { ComponentMetaHolder } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta';
3
3
  import { MatchRule, ComponentMatchRule } from '../rule-matcher';
4
+ declare type HighlighterTarget = Record<string, {
5
+ element: HTMLElement;
6
+ components: ComponentMetaHolder[];
7
+ }>;
4
8
  export declare type ChildrenHighlighterOptions = {
5
- onChange: (highlighterTargets: Record<string, HighlightTarget>) => void;
9
+ onChange: (highlighterTargets: HighlighterTarget) => void;
6
10
  disabled?: boolean;
7
11
  scopeRef: RefObject<HTMLElement>;
8
12
  scopeClass?: string;
@@ -11,3 +15,4 @@ export declare type ChildrenHighlighterOptions = {
11
15
  componentRule?: ComponentMatchRule;
12
16
  };
13
17
  export declare function useChildrenHighlighter({ onChange, disabled, scopeRef, scopeClass: scopeSelector, rule, componentRule, }: ChildrenHighlighterOptions): void;
18
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"use-children-highlighter.js","sourceRoot":"","sources":["../../children-highlighter/use-children-highlighter.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAA6C;AAC7C,0DAAiC;AACjC,oFAAiF;AACjF,oJAI6E;AAE7E,8DAAmE;AACnE,kDAAmG;AAenG,SAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EAAE,aAAa,GAAG,EAAE,EAC9B,IAAI,EACJ,aAAa,GACc;IAC3B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAoC,EAAE,CAAC;QACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,YAAY,IAAI,QAAQ;YAAE,OAAO;QAEtC,wCAAwC;QACxC,IAAI,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAc,eAAe,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/G,uBAAuB;QACvB,IAAI,IAAI;YAAE,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAW,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9E,yBAAyB;QACzB,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,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,MAAM,KAAK,GAAG,IAAA,wCAAW,EAAC,OAAO,CAAC,CAAC;YACnC,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,6EAAgB,EAAC,CAAC,CAAC,IAAI,IAAA,mCAAoB,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC,+EAAkB,CAAC,EAAE,EAAE,aAAa,CAAC,CACrE,CAAC;YAEhC,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO;YAE1C,MAAM,GAAG,GAAG,IAAA,mBAAQ,EAAC,OAAO,CAAC,CAAC;YAE9B,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxB,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AAChC,CAAC;AAtCD,wDAsCC;AAED,SAAS,eAAe;AACtB;;;GAGG;AACH,aAAa,GAAG,QAAQ;IAExB,OAAO,QAAQ,aAAa,IAAI,+CAA0B,KAAK,aAAa,IAAI,+CAA0B,KAAK,CAAC;AAClH,CAAC"}
1
+ {"version":3,"file":"use-children-highlighter.js","sourceRoot":"","sources":["../../children-highlighter/use-children-highlighter.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAA6C;AAC7C,0DAAiC;AACjC,oFAAiF;AACjF,oJAK6E;AAC7E,8DAAmE;AACnE,kDAAmG;AAiBnG,SAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EAAE,aAAa,GAAG,EAAE,EAC9B,IAAI,EACJ,aAAa,GACc;IAC3B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAsB,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,YAAY,IAAI,QAAQ;YAAE,OAAO;QAEtC,wCAAwC;QACxC,IAAI,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAc,eAAe,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/G,uBAAuB;QACvB,IAAI,IAAI;YAAE,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,0BAAW,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9E,yBAAyB;QACzB,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,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,MAAM,KAAK,GAAG,IAAA,wCAAW,EAAC,OAAO,CAAC,CAAC;YACnC,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,6EAAgB,EAAC,CAAC,CAAC,IAAI,IAAA,mCAAoB,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC,+EAAkB,CAAC,EAAE,EAAE,aAAa,CAAC,CACrE,CAAC;YAEhC,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO;YAE1C,MAAM,GAAG,GAAG,IAAA,mBAAQ,EAAC,OAAO,CAAC,CAAC;YAE9B,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxB,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AAChC,CAAC;AAtCD,wDAsCC;AAED,SAAS,eAAe;AACtB;;;GAGG;AACH,aAAa,GAAG,QAAQ;IAExB,OAAO,QAAQ,aAAa,IAAI,+CAA0B,KAAK,aAAa,IAAI,+CAA0B,KAAK,CAAC;AAClH,CAAC"}
@@ -34,23 +34,12 @@ You can also use it manually, to have more control:
34
34
  import { ElementHighlighter } from '@teambit/react.ui.component-highlighter';
35
35
 
36
36
  function ManualHighlight() {
37
- const [element, setElement] = useState<HTMLElement | undefined>(undefined);
38
-
39
- useEffect(() => setElement(document.getElementById('to-highlight')), [targetRef.current]);
40
-
41
- const target = targetElement && {
42
- element: targetElement,
43
- id: 'teambit.design/ui/icon-button',
44
-
45
- // explicit overrides:
46
- link: 'https://bit.dev/teambit/design/ui/icon-button',
47
- scopeLink: 'https://bit.dev/teambit/design',
48
- };
37
+ const targetRef = createRef<HTMLElement | undefined>(null);
49
38
 
50
39
  return (
51
40
  <div>
52
- <div id="to-highlight">highlight target</div>
53
- {target && <ElementHighlighter target={target} />}
41
+ <div ref={targetRef}>highlight target</div>
42
+ <ElementHighlighter targetRef={targetRef} components={['teambit.design/ui/icon-button']} />
54
43
  </div>
55
44
  );
56
45
  }
@@ -9,4 +9,5 @@ export declare const HighlightedElement: ({ style, targetStyle, watchMotion, cla
9
9
  export declare const Customized: () => JSX.Element;
10
10
  export declare const Sizes: () => JSX.Element;
11
11
  export declare const MovingElement: () => JSX.Element;
12
+ export declare const ElementOnTheEdge: () => JSX.Element;
12
13
  export {};
@@ -19,27 +19,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
19
19
  return result;
20
20
  };
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.MovingElement = exports.Sizes = exports.Customized = exports.HighlightedElement = void 0;
23
- const react_ui_highlighter_component_metadata_bit_component_meta_1 = require("@teambit/react.ui.highlighter.component-metadata.bit-component-meta");
22
+ exports.ElementOnTheEdge = exports.MovingElement = exports.Sizes = exports.Customized = exports.HighlightedElement = void 0;
24
23
  const react_1 = __importStar(require("react"));
25
24
  const element_highlighter_1 = require("./element-highlighter");
26
- const mockTarget = {
27
- components: [
28
- {
29
- [react_ui_highlighter_component_metadata_bit_component_meta_1.componentMetaField]: {
30
- id: 'teambit.design/ui/icon-button@1.6.2',
31
- },
32
- },
33
- ],
34
- };
25
+ const mock_component_1 = require("../mock-component");
35
26
  const HighlightedElement = ({ style, targetStyle, watchMotion, className }) => {
36
- const [targetElement, setTargetElement] = (0, react_1.useState)(undefined);
37
27
  const targetRef = (0, react_1.createRef)();
38
- (0, react_1.useEffect)(() => setTargetElement(targetRef.current || undefined), [targetRef.current]);
39
- const target = targetElement && Object.assign(Object.assign({}, mockTarget), { element: targetElement });
40
28
  return (react_1.default.createElement("div", { className: className, style: { padding: '16px 16px 40px 16px', width: 300, fontFamily: 'sans-serif' } },
41
29
  react_1.default.createElement("div", { ref: targetRef, style: Object.assign({ width: 100 }, targetStyle) }, "highlight target"),
42
- target && react_1.default.createElement(element_highlighter_1.ElementHighlighter, { target: target, style: style, watchMotion: watchMotion, placement: "bottom" })));
30
+ react_1.default.createElement(element_highlighter_1.ElementHighlighter, { targetRef: targetRef, components: [mock_component_1.MockTarget], style: style, watchMotion: watchMotion, placement: "bottom" })));
43
31
  };
44
32
  exports.HighlightedElement = HighlightedElement;
45
33
  const Customized = () => {
@@ -57,13 +45,25 @@ const Sizes = () => {
57
45
  react_1.default.createElement(exports.HighlightedElement, { style: { fontSize: 18 } })));
58
46
  };
59
47
  exports.Sizes = Sizes;
48
+ const fps = 30;
49
+ const frameInterval = 1000 / fps;
60
50
  const MovingElement = () => {
61
51
  const [margin, setMargin] = (0, react_1.useState)(0);
62
52
  (0, react_1.useEffect)(() => {
63
- const intervalId = setInterval(() => setMargin((x) => (x + 1) % 100), 80);
53
+ const intervalId = setInterval(() => setMargin((x) => (x + 1) % 100), frameInterval);
64
54
  return () => clearInterval(intervalId);
65
55
  }, []);
66
- return react_1.default.createElement(exports.HighlightedElement, { targetStyle: { marginLeft: margin } });
56
+ return react_1.default.createElement(exports.HighlightedElement, { targetStyle: { marginLeft: margin }, watchMotion: true });
67
57
  };
68
58
  exports.MovingElement = MovingElement;
59
+ const ElementOnTheEdge = () => {
60
+ const targetRef = (0, react_1.createRef)();
61
+ return (react_1.default.createElement("div", { style: { fontFamily: 'sans-serif' } },
62
+ react_1.default.createElement("div", { ref: targetRef, style: { width: '100%', border: '1px solid black', boxSizing: 'border-box' } },
63
+ "This element is on the edge of the document, making the highlighter overflow. ",
64
+ react_1.default.createElement("br", null),
65
+ "It should instead shrink to fit inside the document."),
66
+ react_1.default.createElement(element_highlighter_1.ElementHighlighter, { targetRef: targetRef, components: [mock_component_1.MockTarget], watchMotion: true })));
67
+ };
68
+ exports.ElementOnTheEdge = ElementOnTheEdge;
69
69
  //# sourceMappingURL=element-highlighter.compositions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"element-highlighter.compositions.js","sourceRoot":"","sources":["../../element-highlighter/element-highlighter.compositions.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,oJAAyG;AACzG,+CAA6E;AAC7E,+DAA4E;AAE5E,MAAM,UAAU,GAA6B;IAC3C,UAAU,EAAE;QACV;YACE,CAAC,+EAAkB,CAAC,EAAE;gBACpB,EAAE,EAAE,qCAAqC;aAC1C;SACF;KACF;CACF,CAAC;AASK,MAAM,kBAAkB,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAA2B,EAAE,EAAE;IAC5G,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAA0B,SAAS,CAAC,CAAC;IACvF,MAAM,SAAS,GAAG,IAAA,iBAAS,GAAkB,CAAC;IAE9C,IAAA,iBAAS,EAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,aAAa,oCAAS,UAAU,KAAE,OAAO,EAAE,aAAa,GAAE,CAAC;IAE1E,OAAO,CACL,uCAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE;QACxG,uCAAK,GAAG,EAAE,SAAS,EAAE,KAAK,kBAAI,KAAK,EAAE,GAAG,IAAK,WAAW,wBAElD;QACL,MAAM,IAAI,8BAAC,wCAAkB,IAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAC,QAAQ,GAAG,CACxG,CACP,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,kBAAkB,sBAe7B;AAEK,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,OAAO,CACL,8BAAC,0BAAkB,IACjB,KAAK,EACH;YACE,yBAAyB,EAAE,SAAS;YACpC,+BAA+B,EAAE,SAAS;YAC1C,gCAAgC,EAAE,SAAS;SAC3B,GAEpB,CACH,CAAC;AACJ,CAAC,CAAC;AAZW,QAAA,UAAU,cAYrB;AAEK,MAAM,KAAK,GAAG,GAAG,EAAE;IACxB,OAAO,CACL;QACE,8BAAC,0BAAkB,IAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAI;QAC/C,8BAAC,0BAAkB,IAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAI;QAC/C,8BAAC,0BAAkB,IAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAI,CAC3C,CACP,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,KAAK,SAQhB;AAEK,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IAExC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,8BAAC,0BAAkB,IAAC,WAAW,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,GAAI,CAAC;AACrE,CAAC,CAAC;AATW,QAAA,aAAa,iBASxB"}
1
+ {"version":3,"file":"element-highlighter.compositions.js","sourceRoot":"","sources":["../../element-highlighter/element-highlighter.compositions.tsx"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
- import React from 'react';
1
+ import React, { RefObject } from 'react';
2
2
  import { ComponentMetaHolder } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta';
3
3
  import { Placement } from '../label';
4
4
  export interface ElementHighlighterProps extends React.HTMLAttributes<HTMLDivElement> {
5
- /** target element to highlight */
6
- target: HighlightTarget;
5
+ /** highlight this element */
6
+ targetRef: RefObject<HTMLElement | null>;
7
+ /** components with metadata to show in the label */
8
+ components?: (ComponentMetaHolder | string)[];
7
9
  /** default location of the label */
8
10
  placement?: Placement;
9
11
  /** customize styles */
@@ -12,15 +14,9 @@ export interface ElementHighlighterProps extends React.HTMLAttributes<HTMLDivEle
12
14
  watchMotion?: boolean;
13
15
  }
14
16
  export { Placement };
15
- export declare type HighlightTarget = {
16
- /** element to show the highlight at */
17
- element: HTMLElement;
18
- /** components with metadata to show in the label */
19
- components?: ComponentMetaHolder[];
20
- };
21
17
  export declare type HighlightClasses = {
22
18
  container?: string;
23
19
  frame?: string;
24
20
  label?: string;
25
21
  };
26
- export declare function ElementHighlighter({ target, placement, watchMotion, className, classes, ...props }: ElementHighlighterProps): JSX.Element;
22
+ export declare function ElementHighlighter({ targetRef, components, placement, watchMotion, className, classes, ...props }: ElementHighlighterProps): JSX.Element;
@@ -22,11 +22,11 @@ const label_1 = require("../label");
22
22
  const ignore_highlighter_1 = require("../ignore-highlighter");
23
23
  const element_highlighter_module_scss_1 = __importDefault(require("./element-highlighter.module.scss"));
24
24
  function ElementHighlighter(_a) {
25
- var { target, placement = 'top', watchMotion = true, className, classes } = _a, props = __rest(_a, ["target", "placement", "watchMotion", "className", "classes"]);
25
+ var { targetRef, components, placement = 'top', watchMotion, className, classes } = _a, props = __rest(_a, ["targetRef", "components", "placement", "watchMotion", "className", "classes"]);
26
26
  return (react_1.default.createElement("div", Object.assign({}, props, ignore_highlighter_1.excludeHighlighterAtt, { className: (0, classnames_1.default)(classes === null || classes === void 0 ? void 0 : classes.container, element_highlighter_module_scss_1.default.container, className) }),
27
- react_1.default.createElement(frame_1.Frame, { targetRef: target.element, className: (0, classnames_1.default)(element_highlighter_module_scss_1.default.frame, classes === null || classes === void 0 ? void 0 : classes.frame), watchMotion: watchMotion }),
28
- target.components && (react_1.default.createElement(label_1.LabelContainer, { className: element_highlighter_module_scss_1.default.label, targetRef: target.element, placement: placement, watchMotion: watchMotion },
29
- react_1.default.createElement(label_1.Label, { components: target.components, className: classes === null || classes === void 0 ? void 0 : classes.label })))));
27
+ react_1.default.createElement(frame_1.Frame, { targetRef: targetRef, className: (0, classnames_1.default)(element_highlighter_module_scss_1.default.frame, classes === null || classes === void 0 ? void 0 : classes.frame), watchMotion: watchMotion }),
28
+ components && (react_1.default.createElement(label_1.LabelContainer, { targetRef: targetRef, className: element_highlighter_module_scss_1.default.label, placement: placement, watchMotion: watchMotion },
29
+ react_1.default.createElement(label_1.Label, { components: components, className: classes === null || classes === void 0 ? void 0 : classes.label })))));
30
30
  }
31
31
  exports.ElementHighlighter = ElementHighlighter;
32
32
  //# sourceMappingURL=element-highlighter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"element-highlighter.js","sourceRoot":"","sources":["../../element-highlighter/element-highlighter.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,4DAAoC;AAEpC,oCAAiC;AACjC,oCAA4D;AAC5D,8DAA8D;AAC9D,wGAAuD;AA4BvD,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,UAAU,IAAI,CACpB,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,IAAC,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,GAAI,CACpD,CAClB,CACG,CACP,CAAC;AACJ,CAAC;AA5BD,gDA4BC"}
1
+ {"version":3,"file":"element-highlighter.js","sourceRoot":"","sources":["../../element-highlighter/element-highlighter.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kDAAyC;AACzC,4DAAoC;AAEpC,oCAAiC;AACjC,oCAA4D;AAC5D,8DAA8D;AAC9D,wGAAuD;AAwBvD,SAAgB,kBAAkB,CAAC,EAQT;QARS,EACjC,SAAS,EACT,UAAU,EACV,SAAS,GAAG,KAAK,EACjB,WAAW,EACX,SAAS,EACT,OAAO,OAEiB,EADrB,KAAK,cAPyB,+EAQlC,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,SAAS,EAAE,SAAS,EAAE,IAAA,oBAAU,EAAC,yCAAM,CAAC,KAAK,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,EAAE,WAAW,EAAE,WAAW,GAAI;QAE7G,UAAU,IAAI,CACb,8BAAC,sBAAc,IAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,yCAAM,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW;YAC3G,8BAAC,aAAK,IAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,GAAI,CAC7C,CAClB,CACG,CACP,CAAC;AACJ,CAAC;AApBD,gDAoBC"}
@@ -1,2 +1,2 @@
1
1
  export { ElementHighlighter } from './element-highlighter';
2
- export type { ElementHighlighterProps, HighlightTarget, Placement, HighlightClasses } from './element-highlighter';
2
+ export type { ElementHighlighterProps, Placement, HighlightClasses } from './element-highlighter';
@@ -1,9 +1,13 @@
1
- import React from 'react';
2
- import '@popperjs/core';
1
+ import React, { RefObject } from 'react';
3
2
  export interface FrameProps extends React.HTMLAttributes<HTMLDivElement> {
4
- targetRef: HTMLElement | null;
3
+ /** apply the frame to this element */
4
+ targetRef: RefObject<HTMLElement | null>;
5
+ /**
6
+ * the specific flavor of the frame.
7
+ * @default "redBorderClass"
8
+ */
5
9
  stylesClass?: string;
6
10
  /** continually update frame position to match moving elements */
7
11
  watchMotion?: boolean;
8
12
  }
9
- export declare function Frame({ targetRef, watchMotion, className, stylesClass, style, }: FrameProps): JSX.Element;
13
+ export declare function Frame({ targetRef, watchMotion, className, stylesClass, style }: FrameProps): JSX.Element;
@@ -24,40 +24,76 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.Frame = void 0;
26
26
  const react_1 = __importStar(require("react"));
27
- const react_popper_1 = require("react-popper");
28
27
  const classnames_1 = __importDefault(require("classnames"));
29
- require("@popperjs/core");
30
- const base_ui_utils_popper_js_ignore_popper_size_1 = require("@teambit/base-ui.utils.popper-js.ignore-popper-size");
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");
28
+ const react_dom_1 = require("@floating-ui/react-dom");
33
29
  const frame_module_scss_1 = __importDefault(require("./frame.module.scss"));
34
- const BASE_OFFSET = +frame_module_scss_1.default.offset;
35
- const popperModifiers = [
36
- base_ui_utils_popper_js_ignore_popper_size_1.ignorePopperSize,
37
- base_ui_utils_popper_js_resize_to_match_reference_1.resizeToMatchReference,
38
- {
39
- name: 'flip',
40
- enabled: false,
41
- },
42
- {
43
- name: 'offset',
44
- options: {
45
- // move box from above the target ('top-start')
46
- // to directly cover the target.
47
- offset: ({ reference }) => [BASE_OFFSET, BASE_OFFSET - reference.height],
48
- },
49
- },
50
- ];
51
- function Frame({ targetRef, watchMotion, className, stylesClass = frame_module_scss_1.default.overlayBorder, style, }) {
52
- const [referenceElement, setReferenceElement] = (0, react_1.useState)(null);
53
- const { styles, attributes, update } = (0, react_popper_1.usePopper)(targetRef, referenceElement, {
54
- modifiers: popperModifiers,
55
- placement: 'top-start',
30
+ /** frame padding around the target */
31
+ const MARGIN_FROM_TARGET = +frame_module_scss_1.default.offset || 6; // setting fallback 6, for tests
32
+ /** min. distance from the edge of the screen. */
33
+ const MARGIN_FROM_DOC_EDGE = 0;
34
+ // position - bottom start (bottom left corner)
35
+ // x - width - horizontal (cross axis)
36
+ // y - height - vertical (main axis)
37
+ function Frame({ targetRef, watchMotion, className, stylesClass = frame_module_scss_1.default.overlayBorder, style }) {
38
+ const dimensionRef = (0, react_1.useRef)({ width: 0, height: 0 });
39
+ const shiftRef = (0, react_1.useRef)();
40
+ const { x, y, strategy, reference, floating, update, refs } = (0, react_dom_1.useFloating)({
41
+ placement: 'bottom-start',
42
+ middleware: [
43
+ // replace dimensions from previous iterations with the target's size
44
+ // this is only the measured size, not yet the applied size
45
+ {
46
+ name: 'align-to-target',
47
+ fn({ rects }) {
48
+ rects.floating = Object.assign(Object.assign({}, rects.floating), { width: rects.reference.width + 2 * MARGIN_FROM_TARGET, height: rects.reference.height + 2 * MARGIN_FROM_TARGET });
49
+ return {};
50
+ },
51
+ },
52
+ // reposition x,y, to the top of the reference
53
+ (0, react_dom_1.offset)((options) => -options.reference.height),
54
+ // offset the frame by its extra padding
55
+ (0, react_dom_1.offset)(() => ({ mainAxis: -MARGIN_FROM_TARGET, crossAxis: -MARGIN_FROM_TARGET })),
56
+ // push the frame inside the screen
57
+ (0, react_dom_1.shift)({ rootBoundary: 'document', padding: MARGIN_FROM_DOC_EDGE, mainAxis: true, crossAxis: true }),
58
+ // read "shift" for the size-apply() method (because it doesn't forward middlewareData)
59
+ {
60
+ name: 'read-shift',
61
+ fn({ middlewareData }) {
62
+ shiftRef.current = middlewareData.shift;
63
+ return {};
64
+ },
65
+ },
66
+ // size also applies overflow detection via width and height
67
+ (0, react_dom_1.size)({
68
+ // apply overflow detection in reference to the document
69
+ rootBoundary: 'document',
70
+ padding: MARGIN_FROM_DOC_EDGE,
71
+ apply({ reference: referenceRect, height, width }) {
72
+ var _a, _b, _c;
73
+ const paddingX = 2 * MARGIN_FROM_TARGET - (((_a = shiftRef.current) === null || _a === void 0 ? void 0 : _a.x) || 0);
74
+ const paddingY = 2 * MARGIN_FROM_TARGET - (((_b = shiftRef.current) === null || _b === void 0 ? void 0 : _b.y) || 0);
75
+ dimensionRef.current = {
76
+ width: Math.min(referenceRect.width + paddingX, width),
77
+ height: Math.min(referenceRect.height + paddingY, height),
78
+ };
79
+ Object.assign((_c = refs.floating.current) === null || _c === void 0 ? void 0 : _c.style, dimensionRef.current);
80
+ },
81
+ }),
82
+ ],
56
83
  });
57
- (0, use_animation_frame_1.useAnimationFrame)(!!watchMotion && update);
58
- if (!targetRef)
59
- return null;
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)));
84
+ // set target as floating reference
85
+ (0, react_1.useLayoutEffect)(() => {
86
+ reference(targetRef.current);
87
+ }, [targetRef.current]);
88
+ // automatically update on scroll, resize, etc.
89
+ // `watchMotion` will trigger continuous updates using animation frame
90
+ (0, react_1.useEffect)(() => {
91
+ if (!refs.reference.current || !refs.floating.current)
92
+ return () => { };
93
+ return (0, react_dom_1.autoUpdate)(refs.reference.current, refs.floating.current, update, { animationFrame: watchMotion });
94
+ }, [refs.reference.current, refs.floating.current, update, watchMotion]);
95
+ const isReady = x !== null;
96
+ return (react_1.default.createElement("div", { ref: floating, className: (0, classnames_1.default)(className, stylesClass, !isReady && frame_module_scss_1.default.hidden), style: Object.assign(Object.assign(Object.assign({}, style), dimensionRef.current), { position: strategy, top: y !== null && y !== void 0 ? y : '', left: x !== null && x !== void 0 ? x : '' }) }));
61
97
  }
62
98
  exports.Frame = Frame;
63
99
  //# sourceMappingURL=frame.js.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../frame/frame.tsx"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ $border: 2;
2
2
  $padding: 4;
3
3
 
4
4
  .overlayBorder {
5
+ box-sizing: border-box;
5
6
  border: $border * 1px solid var(--bit-highlighter-color, #eebcc9);
6
7
 
7
8
  border-radius: 11px;
@@ -11,6 +12,12 @@ $padding: 4;
11
12
  user-select: none;
12
13
  }
13
14
 
15
+ .hidden {
16
+ // the frame's size is ignored anyways,
17
+ // and so we can use 'display: none' and not 'visibility: hidden'
18
+ display: none;
19
+ }
20
+
14
21
  :export {
15
- offset: -$border - $padding;
22
+ offset: $border + $padding;
16
23
  }
@@ -0,0 +1,19 @@
1
+ import { ReactComponentMetaHolder } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta';
2
+ import { MatchRule, ComponentMatchRule } from '../rule-matcher';
3
+ declare type BubblingOptions = {
4
+ /** filter elements by this rule */
5
+ elementRule?: MatchRule;
6
+ /** filter components by this rule */
7
+ componentRule?: ComponentMatchRule;
8
+ /**
9
+ * continue bubbling when encountering a parent of the same component
10
+ * @default true
11
+ */
12
+ propagateSameParents?: boolean;
13
+ };
14
+ /** go up the dom tree until reaching a react bit component */
15
+ export declare function bubbleToComponent(element: HTMLElement | null, { elementRule, componentRule, propagateSameParents }?: BubblingOptions): {
16
+ element: HTMLElement;
17
+ components: ReactComponentMetaHolder[];
18
+ };
19
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bubbleToComponent = void 0;
4
+ const react_modules_dom_to_react_1 = require("@teambit/react.modules.dom-to-react");
5
+ const react_ui_highlighter_component_metadata_bit_component_meta_1 = require("@teambit/react.ui.highlighter.component-metadata.bit-component-meta");
6
+ const rule_matcher_1 = require("../rule-matcher");
7
+ /** go up the dom tree until reaching a react bit component */
8
+ function bubbleToComponent(element, { elementRule, componentRule, propagateSameParents = true } = {}) {
9
+ let current = bubbleToFirstComponent(element, elementRule, componentRule);
10
+ if (!propagateSameParents)
11
+ return current;
12
+ while (current) {
13
+ const parentElement = current.element.parentElement;
14
+ const parent = bubbleToFirstComponent(parentElement, elementRule, componentRule);
15
+ const primeComponent = current === null || current === void 0 ? void 0 : current.components.slice(-1).pop();
16
+ const parentPrimeComponent = parent === null || parent === void 0 ? void 0 : parent.components.slice(-1).pop();
17
+ if ((primeComponent === null || primeComponent === void 0 ? void 0 : primeComponent[react_ui_highlighter_component_metadata_bit_component_meta_1.componentMetaField].id) !== (parentPrimeComponent === null || parentPrimeComponent === void 0 ? void 0 : parentPrimeComponent[react_ui_highlighter_component_metadata_bit_component_meta_1.componentMetaField].id))
18
+ return current;
19
+ current = parent;
20
+ }
21
+ return undefined;
22
+ }
23
+ exports.bubbleToComponent = bubbleToComponent;
24
+ /** go up the dom tree until reaching a react bit component */
25
+ function bubbleToFirstComponent(element, elementRule, componentRule) {
26
+ for (let current = element; current; current = current.parentElement) {
27
+ current = (0, react_modules_dom_to_react_1.toRootElement)(current);
28
+ if (!current)
29
+ return undefined;
30
+ if ((0, rule_matcher_1.ruleMatcher)(current, elementRule)) {
31
+ const components = (0, react_modules_dom_to_react_1.domToReacts)(current);
32
+ const relevantComponents = components.filter((x) => (0, react_ui_highlighter_component_metadata_bit_component_meta_1.hasComponentMeta)(x) && (0, rule_matcher_1.componentRuleMatcher)({ meta: x[react_ui_highlighter_component_metadata_bit_component_meta_1.componentMetaField] }, componentRule));
33
+ if (relevantComponents.length < 1)
34
+ return undefined;
35
+ return {
36
+ element: current,
37
+ components: relevantComponents,
38
+ };
39
+ }
40
+ }
41
+ return undefined;
42
+ }
43
+ //# sourceMappingURL=bubble-to-component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bubble-to-component.js","sourceRoot":"","sources":["../../hover-highlighter/bubble-to-component.tsx"],"names":[],"mappings":";;;AAAA,oFAAiF;AACjF,oJAI6E;AAC7E,kDAAmG;AAcnG,8DAA8D;AAC9D,SAAgB,iBAAiB,CAC/B,OAA2B,EAC3B,EAAE,WAAW,EAAE,aAAa,EAAE,oBAAoB,GAAG,IAAI,KAAsB,EAAE;IAEjF,IAAI,OAAO,GAAG,sBAAsB,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAC1E,IAAI,CAAC,oBAAoB;QAAE,OAAO,OAAO,CAAC;IAE1C,OAAO,OAAO,EAAE;QACd,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QACpD,MAAM,MAAM,GAAG,sBAAsB,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QAEjF,MAAM,cAAc,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;QAC3D,MAAM,oBAAoB,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;QAEhE,IAAI,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAG,+EAAkB,EAAE,EAAE,OAAK,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAG,+EAAkB,EAAE,EAAE,CAAA;YAAE,OAAO,OAAO,CAAC;QAE9G,OAAO,GAAG,MAAM,CAAC;KAClB;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AApBD,8CAoBC;AAED,8DAA8D;AAC9D,SAAS,sBAAsB,CAC7B,OAA2B,EAC3B,WAAuB,EACvB,aAAkC;IAElC,KAAK,IAAI,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE;QACpE,OAAO,GAAG,IAAA,0CAAa,EAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,IAAI,IAAA,0BAAW,EAAC,OAAO,EAAE,WAAW,CAAC,EAAE;YACrC,MAAM,UAAU,GAAG,IAAA,wCAAW,EAAC,OAAO,CAAC,CAAC;YAExC,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,6EAAgB,EAAC,CAAC,CAAC,IAAI,IAAA,mCAAoB,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC,+EAAkB,CAAC,EAAE,EAAE,aAAa,CAAC,CACrE,CAAC;YAEhC,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YACpD,OAAO;gBACL,OAAO,EAAE,OAAO;gBAChB,UAAU,EAAE,kBAAkB;aAC/B,CAAC;SACH;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,38 @@
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 mock_component_1 = require("../mock-component");
9
+ const bubble_to_component_1 = require("./bubble-to-component");
10
+ it('should find component when starting from a div', () => {
11
+ const { getByText, getByTestId } = (0, react_2.render)(react_1.default.createElement(mock_component_1.MockTarget, { "data-testid": "expected-result" },
12
+ react_1.default.createElement("div", null, "hello world")));
13
+ const rendered = getByText('hello world');
14
+ const result = (0, bubble_to_component_1.bubbleToComponent)(rendered);
15
+ expect(result === null || result === void 0 ? void 0 : result.element).toBe(getByTestId('expected-result'));
16
+ expect(result === null || result === void 0 ? void 0 : result.components).toEqual([mock_component_1.MockTarget]);
17
+ });
18
+ it('should bubble to root component when it renders itself recursively', () => {
19
+ const { getByText, getByTestId } = (0, react_2.render)(react_1.default.createElement(mock_component_1.MockTarget, { "data-testid": "expected-result" },
20
+ react_1.default.createElement(mock_component_1.MockTarget, null,
21
+ react_1.default.createElement(mock_component_1.MockTarget, null,
22
+ react_1.default.createElement("div", null, "hello world")))));
23
+ const rendered = getByText('hello world');
24
+ const result = (0, bubble_to_component_1.bubbleToComponent)(rendered);
25
+ expect(result === null || result === void 0 ? void 0 : result.element).toBe(getByTestId('expected-result'));
26
+ expect(result === null || result === void 0 ? void 0 : result.components).toEqual([mock_component_1.MockTarget]);
27
+ });
28
+ it('should find first component, when parent propagation is disabled', () => {
29
+ const { getByText, getByTestId } = (0, react_2.render)(react_1.default.createElement(mock_component_1.MockTarget, null,
30
+ react_1.default.createElement(mock_component_1.MockTarget, null,
31
+ react_1.default.createElement(mock_component_1.MockTarget, { "data-testid": "expected-result" },
32
+ react_1.default.createElement("div", null, "hello world")))));
33
+ const rendered = getByText('hello world');
34
+ const result = (0, bubble_to_component_1.bubbleToComponent)(rendered, { propagateSameParents: false });
35
+ expect(result === null || result === void 0 ? void 0 : result.element).toBe(getByTestId('expected-result'));
36
+ expect(result === null || result === void 0 ? void 0 : result.components).toEqual([mock_component_1.MockTarget]);
37
+ });
38
+ //# sourceMappingURL=bubble-to-component.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bubble-to-component.spec.js","sourceRoot":"","sources":["../../hover-highlighter/bubble-to-component.spec.tsx"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,kDAAgD;AAChD,sDAA+C;AAC/C,+DAA0D;AAE1D,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;IACxD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAA,cAAM,EACvC,8BAAC,2BAAU,mBAAa,iBAAiB;QACvC,yDAAsB,CACX,CACd,CAAC;IAEF,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,IAAA,uCAAiB,EAAC,QAAQ,CAAC,CAAC;IAE3C,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,2BAAU,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;IAC5E,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAA,cAAM,EACvC,8BAAC,2BAAU,mBAAa,iBAAiB;QACvC,8BAAC,2BAAU;YACT,8BAAC,2BAAU;gBACT,yDAAsB,CACX,CACF,CACF,CACd,CAAC;IAEF,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,IAAA,uCAAiB,EAAC,QAAQ,CAAC,CAAC;IAE3C,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,2BAAU,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;IAC1E,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAA,cAAM,EACvC,8BAAC,2BAAU;QACT,8BAAC,2BAAU;YACT,8BAAC,2BAAU,mBAAa,iBAAiB;gBACvC,yDAAsB,CACX,CACF,CACF,CACd,CAAC;IAEF,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,IAAA,uCAAiB,EAAC,QAAQ,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;IAE5E,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,2BAAU,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC"}
@@ -1,6 +1,10 @@
1
1
  import React from 'react';
2
- import { HighlightTarget } from '../element-highlighter';
2
+ import { ComponentMetaHolder } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta';
3
3
  import { MatchRule, ComponentMatchRule } from '../rule-matcher';
4
+ declare type HighlightTarget = {
5
+ element: HTMLElement;
6
+ components: ComponentMetaHolder[];
7
+ };
4
8
  export declare type useHoverHighlighterOptions = {
5
9
  debounceDuration: number;
6
10
  scopeClass: string;
@@ -18,3 +22,4 @@ export declare function useHoverHighlighter<T extends HTMLElement = HTMLElement>
18
22
  onMouseOver?: undefined;
19
23
  onMouseLeave?: undefined;
20
24
  };
25
+ export {};
@@ -3,11 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useHoverHighlighter = void 0;
4
4
  const react_1 = require("react");
5
5
  const use_debounce_1 = require("use-debounce");
6
- const react_modules_dom_to_react_1 = require("@teambit/react.modules.dom-to-react");
7
6
  const react_ui_hover_selector_1 = require("@teambit/react.ui.hover-selector");
8
- const react_ui_highlighter_component_metadata_bit_component_meta_1 = require("@teambit/react.ui.highlighter.component-metadata.bit-component-meta");
9
7
  const ignore_highlighter_1 = require("../ignore-highlighter");
10
- const rule_matcher_1 = require("../rule-matcher");
8
+ const bubble_to_component_1 = require("./bubble-to-component");
11
9
  /** fires onChange when targeting a new component */
12
10
  function useHoverHighlighter(onChange, props = {}, { debounceDuration, scopeClass, disabled, rule, componentRule }) {
13
11
  const { handleElement } = useHoverHandler({ onChange, scopeClass, debounceDuration, disabled, rule, componentRule });
@@ -26,7 +24,7 @@ function useHoverHandler({ onChange, scopeClass = '', debounceDuration, disabled
26
24
  // skip DOM trees having 'data-ignore-component-highlight'
27
25
  if (element.closest(`.${scopeClass} ${ignore_highlighter_1.excludeHighlighterSelector}`))
28
26
  return;
29
- const result = bubbleToBitComponent(element, rule, componentRule);
27
+ const result = (0, bubble_to_component_1.bubbleToComponent)(element, { elementRule: rule, componentRule });
30
28
  if (!result)
31
29
  return;
32
30
  onChange({
@@ -42,23 +40,4 @@ function useHoverHandler({ onChange, scopeClass = '', debounceDuration, disabled
42
40
  }, [disabled, handleElement]);
43
41
  return { handleElement };
44
42
  }
45
- /** go up the dom tree until reaching a react bit component */
46
- function bubbleToBitComponent(element, elementRule, componentRule) {
47
- for (let current = element; current; current = current.parentElement) {
48
- current = (0, react_modules_dom_to_react_1.toRootElement)(current);
49
- if (!current)
50
- return undefined;
51
- if ((0, rule_matcher_1.ruleMatcher)(current, elementRule)) {
52
- const components = (0, react_modules_dom_to_react_1.domToReacts)(current);
53
- const relevantComponents = components.filter((x) => (0, react_ui_highlighter_component_metadata_bit_component_meta_1.hasComponentMeta)(x) && (0, rule_matcher_1.componentRuleMatcher)({ meta: x[react_ui_highlighter_component_metadata_bit_component_meta_1.componentMetaField] }, componentRule));
54
- if (relevantComponents.length < 1)
55
- return undefined;
56
- return {
57
- element: current,
58
- components: relevantComponents,
59
- };
60
- }
61
- }
62
- return undefined;
63
- }
64
43
  //# sourceMappingURL=use-hover-highlighter.js.map