@momentum-design/components 0.9.5 → 0.9.6

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.
@@ -0,0 +1,46 @@
1
+ declare const TAG_NAME: "mdc-button";
2
+ declare const BUTTON_VARIANTS: {
3
+ readonly PRIMARY: "primary";
4
+ readonly SECONDARY: "secondary";
5
+ readonly TERTIARY: "tertiary";
6
+ };
7
+ declare const PILL_BUTTON_SIZES: {
8
+ readonly 40: 40;
9
+ readonly 32: 32;
10
+ readonly 28: 28;
11
+ readonly 24: 24;
12
+ };
13
+ declare const ICON_BUTTON_SIZES: {
14
+ readonly 40: 40;
15
+ readonly 32: 32;
16
+ readonly 28: 28;
17
+ readonly 24: 24;
18
+ readonly 64: 64;
19
+ readonly 52: 52;
20
+ readonly 20: 20;
21
+ };
22
+ declare const BUTTON_COLORS: {
23
+ readonly POSITIVE: "positive";
24
+ readonly NEGATIVE: "negative";
25
+ readonly ACCENT: "accent";
26
+ readonly PROMOTIONAL: "promotional";
27
+ readonly DEFAULT: "default";
28
+ };
29
+ declare const BUTTON_TYPE_INTERNAL: {
30
+ readonly PILL: "pill";
31
+ readonly ICON: "icon";
32
+ readonly PILL_WITH_ICON: "pill-with-icon";
33
+ };
34
+ declare const BUTTON_TYPE: {
35
+ readonly BUTTON: "button";
36
+ readonly SUBMIT: "submit";
37
+ readonly RESET: "reset";
38
+ };
39
+ declare const DEFAULTS: {
40
+ VARIANT: "primary";
41
+ SIZE: 32;
42
+ COLOR: "default";
43
+ TYPE_INTERNAL: "icon";
44
+ TYPE: "button";
45
+ };
46
+ export { TAG_NAME, DEFAULTS, BUTTON_VARIANTS, PILL_BUTTON_SIZES, ICON_BUTTON_SIZES, BUTTON_COLORS, BUTTON_TYPE_INTERNAL, BUTTON_TYPE, };
@@ -0,0 +1,44 @@
1
+ import utils from '../../utils/tag-name';
2
+ const TAG_NAME = utils.constructTagName('button');
3
+ const BUTTON_VARIANTS = {
4
+ PRIMARY: 'primary',
5
+ SECONDARY: 'secondary',
6
+ TERTIARY: 'tertiary',
7
+ };
8
+ const PILL_BUTTON_SIZES = {
9
+ 40: 40,
10
+ 32: 32,
11
+ 28: 28,
12
+ 24: 24,
13
+ };
14
+ const ICON_BUTTON_SIZES = {
15
+ 64: 64,
16
+ 52: 52,
17
+ 20: 20,
18
+ ...PILL_BUTTON_SIZES,
19
+ };
20
+ const BUTTON_COLORS = {
21
+ POSITIVE: 'positive',
22
+ NEGATIVE: 'negative',
23
+ ACCENT: 'accent',
24
+ PROMOTIONAL: 'promotional',
25
+ DEFAULT: 'default',
26
+ };
27
+ const BUTTON_TYPE_INTERNAL = {
28
+ PILL: 'pill',
29
+ ICON: 'icon',
30
+ PILL_WITH_ICON: 'pill-with-icon',
31
+ };
32
+ const BUTTON_TYPE = {
33
+ BUTTON: 'button',
34
+ SUBMIT: 'submit',
35
+ RESET: 'reset',
36
+ };
37
+ const DEFAULTS = {
38
+ VARIANT: BUTTON_VARIANTS.PRIMARY,
39
+ SIZE: PILL_BUTTON_SIZES[32],
40
+ COLOR: BUTTON_COLORS.DEFAULT,
41
+ TYPE_INTERNAL: BUTTON_TYPE_INTERNAL.ICON,
42
+ TYPE: BUTTON_TYPE.BUTTON,
43
+ };
44
+ export { TAG_NAME, DEFAULTS, BUTTON_VARIANTS, PILL_BUTTON_SIZES, ICON_BUTTON_SIZES, BUTTON_COLORS, BUTTON_TYPE_INTERNAL, BUTTON_TYPE, };
@@ -0,0 +1,2 @@
1
+ declare const styles: import("lit").CSSResult[];
2
+ export default styles;
@@ -0,0 +1,195 @@
1
+ import { css } from 'lit';
2
+ import { hostFitContentStyles, hostFocusRingStyles } from '../../utils/styles';
3
+ const styles = [hostFitContentStyles, css `
4
+ :host {
5
+ cursor: pointer;
6
+ border-radius: 1.25rem;
7
+ font-weight: var(--mds-font-apps-body-large-medium-font-weight);
8
+ outline: none;
9
+ border: 0.0625rem solid transparent;
10
+
11
+ --mdc-button-primary-color: var(--mds-color-theme-inverted-text-primary-normal);
12
+ --mdc-button-primary-background-color: var(--mds-color-theme-button-primary-normal);
13
+ --mdc-button-primary-hover-background-color: var(--mds-color-theme-button-primary-hover);
14
+ --mdc-button-primary-pressed-background-color: var(--mds-color-theme-button-primary-pressed);
15
+ --mdc-button-primary-disabled-background-color: var(--mds-color-theme-button-primary-disabled);
16
+ --mdc-button-primary-disabled-color: var(--mds-color-theme-text-primary-disabled);
17
+
18
+ --mdc-button-secondary-color: var(--mds-color-theme-text-primary-normal);
19
+ --mdc-button-secondary-border-color: var(--mds-color-theme-outline-button-normal);
20
+ --mdc-button-secondary-hover-background-color: var(--mds-color-theme-button-secondary-hover);
21
+ --mdc-button-secondary-pressed-background-color: var(--mds-color-theme-button-secondary-pressed);
22
+ --mdc-button-secondary-disabled-background-color: var(--mds-color-theme-button-secondary-disabled);
23
+ --mdc-button-secondary-disabled-color: var(--mds-color-theme-text-primary-disabled);
24
+ --mdc-button-secondary-disabled-border-color: var(--mds-color-theme-outline-primary-disabled);
25
+
26
+ --mdc-button-tertiary-color: var(--mds-color-theme-text-primary-normal);
27
+ --mdc-button-tertiary-hover-background-color: var(--mds-color-theme-button-secondary-hover);
28
+ --mdc-button-tertiary-pressed-background-color: var(--mds-color-theme-button-secondary-pressed);
29
+ --mdc-button-tertiary-disabled-background-color: var(--mds-color-theme-button-secondary-disabled);
30
+ --mdc-button-tertiary-disabled-color: var(--mds-color-theme-text-primary-disabled);
31
+
32
+ --mdc-button-height-size-64: 4rem;
33
+ --mdc-button-height-size-52: 3.25rem;
34
+ --mdc-button-height-size-40: 2.5rem;
35
+ --mdc-button-height-size-32: 2rem;
36
+ --mdc-button-height-size-28: 1.75rem;
37
+ --mdc-button-height-size-24: 1.5rem;
38
+ --mdc-button-height-size-20: 1.25rem;
39
+
40
+ --mdc-button-line-height-size-40: var(--mds-font-lineheight-body-large);
41
+ --mdc-button-line-height-size-32: var(--mds-font-lineheight-body-large);
42
+ --mdc-button-line-height-size-28: var(--mds-font-lineheight-body-midsize);
43
+ --mdc-button-line-height-size-24: var(--mds-font-lineheight-body-small);
44
+ }
45
+
46
+ :host([active]){
47
+ font-weight: var(--mds-font-apps-body-large-bold-font-weight);
48
+ }
49
+
50
+
51
+ :host([variant="primary"]){
52
+ background: var(--mdc-button-primary-background-color);
53
+ color: var(--mdc-button-primary-color);
54
+ }
55
+ :host([variant="primary"]:hover){
56
+ background: var(--mdc-button-primary-hover-background-color);
57
+ }
58
+ :host([variant="primary"]:active), :host([variant="primary"].pressed){
59
+ background: var(--mdc-button-primary-pressed-background-color);
60
+ }
61
+ :host([variant="primary"][disabled]), :host([variant="primary"][soft-disabled]){
62
+ background: var(--mdc-button-primary-disabled-background-color);
63
+ color: var(--mdc-button-primary-disabled-color);
64
+ cursor: auto;
65
+ }
66
+
67
+ :host([variant="secondary"]){
68
+ color: var(--mdc-button-secondary-color);
69
+ border-color: var(--mdc-button-secondary-border-color);
70
+ }
71
+ :host([variant="secondary"]:hover){
72
+ background: var(--mdc-button-secondary-hover-background-color);
73
+ }
74
+ :host([variant="secondary"]:active), :host([variant="secondary"].pressed){
75
+ background: var(--mdc-button-secondary-pressed-background-color);
76
+ }
77
+ :host([variant="secondary"][disabled]),
78
+ :host([variant="secondary"][soft-disabled]){
79
+ color: var(--mdc-button-primary-disabled-color);
80
+ border-color: var(--mdc-button-secondary-disabled-border-color);
81
+ background: var(--mdc-button-secondary-disabled-background-color);
82
+ cursor: auto;
83
+ }
84
+
85
+ :host([variant="tertiary"]){
86
+ border-color: transparent;
87
+ color: var(--mdc-button-tertiary-color);
88
+ }
89
+ :host([variant="tertiary"]:hover){
90
+ background: var(--mdc-button-tertiary-hover-background-color);
91
+ }
92
+ :host([variant="tertiary"]:active), :host([variant="tertiary"].pressed){
93
+ background: var(--mdc-button-tertiary-pressed-background-color);
94
+ }
95
+ :host([variant="tertiary"][disabled]),
96
+ :host([variant="tertiary"][soft-disabled]){
97
+ color: var(--mdc-button-tertiary-disabled-color);
98
+ background: var(--mdc-button-tertiary-disabled-background-color);
99
+ cursor: auto;
100
+ }
101
+
102
+ :host([size="64"].mdc-icon-button),
103
+ :host([size="52"].mdc-icon-button),
104
+ :host([size="40"].mdc-icon-button),
105
+ :host([size="32"].mdc-icon-button),
106
+ :host([size="28"].mdc-icon-button),
107
+ :host([size="24"].mdc-icon-button){
108
+ border-radius: 6.25rem;
109
+ aspect-ratio: 1;
110
+ padding: unset;
111
+ }
112
+ :host([size="64"]){
113
+ height: var(--mdc-button-height-size-64);
114
+ }
115
+ :host([size="52"]){
116
+ height: var(--mdc-button-height-size-52);
117
+ }
118
+ :host([size="40"]){
119
+ height: var(--mdc-button-height-size-40);
120
+ font-size: var(--mds-font-size-body-large);
121
+ line-height: var(--mdc-button-line-height-size-40);
122
+ padding: 0 1rem;
123
+ gap: 0.5rem;
124
+ }
125
+ :host([size="32"]){
126
+ height: var(--mdc-button-height-size-32);
127
+ font-size: var(--mds-font-size-body-large);
128
+ line-height: var(--mdc-button-line-height-size-32);
129
+ padding: 0 0.75rem;
130
+ gap: 0.375rem;
131
+ }
132
+ :host([size="28"]){
133
+ height: var(--mdc-button-height-size-28);
134
+ font-size: var(--mds-font-size-body-midsize);
135
+ line-height: var(--mdc-button-line-height-size-28);
136
+ padding: 0 0.75rem;
137
+ gap: 0.375rem;
138
+ }
139
+ :host([size="24"]){
140
+ height: var(--mdc-button-height-size-24);
141
+ font-size: var(--mds-font-size-body-small);
142
+ line-height: var(--mdc-button-line-height-size-24);
143
+ padding: 0 0.625rem;
144
+ gap: 0.25rem;
145
+ }
146
+ :host([size="20"]){
147
+ height: var(--mdc-button-height-size-20);
148
+ }
149
+
150
+ :host([color="accent"]){
151
+ --mdc-button-primary-color: var(--mds-color-theme-common-text-primary-normal);
152
+ --mdc-button-primary-background-color: var(--mds-color-theme-button-accent-normal);
153
+ --mdc-button-primary-hover-background-color: var(--mds-color-theme-button-accent-hover);
154
+ --mdc-button-primary-pressed-background-color: var(--mds-color-theme-button-accent-pressed);
155
+
156
+ --mdc-button-secondary-color: var(--mds-color-theme-text-accent-normal);
157
+ --mdc-button-secondary-border-color: var(--mds-color-theme-outline-theme-normal);
158
+ --mdc-button-secondary-hover-background-color: var(--mds-color-theme-button-secondary-hover);
159
+ --mdc-button-secondary-pressed-background-color: var(--mds-color-theme-button-secondary-pressed);
160
+ }
161
+ :host([color="positive"]){
162
+ --mdc-button-primary-color: var(--mds-color-theme-common-text-primary-normal);
163
+ --mdc-button-primary-background-color: var(--mds-color-theme-button-join-normal);
164
+ --mdc-button-primary-hover-background-color: var(--mds-color-theme-button-join-hover);
165
+ --mdc-button-primary-pressed-background-color: var(--mds-color-theme-button-join-pressed);
166
+
167
+ --mdc-button-secondary-color: var(--mds-color-theme-text-success-normal);
168
+ --mdc-button-secondary-border-color: var(--mds-color-theme-outline-join-normal);
169
+ --mdc-button-secondary-hover-background-color: var(--mds-color-theme-button-secondary-hover);
170
+ --mdc-button-secondary-pressed-background-color: var(--mds-color-theme-button-secondary-pressed);
171
+ }
172
+ :host([color="negative"]){
173
+ --mdc-button-primary-color: var(--mds-color-theme-common-text-primary-normal);
174
+ --mdc-button-primary-background-color: var(--mds-color-theme-button-cancel-normal);
175
+ --mdc-button-primary-hover-background-color: var(--mds-color-theme-button-cancel-hover);
176
+ --mdc-button-primary-pressed-background-color: var(--mds-color-theme-button-cancel-pressed);
177
+
178
+ --mdc-button-secondary-color: var(--mds-color-theme-text-error-normal);
179
+ --mdc-button-secondary-border-color: var(--mds-color-theme-outline-cancel-normal);
180
+ --mdc-button-secondary-hover-background-color: var(--mds-color-theme-button-secondary-hover);
181
+ --mdc-button-secondary-pressed-background-color: var(--mds-color-theme-button-secondary-pressed);
182
+ }
183
+ :host([color="promotional"]){
184
+ --mdc-button-primary-color: var(--mds-color-theme-common-text-primary-normal);
185
+ --mdc-button-primary-background-color: var(--mds-color-theme-common-button-promotion-normal);
186
+ --mdc-button-primary-hover-background-color: var(--mds-color-theme-common-button-promotion-hover);
187
+ --mdc-button-primary-pressed-background-color: var(--mds-color-theme-common-button-promotion-active);
188
+
189
+ --mdc-button-secondary-color: var(--mds-color-theme-text-primary-normal);
190
+ --mdc-button-secondary-border-color: var(--mds-color-theme-outline-promotion-normal);
191
+ --mdc-button-secondary-hover-background-color: var(--mds-color-theme-button-secondary-hover);
192
+ --mdc-button-secondary-pressed-background-color: var(--mds-color-theme-button-secondary-pressed);
193
+ }
194
+ `, hostFocusRingStyles];
195
+ export default styles;
@@ -0,0 +1,9 @@
1
+ import type { ValueOf } from '../../utils/types';
2
+ import { BUTTON_COLORS, BUTTON_TYPE, BUTTON_TYPE_INTERNAL, BUTTON_VARIANTS, ICON_BUTTON_SIZES, PILL_BUTTON_SIZES } from './button.constants';
3
+ type ButtonVariant = ValueOf<typeof BUTTON_VARIANTS>;
4
+ type PillButtonSize = ValueOf<typeof PILL_BUTTON_SIZES>;
5
+ type IconButtonSize = ValueOf<typeof ICON_BUTTON_SIZES>;
6
+ type ButtonTypeInternal = ValueOf<typeof BUTTON_TYPE_INTERNAL>;
7
+ type ButtonType = ValueOf<typeof BUTTON_TYPE>;
8
+ type ButtonColor = ValueOf<typeof BUTTON_COLORS>;
9
+ export { ButtonVariant, PillButtonSize, IconButtonSize, ButtonTypeInternal, ButtonType, ButtonColor, };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ import { IconButtonSize } from './button.types';
2
+ /**
3
+ * Returns the icon size multiplier based on the provided button size.
4
+ *
5
+ * @param size - The size of the button.
6
+ * @returns The multiplier for the icon size.
7
+ */
8
+ declare const getIconSize: (size: IconButtonSize) => number;
9
+ /**
10
+ * Returns the name of the icon without the style suffix.
11
+ *
12
+ * @param iconName - The name of the icon.
13
+ * @returns The name of the icon without the suffix.
14
+ */
15
+ declare const getIconNameWithoutStyle: (iconName: string) => string;
16
+ export { getIconSize, getIconNameWithoutStyle };
@@ -0,0 +1,27 @@
1
+ import { ICON_BUTTON_SIZES } from './button.constants';
2
+ /**
3
+ * Returns the icon size multiplier based on the provided button size.
4
+ *
5
+ * @param size - The size of the button.
6
+ * @returns The multiplier for the icon size.
7
+ */
8
+ const getIconSize = (size) => {
9
+ switch (size) {
10
+ case ICON_BUTTON_SIZES[64]: return 2;
11
+ case ICON_BUTTON_SIZES[52]: return 1.75;
12
+ case ICON_BUTTON_SIZES[40]: return 1.25;
13
+ default: return 1;
14
+ }
15
+ };
16
+ /**
17
+ * Returns the name of the icon without the style suffix.
18
+ *
19
+ * @param iconName - The name of the icon.
20
+ * @returns The name of the icon without the suffix.
21
+ */
22
+ const getIconNameWithoutStyle = (iconName) => {
23
+ const iconParts = iconName.split('-');
24
+ const variants = ['bold', 'filled', 'regular', 'light'];
25
+ return iconParts.filter((part) => !variants.includes(part)).join('-');
26
+ };
27
+ export { getIconSize, getIconNameWithoutStyle };
@@ -0,0 +1,8 @@
1
+ import Button from './button.component';
2
+ import '../icon';
3
+ declare global {
4
+ interface HTMLElementTagNameMap {
5
+ ['mdc-button']: Button;
6
+ }
7
+ }
8
+ export default Button;
@@ -0,0 +1,5 @@
1
+ import Button from './button.component';
2
+ import { TAG_NAME } from './button.constants';
3
+ import '../icon';
4
+ Button.register(TAG_NAME);
5
+ export default Button;