@teambit/react.ui.component-highlighter 0.0.492 → 0.0.496

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 (143) hide show
  1. package/{multi-highlighter/multi-highlighter.composition.tsx → children-highlighter/children-highlighter.composition.tsx} +41 -19
  2. package/{multi-highlighter/multi-highlighter.spec.tsx → children-highlighter/children-highlighter.spec.tsx} +3 -3
  3. package/children-highlighter/children-highlighter.tsx +9 -0
  4. package/children-highlighter/index.ts +5 -0
  5. package/{multi-highlighter/use-multi-highlighter.tsx → children-highlighter/use-children-highlighter.tsx} +18 -14
  6. package/component-highlighter.docs.md +13 -3
  7. package/dist/children-highlighter/children-highlighter.composition.d.ts +5 -0
  8. package/dist/{multi-highlighter/multi-highlighter.composition.js → children-highlighter/children-highlighter.composition.js} +37 -20
  9. package/dist/children-highlighter/children-highlighter.composition.js.map +1 -0
  10. package/dist/children-highlighter/children-highlighter.d.ts +3 -0
  11. package/dist/{multi-highlighter/multi-highlighter.js → children-highlighter/children-highlighter.js} +6 -6
  12. package/dist/children-highlighter/children-highlighter.js.map +1 -0
  13. package/dist/{multi-highlighter/multi-highlighter.spec.d.ts → children-highlighter/children-highlighter.spec.d.ts} +0 -0
  14. package/dist/{multi-highlighter/multi-highlighter.spec.js → children-highlighter/children-highlighter.spec.js} +4 -4
  15. package/dist/children-highlighter/children-highlighter.spec.js.map +1 -0
  16. package/dist/children-highlighter/index.d.ts +4 -0
  17. package/dist/children-highlighter/index.js +8 -0
  18. package/dist/children-highlighter/index.js.map +1 -0
  19. package/dist/{multi-highlighter/use-multi-highlighter.d.ts → children-highlighter/use-children-highlighter.d.ts} +4 -4
  20. package/dist/{multi-highlighter/use-multi-highlighter.js → children-highlighter/use-children-highlighter.js} +10 -11
  21. package/dist/children-highlighter/use-children-highlighter.js.map +1 -0
  22. package/dist/component-highlighter.docs.md +13 -3
  23. package/dist/element-highlighter/element-highlighter.compositions.d.ts +3 -1
  24. package/dist/element-highlighter/element-highlighter.compositions.js +15 -7
  25. package/dist/element-highlighter/element-highlighter.compositions.js.map +1 -1
  26. package/dist/element-highlighter/element-highlighter.d.ts +8 -9
  27. package/dist/element-highlighter/element-highlighter.js +3 -3
  28. package/dist/element-highlighter/element-highlighter.js.map +1 -1
  29. package/dist/element-highlighter/element-highlighter.module.scss +2 -5
  30. package/dist/element-highlighter/index.d.ts +1 -1
  31. package/dist/hover-highlighter/hover-highlighter.compositions.js +1 -1
  32. package/dist/hover-highlighter/hover-highlighter.compositions.js.map +1 -1
  33. package/dist/hover-highlighter/hover-highlighter.d.ts +1 -1
  34. package/dist/hover-highlighter/hover-highlighter.js +2 -2
  35. package/dist/hover-highlighter/hover-highlighter.js.map +1 -1
  36. package/dist/hover-highlighter/use-hover-highlighter.d.ts +5 -2
  37. package/dist/hover-highlighter/use-hover-highlighter.js +13 -15
  38. package/dist/hover-highlighter/use-hover-highlighter.js.map +1 -1
  39. package/dist/{hybrid-highligher → hybrid-highlighter}/hybrid-highlighter.d.ts +6 -3
  40. package/dist/{hybrid-highligher → hybrid-highlighter}/hybrid-highlighter.js +6 -4
  41. package/dist/hybrid-highlighter/hybrid-highlighter.js.map +1 -0
  42. package/dist/{hybrid-highligher → hybrid-highlighter}/index.d.ts +0 -0
  43. package/dist/{hybrid-highligher → hybrid-highlighter}/index.js +0 -0
  44. package/dist/hybrid-highlighter/index.js.map +1 -0
  45. package/dist/index.d.ts +4 -4
  46. package/dist/index.js +5 -5
  47. package/dist/index.js.map +1 -1
  48. package/dist/label/component-strip.d.ts +9 -0
  49. package/dist/label/component-strip.js +49 -0
  50. package/dist/label/component-strip.js.map +1 -0
  51. package/dist/label/component-strip.module.scss +49 -0
  52. package/dist/label/index.d.ts +4 -2
  53. package/dist/label/index.js +3 -2
  54. package/dist/label/index.js.map +1 -1
  55. package/dist/label/label-container.d.ts +13 -0
  56. package/dist/label/label-container.js +53 -0
  57. package/dist/label/label-container.js.map +1 -0
  58. package/dist/label/label.d.ts +7 -19
  59. package/dist/label/label.js +20 -27
  60. package/dist/label/label.js.map +1 -1
  61. package/dist/label/label.module.scss +24 -0
  62. package/dist/label/links.d.ts +2 -0
  63. package/dist/label/links.js +17 -0
  64. package/dist/label/links.js.map +1 -0
  65. package/dist/label/other-components.d.ts +10 -0
  66. package/dist/label/other-components.js +35 -0
  67. package/dist/label/other-components.js.map +1 -0
  68. package/dist/rule-matcher.d.ts +6 -0
  69. package/dist/rule-matcher.js +20 -2
  70. package/dist/rule-matcher.js.map +1 -1
  71. package/dist/use-animation-frame.d.ts +1 -1
  72. package/dist/use-animation-frame.js.map +1 -1
  73. package/element-highlighter/element-highlighter.compositions.tsx +22 -8
  74. package/element-highlighter/element-highlighter.module.scss +2 -5
  75. package/element-highlighter/element-highlighter.tsx +11 -16
  76. package/element-highlighter/index.ts +7 -1
  77. package/hover-highlighter/hover-highlighter.compositions.tsx +1 -1
  78. package/hover-highlighter/hover-highlighter.tsx +1 -1
  79. package/hover-highlighter/use-hover-highlighter.tsx +36 -19
  80. package/{hybrid-highligher → hybrid-highlighter}/hybrid-highlighter.tsx +18 -4
  81. package/{hybrid-highligher → hybrid-highlighter}/index.ts +0 -0
  82. package/index.ts +4 -4
  83. package/label/component-strip.module.scss +49 -0
  84. package/label/component-strip.tsx +49 -0
  85. package/label/index.ts +5 -2
  86. package/label/label-container.tsx +46 -0
  87. package/label/label.module.scss +24 -0
  88. package/label/label.tsx +35 -66
  89. package/label/links.tsx +9 -0
  90. package/label/other-components.tsx +53 -0
  91. package/package-tar/teambit-react.ui.component-highlighter-0.0.496.tgz +0 -0
  92. package/package.json +15 -15
  93. package/rule-matcher.tsx +27 -0
  94. package/tsconfig.json +2 -1
  95. package/use-animation-frame.tsx +1 -1
  96. package/bubble/bubble.module.scss +0 -24
  97. package/bubble/index.ts +0 -3
  98. package/dist/bubble/bubble.module.scss +0 -24
  99. package/dist/bubble/index.d.ts +0 -1
  100. package/dist/bubble/index.js +0 -9
  101. package/dist/bubble/index.js.map +0 -1
  102. package/dist/hybrid-highligher/hybrid-highlighter.js.map +0 -1
  103. package/dist/hybrid-highligher/index.js.map +0 -1
  104. package/dist/label/component-label/component-bubble.d.ts +0 -7
  105. package/dist/label/component-label/component-bubble.js +0 -35
  106. package/dist/label/component-label/component-bubble.js.map +0 -1
  107. package/dist/label/component-label/component-label.d.ts +0 -9
  108. package/dist/label/component-label/component-label.js +0 -32
  109. package/dist/label/component-label/component-label.js.map +0 -1
  110. package/dist/label/component-label/duo-component-bubble.module.scss +0 -24
  111. package/dist/label/component-label/index.d.ts +0 -2
  112. package/dist/label/component-label/index.js +0 -6
  113. package/dist/label/component-label/index.js.map +0 -1
  114. package/dist/label/component-label/scope-bubble.d.ts +0 -6
  115. package/dist/label/component-label/scope-bubble.js +0 -28
  116. package/dist/label/component-label/scope-bubble.js.map +0 -1
  117. package/dist/label/default-label/default-label.d.ts +0 -5
  118. package/dist/label/default-label/default-label.js +0 -30
  119. package/dist/label/default-label/default-label.js.map +0 -1
  120. package/dist/label/default-label/default-label.module.scss +0 -12
  121. package/dist/label/default-label/index.d.ts +0 -1
  122. package/dist/label/default-label/index.js +0 -6
  123. package/dist/label/default-label/index.js.map +0 -1
  124. package/dist/multi-highlighter/index.d.ts +0 -2
  125. package/dist/multi-highlighter/index.js +0 -6
  126. package/dist/multi-highlighter/index.js.map +0 -1
  127. package/dist/multi-highlighter/multi-highlighter.composition.d.ts +0 -4
  128. package/dist/multi-highlighter/multi-highlighter.composition.js.map +0 -1
  129. package/dist/multi-highlighter/multi-highlighter.d.ts +0 -3
  130. package/dist/multi-highlighter/multi-highlighter.js.map +0 -1
  131. package/dist/multi-highlighter/multi-highlighter.spec.js.map +0 -1
  132. package/dist/multi-highlighter/use-multi-highlighter.js.map +0 -1
  133. package/label/component-label/component-bubble.tsx +0 -30
  134. package/label/component-label/component-label.tsx +0 -31
  135. package/label/component-label/duo-component-bubble.module.scss +0 -24
  136. package/label/component-label/index.ts +0 -2
  137. package/label/component-label/scope-bubble.tsx +0 -20
  138. package/label/default-label/default-label.module.scss +0 -12
  139. package/label/default-label/default-label.tsx +0 -22
  140. package/label/default-label/index.ts +0 -1
  141. package/multi-highlighter/index.ts +0 -2
  142. package/multi-highlighter/multi-highlighter.tsx +0 -9
  143. package/package-tar/teambit-react.ui.component-highlighter-0.0.492.tgz +0 -0
@@ -0,0 +1,49 @@
1
+ $borderRadius: 0.5em;
2
+ $gap: 0.125em;
3
+
4
+ .componentStrip {
5
+ display: flex;
6
+ width: fit-content; // for correct shadow size
7
+
8
+ border-radius: $borderRadius;
9
+ box-shadow: var(--bit-highlighter-shadow);
10
+
11
+ > * {
12
+ padding: 0 0.5em;
13
+ line-height: 1.5; //use line height to get rounder values than 0.25em padding
14
+
15
+ transition: filter 300ms, background-color 300ms;
16
+ transform: translateZ(0); //fix blurriness in Safari
17
+
18
+ background: var(--bit-highlighter-color, #eebcc9);
19
+
20
+ &:link,
21
+ &:visited {
22
+ text-decoration: inherit; // reset browser defaults
23
+ color: inherit; // reset browser defaults
24
+
25
+ &:hover {
26
+ background: var(--bit-highlighter-color-hover, #f6dae2);
27
+ }
28
+
29
+ &:active {
30
+ background: var(--bit-highlighter-color-active, #e79db1);
31
+ color: inherit;
32
+ }
33
+ }
34
+
35
+ &:first-child {
36
+ border-top-left-radius: $borderRadius;
37
+ border-bottom-left-radius: $borderRadius;
38
+ }
39
+
40
+ margin-right: $gap;
41
+
42
+ &:last-child {
43
+ border-top-right-radius: $borderRadius;
44
+ border-bottom-right-radius: $borderRadius;
45
+
46
+ margin-right: unset;
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,49 @@
1
+ import React, { useMemo, ReactNode, forwardRef, ForwardedRef } from 'react';
2
+ import { NativeLink } from '@teambit/base-ui.routing.native-link';
3
+ import { ComponentID } from '@teambit/component-id';
4
+ import { ScopeUrl } from '@teambit/component.modules.component-url';
5
+ import {
6
+ componentMetaField,
7
+ ComponentMetaHolder,
8
+ } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta';
9
+ import styles from './component-strip.module.scss';
10
+ import { calcComponentLink } from './links';
11
+
12
+ export type ComponentStripSize = 's' | 'm' | 'l';
13
+
14
+ interface ComponentStripProps extends React.HTMLAttributes<HTMLDivElement> {
15
+ component: ComponentMetaHolder;
16
+ size?: ComponentStripSize;
17
+ }
18
+ export const ComponentStrip = forwardRef(function ComponentStrip(
19
+ { component, size = 'm', children }: ComponentStripProps,
20
+ ref: ForwardedRef<HTMLDivElement>
21
+ ) {
22
+ const { id, homepage, exported } = component[componentMetaField];
23
+
24
+ const parsedId = useMemo(() => ComponentID.tryFromString(id), [id]);
25
+ const componentLink = homepage || calcComponentLink(parsedId, exported);
26
+
27
+ return (
28
+ <div className={styles.componentStrip} ref={ref} data-size={size}>
29
+ {!parsedId && <LabelBlock link={homepage}>{id}</LabelBlock>}
30
+ {parsedId && <LabelBlock link={ScopeUrl.toUrl(parsedId.scope)}>{parsedId.scope}</LabelBlock>}
31
+ {parsedId && (
32
+ <LabelBlock link={componentLink}>
33
+ {parsedId.fullName}
34
+ {parsedId.version && parsedId.version !== 'latest' && `@${parsedId.version}`}
35
+ </LabelBlock>
36
+ )}
37
+ {children}
38
+ </div>
39
+ );
40
+ });
41
+
42
+ function LabelBlock({ link, children }: { link?: string; children: ReactNode }) {
43
+ const Comp = link ? NativeLink : 'span';
44
+ return (
45
+ <Comp href={link} external={!!link}>
46
+ {children}
47
+ </Comp>
48
+ );
49
+ }
package/label/index.ts CHANGED
@@ -1,2 +1,5 @@
1
- export { LabelContainer, Label } from './label';
2
- export type { LabelContainerProps, LabelProps, Placement } from './label';
1
+ export { Label } from './label';
2
+ export type { LabelProps, LabelSize } from './label';
3
+
4
+ export { LabelContainer } from './label-container';
5
+ export type { LabelContainerProps, Placement } from './label-container';
@@ -0,0 +1,46 @@
1
+ import React, { useMemo, useState } from 'react';
2
+ import { usePopper } from 'react-popper';
3
+ import type { Placement, Modifier } from '@popperjs/core';
4
+ import '@popperjs/core';
5
+
6
+ import { useAnimationFrame } from '../use-animation-frame';
7
+
8
+ export interface LabelContainerProps extends React.HTMLAttributes<HTMLDivElement> {
9
+ targetRef: HTMLElement | null;
10
+ offset?: [number, number];
11
+ placement?: Placement;
12
+ flip?: boolean;
13
+ /** continually update label position to match moving elements */
14
+ watchMotion?: boolean;
15
+ }
16
+
17
+ export type { Placement };
18
+
19
+ // TODO - replace this with TippyJS, when it supports a `targetElement={targetRef.current}` prop
20
+ export function LabelContainer({
21
+ targetRef,
22
+ offset,
23
+ placement,
24
+ flip = true,
25
+ watchMotion,
26
+ className,
27
+ ...rest
28
+ }: LabelContainerProps) {
29
+ const [sourceRef, setSourceRef] = useState<HTMLDivElement | null>(null);
30
+
31
+ const modifiers = useMemo<Partial<Modifier<any, any>>[]>(
32
+ () => [{ name: 'offset', options: { offset } }],
33
+ [flip, offset]
34
+ );
35
+
36
+ const { styles, attributes, update } = usePopper(targetRef, sourceRef, {
37
+ modifiers,
38
+ placement,
39
+ });
40
+
41
+ useAnimationFrame(!!watchMotion && update);
42
+
43
+ if (!targetRef) return null;
44
+
45
+ return <div {...rest} ref={setSourceRef} className={className} style={styles.popper} {...attributes.popper} />;
46
+ }
@@ -0,0 +1,24 @@
1
+ .othersContainer {
2
+ > * {
3
+ margin-bottom: 8px;
4
+
5
+ &:last-child {
6
+ margin-bottom: unset;
7
+ }
8
+ }
9
+ }
10
+
11
+ .othersTooltip {
12
+ user-select: none;
13
+ cursor: pointer;
14
+
15
+ &::before {
16
+ display: inline-block;
17
+ transition: transform 300ms;
18
+ content: '▾';
19
+ }
20
+
21
+ &.active::before {
22
+ transform: rotate(-180deg);
23
+ }
24
+ }
package/label/label.tsx CHANGED
@@ -1,70 +1,39 @@
1
- import React, { useMemo, useState } from 'react';
2
- import { usePopper } from 'react-popper';
3
- import { ComponentID } from '@teambit/component-id';
4
- import type { CardProps } from '@teambit/base-ui.surfaces.card';
5
- import type { Placement, Modifier } from '@popperjs/core';
6
- import '@popperjs/core';
7
-
8
- import { DefaultLabel } from './default-label';
9
- import { ComponentLabel } from './component-label';
10
- import { useAnimationFrame } from '../use-animation-frame';
11
-
12
- export interface LabelContainerProps extends React.HTMLAttributes<HTMLDivElement> {
13
- targetRef: HTMLElement | null;
14
- offset?: [number, number];
15
- placement?: Placement;
16
- flip?: boolean;
17
- /** continually update label position to match moving elements */
18
- watchMotion?: boolean;
1
+ import React, { useEffect, useState } from 'react';
2
+ import classNames from 'classnames';
3
+ import { ComponentMetaHolder } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta';
4
+
5
+ import styles from './label.module.scss';
6
+ import { ComponentStrip, ComponentStripSize } from './component-strip';
7
+ import { OtherComponentsPopper } from './other-components';
8
+
9
+ export type LabelSize = ComponentStripSize;
10
+ export interface LabelProps extends React.HTMLAttributes<HTMLDivElement> {
11
+ components: ComponentMetaHolder[];
12
+ size?: LabelSize;
19
13
  }
20
14
 
21
- export type { Placement };
22
-
23
- // TODO - replace this with TippyJS, when it supports a `targetElement={targetRef.current}` prop
24
- export function LabelContainer({
25
- targetRef,
26
- offset,
27
- placement,
28
- flip = true,
29
- watchMotion,
30
- className,
31
- ...rest
32
- }: LabelContainerProps) {
33
- const [sourceRef, setSourceRef] = useState<HTMLDivElement | null>(null);
34
-
35
- const modifiers = useMemo<Partial<Modifier<any, any>>[]>(
36
- () => [{ name: 'offset', options: { offset } }],
37
- [flip, offset]
15
+ export function Label({ components, size, ...props }: LabelProps) {
16
+ const [showMore, setShowMore] = useState(false);
17
+ const last = components.slice(-1).pop();
18
+ if (!last) return null;
19
+
20
+ const hasMore = components.length > 1;
21
+
22
+ // reset when switching targets
23
+ useEffect(() => {
24
+ setShowMore(false);
25
+ }, [components]);
26
+
27
+ return (
28
+ <OtherComponentsPopper components={components} visible={showMore} placement="bottom-start" size={size}>
29
+ <ComponentStrip {...props} component={last} size={size}>
30
+ {hasMore && (
31
+ <span
32
+ className={classNames(styles.othersTooltip, showMore && styles.active)}
33
+ onClick={() => setShowMore((x) => !x)}
34
+ />
35
+ )}
36
+ </ComponentStrip>
37
+ </OtherComponentsPopper>
38
38
  );
39
-
40
- const { styles, attributes, update } = usePopper(targetRef, sourceRef, {
41
- modifiers,
42
- placement,
43
- });
44
-
45
- useAnimationFrame(!!watchMotion && update);
46
-
47
- if (!targetRef) return null;
48
-
49
- return <div {...rest} ref={setSourceRef} className={className} style={styles.popper} {...attributes.popper} />;
50
- }
51
-
52
- export interface LabelProps extends CardProps {
53
- componentId: string;
54
- link?: string;
55
- scopeLink?: string;
56
- local?: boolean;
57
- }
58
-
59
- export function Label({ componentId, link, scopeLink, local, ...rest }: LabelProps) {
60
- const parsedId = useMemo(() => ComponentID.tryFromString(componentId), [componentId]);
61
-
62
- if (!parsedId)
63
- return (
64
- <DefaultLabel {...rest} href={link}>
65
- {componentId}
66
- </DefaultLabel>
67
- );
68
-
69
- return <ComponentLabel {...rest} local={local} componentId={parsedId} link={link} scopeLink={scopeLink} />;
70
39
  }
@@ -0,0 +1,9 @@
1
+ import urlJoin from 'url-join';
2
+ import type { ComponentID } from '@teambit/component-id';
3
+ import { ComponentUrl } from '@teambit/component.modules.component-url';
4
+
5
+ export function calcComponentLink(id: ComponentID | undefined, exported: boolean | undefined) {
6
+ if (!id) return undefined;
7
+ if (exported) return ComponentUrl.toUrl(id);
8
+ return urlJoin('/', id.fullName);
9
+ }
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import Tippy, { TippyProps } from '@tippyjs/react/headless';
3
+ import { ComponentMetaHolder } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta';
4
+
5
+ import { ComponentStrip, ComponentStripSize } from './component-strip';
6
+ import styles from './label.module.scss';
7
+
8
+ export type OtherComponentsProps = {
9
+ components: ComponentMetaHolder[];
10
+ size?: ComponentStripSize;
11
+ start?: number;
12
+ end?: number;
13
+ } & TippyProps;
14
+
15
+ // a popper ("tooltip") that shows the additional React Components related to this dom element
16
+ export function OtherComponentsPopper({
17
+ components,
18
+ children,
19
+ start,
20
+ end = -1,
21
+ size,
22
+ placement = 'bottom',
23
+ interactive = true,
24
+ ...tippyProps
25
+ }: OtherComponentsProps) {
26
+ const content = (
27
+ <>
28
+ {components
29
+ .slice(start, end)
30
+ .reverse()
31
+ .map((comp, idx) => (
32
+ <ComponentStrip key={idx} component={comp} size={size} />
33
+ ))}
34
+ </>
35
+ );
36
+
37
+ return (
38
+ <Tippy
39
+ placement={placement}
40
+ interactive={interactive}
41
+ {...tippyProps}
42
+ // second parameter "content" is always undefined, use content inline
43
+ // https://github.com/atomiks/tippyjs-react/issues/341
44
+ render={(attrs) => (
45
+ <div {...attrs} className={styles.othersContainer}>
46
+ {content}
47
+ </div>
48
+ )}
49
+ >
50
+ {children}
51
+ </Tippy>
52
+ );
53
+ }
package/package.json CHANGED
@@ -1,39 +1,39 @@
1
1
  {
2
2
  "name": "@teambit/react.ui.component-highlighter",
3
- "version": "0.0.492",
3
+ "version": "0.0.496",
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.492"
9
+ "version": "0.0.496"
10
10
  },
11
11
  "dependencies": {
12
+ "get-xpath": "3.0.1",
12
13
  "classnames": "2.2.6",
13
14
  "@popperjs/core": "2.6.0",
14
15
  "react-popper": "2.2.4",
15
- "uuid": "3.4.0",
16
16
  "use-debounce": "6.0.1",
17
- "get-xpath": "3.0.1",
17
+ "uuid": "3.4.0",
18
18
  "url-join": "4.0.1",
19
+ "@tippyjs/react": "4.2.0",
19
20
  "core-js": "^3.0.0",
20
21
  "@teambit/base-ui.utils.popper-js.ignore-popper-size": "1.0.0",
21
22
  "@teambit/base-ui.utils.popper-js.resize-to-match-reference": "1.0.0",
22
- "@teambit/base-ui.surfaces.card": "1.0.1",
23
23
  "@teambit/base-ui.routing.native-link": "1.0.0",
24
- "@teambit/ui-foundation.ui.constants.z-indexes": "0.0.477",
25
- "@teambit/react.modules.dom-to-react": "0.0.477",
26
- "@teambit/react.ui.highlighter.component-metadata.bit-component-meta": "0.0.10",
27
- "@teambit/react.ui.hover-selector": "0.0.155",
28
- "@teambit/component-id": "0.0.389",
29
- "@teambit/component.modules.component-url": "0.0.110"
24
+ "@teambit/component-id": "0.0.391",
25
+ "@teambit/react.ui.highlighter.component-metadata.bit-component-meta": "0.0.13",
26
+ "@teambit/react.modules.dom-to-react": "0.0.479",
27
+ "@teambit/ui-foundation.ui.constants.z-indexes": "0.0.479",
28
+ "@teambit/react.ui.hover-selector": "0.0.157",
29
+ "@teambit/component.modules.component-url": "0.0.112"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/react": "^17.0.8",
33
- "@types/classnames": "2.2.11",
34
- "@types/uuid": "3.4.9",
35
33
  "@testing-library/react": "11.2.6",
34
+ "@types/classnames": "2.2.11",
36
35
  "@types/react-dom": "^17.0.5",
36
+ "@types/uuid": "3.4.9",
37
37
  "@types/url-join": "4.0.0",
38
38
  "@types/mocha": "5.2.7",
39
39
  "@types/testing-library__jest-dom": "5.9.5",
@@ -43,7 +43,7 @@
43
43
  "@teambit/design.ui.icon-button": "1.0.10"
44
44
  },
45
45
  "peerDependencies": {
46
- "@teambit/legacy": "1.0.185",
46
+ "@teambit/legacy": "1.0.187",
47
47
  "react-dom": "^16.8.0 || ^17.0.0",
48
48
  "react": "^16.8.0 || ^17.0.0"
49
49
  },
@@ -71,7 +71,7 @@
71
71
  "react": "-"
72
72
  },
73
73
  "peerDependencies": {
74
- "@teambit/legacy": "1.0.185",
74
+ "@teambit/legacy": "1.0.187",
75
75
  "react-dom": "^16.8.0 || ^17.0.0",
76
76
  "react": "^16.8.0 || ^17.0.0"
77
77
  }
package/rule-matcher.tsx CHANGED
@@ -1,6 +1,9 @@
1
1
  // in the future, we will add more options here, like include / exclude objects.
2
+ import { ComponentID } from '@teambit/component-id';
3
+ import { ComponentMeta } from '@teambit/react.ui.highlighter.component-metadata.bit-component-meta';
2
4
 
3
5
  export type MatchRule = undefined | string | ((element: HTMLElement) => boolean);
6
+ export type ComponentMatchRule = undefined | string | string[] | ((target: ComponentMatchTarget) => boolean);
4
7
 
5
8
  export function ruleMatcher(element: HTMLElement, rule: MatchRule) {
6
9
  if (typeof rule === 'string') {
@@ -13,3 +16,27 @@ export function ruleMatcher(element: HTMLElement, rule: MatchRule) {
13
16
 
14
17
  return true;
15
18
  }
19
+
20
+ export type ComponentMatchTarget = { meta: ComponentMeta };
21
+
22
+ export function componentRuleMatcher(target: ComponentMatchTarget, rule: ComponentMatchRule): boolean {
23
+ if (typeof rule === 'string') {
24
+ const targetCmpId = ComponentID.tryFromString(target.meta.id);
25
+ const ruleCmpId = ComponentID.tryFromString(rule);
26
+
27
+ return ComponentID.isEqual(ruleCmpId, targetCmpId, { ignoreVersion: true });
28
+ }
29
+
30
+ if (Array.isArray(rule)) {
31
+ const targetCmpId = ComponentID.tryFromString(target.meta.id);
32
+ const ruleCmpIds = rule.map((x) => ComponentID.tryFromString(x));
33
+
34
+ return ruleCmpIds.some((cmdId) => ComponentID.isEqual(targetCmpId, cmdId, { ignoreVersion: true }));
35
+ }
36
+
37
+ if (typeof rule === 'function') {
38
+ return rule(target);
39
+ }
40
+
41
+ return true;
42
+ }
package/tsconfig.json CHANGED
@@ -17,7 +17,8 @@
17
17
  "outDir": "dist",
18
18
  "moduleResolution": "node",
19
19
  "esModuleInterop": true,
20
- "rootDir": "."
20
+ "rootDir": ".",
21
+ "resolveJsonModule": true
21
22
  },
22
23
  "exclude": [
23
24
  "dist"
@@ -2,7 +2,7 @@ import { useEffect } from 'react';
2
2
 
3
3
  // TODO - extract to its own component
4
4
 
5
- export function useAnimationFrame(cb?: false | null | (() => any), deps: [] = []) {
5
+ export function useAnimationFrame(cb?: false | null | (() => any), deps: any[] = []) {
6
6
  useEffect(() => {
7
7
  if (!cb) return () => {};
8
8
 
@@ -1,24 +0,0 @@
1
- .bubble {
2
- padding: 0.23em 1em;
3
-
4
- transition: filter 300ms, background-color 300ms;
5
- transform: translateZ(0); //fix blurriness in Safari
6
-
7
- // override styles from <a>
8
- &:link,
9
- &:visited {
10
- text-decoration: inherit;
11
- color: inherit;
12
-
13
- background: var(--bit-highlighter-color, #eebcc9);
14
-
15
- &:hover {
16
- background: var(--bit-highlighter-color-hover, #f6dae2);
17
- }
18
-
19
- &:active {
20
- background: var(--bit-highlighter-color-active, #e79db1);
21
- color: inherit;
22
- }
23
- }
24
- }
package/bubble/index.ts DELETED
@@ -1,3 +0,0 @@
1
- import styles from './bubble.module.scss';
2
-
3
- export const bubble = styles.bubble;
@@ -1,24 +0,0 @@
1
- .bubble {
2
- padding: 0.23em 1em;
3
-
4
- transition: filter 300ms, background-color 300ms;
5
- transform: translateZ(0); //fix blurriness in Safari
6
-
7
- // override styles from <a>
8
- &:link,
9
- &:visited {
10
- text-decoration: inherit;
11
- color: inherit;
12
-
13
- background: var(--bit-highlighter-color, #eebcc9);
14
-
15
- &:hover {
16
- background: var(--bit-highlighter-color-hover, #f6dae2);
17
- }
18
-
19
- &:active {
20
- background: var(--bit-highlighter-color-active, #e79db1);
21
- color: inherit;
22
- }
23
- }
24
- }
@@ -1 +0,0 @@
1
- export declare const bubble: string;
@@ -1,9 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.bubble = void 0;
7
- const bubble_module_scss_1 = __importDefault(require("./bubble.module.scss"));
8
- exports.bubble = bubble_module_scss_1.default.bubble;
9
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../bubble/index.ts"],"names":[],"mappings":";;;;;;AAAA,8EAA0C;AAE7B,QAAA,MAAM,GAAG,4BAAM,CAAC,MAAM,CAAC"}
@@ -1 +0,0 @@
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 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../hybrid-highligher/index.ts"],"names":[],"mappings":";;;AAAA,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA"}
@@ -1,7 +0,0 @@
1
- import { ComponentID } from '@teambit/component-id';
2
- import { LinkProps } from '@teambit/base-ui.routing.native-link';
3
- export interface ComponentBubbleProps extends LinkProps {
4
- componentId: ComponentID;
5
- local?: boolean;
6
- }
7
- export declare function ComponentBubble({ componentId, className, href, local, ...rest }: ComponentBubbleProps): JSX.Element;
@@ -1,35 +0,0 @@
1
- "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.ComponentBubble = void 0;
18
- const react_1 = __importDefault(require("react"));
19
- const classnames_1 = __importDefault(require("classnames"));
20
- const base_ui_routing_native_link_1 = require("@teambit/base-ui.routing.native-link");
21
- const component_modules_component_url_1 = require("@teambit/component.modules.component-url");
22
- const url_join_1 = __importDefault(require("url-join"));
23
- const duo_component_bubble_module_scss_1 = __importDefault(require("./duo-component-bubble.module.scss"));
24
- function ComponentBubble(_a) {
25
- var { componentId, className, href, local = false } = _a, rest = __rest(_a, ["componentId", "className", "href", "local"]);
26
- const { version, fullName } = componentId;
27
- const componentHref = href || (local ? (0, url_join_1.default)('/', fullName) : component_modules_component_url_1.ComponentUrl.toUrl(componentId));
28
- return (react_1.default.createElement(base_ui_routing_native_link_1.NativeLink, Object.assign({ external: true, href: componentHref, className: (0, classnames_1.default)(duo_component_bubble_module_scss_1.default.componentName, className) }, rest),
29
- react_1.default.createElement("div", { className: duo_component_bubble_module_scss_1.default.fullName }, fullName),
30
- version && version !== 'latest' && (react_1.default.createElement("div", { className: duo_component_bubble_module_scss_1.default.version },
31
- react_1.default.createElement("span", { className: duo_component_bubble_module_scss_1.default.versionPrefix }, "@"),
32
- version))));
33
- }
34
- exports.ComponentBubble = ComponentBubble;
35
- //# sourceMappingURL=component-bubble.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"component-bubble.js","sourceRoot":"","sources":["../../../label/component-label/component-bubble.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,4DAAoC;AAEpC,sFAA6E;AAC7E,8FAAwE;AACxE,wDAA+B;AAC/B,0GAAwD;AAOxD,SAAgB,eAAe,CAAC,EAA8E;QAA9E,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,OAAiC,EAA5B,IAAI,cAAtD,6CAAwD,CAAF;IACpF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC;IAC1C,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,kBAAO,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,8CAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAEjG,OAAO,CACL,8BAAC,wCAAU,kBAAC,QAAQ,QAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,IAAA,oBAAU,EAAC,0CAAM,CAAC,aAAa,EAAE,SAAS,CAAC,IAAM,IAAI;QACxG,uCAAK,SAAS,EAAE,0CAAM,CAAC,QAAQ,IAAG,QAAQ,CAAO;QAEhD,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,CAClC,uCAAK,SAAS,EAAE,0CAAM,CAAC,OAAO;YAC5B,wCAAM,SAAS,EAAE,0CAAM,CAAC,aAAa,QAAU;YAC9C,OAAO,CACJ,CACP,CACU,CACd,CAAC;AACJ,CAAC;AAhBD,0CAgBC"}
@@ -1,9 +0,0 @@
1
- import { CardProps } from '@teambit/base-ui.surfaces.card';
2
- import type { ComponentID } from '@teambit/component-id';
3
- export interface ComponentLabelProps extends CardProps {
4
- componentId: ComponentID;
5
- link?: string;
6
- scopeLink?: string;
7
- local?: boolean;
8
- }
9
- export declare function ComponentLabel({ componentId, className, link, scopeLink, local, ...rest }: ComponentLabelProps): JSX.Element;