@teambit/react.ui.component-highlighter 0.0.489 → 0.0.490

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 (32) hide show
  1. package/component-highlighter.docs.md +9 -0
  2. package/dist/component-highlighter.docs.md +9 -0
  3. package/dist/hover-highlighter/hover-highlighter.compositions.d.ts +1 -0
  4. package/dist/hover-highlighter/hover-highlighter.d.ts +1 -0
  5. package/dist/hover-highlighter/use-hover-highlighter.d.ts +8 -5
  6. package/dist/hover-highlighter/use-hover-highlighter.js +17 -14
  7. package/dist/hover-highlighter/use-hover-highlighter.js.map +1 -1
  8. package/dist/hybrid-highligher/hybrid-highlighter.d.ts +3 -2
  9. package/dist/hybrid-highligher/hybrid-highlighter.js +3 -1
  10. package/dist/hybrid-highligher/hybrid-highlighter.js.map +1 -1
  11. package/dist/label/component-label/component-bubble.d.ts +1 -0
  12. package/dist/label/component-label/component-label.d.ts +1 -0
  13. package/dist/label/component-label/scope-bubble.d.ts +1 -0
  14. package/dist/label/default-label/default-label.d.ts +1 -0
  15. package/dist/multi-highlighter/multi-highlighter.composition.d.ts +2 -0
  16. package/dist/multi-highlighter/multi-highlighter.composition.js +16 -3
  17. package/dist/multi-highlighter/multi-highlighter.composition.js.map +1 -1
  18. package/dist/multi-highlighter/multi-highlighter.d.ts +1 -0
  19. package/dist/multi-highlighter/use-multi-highlighter.d.ts +4 -2
  20. package/dist/multi-highlighter/use-multi-highlighter.js +4 -2
  21. package/dist/multi-highlighter/use-multi-highlighter.js.map +1 -1
  22. package/dist/rule-matcher.d.ts +6 -0
  23. package/dist/rule-matcher.js +19 -2
  24. package/dist/rule-matcher.js.map +1 -1
  25. package/hover-highlighter/use-hover-highlighter.tsx +35 -18
  26. package/hybrid-highligher/hybrid-highlighter.tsx +5 -1
  27. package/multi-highlighter/multi-highlighter.composition.tsx +18 -2
  28. package/multi-highlighter/use-multi-highlighter.tsx +6 -2
  29. package/package-tar/teambit-react.ui.component-highlighter-0.0.490.tgz +0 -0
  30. package/package.json +10 -10
  31. package/rule-matcher.tsx +27 -1
  32. package/package-tar/teambit-react.ui.component-highlighter-0.0.489.tgz +0 -0
@@ -153,6 +153,15 @@ For example:
153
153
  </ComponentHighlighter>
154
154
  ```
155
155
 
156
+ You can also filter by component id, using the `componentRule` prop:
157
+
158
+ ```tsx
159
+ <ComponentHighlighter componentRule="teambit.design/ui/icon-button">
160
+ <Paragraph>will not be highlighted</Paragraph>
161
+ <Button>this will be highlighted</Button>
162
+ </ComponentHighlighter>
163
+ ```
164
+
156
165
  ## Customization
157
166
 
158
167
  Use these CSS variables to edit the highlighter color
@@ -153,6 +153,15 @@ For example:
153
153
  </ComponentHighlighter>
154
154
  ```
155
155
 
156
+ You can also filter by component id, using the `componentRule` prop:
157
+
158
+ ```tsx
159
+ <ComponentHighlighter componentRule="teambit.design/ui/icon-button">
160
+ <Paragraph>will not be highlighted</Paragraph>
161
+ <Button>this will be highlighted</Button>
162
+ </ComponentHighlighter>
163
+ ```
164
+
156
165
  ## Customization
157
166
 
158
167
  Use these CSS variables to edit the highlighter color
@@ -1 +1,2 @@
1
+ /// <reference types="react" />
1
2
  export declare const ShowWhenHovering: () => JSX.Element;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { HybridHighlighterProps } from '../hybrid-highligher';
2
3
  export declare type HoverHighlighterProps = Omit<HybridHighlighterProps, 'mode'>;
3
4
  export declare function HoverHighlighter({ ...props }: HoverHighlighterProps): JSX.Element;
@@ -1,17 +1,20 @@
1
1
  import React from 'react';
2
2
  import { HighlightTarget } from '../element-highlighter';
3
- import { MatchRule } from '../rule-matcher';
3
+ import { MatchRule, ComponentMatchRule } from '../rule-matcher';
4
4
  export declare type useHoverHighlighterOptions = {
5
5
  debounceDuration: number;
6
6
  scopeClass: string;
7
7
  disabled?: boolean;
8
+ /** filter highlighter targets by this query selector. (May be a more complex object in the future) */
8
9
  rule?: MatchRule;
10
+ /** filter targets by this component match rule */
11
+ componentRule?: ComponentMatchRule;
9
12
  };
10
13
  /** fires onChange when targeting a new component */
11
- export declare function useHoverHighlighter<T extends HTMLElement = HTMLElement>(onChange: (target?: HighlightTarget) => void, props: React.HTMLAttributes<T>, { debounceDuration, scopeClass, disabled, rule }: useHoverHighlighterOptions): {
12
- onMouseOver: (event: React.MouseEvent<T, MouseEvent>) => void;
13
- onMouseLeave: (event: React.MouseEvent<T, MouseEvent>) => void;
14
- } | {
14
+ export declare function useHoverHighlighter<T extends HTMLElement = HTMLElement>(onChange: (target?: HighlightTarget) => void, props: React.HTMLAttributes<T>, { debounceDuration, scopeClass, disabled, rule, componentRule }: useHoverHighlighterOptions): {
15
15
  onMouseOver?: undefined;
16
16
  onMouseLeave?: undefined;
17
+ } | {
18
+ onMouseOver: (event: React.MouseEvent<T, MouseEvent>) => void;
19
+ onMouseLeave: (event: React.MouseEvent<T, MouseEvent>) => void;
17
20
  };
@@ -9,13 +9,13 @@ const react_ui_highlighter_component_metadata_bit_component_meta_1 = require("@t
9
9
  const ignore_highlighter_1 = require("../ignore-highlighter");
10
10
  const rule_matcher_1 = require("../rule-matcher");
11
11
  /** fires onChange when targeting a new component */
12
- function useHoverHighlighter(onChange, props = {}, { debounceDuration, scopeClass, disabled, rule }) {
13
- const { handleElement } = useHoverHandler({ onChange, scopeClass, debounceDuration, disabled, rule });
12
+ function useHoverHighlighter(onChange, props = {}, { debounceDuration, scopeClass, disabled, rule, componentRule }) {
13
+ const { handleElement } = useHoverHandler({ onChange, scopeClass, debounceDuration, disabled, rule, componentRule });
14
14
  const handlers = (0, react_ui_hover_selector_1.useHoverSelection)(disabled ? undefined : handleElement, props);
15
15
  return handlers;
16
16
  }
17
17
  exports.useHoverHighlighter = useHoverHighlighter;
18
- function useHoverHandler({ onChange, scopeClass = '', debounceDuration, disabled, rule }) {
18
+ function useHoverHandler({ onChange, scopeClass = '', debounceDuration, disabled, rule, componentRule, }) {
19
19
  // debounced method is ref'ed, so no need for useCallback
20
20
  const _handleElement = (element) => {
21
21
  // clear highlighter at the edges:
@@ -26,7 +26,7 @@ function useHoverHandler({ onChange, scopeClass = '', debounceDuration, disabled
26
26
  // skip DOM trees having 'data-ignore-component-highlight'
27
27
  if (element.closest(`.${scopeClass} ${ignore_highlighter_1.excludeHighlighterSelector}`))
28
28
  return;
29
- const result = bubbleToBitComponent(element, rule ? (current) => (0, rule_matcher_1.ruleMatcher)(current, rule) : undefined);
29
+ const result = bubbleToBitComponent(element, rule, componentRule);
30
30
  if (!result)
31
31
  return;
32
32
  onChange({
@@ -46,19 +46,22 @@ function useHoverHandler({ onChange, scopeClass = '', debounceDuration, disabled
46
46
  return { handleElement };
47
47
  }
48
48
  /** go up the dom tree until reaching a react bit component */
49
- function bubbleToBitComponent(element, filter) {
49
+ function bubbleToBitComponent(element, elementRule, componentRule) {
50
50
  for (let current = element; current; current = current.parentElement) {
51
51
  current = (0, react_modules_dom_to_react_1.toRootElement)(current);
52
- if (!current || (filter === null || filter === void 0 ? void 0 : filter(current)) === false)
52
+ if (!current)
53
53
  return undefined;
54
- const component = (0, react_modules_dom_to_react_1.domToReact)(current);
55
- if ((0, react_ui_highlighter_component_metadata_bit_component_meta_1.hasComponentMeta)(component)) {
56
- const meta = component.__bit_component;
57
- return {
58
- element: current,
59
- component,
60
- meta,
61
- };
54
+ if ((0, rule_matcher_1.ruleMatcher)(current, elementRule)) {
55
+ const component = (0, react_modules_dom_to_react_1.domToReact)(current);
56
+ if ((0, react_ui_highlighter_component_metadata_bit_component_meta_1.hasComponentMeta)(component)) {
57
+ const meta = component.__bit_component;
58
+ if ((0, rule_matcher_1.componentRuleMatcher)({ meta }, componentRule))
59
+ return {
60
+ element: current,
61
+ component,
62
+ meta,
63
+ };
64
+ }
62
65
  }
63
66
  }
64
67
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"use-hover-highlighter.js","sourceRoot":"","sources":["../../hover-highlighter/use-hover-highlighter.tsx"],"names":[],"mappings":";;;AAAA,iCAAyC;AACzC,+CAAoD;AACpD,oFAAgF;AAChF,8EAAqE;AACrE,oJAAuG;AAEvG,8DAAmE;AAEnE,kDAAyD;AASzD,oDAAoD;AACpD,SAAgB,mBAAmB,CACjC,QAA4C,EAC5C,QAAiC,EAAE,EACnC,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAA8B;IAE5E,MAAM,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtG,MAAM,QAAQ,GAAG,IAAA,2CAAiB,EAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAEhF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAVD,kDAUC;AAUD,SAAS,eAAe,CAAC,EAAE,QAAQ,EAAE,UAAU,GAAG,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAA4B;IAChH,yDAAyD;IACzD,MAAM,cAAc,GAAG,CAAC,OAA2B,EAAE,EAAE;QACrD,kCAAkC;QAClC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,kCAAkC,CAAC,EAAE;YACxE,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpB,OAAO;SACR;QAED,0DAA0D;QAC1D,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,UAAU,IAAI,+CAA0B,EAAE,CAAC;YAAE,OAAO;QAE5E,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,0BAAW,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACzG,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,QAAQ,CAAC;YACP,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;YAClB,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;YAC1B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK;SACtC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,IAAA,mCAAoB,EAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAE7E,uBAAuB;IACvB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,QAAQ;YAAE,aAAa,CAAC,MAAM,EAAE,CAAC;IACvC,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAE9B,OAAO,EAAE,aAAa,EAAE,CAAC;AAC3B,CAAC;AAED,8DAA8D;AAC9D,SAAS,oBAAoB,CAAC,OAA2B,EAAE,MAAuC;IAChG,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,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,OAAO,CAAC,MAAK,KAAK;YAAE,OAAO,SAAS,CAAC;QAE9D,MAAM,SAAS,GAAG,IAAA,uCAAU,EAAC,OAAO,CAAC,CAAC;QAEtC,IAAI,IAAA,6EAAgB,EAAC,SAAS,CAAC,EAAE;YAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,eAAe,CAAC;YAEvC,OAAO;gBACL,OAAO,EAAE,OAAO;gBAChB,SAAS;gBACT,IAAI;aACL,CAAC;SACH;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"use-hover-highlighter.js","sourceRoot":"","sources":["../../hover-highlighter/use-hover-highlighter.tsx"],"names":[],"mappings":";;;AAAA,iCAAyC;AACzC,+CAAoD;AACpD,oFAAgF;AAChF,8EAAqE;AACrE,oJAAuG;AAEvG,8DAAmE;AAEnE,kDAAmG;AAYnG,oDAAoD;AACpD,SAAgB,mBAAmB,CACjC,QAA4C,EAC5C,QAAiC,EAAE,EACnC,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAA8B;IAE3F,MAAM,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;IAErH,MAAM,QAAQ,GAAG,IAAA,2CAAiB,EAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAEhF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAVD,kDAUC;AAWD,SAAS,eAAe,CAAC,EACvB,QAAQ,EACR,UAAU,GAAG,EAAE,EACf,gBAAgB,EAChB,QAAQ,EACR,IAAI,EACJ,aAAa,GACY;IACzB,yDAAyD;IACzD,MAAM,cAAc,GAAG,CAAC,OAA2B,EAAE,EAAE;QACrD,kCAAkC;QAClC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,kCAAkC,CAAC,EAAE;YACxE,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpB,OAAO;SACR;QAED,0DAA0D;QAC1D,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,UAAU,IAAI,+CAA0B,EAAE,CAAC;YAAE,OAAO;QAE5E,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,QAAQ,CAAC;YACP,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;YAClB,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;YAC1B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK;SACtC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,IAAA,mCAAoB,EAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAE7E,uBAAuB;IACvB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,QAAQ;YAAE,aAAa,CAAC,MAAM,EAAE,CAAC;IACvC,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAE9B,OAAO,EAAE,aAAa,EAAE,CAAC;AAC3B,CAAC;AAED,8DAA8D;AAC9D,SAAS,oBAAoB,CAC3B,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,SAAS,GAAG,IAAA,uCAAU,EAAC,OAAO,CAAC,CAAC;YAEtC,IAAI,IAAA,6EAAgB,EAAC,SAAS,CAAC,EAAE;gBAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,eAAe,CAAC;gBAEvC,IAAI,IAAA,mCAAoB,EAAC,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC;oBAC/C,OAAO;wBACL,OAAO,EAAE,OAAO;wBAChB,SAAS;wBACT,IAAI;qBACL,CAAC;aACL;SACF;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import React, { CSSProperties } from 'react';
2
2
  import { Placement, HighlightClasses } from '../element-highlighter';
3
- import type { MatchRule } from '../rule-matcher';
3
+ import type { MatchRule, ComponentMatchRule } from '../rule-matcher';
4
4
  export interface HybridHighlighterProps extends React.HTMLAttributes<HTMLDivElement> {
5
5
  /** stop all highlighting and drop listeners */
6
6
  disabled?: boolean;
@@ -20,6 +20,7 @@ export interface HybridHighlighterProps extends React.HTMLAttributes<HTMLDivElem
20
20
  watchMotion?: boolean;
21
21
  /** filter highlighter targets by this query selector. (May be a more complex object in the future) */
22
22
  rule?: MatchRule;
23
+ componentRule?: ComponentMatchRule;
23
24
  /** set the behavior of the highlighter.
24
25
  * `disabled` - stops highlighting.
25
26
  * `allChildren` - highlights all components rendered under children
@@ -31,4 +32,4 @@ export interface HybridHighlighterProps extends React.HTMLAttributes<HTMLDivElem
31
32
  bgColorActive?: string;
32
33
  }
33
34
  /** automatically highlight components on hover */
34
- export declare function HybridHighlighter({ disabled, mode, debounceSelection, watchMotion, placement, rule, classes, highlightStyle, className, style, bgColor, bgColorHover, bgColorActive, children, ...rest }: HybridHighlighterProps): JSX.Element;
35
+ export declare function HybridHighlighter({ disabled, mode, debounceSelection, watchMotion, placement, rule, componentRule, classes, highlightStyle, className, style, bgColor, bgColorHover, bgColorActive, children, ...rest }: HybridHighlighterProps): JSX.Element;
@@ -42,7 +42,7 @@ const element_highlighter_1 = require("../element-highlighter");
42
42
  const use_multi_highlighter_1 = require("../multi-highlighter/use-multi-highlighter");
43
43
  /** automatically highlight components on hover */
44
44
  function HybridHighlighter(_a) {
45
- var { disabled, mode = 'hover', debounceSelection = 80, watchMotion = true, placement, rule, classes, highlightStyle, className, style, bgColor, bgColorHover, bgColorActive, children } = _a, rest = __rest(_a, ["disabled", "mode", "debounceSelection", "watchMotion", "placement", "rule", "classes", "highlightStyle", "className", "style", "bgColor", "bgColorHover", "bgColorActive", "children"]);
45
+ var { disabled, mode = 'hover', debounceSelection = 80, watchMotion = true, placement, rule, componentRule, classes, highlightStyle, className, style, bgColor, bgColorHover, bgColorActive, children } = _a, rest = __rest(_a, ["disabled", "mode", "debounceSelection", "watchMotion", "placement", "rule", "componentRule", "classes", "highlightStyle", "className", "style", "bgColor", "bgColorHover", "bgColorActive", "children"]);
46
46
  const ref = (0, react_1.createRef)();
47
47
  const [targets, setTarget] = (0, react_1.useState)({});
48
48
  const scopeClass = (0, react_1.useRef)(`hl-scope-${(0, uuid_1.v4)()}`).current;
@@ -57,6 +57,7 @@ function HybridHighlighter(_a) {
57
57
  scopeClass,
58
58
  disabled: disabled || mode !== 'hover',
59
59
  rule,
60
+ componentRule
60
61
  });
61
62
  (0, use_multi_highlighter_1.useMultiHighlighter)({
62
63
  onChange: setTarget,
@@ -64,6 +65,7 @@ function HybridHighlighter(_a) {
64
65
  scopeClass,
65
66
  disabled: disabled || mode !== 'allChildren',
66
67
  rule,
68
+ componentRule
67
69
  });
68
70
  const _styles = (0, react_1.useMemo)(() => (Object.assign({ '--bit-highlighter-color': bgColor, '--bit-highlighter-color-hover': bgColorHover, '--bit-highlighter-color-active': bgColorActive }, style)), [bgColor, bgColorHover, bgColorActive, style]);
69
71
  return (react_1.default.createElement("div", Object.assign({ ref: ref }, rest, handlers, { style: _styles, className: (0, classnames_1.default)(className, scopeClass), "data-nullify-component-highlight": true }),
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid-highlighter.js","sourceRoot":"","sources":["../../hybrid-highligher/hybrid-highlighter.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA8F;AAC9F,4DAAoC;AACpC,+BAA0B;AAE1B,4DAA2D;AAC3D,gEAA0G;AAC1G,sFAAiF;AAmCjF,kDAAkD;AAClD,SAAgB,iBAAiB,CAAC,EAiBT;QAjBS,EAChC,QAAQ,EACR,IAAI,GAAG,OAAO,EACd,iBAAiB,GAAG,EAAE,EACtB,WAAW,GAAG,IAAI,EAClB,SAAS,EACT,IAAI,EAEJ,OAAO,EACP,cAAc,EACd,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,aAAa,EACb,QAAQ,OAEe,EADpB,IAAI,cAhByB,wLAiBjC,CADQ;IAEP,MAAM,GAAG,GAAG,IAAA,iBAAS,GAAkB,CAAC;IACxC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAkC,EAAE,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,YAAY,IAAA,SAAE,GAAE,EAAE,CAAC,CAAC,OAAO,CAAC;IACtD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAEtD,8BAA8B;IAC9B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,QAAQ;YAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,QAAQ,GAAG,IAAA,uCAAmB,EAClC,CAAC,UAAU,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC3E,IAAI,EACJ;QACE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACpD,UAAU;QACV,QAAQ,EAAE,QAAQ,IAAI,IAAI,KAAK,OAAO;QACtC,IAAI;KACL,CACF,CAAC;IAEF,IAAA,2CAAmB,EAAC;QAClB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,GAAG;QACb,UAAU;QACV,QAAQ,EAAE,QAAQ,IAAI,IAAI,KAAK,aAAa;QAC5C,IAAI;KACL,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAA,eAAO,EACrB,GAAG,EAAE,CAAC,iBACJ,yBAAyB,EAAE,OAAO,EAClC,+BAA+B,EAAE,YAAY,EAC7C,gCAAgC,EAAE,aAAa,IAC5C,KAAK,EACR,EACF,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,CAAC,CAC9C,CAAC;IAEF,OAAO,CACL,qDACE,GAAG,EAAE,GAAG,IACJ,IAAI,EACJ,QAAQ,IACZ,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,IAAA,oBAAU,EAAC,SAAS,EAAE,UAAU,CAAC;QAG3C,QAAQ;QAKR,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAC9C,8BAAC,wCAAkB,IACjB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,GACxB,CACH,CAAC,CACE,CACP,CAAC;AACJ,CAAC;AAnFD,8CAmFC"}
1
+ {"version":3,"file":"hybrid-highlighter.js","sourceRoot":"","sources":["../../hybrid-highligher/hybrid-highlighter.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA8F;AAC9F,4DAAoC;AACpC,+BAA0B;AAE1B,4DAA2D;AAC3D,gEAA0G;AAC1G,sFAAiF;AAoCjF,kDAAkD;AAClD,SAAgB,iBAAiB,CAAC,EAkBT;QAlBS,EAChC,QAAQ,EACR,IAAI,GAAG,OAAO,EACd,iBAAiB,GAAG,EAAE,EACtB,WAAW,GAAG,IAAI,EAClB,SAAS,EACT,IAAI,EACJ,aAAa,EAEb,OAAO,EACP,cAAc,EACd,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,aAAa,EACb,QAAQ,OAEe,EADpB,IAAI,cAjByB,yMAkBjC,CADQ;IAEP,MAAM,GAAG,GAAG,IAAA,iBAAS,GAAkB,CAAC;IACxC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAkC,EAAE,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,YAAY,IAAA,SAAE,GAAE,EAAE,CAAC,CAAC,OAAO,CAAC;IACtD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAEtD,8BAA8B;IAC9B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,QAAQ;YAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,QAAQ,GAAG,IAAA,uCAAmB,EAClC,CAAC,UAAU,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC3E,IAAI,EACJ;QACE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACpD,UAAU;QACV,QAAQ,EAAE,QAAQ,IAAI,IAAI,KAAK,OAAO;QACtC,IAAI;QACJ,aAAa;KACd,CACF,CAAC;IAEF,IAAA,2CAAmB,EAAC;QAClB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,GAAG;QACb,UAAU;QACV,QAAQ,EAAE,QAAQ,IAAI,IAAI,KAAK,aAAa;QAC5C,IAAI;QACJ,aAAa;KACd,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAA,eAAO,EACrB,GAAG,EAAE,CAAC,iBACJ,yBAAyB,EAAE,OAAO,EAClC,+BAA+B,EAAE,YAAY,EAC7C,gCAAgC,EAAE,aAAa,IAC5C,KAAK,EACR,EACF,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,CAAC,CAC9C,CAAC;IAEF,OAAO,CACL,qDACE,GAAG,EAAE,GAAG,IACJ,IAAI,EACJ,QAAQ,IACZ,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,IAAA,oBAAU,EAAC,SAAS,EAAE,UAAU,CAAC;QAG3C,QAAQ;QAKR,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAC9C,8BAAC,wCAAkB,IACjB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,GACxB,CACH,CAAC,CACE,CACP,CAAC;AACJ,CAAC;AAtFD,8CAsFC"}
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { ComponentID } from '@teambit/component-id';
2
3
  import { LinkProps } from '@teambit/base-ui.routing.native-link';
3
4
  export interface ComponentBubbleProps extends LinkProps {
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { CardProps } from '@teambit/base-ui.surfaces.card';
2
3
  import type { ComponentID } from '@teambit/component-id';
3
4
  export interface ComponentLabelProps extends CardProps {
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { ComponentID } from '@teambit/component-id';
2
3
  import { LinkProps } from '@teambit/base-ui.routing.native-link';
3
4
  export interface ScopeBubbleProps extends LinkProps {
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { CardProps } from '@teambit/base-ui.surfaces.card';
2
3
  export interface DefaultLabelProps extends CardProps {
3
4
  href?: string;
@@ -1,4 +1,6 @@
1
+ /// <reference types="react" />
1
2
  export declare const MultiHighlighterPreview: () => JSX.Element;
2
3
  export declare const MultiHighlighterWithCustomColors: () => JSX.Element;
3
4
  export declare const MultiHighlighterInsideIgnore: () => JSX.Element;
4
5
  export declare const MultiHighlighterWithRule: () => JSX.Element;
6
+ export declare const MultiHighlighterWithComponentRule: () => JSX.Element;
@@ -3,10 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.MultiHighlighterWithRule = exports.MultiHighlighterInsideIgnore = exports.MultiHighlighterWithCustomColors = exports.MultiHighlighterPreview = void 0;
6
+ exports.MultiHighlighterWithComponentRule = exports.MultiHighlighterWithRule = exports.MultiHighlighterInsideIgnore = exports.MultiHighlighterWithCustomColors = exports.MultiHighlighterPreview = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  // import { EnterpriseOffering } from '@teambit/evangelist.pages.enterprise-offering';
9
9
  const react_ui_highlighter_component_metadata_bit_component_meta_1 = require("@teambit/react.ui.highlighter.component-metadata.bit-component-meta");
10
+ const design_ui_icon_button_1 = require("@teambit/design.ui.icon-button");
10
11
  const ignore_highlighter_1 = require("../ignore-highlighter");
11
12
  const multi_highlighter_1 = require("./multi-highlighter");
12
13
  const MultiHighlighterPreview = () => {
@@ -45,7 +46,7 @@ const MultiHighlighterInsideIgnore = () => {
45
46
  };
46
47
  exports.MultiHighlighterInsideIgnore = MultiHighlighterInsideIgnore;
47
48
  const MultiHighlighterWithRule = () => {
48
- return (react_1.default.createElement(multi_highlighter_1.MultiHighlighter, { rule: "#someSubTree *" },
49
+ return (react_1.default.createElement(multi_highlighter_1.MultiHighlighter, { rule: "#someSubTree *", style: { minWidth: 200 } },
49
50
  react_1.default.createElement("br", null),
50
51
  react_1.default.createElement("br", null),
51
52
  react_1.default.createElement("br", null),
@@ -54,9 +55,21 @@ const MultiHighlighterWithRule = () => {
54
55
  react_1.default.createElement("br", null),
55
56
  react_1.default.createElement("br", null),
56
57
  react_1.default.createElement("div", { id: "someSubTree" },
57
- react_1.default.createElement(react_ui_highlighter_component_metadata_bit_component_meta_1.MockedComponentWithMeta, null, "this will be highlighted"))));
58
+ react_1.default.createElement(react_ui_highlighter_component_metadata_bit_component_meta_1.MockedComponentWithMeta, null, "highlighted because of element rule"))));
58
59
  };
59
60
  exports.MultiHighlighterWithRule = MultiHighlighterWithRule;
61
+ const MultiHighlighterWithComponentRule = () => {
62
+ return (react_1.default.createElement(multi_highlighter_1.MultiHighlighter, { componentRule: "teambit.design/ui/icon-button" },
63
+ react_1.default.createElement("br", null),
64
+ react_1.default.createElement("br", null),
65
+ react_1.default.createElement("br", null),
66
+ react_1.default.createElement(react_ui_highlighter_component_metadata_bit_component_meta_1.MockedComponentWithMeta, null, "no highlighter"),
67
+ react_1.default.createElement("br", null),
68
+ react_1.default.createElement("br", null),
69
+ react_1.default.createElement("br", null),
70
+ react_1.default.createElement(design_ui_icon_button_1.IconButton, null, "highlighted because of component rule")));
71
+ };
72
+ exports.MultiHighlighterWithComponentRule = MultiHighlighterWithComponentRule;
60
73
  // export const HighlightingAllElementsInTheEnterprisePage = () => {
61
74
  // return (
62
75
  // <MultiHighlighter>
@@ -1 +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,8DAA2D;AAC3D,2DAAuD;AAEhD,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC1C,OAAO,CACL,8BAAC,oCAAgB,IAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;QACrD,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,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EACtD,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;AAEK,MAAM,4BAA4B,GAAG,GAAG,EAAE;IAC/C,OAAO,CACL,8BAAC,uCAAkB;QACjB,8BAAC,oCAAgB;;YACiC,4CAAO,sBAAsB,CAAQ;YACrF,yCAAM;;YAEN,yCAAM;YACN,yCAAM;YACN,yCAAM;YACN,8BAAC,oFAAuB,qBAAqC;YAC7D,yCAAM;YACN,yCAAM;YACN,yCAAM;YACN,8BAAC,oFAAuB,oBAAoC,CAC3C,CACA,CACtB,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,4BAA4B,gCAkBvC;AAEK,MAAM,wBAAwB,GAAG,GAAG,EAAE;IAC3C,OAAO,CACL,8BAAC,oCAAgB,IAAC,IAAI,EAAC,gBAAgB;QACrC,yCAAM;QACN,yCAAM;QACN,yCAAM;QACN,8BAAC,oFAAuB,yBAAyC;QACjE,yCAAM;QACN,yCAAM;QACN,yCAAM;QACN,uCAAK,EAAE,EAAC,aAAa;YACnB,8BAAC,oFAAuB,mCAAmD,CACvE,CACW,CACpB,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,wBAAwB,4BAenC;AAEF,oEAAoE;AACpE,aAAa;AACb,yBAAyB;AACzB,uDAAuD;AACvD,0BAA0B;AAC1B,OAAO;AACP,KAAK"}
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,0EAA4D;AAC5D,8DAA2D;AAC3D,2DAAuD;AAEhD,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC1C,OAAO,CACL,8BAAC,oCAAgB,IAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;QACrD,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,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EACtD,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;AAEK,MAAM,4BAA4B,GAAG,GAAG,EAAE;IAC/C,OAAO,CACL,8BAAC,uCAAkB;QACjB,8BAAC,oCAAgB;;YACiC,4CAAO,sBAAsB,CAAQ;YACrF,yCAAM;;YAEN,yCAAM;YACN,yCAAM;YACN,yCAAM;YACN,8BAAC,oFAAuB,qBAAqC;YAC7D,yCAAM;YACN,yCAAM;YACN,yCAAM;YACN,8BAAC,oFAAuB,oBAAoC,CAC3C,CACA,CACtB,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,4BAA4B,gCAkBvC;AAEK,MAAM,wBAAwB,GAAG,GAAG,EAAE;IAC3C,OAAO,CACL,8BAAC,oCAAgB,IAAC,IAAI,EAAC,gBAAgB,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;QAC9D,yCAAM;QACN,yCAAM;QACN,yCAAM;QACN,8BAAC,oFAAuB,yBAAyC;QACjE,yCAAM;QACN,yCAAM;QACN,yCAAM;QACN,uCAAK,EAAE,EAAC,aAAa;YACnB,8BAAC,oFAAuB,8CAA8D,CAClF,CACW,CACpB,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,wBAAwB,4BAenC;AAEK,MAAM,iCAAiC,GAAG,GAAG,EAAE;IACpD,OAAO,CACL,8BAAC,oCAAgB,IAAC,aAAa,EAAC,+BAA+B;QAC7D,yCAAM;QACN,yCAAM;QACN,yCAAM;QACN,8BAAC,oFAAuB,yBAAyC;QACjE,yCAAM;QACN,yCAAM;QACN,yCAAM;QACN,8BAAC,kCAAU,gDAAmD,CAC7C,CACpB,CAAC;AACJ,CAAC,CAAC;AAbW,QAAA,iCAAiC,qCAa5C;AAEF,oEAAoE;AACpE,aAAa;AACb,yBAAyB;AACzB,uDAAuD;AACvD,0BAA0B;AAC1B,OAAO;AACP,KAAK"}
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { HybridHighlighterProps } from '../hybrid-highligher';
2
3
  export declare type MultiHighlighterProps = Omit<HybridHighlighterProps, 'mode'>;
3
4
  export declare function MultiHighlighter({ watchMotion, ...props }: MultiHighlighterProps): JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import { RefObject } from 'react';
2
2
  import { HighlightTarget } from '../element-highlighter';
3
- import { MatchRule } from '../rule-matcher';
3
+ import { MatchRule, ComponentMatchRule } from '../rule-matcher';
4
4
  declare type useMultiHighlighterProps = {
5
5
  onChange: (highlighterTargets: Record<string, HighlightTarget>) => void;
6
6
  disabled?: boolean;
@@ -8,6 +8,8 @@ declare type useMultiHighlighterProps = {
8
8
  scopeClass?: string;
9
9
  /** filter highlighter targets by this query selector. (May be a more complex object in the future) */
10
10
  rule?: MatchRule;
11
+ /** filter targets by this component match rule */
12
+ componentRule?: ComponentMatchRule;
11
13
  };
12
- export declare function useMultiHighlighter({ onChange, disabled, scopeRef, scopeClass: scopeSelector, rule, }: useMultiHighlighterProps): void;
14
+ export declare function useMultiHighlighter({ onChange, disabled, scopeRef, scopeClass: scopeSelector, rule, componentRule, }: useMultiHighlighterProps): void;
13
15
  export {};
@@ -10,7 +10,7 @@ const react_modules_dom_to_react_1 = require("@teambit/react.modules.dom-to-reac
10
10
  const react_ui_highlighter_component_metadata_bit_component_meta_1 = require("@teambit/react.ui.highlighter.component-metadata.bit-component-meta");
11
11
  const ignore_highlighter_1 = require("../ignore-highlighter");
12
12
  const rule_matcher_1 = require("../rule-matcher");
13
- function useMultiHighlighter({ onChange, disabled, scopeRef, scopeClass: scopeSelector = '', rule, }) {
13
+ function useMultiHighlighter({ onChange, disabled, scopeRef, scopeClass: scopeSelector = '', rule, componentRule, }) {
14
14
  (0, react_1.useEffect)(() => {
15
15
  const nextTargets = {};
16
16
  const scopeElement = scopeRef.current;
@@ -29,8 +29,10 @@ function useMultiHighlighter({ onChange, disabled, scopeRef, scopeClass: scopeSe
29
29
  const comp = (0, react_modules_dom_to_react_1.domToReact)(element);
30
30
  if (!element || !(0, react_ui_highlighter_component_metadata_bit_component_meta_1.hasComponentMeta)(comp))
31
31
  return;
32
- const key = (0, get_xpath_1.default)(element);
33
32
  const meta = comp[react_ui_highlighter_component_metadata_bit_component_meta_1.componentMetaField];
33
+ if (!(0, rule_matcher_1.componentRuleMatcher)({ meta }, componentRule))
34
+ return;
35
+ const key = (0, get_xpath_1.default)(element);
34
36
  const compId = meta[react_ui_highlighter_component_metadata_bit_component_meta_1.componentMetaProperties.componentId];
35
37
  const link = meta[react_ui_highlighter_component_metadata_bit_component_meta_1.componentMetaProperties.homepageUrl];
36
38
  const local = meta[react_ui_highlighter_component_metadata_bit_component_meta_1.componentMetaProperties.isExported] === false;
@@ -1 +1 @@
1
- {"version":3,"file":"use-multi-highlighter.js","sourceRoot":"","sources":["../../multi-highlighter/use-multi-highlighter.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAA6C;AAC7C,0DAAiC;AACjC,oFAAgF;AAChF,oJAI6E;AAE7E,8DAAmE;AACnE,kDAAyD;AAczD,SAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EAAE,aAAa,GAAG,EAAE,EAC9B,IAAI,GACqB;IACzB,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,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,MAAM,IAAI,GAAG,IAAI,CAAC,+EAAkB,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,oFAAuB,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,oFAAuB,CAAC,WAAW,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,oFAAuB,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC;YACjE,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxB,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AAChC,CAAC;AAnCD,kDAmCC;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-multi-highlighter.js","sourceRoot":"","sources":["../../multi-highlighter/use-multi-highlighter.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAA6C;AAC7C,0DAAiC;AACjC,oFAAgF;AAChF,oJAI6E;AAE7E,8DAAmE;AACnE,kDAAmG;AAgBnG,SAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EAAE,aAAa,GAAG,EAAE,EAC9B,IAAI,EACJ,aAAa,GACY;IACzB,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,MAAM,IAAI,GAAG,IAAA,uCAAU,EAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAA,6EAAgB,EAAC,IAAI,CAAC;gBAAE,OAAO;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,+EAAkB,CAAC,CAAC;YACtC,IAAI,CAAC,IAAA,mCAAoB,EAAC,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC;gBAAE,OAAO;YAE3D,MAAM,GAAG,GAAG,IAAA,mBAAQ,EAAC,OAAO,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,oFAAuB,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,oFAAuB,CAAC,WAAW,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,oFAAuB,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC;YACjE,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxB,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AAChC,CAAC;AArCD,kDAqCC;AAED,SAAS,eAAe;AACtB;;;GAGG;AACH,aAAa,GAAG,QAAQ;IAExB,OAAO,QAAQ,aAAa,IAAI,+CAA0B,KAAK,aAAa,IAAI,+CAA0B,KAAK,CAAC;AAClH,CAAC"}
@@ -1,2 +1,8 @@
1
+ import { ComponentMeta } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta';
2
+ export declare type ComponentMatchTarget = {
3
+ meta: ComponentMeta;
4
+ };
1
5
  export declare type MatchRule = undefined | string | ((element: HTMLElement) => boolean);
6
+ export declare type ComponentMatchRule = undefined | string | string[] | ((target: ComponentMatchTarget) => boolean);
2
7
  export declare function ruleMatcher(element: HTMLElement, rule: MatchRule): boolean;
8
+ export declare function componentRuleMatcher(target: ComponentMatchTarget, rule: ComponentMatchRule): boolean;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- // in the future, we will add more options here, like include / exclude objects.
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.ruleMatcher = void 0;
3
+ exports.componentRuleMatcher = exports.ruleMatcher = void 0;
4
+ const component_id_1 = require("@teambit/component-id");
5
5
  function ruleMatcher(element, rule) {
6
6
  if (typeof rule === 'string') {
7
7
  return element.matches(rule);
@@ -12,4 +12,21 @@ function ruleMatcher(element, rule) {
12
12
  return true;
13
13
  }
14
14
  exports.ruleMatcher = ruleMatcher;
15
+ function componentRuleMatcher(target, rule) {
16
+ if (typeof rule === 'string') {
17
+ const targetCmpId = component_id_1.ComponentID.tryFromString(target.meta.id);
18
+ const ruleCmpId = component_id_1.ComponentID.tryFromString(rule);
19
+ return component_id_1.ComponentID.isEqual(ruleCmpId, targetCmpId, { ignoreVersion: true });
20
+ }
21
+ if (Array.isArray(rule)) {
22
+ const targetCmpId = component_id_1.ComponentID.tryFromString(target.meta.id);
23
+ const ruleCmpIds = rule.map((x) => component_id_1.ComponentID.tryFromString(x));
24
+ return ruleCmpIds.some((cmdId) => component_id_1.ComponentID.isEqual(targetCmpId, cmdId, { ignoreVersion: true }));
25
+ }
26
+ if (typeof rule === 'function') {
27
+ return rule(target);
28
+ }
29
+ return true;
30
+ }
31
+ exports.componentRuleMatcher = componentRuleMatcher;
15
32
  //# sourceMappingURL=rule-matcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rule-matcher.js","sourceRoot":"","sources":["../rule-matcher.tsx"],"names":[],"mappings":";AAAA,gFAAgF;;;AAIhF,SAAgB,WAAW,CAAC,OAAoB,EAAE,IAAe;IAC/D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9B;IAED,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;KACtB;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAVD,kCAUC"}
1
+ {"version":3,"file":"rule-matcher.js","sourceRoot":"","sources":["../rule-matcher.tsx"],"names":[],"mappings":";;;AAAA,wDAAoD;AAQpD,SAAgB,WAAW,CAAC,OAAoB,EAAE,IAAe;IAC/D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9B;IAED,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;KACtB;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAVD,kCAUC;AAED,SAAgB,oBAAoB,CAAC,MAA4B,EAAE,IAAwB;IACzF,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC5B,MAAM,WAAW,GAAG,0BAAW,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,0BAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO,0BAAW,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;KAC7E;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACvB,MAAM,WAAW,GAAG,0BAAW,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0BAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,0BAAW,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;KACrG;IAED,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;KACrB;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AApBD,oDAoBC"}
@@ -6,22 +6,25 @@ import { hasComponentMeta } from '@teambit/react.ui.highlighter.component-metada
6
6
 
7
7
  import { excludeHighlighterSelector } from '../ignore-highlighter';
8
8
  import { HighlightTarget } from '../element-highlighter';
9
- import { ruleMatcher, MatchRule } from '../rule-matcher';
9
+ import { ruleMatcher, MatchRule, ComponentMatchRule, componentRuleMatcher } from '../rule-matcher';
10
10
 
11
11
  export type useHoverHighlighterOptions = {
12
12
  debounceDuration: number;
13
13
  scopeClass: string;
14
14
  disabled?: boolean;
15
+ /** filter highlighter targets by this query selector. (May be a more complex object in the future) */
15
16
  rule?: MatchRule;
17
+ /** filter targets by this component match rule */
18
+ componentRule?: ComponentMatchRule;
16
19
  };
17
20
 
18
21
  /** fires onChange when targeting a new component */
19
22
  export function useHoverHighlighter<T extends HTMLElement = HTMLElement>(
20
23
  onChange: (target?: HighlightTarget) => void,
21
24
  props: React.HTMLAttributes<T> = {},
22
- { debounceDuration, scopeClass, disabled, rule }: useHoverHighlighterOptions
25
+ { debounceDuration, scopeClass, disabled, rule, componentRule }: useHoverHighlighterOptions
23
26
  ) {
24
- const { handleElement } = useHoverHandler({ onChange, scopeClass, debounceDuration, disabled, rule });
27
+ const { handleElement } = useHoverHandler({ onChange, scopeClass, debounceDuration, disabled, rule, componentRule });
25
28
 
26
29
  const handlers = useHoverSelection(disabled ? undefined : handleElement, props);
27
30
 
@@ -34,9 +37,17 @@ type useHoverHighlighterProps = {
34
37
  debounceDuration?: number;
35
38
  disabled?: boolean;
36
39
  rule?: MatchRule;
40
+ componentRule?: ComponentMatchRule;
37
41
  };
38
42
 
39
- function useHoverHandler({ onChange, scopeClass = '', debounceDuration, disabled, rule }: useHoverHighlighterProps) {
43
+ function useHoverHandler({
44
+ onChange,
45
+ scopeClass = '',
46
+ debounceDuration,
47
+ disabled,
48
+ rule,
49
+ componentRule,
50
+ }: useHoverHighlighterProps) {
40
51
  // debounced method is ref'ed, so no need for useCallback
41
52
  const _handleElement = (element: HTMLElement | null) => {
42
53
  // clear highlighter at the edges:
@@ -48,7 +59,7 @@ function useHoverHandler({ onChange, scopeClass = '', debounceDuration, disabled
48
59
  // skip DOM trees having 'data-ignore-component-highlight'
49
60
  if (element.closest(`.${scopeClass} ${excludeHighlighterSelector}`)) return;
50
61
 
51
- const result = bubbleToBitComponent(element, rule ? (current) => ruleMatcher(current, rule) : undefined);
62
+ const result = bubbleToBitComponent(element, rule, componentRule);
52
63
  if (!result) return;
53
64
 
54
65
  onChange({
@@ -71,21 +82,27 @@ function useHoverHandler({ onChange, scopeClass = '', debounceDuration, disabled
71
82
  }
72
83
 
73
84
  /** go up the dom tree until reaching a react bit component */
74
- function bubbleToBitComponent(element: HTMLElement | null, filter?: (elem: HTMLElement) => boolean) {
85
+ function bubbleToBitComponent(
86
+ element: HTMLElement | null,
87
+ elementRule?: MatchRule,
88
+ componentRule?: ComponentMatchRule
89
+ ) {
75
90
  for (let current = element; current; current = current.parentElement) {
76
91
  current = toRootElement(current);
77
- if (!current || filter?.(current) === false) return undefined;
78
-
79
- const component = domToReact(current);
80
-
81
- if (hasComponentMeta(component)) {
82
- const meta = component.__bit_component;
83
-
84
- return {
85
- element: current,
86
- component,
87
- meta,
88
- };
92
+ if (!current) return undefined;
93
+ if (ruleMatcher(current, elementRule)) {
94
+ const component = domToReact(current);
95
+
96
+ if (hasComponentMeta(component)) {
97
+ const meta = component.__bit_component;
98
+
99
+ if (componentRuleMatcher({ meta }, componentRule))
100
+ return {
101
+ element: current,
102
+ component,
103
+ meta,
104
+ };
105
+ }
89
106
  }
90
107
  }
91
108
 
@@ -5,7 +5,7 @@ import { v4 } from 'uuid';
5
5
  import { useHoverHighlighter } from '../hover-highlighter';
6
6
  import { ElementHighlighter, HighlightTarget, Placement, HighlightClasses } from '../element-highlighter';
7
7
  import { useMultiHighlighter } from '../multi-highlighter/use-multi-highlighter';
8
- import type { MatchRule } from '../rule-matcher';
8
+ import type { MatchRule, ComponentMatchRule } from '../rule-matcher';
9
9
 
10
10
  export interface HybridHighlighterProps extends React.HTMLAttributes<HTMLDivElement> {
11
11
  /** stop all highlighting and drop listeners */
@@ -27,6 +27,7 @@ export interface HybridHighlighterProps extends React.HTMLAttributes<HTMLDivElem
27
27
 
28
28
  /** filter highlighter targets by this query selector. (May be a more complex object in the future) */
29
29
  rule?: MatchRule;
30
+ componentRule?: ComponentMatchRule;
30
31
 
31
32
  /** set the behavior of the highlighter.
32
33
  * `disabled` - stops highlighting.
@@ -47,6 +48,7 @@ export function HybridHighlighter({
47
48
  watchMotion = true,
48
49
  placement,
49
50
  rule,
51
+ componentRule,
50
52
 
51
53
  classes,
52
54
  highlightStyle,
@@ -76,6 +78,7 @@ export function HybridHighlighter({
76
78
  scopeClass,
77
79
  disabled: disabled || mode !== 'hover',
78
80
  rule,
81
+ componentRule
79
82
  }
80
83
  );
81
84
 
@@ -85,6 +88,7 @@ export function HybridHighlighter({
85
88
  scopeClass,
86
89
  disabled: disabled || mode !== 'allChildren',
87
90
  rule,
91
+ componentRule
88
92
  });
89
93
 
90
94
  const _styles = useMemo(
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  // import { EnterpriseOffering } from '@teambit/evangelist.pages.enterprise-offering';
3
3
  import { MockedComponentWithMeta } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta';
4
+ import { IconButton } from '@teambit/design.ui.icon-button';
4
5
  import { ExcludeHighlighter } from '../ignore-highlighter';
5
6
  import { MultiHighlighter } from './multi-highlighter';
6
7
 
@@ -55,7 +56,7 @@ export const MultiHighlighterInsideIgnore = () => {
55
56
 
56
57
  export const MultiHighlighterWithRule = () => {
57
58
  return (
58
- <MultiHighlighter rule="#someSubTree *">
59
+ <MultiHighlighter rule="#someSubTree *" style={{ minWidth: 200 }}>
59
60
  <br />
60
61
  <br />
61
62
  <br />
@@ -64,12 +65,27 @@ export const MultiHighlighterWithRule = () => {
64
65
  <br />
65
66
  <br />
66
67
  <div id="someSubTree">
67
- <MockedComponentWithMeta>this will be highlighted</MockedComponentWithMeta>
68
+ <MockedComponentWithMeta>highlighted because of element rule</MockedComponentWithMeta>
68
69
  </div>
69
70
  </MultiHighlighter>
70
71
  );
71
72
  };
72
73
 
74
+ export const MultiHighlighterWithComponentRule = () => {
75
+ return (
76
+ <MultiHighlighter componentRule="teambit.design/ui/icon-button">
77
+ <br />
78
+ <br />
79
+ <br />
80
+ <MockedComponentWithMeta>no highlighter</MockedComponentWithMeta>
81
+ <br />
82
+ <br />
83
+ <br />
84
+ <IconButton>highlighted because of component rule</IconButton>
85
+ </MultiHighlighter>
86
+ );
87
+ };
88
+
73
89
  // export const HighlightingAllElementsInTheEnterprisePage = () => {
74
90
  // return (
75
91
  // <MultiHighlighter>
@@ -8,7 +8,7 @@ import {
8
8
  } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta';
9
9
  import { HighlightTarget } from '../element-highlighter';
10
10
  import { excludeHighlighterSelector } from '../ignore-highlighter';
11
- import { ruleMatcher, MatchRule } from '../rule-matcher';
11
+ import { ruleMatcher, MatchRule, ComponentMatchRule, componentRuleMatcher } from '../rule-matcher';
12
12
 
13
13
  type useMultiHighlighterProps = {
14
14
  onChange: (highlighterTargets: Record<string, HighlightTarget>) => void;
@@ -17,6 +17,8 @@ type useMultiHighlighterProps = {
17
17
  scopeClass?: string;
18
18
  /** filter highlighter targets by this query selector. (May be a more complex object in the future) */
19
19
  rule?: MatchRule;
20
+ /** filter targets by this component match rule */
21
+ componentRule?: ComponentMatchRule;
20
22
 
21
23
  // /** automatically update when children update. Use with caution, might be slow */
22
24
  // watchDom?: boolean;
@@ -28,6 +30,7 @@ export function useMultiHighlighter({
28
30
  scopeRef,
29
31
  scopeClass: scopeSelector = '',
30
32
  rule,
33
+ componentRule,
31
34
  }: useMultiHighlighterProps) {
32
35
  useEffect(() => {
33
36
  const nextTargets: Record<string, HighlightTarget> = {};
@@ -46,9 +49,10 @@ export function useMultiHighlighter({
46
49
  uniqueRoots.forEach((element) => {
47
50
  const comp = domToReact(element);
48
51
  if (!element || !hasComponentMeta(comp)) return;
52
+ const meta = comp[componentMetaField];
53
+ if (!componentRuleMatcher({ meta }, componentRule)) return;
49
54
 
50
55
  const key = getXPath(element);
51
- const meta = comp[componentMetaField];
52
56
  const compId = meta[componentMetaProperties.componentId];
53
57
  const link = meta[componentMetaProperties.homepageUrl];
54
58
  const local = meta[componentMetaProperties.isExported] === false;
package/package.json CHANGED
@@ -1,44 +1,44 @@
1
1
  {
2
2
  "name": "@teambit/react.ui.component-highlighter",
3
- "version": "0.0.489",
3
+ "version": "0.0.490",
4
4
  "homepage": "https://bit.dev/teambit/react/ui/component-highlighter",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.react",
8
8
  "name": "ui/component-highlighter",
9
- "version": "0.0.489"
9
+ "version": "0.0.490"
10
10
  },
11
11
  "dependencies": {
12
- "@popperjs/core": "2.6.0",
13
12
  "classnames": "2.2.6",
13
+ "@popperjs/core": "2.6.0",
14
14
  "react-popper": "2.2.4",
15
15
  "use-debounce": "6.0.1",
16
16
  "uuid": "3.4.0",
17
17
  "get-xpath": "3.0.1",
18
18
  "url-join": "4.0.1",
19
19
  "core-js": "^3.0.0",
20
+ "@teambit/component-id": "0.0.388",
21
+ "@teambit/react.ui.highlighter.component-metadata.bit-component-meta": "0.0.9",
22
+ "@teambit/ui-foundation.ui.constants.z-indexes": "0.0.476",
20
23
  "@teambit/base-ui.utils.popper-js.ignore-popper-size": "1.0.0",
21
24
  "@teambit/base-ui.utils.popper-js.resize-to-match-reference": "1.0.0",
22
- "@teambit/base-ui.surfaces.card": "1.0.1",
23
- "@teambit/base-ui.routing.native-link": "1.0.0",
24
25
  "@teambit/react.modules.dom-to-react": "0.0.476",
25
- "@teambit/react.ui.highlighter.component-metadata.bit-component-meta": "0.0.9",
26
26
  "@teambit/react.ui.hover-selector": "0.0.154",
27
- "@teambit/ui-foundation.ui.constants.z-indexes": "0.0.476",
28
- "@teambit/component-id": "0.0.388",
27
+ "@teambit/base-ui.surfaces.card": "1.0.1",
28
+ "@teambit/base-ui.routing.native-link": "1.0.0",
29
29
  "@teambit/component.modules.component-url": "0.0.109"
30
30
  },
31
31
  "devDependencies": {
32
- "@types/react": "^17.0.8",
33
32
  "@types/classnames": "2.2.11",
34
33
  "@testing-library/react": "11.2.6",
35
- "@types/react-dom": "^17.0.5",
36
34
  "@types/uuid": "3.4.9",
37
35
  "@types/url-join": "4.0.0",
38
36
  "@types/mocha": "5.2.7",
39
37
  "@types/testing-library__jest-dom": "5.9.5",
40
38
  "@babel/runtime": "7.12.18",
41
39
  "@types/jest": "^26.0.0",
40
+ "@types/react-dom": "^17.0.5",
41
+ "@types/react": "^17.0.8",
42
42
  "@types/node": "12.20.4",
43
43
  "@teambit/design.ui.icon-button": "1.0.10"
44
44
  },
package/rule-matcher.tsx CHANGED
@@ -1,6 +1,10 @@
1
- // in the future, we will add more options here, like include / exclude objects.
1
+ import { ComponentID } from '@teambit/component-id';
2
+ import { ComponentMeta } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta';
3
+
4
+ export type ComponentMatchTarget = { meta: ComponentMeta };
2
5
 
3
6
  export type MatchRule = undefined | string | ((element: HTMLElement) => boolean);
7
+ export type ComponentMatchRule = undefined | string | string[] | ((target: ComponentMatchTarget) => boolean);
4
8
 
5
9
  export function ruleMatcher(element: HTMLElement, rule: MatchRule) {
6
10
  if (typeof rule === 'string') {
@@ -13,3 +17,25 @@ export function ruleMatcher(element: HTMLElement, rule: MatchRule) {
13
17
 
14
18
  return true;
15
19
  }
20
+
21
+ export function componentRuleMatcher(target: ComponentMatchTarget, rule: ComponentMatchRule): boolean {
22
+ if (typeof rule === 'string') {
23
+ const targetCmpId = ComponentID.tryFromString(target.meta.id);
24
+ const ruleCmpId = ComponentID.tryFromString(rule);
25
+
26
+ return ComponentID.isEqual(ruleCmpId, targetCmpId, { ignoreVersion: true });
27
+ }
28
+
29
+ if (Array.isArray(rule)) {
30
+ const targetCmpId = ComponentID.tryFromString(target.meta.id);
31
+ const ruleCmpIds = rule.map((x) => ComponentID.tryFromString(x));
32
+
33
+ return ruleCmpIds.some((cmdId) => ComponentID.isEqual(targetCmpId, cmdId, { ignoreVersion: true }));
34
+ }
35
+
36
+ if (typeof rule === 'function') {
37
+ return rule(target);
38
+ }
39
+
40
+ return true;
41
+ }