@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.
- package/{multi-highlighter/multi-highlighter.composition.tsx → children-highlighter/children-highlighter.composition.tsx} +41 -19
- package/{multi-highlighter/multi-highlighter.spec.tsx → children-highlighter/children-highlighter.spec.tsx} +3 -3
- package/children-highlighter/children-highlighter.tsx +9 -0
- package/children-highlighter/index.ts +5 -0
- package/{multi-highlighter/use-multi-highlighter.tsx → children-highlighter/use-children-highlighter.tsx} +18 -14
- package/component-highlighter.docs.md +13 -3
- package/dist/children-highlighter/children-highlighter.composition.d.ts +5 -0
- package/dist/{multi-highlighter/multi-highlighter.composition.js → children-highlighter/children-highlighter.composition.js} +37 -20
- package/dist/children-highlighter/children-highlighter.composition.js.map +1 -0
- package/dist/children-highlighter/children-highlighter.d.ts +3 -0
- package/dist/{multi-highlighter/multi-highlighter.js → children-highlighter/children-highlighter.js} +6 -6
- package/dist/children-highlighter/children-highlighter.js.map +1 -0
- package/dist/{multi-highlighter/multi-highlighter.spec.d.ts → children-highlighter/children-highlighter.spec.d.ts} +0 -0
- package/dist/{multi-highlighter/multi-highlighter.spec.js → children-highlighter/children-highlighter.spec.js} +4 -4
- package/dist/children-highlighter/children-highlighter.spec.js.map +1 -0
- package/dist/children-highlighter/index.d.ts +4 -0
- package/dist/children-highlighter/index.js +8 -0
- package/dist/children-highlighter/index.js.map +1 -0
- package/dist/{multi-highlighter/use-multi-highlighter.d.ts → children-highlighter/use-children-highlighter.d.ts} +4 -4
- package/dist/{multi-highlighter/use-multi-highlighter.js → children-highlighter/use-children-highlighter.js} +10 -11
- package/dist/children-highlighter/use-children-highlighter.js.map +1 -0
- package/dist/component-highlighter.docs.md +13 -3
- package/dist/element-highlighter/element-highlighter.compositions.d.ts +3 -1
- package/dist/element-highlighter/element-highlighter.compositions.js +15 -7
- package/dist/element-highlighter/element-highlighter.compositions.js.map +1 -1
- package/dist/element-highlighter/element-highlighter.d.ts +8 -9
- package/dist/element-highlighter/element-highlighter.js +3 -3
- package/dist/element-highlighter/element-highlighter.js.map +1 -1
- package/dist/element-highlighter/element-highlighter.module.scss +2 -5
- package/dist/element-highlighter/index.d.ts +1 -1
- package/dist/hover-highlighter/hover-highlighter.compositions.js +1 -1
- package/dist/hover-highlighter/hover-highlighter.compositions.js.map +1 -1
- package/dist/hover-highlighter/hover-highlighter.d.ts +1 -1
- package/dist/hover-highlighter/hover-highlighter.js +2 -2
- package/dist/hover-highlighter/hover-highlighter.js.map +1 -1
- package/dist/hover-highlighter/use-hover-highlighter.d.ts +5 -2
- package/dist/hover-highlighter/use-hover-highlighter.js +13 -15
- package/dist/hover-highlighter/use-hover-highlighter.js.map +1 -1
- package/dist/{hybrid-highligher → hybrid-highlighter}/hybrid-highlighter.d.ts +6 -3
- package/dist/{hybrid-highligher → hybrid-highlighter}/hybrid-highlighter.js +6 -4
- package/dist/hybrid-highlighter/hybrid-highlighter.js.map +1 -0
- package/dist/{hybrid-highligher → hybrid-highlighter}/index.d.ts +0 -0
- package/dist/{hybrid-highligher → hybrid-highlighter}/index.js +0 -0
- package/dist/hybrid-highlighter/index.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/label/component-strip.d.ts +9 -0
- package/dist/label/component-strip.js +49 -0
- package/dist/label/component-strip.js.map +1 -0
- package/dist/label/component-strip.module.scss +49 -0
- package/dist/label/index.d.ts +4 -2
- package/dist/label/index.js +3 -2
- package/dist/label/index.js.map +1 -1
- package/dist/label/label-container.d.ts +13 -0
- package/dist/label/label-container.js +53 -0
- package/dist/label/label-container.js.map +1 -0
- package/dist/label/label.d.ts +7 -19
- package/dist/label/label.js +20 -27
- package/dist/label/label.js.map +1 -1
- package/dist/label/label.module.scss +24 -0
- package/dist/label/links.d.ts +2 -0
- package/dist/label/links.js +17 -0
- package/dist/label/links.js.map +1 -0
- package/dist/label/other-components.d.ts +10 -0
- package/dist/label/other-components.js +35 -0
- package/dist/label/other-components.js.map +1 -0
- package/dist/rule-matcher.d.ts +6 -0
- package/dist/rule-matcher.js +20 -2
- package/dist/rule-matcher.js.map +1 -1
- package/dist/use-animation-frame.d.ts +1 -1
- package/dist/use-animation-frame.js.map +1 -1
- package/element-highlighter/element-highlighter.compositions.tsx +22 -8
- package/element-highlighter/element-highlighter.module.scss +2 -5
- package/element-highlighter/element-highlighter.tsx +11 -16
- package/element-highlighter/index.ts +7 -1
- package/hover-highlighter/hover-highlighter.compositions.tsx +1 -1
- package/hover-highlighter/hover-highlighter.tsx +1 -1
- package/hover-highlighter/use-hover-highlighter.tsx +36 -19
- package/{hybrid-highligher → hybrid-highlighter}/hybrid-highlighter.tsx +18 -4
- package/{hybrid-highligher → hybrid-highlighter}/index.ts +0 -0
- package/index.ts +4 -4
- package/label/component-strip.module.scss +49 -0
- package/label/component-strip.tsx +49 -0
- package/label/index.ts +5 -2
- package/label/label-container.tsx +46 -0
- package/label/label.module.scss +24 -0
- package/label/label.tsx +35 -66
- package/label/links.tsx +9 -0
- package/label/other-components.tsx +53 -0
- package/package-tar/teambit-react.ui.component-highlighter-0.0.496.tgz +0 -0
- package/package.json +15 -15
- package/rule-matcher.tsx +27 -0
- package/tsconfig.json +2 -1
- package/use-animation-frame.tsx +1 -1
- package/bubble/bubble.module.scss +0 -24
- package/bubble/index.ts +0 -3
- package/dist/bubble/bubble.module.scss +0 -24
- package/dist/bubble/index.d.ts +0 -1
- package/dist/bubble/index.js +0 -9
- package/dist/bubble/index.js.map +0 -1
- package/dist/hybrid-highligher/hybrid-highlighter.js.map +0 -1
- package/dist/hybrid-highligher/index.js.map +0 -1
- package/dist/label/component-label/component-bubble.d.ts +0 -7
- package/dist/label/component-label/component-bubble.js +0 -35
- package/dist/label/component-label/component-bubble.js.map +0 -1
- package/dist/label/component-label/component-label.d.ts +0 -9
- package/dist/label/component-label/component-label.js +0 -32
- package/dist/label/component-label/component-label.js.map +0 -1
- package/dist/label/component-label/duo-component-bubble.module.scss +0 -24
- package/dist/label/component-label/index.d.ts +0 -2
- package/dist/label/component-label/index.js +0 -6
- package/dist/label/component-label/index.js.map +0 -1
- package/dist/label/component-label/scope-bubble.d.ts +0 -6
- package/dist/label/component-label/scope-bubble.js +0 -28
- package/dist/label/component-label/scope-bubble.js.map +0 -1
- package/dist/label/default-label/default-label.d.ts +0 -5
- package/dist/label/default-label/default-label.js +0 -30
- package/dist/label/default-label/default-label.js.map +0 -1
- package/dist/label/default-label/default-label.module.scss +0 -12
- package/dist/label/default-label/index.d.ts +0 -1
- package/dist/label/default-label/index.js +0 -6
- package/dist/label/default-label/index.js.map +0 -1
- package/dist/multi-highlighter/index.d.ts +0 -2
- package/dist/multi-highlighter/index.js +0 -6
- package/dist/multi-highlighter/index.js.map +0 -1
- package/dist/multi-highlighter/multi-highlighter.composition.d.ts +0 -4
- package/dist/multi-highlighter/multi-highlighter.composition.js.map +0 -1
- package/dist/multi-highlighter/multi-highlighter.d.ts +0 -3
- package/dist/multi-highlighter/multi-highlighter.js.map +0 -1
- package/dist/multi-highlighter/multi-highlighter.spec.js.map +0 -1
- package/dist/multi-highlighter/use-multi-highlighter.js.map +0 -1
- package/label/component-label/component-bubble.tsx +0 -30
- package/label/component-label/component-label.tsx +0 -31
- package/label/component-label/duo-component-bubble.module.scss +0 -24
- package/label/component-label/index.ts +0 -2
- package/label/component-label/scope-bubble.tsx +0 -20
- package/label/default-label/default-label.module.scss +0 -12
- package/label/default-label/default-label.tsx +0 -22
- package/label/default-label/index.ts +0 -1
- package/multi-highlighter/index.ts +0 -2
- package/multi-highlighter/multi-highlighter.tsx +0 -9
- 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 {
|
|
2
|
-
export type {
|
|
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, {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
import '
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
}
|
package/label/links.tsx
ADDED
|
@@ -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
|
+
}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/react.ui.component-highlighter",
|
|
3
|
-
"version": "0.0.
|
|
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.
|
|
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
|
-
"
|
|
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/
|
|
25
|
-
"@teambit/react.
|
|
26
|
-
"@teambit/react.
|
|
27
|
-
"@teambit/
|
|
28
|
-
"@teambit/
|
|
29
|
-
"@teambit/component.modules.component-url": "0.0.
|
|
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.
|
|
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.
|
|
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
package/use-animation-frame.tsx
CHANGED
|
@@ -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,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/dist/bubble/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const bubble: string;
|
package/dist/bubble/index.js
DELETED
|
@@ -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
|
package/dist/bubble/index.js.map
DELETED
|
@@ -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;
|