@semcore/button 17.0.0-prerelease.30 → 17.0.0-prerelease.34

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 (56) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/lib/cjs/component/Button/Button.js +117 -13
  3. package/lib/cjs/component/Button/Button.js.map +1 -1
  4. package/lib/cjs/component/Button/Button.type.js.map +1 -1
  5. package/lib/cjs/component/Button/SpinButton.js.map +1 -0
  6. package/lib/cjs/component/ButtonLink/ButtonLink.js +28 -53
  7. package/lib/cjs/component/ButtonLink/ButtonLink.js.map +1 -1
  8. package/lib/cjs/component/ButtonLink/ButtonLink.type.js.map +1 -1
  9. package/lib/cjs/component/ButtonLink/buttonLink.shadow.css +10 -140
  10. package/lib/cjs/index.js +3 -4
  11. package/lib/cjs/index.js.map +1 -1
  12. package/lib/es6/component/Button/Button.js +119 -15
  13. package/lib/es6/component/Button/Button.js.map +1 -1
  14. package/lib/es6/component/Button/Button.type.js.map +1 -1
  15. package/lib/es6/component/Button/SpinButton.js.map +1 -0
  16. package/lib/es6/component/ButtonLink/ButtonLink.js +29 -55
  17. package/lib/es6/component/ButtonLink/ButtonLink.js.map +1 -1
  18. package/lib/es6/component/ButtonLink/ButtonLink.type.js.map +1 -1
  19. package/lib/es6/component/ButtonLink/buttonLink.shadow.css +10 -140
  20. package/lib/es6/index.js +1 -2
  21. package/lib/es6/index.js.map +1 -1
  22. package/lib/esm/component/Button/Button.mjs +117 -12
  23. package/lib/esm/component/ButtonLink/ButtonLink.mjs +29 -53
  24. package/lib/esm/component/ButtonLink/buttonLink.shadow.css +10 -140
  25. package/lib/esm/index.mjs +1 -2
  26. package/lib/types/component/Button/Button.d.ts +28 -1
  27. package/lib/types/component/Button/Button.type.d.ts +39 -19
  28. package/lib/types/component/ButtonLink/ButtonLink.type.d.ts +14 -16
  29. package/lib/types/index.d.ts +1 -2
  30. package/package.json +7 -7
  31. package/src/component/Button/Button.tsx +144 -7
  32. package/src/component/Button/Button.type.ts +45 -30
  33. package/src/component/ButtonLink/ButtonLink.tsx +22 -27
  34. package/src/component/ButtonLink/ButtonLink.type.ts +14 -22
  35. package/src/component/ButtonLink/buttonLink.shadow.css +10 -140
  36. package/src/index.ts +1 -2
  37. package/lib/cjs/component/AbstractButton/AbstractButton.js +0 -136
  38. package/lib/cjs/component/AbstractButton/AbstractButton.js.map +0 -1
  39. package/lib/cjs/component/AbstractButton/AbstractButton.type.js +0 -2
  40. package/lib/cjs/component/AbstractButton/AbstractButton.type.js.map +0 -1
  41. package/lib/cjs/component/AbstractButton/SpinButton.js.map +0 -1
  42. package/lib/es6/component/AbstractButton/AbstractButton.js +0 -129
  43. package/lib/es6/component/AbstractButton/AbstractButton.js.map +0 -1
  44. package/lib/es6/component/AbstractButton/AbstractButton.type.js +0 -2
  45. package/lib/es6/component/AbstractButton/AbstractButton.type.js.map +0 -1
  46. package/lib/es6/component/AbstractButton/SpinButton.js.map +0 -1
  47. package/lib/esm/component/AbstractButton/AbstractButton.mjs +0 -129
  48. package/lib/types/component/AbstractButton/AbstractButton.d.ts +0 -21
  49. package/lib/types/component/AbstractButton/AbstractButton.type.d.ts +0 -37
  50. package/src/component/AbstractButton/AbstractButton.tsx +0 -171
  51. package/src/component/AbstractButton/AbstractButton.type.ts +0 -43
  52. /package/lib/cjs/component/{AbstractButton → Button}/SpinButton.js +0 -0
  53. /package/lib/es6/component/{AbstractButton → Button}/SpinButton.js +0 -0
  54. /package/lib/esm/component/{AbstractButton → Button}/SpinButton.mjs +0 -0
  55. /package/lib/types/component/{AbstractButton → Button}/SpinButton.d.ts +0 -0
  56. /package/src/component/{AbstractButton → Button}/SpinButton.tsx +0 -0
@@ -1,9 +1,12 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { createComponent, sstyled, assignProps } from "@semcore/core";
3
- import { Box } from "@semcore/base-components";
2
+ import { sstyled, createComponent, Component, CORE_INSTANCE, assignProps } from "@semcore/core";
3
+ import { NeighborLocation, Box, Hint } from "@semcore/base-components";
4
+ import addonTextChildren from "@semcore/core/lib/utils/addonTextChildren";
5
+ import hasLabels from "@semcore/core/lib/utils/hasLabels";
6
+ import logger from "@semcore/core/lib/utils/logger";
4
7
  import { Text } from "@semcore/typography";
5
8
  import React from "react";
6
- import { AbstractButton } from "../AbstractButton/AbstractButton.mjs";
9
+ import SpinButton from "./SpinButton.mjs";
7
10
  /*!__reshadow-styles__:"./button.shadow.css"*/
8
11
  const style = (
9
12
  /*__reshadow_css_start__*/
@@ -42,9 +45,109 @@ const style = (
42
45
  "_theme_tertiary-invert": "_theme_tertiary-invert_1vv7x_gg_"
43
46
  })
44
47
  );
45
- class RootButton extends AbstractButton {
46
- getTextColor() {
47
- return void 0;
48
+ const MAP_USE_DEFAULT_THEME = {
49
+ primary: "info",
50
+ secondary: "muted",
51
+ tertiary: "info"
52
+ };
53
+ class RootButton extends Component {
54
+ constructor(...args) {
55
+ super(...args);
56
+ _defineProperty(this, "containerRef", /* @__PURE__ */ React.createRef());
57
+ _defineProperty(this, "state", {
58
+ ariaLabelledByContent: null
59
+ });
60
+ }
61
+ getTextProps() {
62
+ const {
63
+ size
64
+ } = this.asProps;
65
+ return {
66
+ size,
67
+ "hint:triggerRef": this.containerRef
68
+ };
69
+ }
70
+ getAddonProps() {
71
+ const {
72
+ size
73
+ } = this.asProps;
74
+ return {
75
+ size
76
+ };
77
+ }
78
+ componentDidMount() {
79
+ if (process.env.NODE_ENV !== "production") {
80
+ logger.warn(this.containerRef.current && !hasLabels(this.containerRef.current) && !this.asProps.title, `'title' or 'aria-label' or 'aria-labelledby' are required props for buttons without text content`, this.asProps["data-ui-name"] || RootButton.displayName);
81
+ }
82
+ const ariaLabelledby = this.asProps["aria-labelledby"];
83
+ if (ariaLabelledby) {
84
+ setTimeout(() => {
85
+ var _a;
86
+ this.setState({
87
+ ariaLabelledByContent: ((_a = document.getElementById(ariaLabelledby)) == null ? void 0 : _a.textContent) ?? ""
88
+ });
89
+ }, 0);
90
+ }
91
+ }
92
+ render() {
93
+ var _ref = this.asProps;
94
+ const {
95
+ styles,
96
+ use,
97
+ theme = typeof use === "string" && MAP_USE_DEFAULT_THEME[use],
98
+ loading,
99
+ disabled = loading,
100
+ size,
101
+ neighborLocation,
102
+ children,
103
+ title,
104
+ ["aria-label"]: ariaLabel,
105
+ Children,
106
+ addonLeft: AddonLeft,
107
+ addonRight: AddonRight,
108
+ hintPlacement
109
+ } = this.asProps;
110
+ const SButton = Box;
111
+ const Button2 = this[CORE_INSTANCE];
112
+ const useTheme = use && theme ? `${use}-${theme}` : false;
113
+ const SInner = Box;
114
+ const SSpin = Box;
115
+ const buttonAriaLabel = title ?? ariaLabel ?? this.state.ariaLabelledByContent ?? "";
116
+ const showHint = children === void 0 || title;
117
+ return /* @__PURE__ */ React.createElement(NeighborLocation.Detect, {
118
+ neighborLocation
119
+ }, (neighborLocation2) => {
120
+ var _ref4;
121
+ return _ref4 = sstyled(styles), /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(SButton, _ref4.cn("SButton", {
122
+ ...assignProps({
123
+ "invertOutline": theme === "invert",
124
+ "type": "button",
125
+ "tag": "button",
126
+ "tabIndex": 0,
127
+ "disabled": disabled,
128
+ "use:theme": useTheme,
129
+ "ref": this.containerRef,
130
+ "aria-busy": loading,
131
+ "__excludeProps": ["title"],
132
+ "aria-label": showHint ? buttonAriaLabel : void 0,
133
+ "neighborLocation": neighborLocation2
134
+ }, _ref)
135
+ }), /* @__PURE__ */ React.createElement(SInner, _ref4.cn("SInner", {
136
+ "tag": "span",
137
+ "loading": loading,
138
+ "data-ui-name": `${this.asProps["data-ui-name"]}.InnerWrapper`
139
+ }), AddonLeft ? /* @__PURE__ */ React.createElement(Button2.Addon, null, /* @__PURE__ */ React.createElement(AddonLeft, _ref4.cn("AddonLeft", {}))) : null, addonTextChildren(Children, Button2.Text, Button2.Addon), AddonRight ? /* @__PURE__ */ React.createElement(Button2.Addon, null, /* @__PURE__ */ React.createElement(AddonRight, _ref4.cn("AddonRight", {}))) : null), loading && /* @__PURE__ */ React.createElement(SSpin, _ref4.cn("SSpin", {
140
+ "tag": "span"
141
+ }), /* @__PURE__ */ React.createElement(SpinButton, _ref4.cn("SpinButton", {
142
+ "centered": true,
143
+ "size": size,
144
+ "theme": useTheme
145
+ })))), showHint && /* @__PURE__ */ React.createElement(Hint, _ref4.cn("Hint", {
146
+ "triggerRef": this.containerRef,
147
+ "timeout": [250, 50],
148
+ "placement": hintPlacement
149
+ }), buttonAriaLabel));
150
+ });
48
151
  }
49
152
  }
50
153
  _defineProperty(RootButton, "displayName", "Button");
@@ -54,19 +157,19 @@ _defineProperty(RootButton, "defaultProps", {
54
157
  size: "m"
55
158
  });
56
159
  function ButtonText(props) {
57
- var _ref = arguments[0], _ref3;
160
+ var _ref2 = arguments[0], _ref5;
58
161
  const SText = Text;
59
- return _ref3 = sstyled(props.styles), /* @__PURE__ */ React.createElement(SText, _ref3.cn("SText", {
60
- ...assignProps({}, _ref)
162
+ return _ref5 = sstyled(props.styles), /* @__PURE__ */ React.createElement(SText, _ref5.cn("SText", {
163
+ ...assignProps({}, _ref2)
61
164
  }));
62
165
  }
63
166
  function Addon(props) {
64
- var _ref2 = arguments[0], _ref4;
167
+ var _ref3 = arguments[0], _ref6;
65
168
  const SAddon = Box;
66
- return _ref4 = sstyled(props.styles), /* @__PURE__ */ React.createElement(SAddon, _ref4.cn("SAddon", {
169
+ return _ref6 = sstyled(props.styles), /* @__PURE__ */ React.createElement(SAddon, _ref6.cn("SAddon", {
67
170
  ...assignProps({
68
171
  "tag": "span"
69
- }, _ref2)
172
+ }, _ref3)
70
173
  }));
71
174
  }
72
175
  const Button = createComponent(RootButton, {
@@ -74,5 +177,7 @@ const Button = createComponent(RootButton, {
74
177
  Addon
75
178
  });
76
179
  export {
180
+ MAP_USE_DEFAULT_THEME,
181
+ RootButton,
77
182
  Button as default
78
183
  };
@@ -1,77 +1,53 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { createComponent, sstyled, assignProps } from "@semcore/core";
3
- import { Box } from "@semcore/base-components";
4
- import resolveColorEnhance from "@semcore/core/lib/utils/enhances/resolveColorEnhance";
5
- import { Text } from "@semcore/typography";
2
+ import { createComponent, Component, sstyled, assignProps } from "@semcore/core";
3
+ import Link from "@semcore/link";
6
4
  import React from "react";
7
- import { AbstractButton } from "../AbstractButton/AbstractButton.mjs";
8
5
  /*!__reshadow-styles__:"./buttonLink.shadow.css"*/
9
6
  const style = (
10
7
  /*__reshadow_css_start__*/
11
8
  (sstyled.insert(
12
9
  /*__inner_css_start__*/
13
- ".___SButton_b33zi_gg_{display:inline-flex;font-family:inherit;font-size:var(--intergalactic-fs-200, 14px);color:var(--intergalactic-text-link, #006dca);line-height:normal;position:relative;cursor:pointer;border:0;padding:0;margin:0;box-shadow:none;-webkit-tap-highlight-color:transparent;background:0 0;transition:color .15s ease-in-out}.___SButton_b33zi_gg_,.___SButton_b33zi_gg_:active{-webkit-text-decoration:none;text-decoration:none}@media (hover:hover){.___SButton_b33zi_gg_:hover{-webkit-text-decoration:none;text-decoration:none}}.___SButton_b33zi_gg_::-moz-focus-inner{border:0;padding:0}.___SButton_b33zi_gg_.__active_b33zi_gg_,.___SButton_b33zi_gg_:active{color:var(--intergalactic-text-link-hover-active, #044792)}@media (hover:hover){.___SButton_b33zi_gg_:hover{color:var(--intergalactic-text-link-hover-active, #044792)}}.___SButton_b33zi_gg_.__active_b33zi_gg_ .___SText_b33zi_gg_,.___SButton_b33zi_gg_:active .___SText_b33zi_gg_{box-shadow:0 1px 0 0 currentColor}@media (hover:hover){.___SButton_b33zi_gg_:hover .___SText_b33zi_gg_{box-shadow:0 1px 0 0 currentColor}}.___SButton_b33zi_gg_.__enableVisited_b33zi_gg_:visited{color:var(--intergalactic-text-link-visited, #8649e1)}@media (hover:hover){.___SButton_b33zi_gg_.__enableVisited_b33zi_gg_:visited:hover{color:var(--intergalactic-text-link-visited, #8649e1)}}.___SButton_b33zi_gg_ .___SText_b33zi_gg_{box-shadow:0 1px 0 0 transparent;transition:box-shadow .15s ease-in-out}.___SButton_b33zi_gg_.__disabled_b33zi_gg_{opacity:var(--intergalactic-disabled-opacity, 0.3);cursor:default;pointer-events:none}.___SButton_b33zi_gg_._use_secondary_b33zi_gg_{color:var(--intergalactic-text-hint, #6c6e79)}.___SButton_b33zi_gg_._use_secondary_b33zi_gg_.__active_b33zi_gg_,.___SButton_b33zi_gg_._use_secondary_b33zi_gg_:active{color:var(--intergalactic-text-hint-hover-active, #484a54)}@media (hover:hover){.___SButton_b33zi_gg_._use_secondary_b33zi_gg_:hover{color:var(--intergalactic-text-hint-hover-active, #484a54)}}.___SButton_b33zi_gg_._use_secondary_b33zi_gg_ .___SText_b33zi_gg_{box-shadow:none;border-bottom-width:1px;border-bottom-style:dashed;border-color:currentColor}.___SAddon_b33zi_gg_,.___SInner_b33zi_gg_{display:inline-flex;justify-content:center;align-items:baseline}.___SInner_b33zi_gg_{height:100%;width:100%}.___SAddon_b33zi_gg_{vertical-align:middle;pointer-events:none;align-self:center}.___SButton_b33zi_gg_ .___SAddon_b33zi_gg_:not(:only-child):first-child{margin-right:var(--intergalactic-spacing-1x, 4px)}.___SButton_b33zi_gg_ .___SAddon_b33zi_gg_:not(:only-child):last-child{margin-left:var(--intergalactic-spacing-1x, 4px)}.___SButton_b33zi_gg_.__text-color_b33zi_gg_{color:var(--text-color_b33zi)}.___SButton_b33zi_gg_.__text-color_b33zi_gg_.__active_b33zi_gg_,.___SButton_b33zi_gg_.__text-color_b33zi_gg_:active{color:var(--text-color_b33zi);filter:brightness(.8)}@media (hover:hover){.___SButton_b33zi_gg_.__text-color_b33zi_gg_:hover{color:var(--text-color_b33zi);filter:brightness(.8)}}.___SButton_b33zi_gg_._size_100_b33zi_gg_{font-size:var(--intergalactic-fs-100, 12px);line-height:var(--intergalactic-lh-100, 133%)}.___SButton_b33zi_gg_._size_200_b33zi_gg_{font-size:var(--intergalactic-fs-200, 14px);line-height:var(--intergalactic-lh-200, 142%)}.___SButton_b33zi_gg_._size_300_b33zi_gg_{font-size:var(--intergalactic-fs-300, 16px);line-height:var(--intergalactic-lh-300, 150%)}.___SButton_b33zi_gg_._size_400_b33zi_gg_{font-size:var(--intergalactic-fs-400, 20px);line-height:var(--intergalactic-lh-400, 120%)}.___SButton_b33zi_gg_._size_500_b33zi_gg_{font-size:var(--intergalactic-fs-500, 24px);line-height:var(--intergalactic-lh-500, 117%)}.___SButton_b33zi_gg_._size_600_b33zi_gg_{font-size:var(--intergalactic-fs-600, 32px);line-height:var(--intergalactic-lh-600, 125%)}.___SButton_b33zi_gg_._size_700_b33zi_gg_{font-size:var(--intergalactic-fs-700, 36px);line-height:var(--intergalactic-lh-700, 110%)}.___SButton_b33zi_gg_._size_800_b33zi_gg_{font-size:var(--intergalactic-fs-800, 48px);line-height:var(--intergalactic-lh-800, 117%)}@media (prefers-reduced-motion){.___SButton_b33zi_gg_,.___SButton_b33zi_gg_ .___SText_b33zi_gg_{transition:none}}",
10
+ ".___SButtonLink_3pzzd_gg_{border:0;font-family:inherit}.___SButtonLink_3pzzd_gg_._use_primary_3pzzd_gg_:not(.__color_3pzzd_gg_){color:var(--intergalactic-text-link, #006dca)}.___SButtonLink_3pzzd_gg_._use_primary_3pzzd_gg_.__active_3pzzd_gg_:not(.__color_3pzzd_gg_),.___SButtonLink_3pzzd_gg_._use_primary_3pzzd_gg_:not(.__color_3pzzd_gg_):active{color:var(--intergalactic-text-link-hover-active, #044792)}@media (hover:hover){.___SButtonLink_3pzzd_gg_._use_primary_3pzzd_gg_:not(.__color_3pzzd_gg_):hover{color:var(--intergalactic-text-link-hover-active, #044792)}}.___SButtonLink_3pzzd_gg_._use_secondary_3pzzd_gg_:not(.__color_3pzzd_gg_){color:var(--intergalactic-text-hint, #6c6e79)}.___SButtonLink_3pzzd_gg_._use_secondary_3pzzd_gg_.__active_3pzzd_gg_:not(.__color_3pzzd_gg_),.___SButtonLink_3pzzd_gg_._use_secondary_3pzzd_gg_:not(.__color_3pzzd_gg_):active{color:var(--intergalactic-text-hint-hover-active, #484a54)}@media (hover:hover){.___SButtonLink_3pzzd_gg_._use_secondary_3pzzd_gg_:not(.__color_3pzzd_gg_):hover{color:var(--intergalactic-text-hint-hover-active, #484a54)}}.___SButtonLink_3pzzd_gg_._use_secondary_3pzzd_gg_ .___SText_3pzzd_gg_{text-decoration-style:dashed;text-decoration-color:currentColor}",
14
11
  /*__inner_css_end__*/
15
- "b33zi_gg_"
12
+ "3pzzd_gg_"
16
13
  ), /*__reshadow_css_end__*/
17
14
  {
18
- "__SButton": "___SButton_b33zi_gg_",
19
- "_disabled": "__disabled_b33zi_gg_",
20
- "__SInner": "___SInner_b33zi_gg_",
21
- "__SAddon": "___SAddon_b33zi_gg_",
22
- "_size_100": "_size_100_b33zi_gg_",
23
- "_size_200": "_size_200_b33zi_gg_",
24
- "_size_300": "_size_300_b33zi_gg_",
25
- "_size_400": "_size_400_b33zi_gg_",
26
- "_size_500": "_size_500_b33zi_gg_",
27
- "_size_600": "_size_600_b33zi_gg_",
28
- "_size_700": "_size_700_b33zi_gg_",
29
- "_size_800": "_size_800_b33zi_gg_",
30
- "_active": "__active_b33zi_gg_",
31
- "__SText": "___SText_b33zi_gg_",
32
- "_enableVisited": "__enableVisited_b33zi_gg_",
33
- "_use_secondary": "_use_secondary_b33zi_gg_",
34
- "_text-color": "__text-color_b33zi_gg_",
35
- "--text-color": "--text-color_b33zi"
15
+ "__SButtonLink": "___SButtonLink_3pzzd_gg_",
16
+ "_use_secondary": "_use_secondary_3pzzd_gg_",
17
+ "__SText": "___SText_3pzzd_gg_",
18
+ "_use_primary": "_use_primary_3pzzd_gg_",
19
+ "_color": "__color_3pzzd_gg_",
20
+ "_active": "__active_3pzzd_gg_"
36
21
  })
37
22
  );
38
- const enhance = {
39
- resolveColor: resolveColorEnhance()
40
- };
41
- class RootButtonLink extends AbstractButton {
42
- getTextColor() {
23
+ class RootButtonLink extends Component {
24
+ render() {
25
+ var _ref = this.asProps, _ref2;
26
+ const SButtonLink = Link;
43
27
  const {
44
- color,
45
- resolveColor
28
+ disabled
46
29
  } = this.asProps;
47
- return resolveColor(color);
30
+ return _ref2 = sstyled(style), /* @__PURE__ */ React.createElement(SButtonLink, _ref2.cn("SButtonLink", {
31
+ ...assignProps({
32
+ "tag": "button",
33
+ "type": "button",
34
+ "use:disabled": disabled,
35
+ "use:tabIndex": 0
36
+ }, _ref)
37
+ }));
48
38
  }
49
39
  }
50
40
  _defineProperty(RootButtonLink, "displayName", "ButtonLink");
51
- _defineProperty(RootButtonLink, "enhance", Object.values(enhance));
52
41
  _defineProperty(RootButtonLink, "style", style);
53
42
  _defineProperty(RootButtonLink, "defaultProps", {
54
- use: "primary"
43
+ use: "primary",
44
+ size: 200
55
45
  });
56
- function LinkText(props) {
57
- var _ref = arguments[0], _ref3;
58
- const SText = Text;
59
- return _ref3 = sstyled(props.styles), /* @__PURE__ */ React.createElement(SText, _ref3.cn("SText", {
60
- ...assignProps({}, _ref)
61
- }));
62
- }
63
- function Addon(props) {
64
- var _ref2 = arguments[0], _ref4;
65
- const SAddon = Box;
66
- return _ref4 = sstyled(props.styles), /* @__PURE__ */ React.createElement(SAddon, _ref4.cn("SAddon", {
67
- ...assignProps({
68
- "tag": "span"
69
- }, _ref2)
70
- }));
71
- }
72
46
  const ButtonLink = createComponent(RootButtonLink, {
73
- Text: LinkText,
74
- Addon
47
+ Text: Link.Text,
48
+ Addon: Link.Addon
49
+ }, {
50
+ parent: Link
75
51
  });
76
52
  export {
77
53
  ButtonLink
@@ -1,59 +1,19 @@
1
- SButton {
2
- display: inline-flex;
1
+ SButtonLink {
2
+ border: none;
3
3
  font-family: inherit;
4
- font-size: var(--intergalactic-fs-200, 14px);
4
+ }
5
+
6
+ SButtonLink[use='primary']:not([color]) {
5
7
  color: var(--intergalactic-text-link, #006dca);
6
- line-height: normal;
7
- position: relative;
8
- cursor: pointer;
9
- text-decoration: none;
10
- border: none;
11
- padding: 0;
12
- margin: 0;
13
- box-shadow: none;
14
- -webkit-tap-highlight-color: transparent;
15
- background: none;
16
- transition: color 0.15s ease-in-out;
17
8
 
9
+ &[active],
18
10
  &:active,
19
11
  &:hover {
20
- text-decoration: none;
21
- }
22
-
23
- &::-moz-focus-inner {
24
- border: none;
25
- padding: 0;
26
- }
27
-
28
- &[active],
29
- &:hover,
30
- &:active {
31
12
  color: var(--intergalactic-text-link-hover-active, #044792);
32
-
33
- & SText {
34
- box-shadow: 0 1px 0 0 currentColor;
35
- }
36
- }
37
-
38
- &[enableVisited]:visited,
39
- &[enableVisited]:visited:hover {
40
- color: var(--intergalactic-text-link-visited, #8649e1);
41
13
  }
42
-
43
- SText {
44
- box-shadow: 0 1px 0 0 transparent;
45
- transition: box-shadow 0.15s ease-in-out;
46
- }
47
- }
48
-
49
- SButton[disabled] {
50
- opacity: var(--intergalactic-disabled-opacity, 0.3);
51
- cursor: default;
52
- /* Disable link interactions */
53
- pointer-events: none;
54
14
  }
55
15
 
56
- SButton[use='secondary'] {
16
+ SButtonLink[use='secondary']:not([color]) {
57
17
  color: var(--intergalactic-text-hint, #6c6e79);
58
18
 
59
19
  &[active],
@@ -61,99 +21,9 @@ SButton[use='secondary'] {
61
21
  &:hover {
62
22
  color: var(--intergalactic-text-hint-hover-active, #484a54);
63
23
  }
64
-
65
- SText {
66
- box-shadow: none;
67
- border-bottom-width: 1px;
68
- border-bottom-style: dashed;
69
- border-color: currentColor;
70
- }
71
24
  }
72
25
 
73
- SInner {
74
- display: inline-flex;
75
- align-items: baseline;
76
- justify-content: center;
77
- height: 100%;
78
- width: 100%;
79
- }
80
-
81
- SAddon {
82
- display: inline-flex;
83
- justify-content: center;
84
- align-items: baseline;
85
- vertical-align: middle;
86
- pointer-events: none;
87
- align-self: center;
88
- }
89
-
90
- SButton SAddon {
91
- &:not(:only-child):first-child {
92
- margin-right: var(--intergalactic-spacing-1x, 4px);
93
- }
94
-
95
- &:not(:only-child):last-child {
96
- margin-left: var(--intergalactic-spacing-1x, 4px);
97
- }
98
- }
99
-
100
- SButton[text-color] {
101
- color: var(--text-color);
102
-
103
- &[active],
104
- &:hover,
105
- &:active {
106
- color: var(--text-color);
107
- filter: brightness(0.8);
108
- }
109
- }
110
-
111
- SButton[size='100'] {
112
- font-size: var(--intergalactic-fs-100, 12px);
113
- line-height: var(--intergalactic-lh-100, 133%);
114
- }
115
-
116
- SButton[size='200'] {
117
- font-size: var(--intergalactic-fs-200, 14px);
118
- line-height: var(--intergalactic-lh-200, 142%);
119
- }
120
-
121
- SButton[size='300'] {
122
- font-size: var(--intergalactic-fs-300, 16px);
123
- line-height: var(--intergalactic-lh-300, 150%);
124
- }
125
-
126
- SButton[size='400'] {
127
- font-size: var(--intergalactic-fs-400, 20px);
128
- line-height: var(--intergalactic-lh-400, 120%);
129
- }
130
-
131
- SButton[size='500'] {
132
- font-size: var(--intergalactic-fs-500, 24px);
133
- line-height: var(--intergalactic-lh-500, 117%);
134
- }
135
-
136
- SButton[size='600'] {
137
- font-size: var(--intergalactic-fs-600, 32px);
138
- line-height: var(--intergalactic-lh-600, 125%);
139
- }
140
-
141
- SButton[size='700'] {
142
- font-size: var(--intergalactic-fs-700, 36px);
143
- line-height: var(--intergalactic-lh-700, 110%);
144
- }
145
-
146
- SButton[size='800'] {
147
- font-size: var(--intergalactic-fs-800, 48px);
148
- line-height: var(--intergalactic-lh-800, 117%);
149
- }
150
-
151
- @media (prefers-reduced-motion) {
152
- SButton {
153
- transition: none;
154
-
155
- SText {
156
- transition: none;
157
- }
158
- }
26
+ SButtonLink[use='secondary'] SText {
27
+ text-decoration-style: dashed;
28
+ text-decoration-color: currentColor;
159
29
  }
package/lib/esm/index.mjs CHANGED
@@ -1,6 +1,5 @@
1
- import { default as default2 } from "./component/Button/Button.mjs";
1
+ import { MAP_USE_DEFAULT_THEME, default as default2 } from "./component/Button/Button.mjs";
2
2
  import { ButtonLink } from "./component/ButtonLink/ButtonLink.mjs";
3
- import { MAP_USE_DEFAULT_THEME } from "./component/AbstractButton/AbstractButton.mjs";
4
3
  export {
5
4
  ButtonLink,
6
5
  MAP_USE_DEFAULT_THEME,
@@ -1,3 +1,30 @@
1
- import type { ButtonComponent } from './Button.type';
1
+ import { Component } from '@semcore/core';
2
+ import React from 'react';
3
+ import type { ButtonProps, ButtonComponent } from './Button.type';
4
+ export declare const MAP_USE_DEFAULT_THEME: Record<string, string>;
5
+ type State = {
6
+ ariaLabelledByContent: null | string;
7
+ };
8
+ export declare class RootButton extends Component<ButtonProps, [], never, {}, State> {
9
+ static displayName: string;
10
+ static style: {
11
+ [key: string]: string;
12
+ };
13
+ static defaultProps: {
14
+ use: string;
15
+ size: string;
16
+ };
17
+ containerRef: React.RefObject<HTMLButtonElement>;
18
+ state: State;
19
+ getTextProps(): {
20
+ size: "l" | "m" | undefined;
21
+ 'hint:triggerRef': React.RefObject<HTMLButtonElement>;
22
+ };
23
+ getAddonProps(): {
24
+ size: "l" | "m" | undefined;
25
+ };
26
+ componentDidMount(): void;
27
+ render(): React.JSX.Element;
28
+ }
2
29
  declare const Button: ButtonComponent;
3
30
  export default Button;
@@ -1,24 +1,44 @@
1
- import type { Intergalactic } from '@semcore/core';
2
- import type { AbstractButtonAddonProps, AbstractButtonContext, AbstractButtonTextProps, AbstractButtonProps } from '../AbstractButton/AbstractButton.type';
3
- /**
4
- * Button size
5
- * @default m
6
- */
7
- export type ButtonSize = 'l' | 'm';
8
- /**
9
- * Button type
10
- * @default secondary
11
- */
12
- type Use = 'primary' | 'secondary' | 'tertiary';
13
- /** Button theme */
14
- type Theme = 'info' | 'success' | 'brand' | 'danger' | 'muted' | 'invert';
15
- export type ButtonProps = AbstractButtonProps<ButtonSize, Use, Theme>;
16
- export type ButtonTextProps = AbstractButtonTextProps<ButtonSize>;
17
- export type ButtonAddonProps = AbstractButtonAddonProps<ButtonSize>;
18
- export type ButtonContext = AbstractButtonContext;
1
+ import type { BoxProps, NeighborItemProps, SimpleHintPopperProps } from '@semcore/base-components';
2
+ import type { Intergalactic, PropGetterFn } from '@semcore/core';
3
+ import type { TextProps } from '@semcore/typography';
4
+ import type React from 'react';
5
+ export type ButtonProps = BoxProps & NeighborItemProps & {
6
+ /** Button activity state */
7
+ active?: boolean;
8
+ /** Disabled button state */
9
+ disabled?: boolean;
10
+ /** Loading button state */
11
+ loading?: boolean;
12
+ /** Tag for the left Addon */
13
+ addonLeft?: React.ElementType;
14
+ /** Tag for the right Addon */
15
+ addonRight?: React.ElementType;
16
+ /**
17
+ * Placement for hint
18
+ * @default top
19
+ */
20
+ hintPlacement?: SimpleHintPopperProps['placement'];
21
+ /** Button size.
22
+ * @default `m`
23
+ */
24
+ size?: 'l' | 'm';
25
+ /** Button usage.
26
+ * @default `primary`
27
+ */
28
+ use?: 'primary' | 'secondary' | 'tertiary';
29
+ /** Button theme.
30
+ * @default undefined
31
+ */
32
+ theme?: 'info' | 'success' | 'brand' | 'danger' | 'muted' | 'invert';
33
+ };
34
+ export type ButtonTextProps = TextProps;
35
+ export type ButtonAddonProps = BoxProps;
36
+ export type ButtonContext = {
37
+ getTextProps: PropGetterFn;
38
+ getAddonProps: PropGetterFn;
39
+ };
19
40
  export type ButtonChildren = {
20
41
  Text: Intergalactic.Component<'span', ButtonTextProps>;
21
42
  Addon: Intergalactic.Component<'span', ButtonAddonProps>;
22
43
  };
23
44
  export type ButtonComponent = Intergalactic.Component<'button', ButtonProps, ButtonContext> & ButtonChildren;
24
- export {};
@@ -1,21 +1,19 @@
1
+ import type { BoxProps } from '@semcore/base-components';
1
2
  import type { Intergalactic } from '@semcore/core';
2
- import type { AbstractButtonAddonProps, AbstractButtonContext, AbstractButtonTextProps, AbstractButtonProps } from '../AbstractButton/AbstractButton.type';
3
- /**
4
- * Button link size
5
- */
6
- export type ButtonLinkSize = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800;
7
- /**
8
- * Button link type
9
- * @default primary
10
- */
11
- type Use = 'primary' | 'secondary';
12
- export type ButtonLinkProps = AbstractButtonProps<ButtonLinkSize, Use, never>;
13
- export type ButtonLinkTextProps = AbstractButtonTextProps<ButtonLinkSize>;
14
- export type ButtonLinkAddonProps = AbstractButtonAddonProps<ButtonLinkSize>;
15
- export type ButtonLinkContext = AbstractButtonContext;
3
+ import type { LinkProps } from '@semcore/link';
4
+ import type { TextProps } from '@semcore/typography';
5
+ import type { ButtonContext } from '../Button/Button.type';
6
+ export type ButtonLinkProps = Intergalactic.InternalTypings.EfficientOmit<LinkProps, 'enableVisited'> & {
7
+ /**
8
+ * Button link type
9
+ * @default primary
10
+ */
11
+ use?: 'primary' | 'secondary';
12
+ };
13
+ export type ButtonLinkTextProps = TextProps;
14
+ export type ButtonLinkAddonProps = BoxProps;
16
15
  export type ButtonLinkChildren = {
17
16
  Text: Intergalactic.Component<'span', ButtonLinkTextProps>;
18
17
  Addon: Intergalactic.Component<'span', ButtonLinkAddonProps>;
19
18
  };
20
- export type ButtonLinkComponent = Intergalactic.Component<'button', ButtonLinkProps, ButtonLinkContext> & ButtonLinkChildren;
21
- export {};
19
+ export type ButtonLinkComponent = Intergalactic.Component<'button', ButtonLinkProps, ButtonContext> & ButtonLinkChildren;
@@ -1,5 +1,4 @@
1
- export { default } from './component/Button/Button';
1
+ export { default, MAP_USE_DEFAULT_THEME } from './component/Button/Button';
2
2
  export * from './component/Button/Button.type';
3
3
  export * from './component/ButtonLink/ButtonLink';
4
4
  export * from './component/ButtonLink/ButtonLink.type';
5
- export { MAP_USE_DEFAULT_THEME } from './component/AbstractButton/AbstractButton';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@semcore/button",
3
3
  "description": "Semrush Button Component",
4
- "version": "17.0.0-prerelease.30",
4
+ "version": "17.0.0-prerelease.34",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/es6/index.js",
7
7
  "typings": "lib/types/index.d.ts",
@@ -14,8 +14,9 @@
14
14
  "types": "./lib/types/index.d.ts"
15
15
  },
16
16
  "dependencies": {
17
- "@semcore/spin": "^17.0.0-prerelease.30",
18
- "@semcore/typography": "^17.0.0-prerelease.30"
17
+ "@semcore/spin": "^17.0.0-prerelease.34",
18
+ "@semcore/typography": "^17.0.0-prerelease.34",
19
+ "@semcore/link": "^17.0.0-prerelease.34"
19
20
  },
20
21
  "peerDependencies": {
21
22
  "@semcore/base-components": "^17.0.0 || ^17.0.0-0"
@@ -26,11 +27,10 @@
26
27
  "directory": "semcore/button"
27
28
  },
28
29
  "devDependencies": {
29
- "@floating-ui/dom": "1.7.2",
30
- "@semcore/core": "17.0.0-prerelease.30",
31
- "@semcore/icon": "16.7.2-prerelease.30",
30
+ "@semcore/core": "17.0.0-prerelease.34",
31
+ "@semcore/base-components": "17.0.0-prerelease.34",
32
32
  "@semcore/testing-utils": "1.0.0",
33
- "@semcore/base-components": "17.0.0-prerelease.30"
33
+ "@semcore/icon": "16.7.2-prerelease.34"
34
34
  },
35
35
  "scripts": {
36
36
  "build": "pnpm semcore-builder && pnpm vite build"