@semcore/base-trigger 3.0.8 → 3.0.11

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.js"],"names":["default","ButtonTrigger","FilterTrigger","LinkTrigger"],"mappings":"AAAA,SAASA,OAAT,QAAwB,eAAxB;AACA,SAASA,OAAO,IAAIC,aAApB,QAAyC,iBAAzC;AACA,SAASD,OAAO,IAAIE,aAApB,QAAyC,iBAAzC;AACA,SAASF,OAAO,IAAIG,WAApB,QAAuC,eAAvC","sourcesContent":["export { default } from './BaseTrigger';\nexport { default as ButtonTrigger } from './ButtonTrigger';\nexport { default as FilterTrigger } from './FilterTrigger';\nexport { default as LinkTrigger } from './LinkTrigger';\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["default","ButtonTrigger","FilterTrigger","LinkTrigger"],"sources":["../../src/index.js"],"sourcesContent":["export { default } from './BaseTrigger';\nexport { default as ButtonTrigger } from './ButtonTrigger';\nexport { default as FilterTrigger } from './FilterTrigger';\nexport { default as LinkTrigger } from './LinkTrigger';\n"],"mappings":"AAAA,SAASA,OAAT,QAAwB,eAAxB;AACA,SAASA,OAAO,IAAIC,aAApB,QAAyC,iBAAzC;AACA,SAASD,OAAO,IAAIE,aAApB,QAAyC,iBAAzC;AACA,SAASF,OAAO,IAAIG,WAApB,QAAuC,eAAvC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@semcore/base-trigger",
3
3
  "description": "SEMRush BaseTrigger Component",
4
- "version": "3.0.8",
4
+ "version": "3.0.11",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/es6/index.js",
7
7
  "typings": "lib/types/index.d.ts",
@@ -1,69 +0,0 @@
1
- import React from 'react';
2
- import createComponent, { Component, Root, sstyled } from '@semcore/core';
3
- import { Box } from '@semcore/flex-box';
4
- import { neighborLocationEnhance } from '@semcore/neighbor-location';
5
- import keyboardFocusEnhance from '@semcore/utils/lib/enhances/keyboardFocusEnhance';
6
- import addonTextChildren from '@semcore/utils/lib/addonTextChildren';
7
- import logger from '@semcore/utils/lib/logger';
8
-
9
- import style from './style/base-trigger.shadow.css';
10
-
11
- class RootBaseTrigger extends Component {
12
- static displayName = 'BaseTrigger';
13
- static style = style;
14
- static defaultProps = {
15
- size: 'm',
16
- };
17
- static enhance = [keyboardFocusEnhance(), neighborLocationEnhance()];
18
-
19
- getTextProps() {
20
- const { placeholder, empty } = this.asProps;
21
- return {
22
- placeholder,
23
- empty,
24
- };
25
- }
26
-
27
- render() {
28
- const SBaseTrigger = Root;
29
- const SInner = 'div';
30
- const { Children, styles, theme } = this.asProps;
31
-
32
- logger.warn(
33
- theme !== undefined,
34
- "The 'theme' property is deprecated, use 'state'",
35
- this.asProps['data-ui-name'] || BaseTrigger.displayName,
36
- );
37
-
38
- // TODO: add aria
39
- return sstyled(styles)(
40
- <SBaseTrigger render={Box} state={theme}>
41
- <SInner>{addonTextChildren(Children, BaseTrigger.Text, BaseTrigger.Addon)}</SInner>
42
- </SBaseTrigger>,
43
- );
44
- }
45
- }
46
-
47
- function Text(props) {
48
- const SText = Root;
49
- const { children, styles, empty, placeholder } = props;
50
-
51
- return sstyled(styles)(
52
- /* "use:" prefix was used for backward compatibility (by lsroman) */
53
- <SText render={Box} use:placeholder={empty}>
54
- {empty ? placeholder : children}
55
- </SText>,
56
- );
57
- }
58
-
59
- function Addon(props) {
60
- const SAddon = Root;
61
- return sstyled(props.styles)(<SAddon render={Box} />);
62
- }
63
-
64
- const BaseTrigger = createComponent(RootBaseTrigger, {
65
- Text,
66
- Addon,
67
- });
68
-
69
- export default BaseTrigger;
@@ -1,41 +0,0 @@
1
- import React from 'react';
2
- import createComponent, { Component, Root, sstyled } from '@semcore/core';
3
- import addonTextChildren from '@semcore/utils/lib/addonTextChildren';
4
- import ChevronDown from '@semcore/icon/ChevronDown/m';
5
- import BaseTrigger from './BaseTrigger';
6
- import Spin from '@semcore/spin';
7
-
8
- import style from './style/button-trigger.shadow.css';
9
-
10
- class RootButtonTrigger extends Component {
11
- static displayName = 'ButtonTrigger';
12
- static style = style;
13
-
14
- render() {
15
- const SButtonAddon = ButtonTrigger.Addon;
16
- const SButtonTriggerSpin = Spin;
17
- const { Children, styles, loading } = this.asProps;
18
-
19
- return sstyled(styles)(
20
- <Root render={BaseTrigger}>
21
- {addonTextChildren(Children, ButtonTrigger.Text, ButtonTrigger.Addon)}
22
- <SButtonAddon>
23
- {loading ? <SButtonTriggerSpin size="xs" theme={false} /> : <ChevronDown />}
24
- </SButtonAddon>
25
- </Root>,
26
- );
27
- }
28
- }
29
-
30
- const ButtonTrigger = createComponent(
31
- RootButtonTrigger,
32
- {
33
- Text: BaseTrigger.Text,
34
- Addon: BaseTrigger.Addon,
35
- },
36
- {
37
- parent: BaseTrigger,
38
- },
39
- );
40
-
41
- export default ButtonTrigger;
@@ -1,79 +0,0 @@
1
- import React from 'react';
2
- import createComponent, { Component, Root, sstyled } from '@semcore/core';
3
- import BaseTrigger from './BaseTrigger';
4
- import { Box } from '@semcore/flex-box';
5
- import NeighborLocation from '@semcore/neighbor-location';
6
- import Dot from '@semcore/dot';
7
- import Close from '@semcore/icon/Close/m';
8
- import ChevronDown from '@semcore/icon/ChevronDown/m';
9
- import { callAllEventHandlers } from '@semcore/utils/lib/assignProps';
10
- import addonTextChildren from '@semcore/utils/lib/addonTextChildren';
11
-
12
- import style from './style/filter-trigger.shadow.css';
13
-
14
- class RootFilterTrigger extends Component {
15
- static displayName = 'FilterTrigger';
16
- static style = style;
17
-
18
- handleStopPropagation = (e) => e.stopPropagation();
19
-
20
- render() {
21
- const SWrapper = Root;
22
- const SFilterTrigger = BaseTrigger;
23
- const { Children, styles, empty, onClear, size, placeholder, active, disabled } = this.asProps;
24
-
25
- return sstyled(styles)(
26
- <SWrapper render={Box}>
27
- <NeighborLocation>
28
- <SFilterTrigger
29
- w="100%"
30
- size={size}
31
- placeholder={placeholder}
32
- empty={empty}
33
- selected={!empty}
34
- active={active}
35
- disabled={disabled}
36
- >
37
- {addonTextChildren(Children, FilterTrigger.Text, [
38
- FilterTrigger.Addon,
39
- FilterTrigger.Counter,
40
- ])}
41
- {empty && <FilterTrigger.Addon tag={ChevronDown} />}
42
- </SFilterTrigger>
43
- {!empty && (
44
- <SFilterTrigger
45
- tag="button"
46
- size={size}
47
- empty={empty}
48
- selected
49
- onClick={callAllEventHandlers(onClear, this.handleStopPropagation)}
50
- onKeyDown={this.handleStopPropagation}
51
- disabled={disabled}
52
- >
53
- <FilterTrigger.Addon tag={Close} />
54
- </SFilterTrigger>
55
- )}
56
- </NeighborLocation>
57
- </SWrapper>,
58
- );
59
- }
60
- }
61
-
62
- function Counter(props) {
63
- const SCounter = Root;
64
- return sstyled(props.styles)(<SCounter render={BaseTrigger.Addon} tag={Dot} />);
65
- }
66
-
67
- const FilterTrigger = createComponent(
68
- RootFilterTrigger,
69
- {
70
- Text: BaseTrigger.Text,
71
- Addon: BaseTrigger.Addon,
72
- Counter,
73
- },
74
- {
75
- parent: BaseTrigger,
76
- },
77
- );
78
-
79
- export default FilterTrigger;
@@ -1,69 +0,0 @@
1
- import React from 'react';
2
- import createComponent, { Component, Root, sstyled } from '@semcore/core';
3
- import addonTextChildren from '@semcore/utils/lib/addonTextChildren';
4
- import ChevronDown from '@semcore/icon/ChevronDown/m';
5
- import Spin from '@semcore/spin';
6
- import { Box } from '@semcore/flex-box';
7
- import resolveColor, { shade } from '@semcore/utils/lib/color';
8
- import keyboardFocusEnhance from '@semcore/utils/lib/enhances/keyboardFocusEnhance';
9
-
10
- import style from './style/link-trigger.shadow.css';
11
-
12
- class RootLinkTrigger extends Component {
13
- static displayName = 'LinkTrigger';
14
- static style = style;
15
- static defaultProps = {
16
- size: 'm',
17
- };
18
- static enhance = [keyboardFocusEnhance()];
19
-
20
- getTextProps() {
21
- const { placeholder, empty } = this.asProps;
22
- return {
23
- placeholder,
24
- empty,
25
- };
26
- }
27
-
28
- render() {
29
- const SLinkTrigger = Root;
30
- const SLinkAddon = LinkTrigger.Addon;
31
- const { Children, loading, styles, color: providedColor } = this.asProps;
32
-
33
- const color = resolveColor(providedColor);
34
- const colorHover = shade(color, -0.12);
35
-
36
- return sstyled(styles)(
37
- <SLinkTrigger render={Box} use:color={color} use:color-hover={colorHover}>
38
- {addonTextChildren(Children, LinkTrigger.Text, LinkTrigger.Addon)}
39
- <SLinkAddon>
40
- {loading ? <Spin size="xs" theme="currentColor" /> : <ChevronDown />}
41
- </SLinkAddon>
42
- </SLinkTrigger>,
43
- );
44
- }
45
- }
46
-
47
- function Text(props) {
48
- const SText = Root;
49
- const { children, styles, empty, placeholder } = props;
50
-
51
- return sstyled(styles)(
52
- /* "use:" prefix was used for backward compatibility (by lsroman) */
53
- <SText render={Box} use:placeholder={empty}>
54
- {empty ? placeholder : children}
55
- </SText>,
56
- );
57
- }
58
-
59
- function Addon(props) {
60
- const SAddon = Root;
61
- return sstyled(props.styles)(<SAddon render={Box} />);
62
- }
63
-
64
- const LinkTrigger = createComponent(RootLinkTrigger, {
65
- Text,
66
- Addon,
67
- });
68
-
69
- export default LinkTrigger;
package/src/index.d.ts DELETED
@@ -1,82 +0,0 @@
1
- import React, { ComponentProps } from 'react';
2
- import { CProps, ReturnEl } from '@semcore/core';
3
- import { Box, IBoxProps } from '@semcore/flex-box';
4
- import Dot from '@semcore/dot';
5
- import { INeighborItemProps } from '@semcore/neighbor-location';
6
- import { IKeyboardFocusProps } from '@semcore/utils/lib/enhances/keyboardFocusEnhance';
7
-
8
- export interface IBaseTriggerProps extends IBoxProps, INeighborItemProps, IKeyboardFocusProps {
9
- /**
10
- * Trigger size
11
- * @default m
12
- */
13
- size?: 'm' | 'l';
14
- /**
15
- * Trigger state
16
- */
17
- state?: 'normal' | 'valid' | 'invalid';
18
- /**
19
- * Sets active state to trigger
20
- */
21
- active?: boolean;
22
- /**
23
- * Responsible for placeholder displaying
24
- */
25
- empty?: boolean;
26
- /**
27
- * Placeholder text
28
- */
29
- placeholder?: React.ReactNode;
30
- /**
31
- * Sets disabled state to trigger
32
- */
33
- disabled?: boolean;
34
- /** Trigger theme
35
- * @deprecated
36
- * @use IBaseTriggerProps.state
37
- * */
38
- theme?: 'normal' | 'valid' | 'invalid' | false;
39
- }
40
-
41
- export interface IButtonTriggerProps extends Omit<IBaseTriggerProps, 'theme'> {
42
- /** Sets the loading state */
43
- loading?: boolean;
44
- }
45
-
46
- export interface ILinkTriggerProps extends Omit<IBaseTriggerProps, 'theme'> {
47
- /** Sets the loading state */
48
- loading?: boolean;
49
- /** Text color */
50
- color?: string;
51
- }
52
-
53
- export interface IFilterTriggerProps extends IBaseTriggerProps {
54
- /** Click on the filter cleaning cross */
55
- onClear?: (event: React.SyntheticEvent) => void;
56
- }
57
-
58
- declare const BaseTrigger: (<T>(props: CProps<IBaseTriggerProps & T>) => ReturnEl) & {
59
- Text: typeof Box;
60
- Addon: typeof Box;
61
- };
62
-
63
- declare const ButtonTrigger: (<T>(props: CProps<IButtonTriggerProps & T>) => ReturnEl) & {
64
- Text: typeof BaseTrigger.Text;
65
- Addon: typeof BaseTrigger.Addon;
66
- };
67
-
68
- declare const LinkTrigger: (<T>(props: CProps<ILinkTriggerProps & T>) => ReturnEl) & {
69
- Text: typeof BaseTrigger.Text;
70
- Addon: typeof BaseTrigger.Addon;
71
- };
72
-
73
- declare const FilterTrigger: (<T>(props: CProps<ILinkTriggerProps & T>) => ReturnEl) & {
74
- Text: typeof BaseTrigger.Text;
75
- Addon: typeof BaseTrigger.Addon;
76
- Counter: <T>(
77
- props: ComponentProps<typeof BaseTrigger.Addon> & ComponentProps<typeof Dot> & T,
78
- ) => ReturnEl;
79
- };
80
-
81
- export default BaseTrigger;
82
- export { ButtonTrigger, LinkTrigger, FilterTrigger };
package/src/index.js DELETED
@@ -1,4 +0,0 @@
1
- export { default } from './BaseTrigger';
2
- export { default as ButtonTrigger } from './ButtonTrigger';
3
- export { default as FilterTrigger } from './FilterTrigger';
4
- export { default as LinkTrigger } from './LinkTrigger';
@@ -1,181 +0,0 @@
1
- @import '@semcore/utils/style/var.css';
2
-
3
- SBaseTrigger {
4
- display: inline-block;
5
- align-items: center;
6
- justify-content: center;
7
- line-height: normal;
8
- position: relative;
9
- touch-action: manipulation;
10
- white-space: nowrap;
11
- user-select: none;
12
- box-sizing: border-box;
13
- padding: 0;
14
- margin: 0;
15
- box-shadow: none;
16
- outline: none;
17
- text-decoration: none;
18
- -webkit-tap-highlight-color: transparent;
19
- overflow: visible;
20
- outline: 0;
21
- text-align: center;
22
- vertical-align: middle;
23
- font-family: Inter, sans-serif;
24
- cursor: pointer;
25
-
26
- background: #ffffff;
27
-
28
- font-weight: 400;
29
- border: 1px solid var(--gray-200);
30
- color: var(--gray-800);
31
-
32
- &::-moz-focus-inner {
33
- border: none;
34
- padding: 0;
35
- }
36
-
37
- &:active,
38
- &:hover,
39
- &:focus {
40
- outline: 0;
41
- text-decoration: none;
42
- }
43
-
44
- &[keyboardFocused] {
45
- border: 1px solid var(--blue-400);
46
- box-shadow: var(--keyboard-focus);
47
- }
48
-
49
- &:hover {
50
- background-color: color-mod(var(--gray-400) a(20%));
51
- }
52
-
53
- &:active,
54
- &[active] {
55
- background-color: color-mod(var(--gray-400) a(30%));
56
- }
57
- }
58
-
59
- SBaseTrigger[disabled] {
60
- opacity: var(--disabled-opacity);
61
- cursor: default;
62
- pointer-events: none; /* Disable link interactions */
63
- }
64
-
65
- SBaseTrigger[keyboardFocused] {
66
- z-index: 1;
67
- }
68
-
69
- SInner {
70
- display: inline-flex;
71
- align-items: center;
72
- justify-content: center;
73
- height: 100%;
74
- width: 100%;
75
- }
76
-
77
- SText {
78
- display: inline;
79
- padding: 1px 0;
80
- overflow: hidden;
81
- white-space: nowrap;
82
- text-overflow: ellipsis;
83
- line-height: var(--lh-200);
84
- flex-grow: 1;
85
- text-align: left;
86
- }
87
-
88
- SAddon {
89
- display: inline-flex;
90
- align-items: center;
91
- justify-content: center;
92
- flex-shrink: 0;
93
- }
94
-
95
- SBaseAddon {
96
- width: 12px;
97
- height: 12px;
98
- }
99
-
100
- SBaseTrigger[size='m'] {
101
- min-width: 26px;
102
- height: 28px;
103
- border-radius: var(--rounded-m);
104
- padding: 0 8px;
105
- font-size: var(--fs-200);
106
-
107
- & SAddon {
108
- &:not(:only-child):first-child {
109
- margin-right: 8px;
110
- }
111
-
112
- &:not(:only-child):last-child {
113
- margin-left: 8px;
114
- }
115
-
116
- &:only-child {
117
- margin-left: -4px;
118
- margin-right: -4px;
119
- }
120
- }
121
- }
122
-
123
- SBaseTrigger[size='l'] {
124
- min-width: 32px;
125
- height: 40px;
126
- border-radius: var(--rounded-m);
127
- padding: 0 12px;
128
- font-size: var(--fs-300);
129
-
130
- & SAddon {
131
- &:not(:only-child):first-child {
132
- margin-right: 8px;
133
- }
134
-
135
- &:not(:only-child):last-child {
136
- margin-left: 8px;
137
- }
138
-
139
- &:only-child {
140
- margin-left: -4px;
141
- margin-right: -4px;
142
- }
143
- }
144
- }
145
-
146
- SBaseTrigger[neighborLocation='right'] {
147
- border-top-right-radius: 0;
148
- border-bottom-right-radius: 0;
149
- }
150
-
151
- SBaseTrigger[neighborLocation='both'] {
152
- border-radius: 0;
153
- margin-left: -1px;
154
- }
155
-
156
- SBaseTrigger[neighborLocation='left'] {
157
- border-top-left-radius: 0;
158
- border-bottom-left-radius: 0;
159
- margin-left: -1px;
160
- }
161
-
162
- SText[placeholder] {
163
- color: var(--gray-300);
164
- }
165
-
166
- SBaseTrigger[state='normal'] {
167
- border-color: var(--gray-200);
168
- }
169
-
170
- SBaseTrigger[state='valid'] {
171
- border-color: var(--green-200);
172
- }
173
-
174
- SBaseTrigger[state='invalid'] {
175
- border-color: var(--red-200);
176
-
177
- &[keyboardFocused] {
178
- border-color: var(--orange-400);
179
- box-shadow: 0 0 0 3px color-mod(var(--orange-400) a(30%));
180
- }
181
- }
@@ -1,10 +0,0 @@
1
- @import '@semcore/utils/style/var.css';
2
-
3
- SButtonAddon {
4
- width: 12px;
5
- height: 12px;
6
- }
7
-
8
- SButtonTriggerSpin {
9
- fill: var(--gray-500);
10
- }
@@ -1,82 +0,0 @@
1
- @import '@semcore/utils/style/var.css';
2
-
3
- SButtonTrigger {
4
- border: 1px solid var(--gray-200);
5
- background: #ffffff;
6
- color: var(--gray-800);
7
-
8
- &::-moz-focus-inner {
9
- border: none;
10
- padding: 0;
11
- }
12
-
13
- &:active,
14
- &:hover,
15
- &:focus {
16
- outline: 0;
17
- text-decoration: none;
18
- }
19
-
20
- &:active,
21
- &:hover,
22
- &[active] {
23
- background-color: color-mod(var(--gray-400) a(20%));
24
- }
25
- }
26
-
27
- SButtonTrigger[size='m'] {
28
- min-width: 26px;
29
- height: 28px;
30
- border-radius: var(--rounded-m);
31
- font-size: var(--fs-200);
32
- }
33
-
34
- SButtonTrigger[size='l'] {
35
- min-width: 32px;
36
- height: 40px;
37
- border-radius: var(--rounded-m);
38
- font-size: var(--fs-300);
39
- }
40
-
41
- SText[placeholder] {
42
- color: var(--gray-300);
43
- }
44
-
45
- SButtonTrigger[state='normal'] {
46
- border-color: var(--gray-200);
47
- }
48
-
49
- SButtonTrigger[state='valid'] {
50
- border-color: var(--green-200);
51
- }
52
-
53
- SButtonTrigger[state='invalid'] {
54
- border-color: var(--red-200);
55
- }
56
-
57
- SFilterTrigger[selected] {
58
- border-color: var(--blue-400);
59
- background-color: color-mod(var(--blue-400) a(20%));
60
- color: var(--gray-800);
61
-
62
- &[active],
63
- &:hover {
64
- background: color-mod(var(--blue-400) a(30%));
65
- }
66
- }
67
-
68
- SWrapper {
69
- display: inline-flex;
70
-
71
- &:focus {
72
- outline: none;
73
- }
74
- }
75
-
76
- SWrapper[keyboardFocused] {
77
- box-shadow: var(--keyboard-focus);
78
- }
79
-
80
- SCounter {
81
- background-color: var(--blue-400);
82
- }