@workday/canvas-kit-react 10.0.0-alpha.538-next.0 → 10.0.0-alpha.539-next.0

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 (112) hide show
  1. package/button/index.ts +8 -11
  2. package/button/lib/BaseButton.tsx +274 -256
  3. package/button/lib/Button.tsx +67 -0
  4. package/button/lib/DeleteButton.tsx +42 -58
  5. package/button/lib/PrimaryButton.tsx +82 -149
  6. package/button/lib/SecondaryButton.tsx +87 -173
  7. package/button/lib/TertiaryButton.tsx +158 -223
  8. package/button/lib/ToolbarDropdownButton.tsx +11 -2
  9. package/button/lib/ToolbarIconButton.tsx +10 -2
  10. package/button/lib/parts/ButtonLabelIcon.tsx +1 -7
  11. package/button/lib/types.ts +6 -8
  12. package/common/lib/CanvasProvider.tsx +50 -24
  13. package/dist/commonjs/button/index.d.ts +8 -5
  14. package/dist/commonjs/button/index.d.ts.map +1 -1
  15. package/dist/commonjs/button/index.js +9 -13
  16. package/dist/commonjs/button/lib/BaseButton.d.ts +69 -5
  17. package/dist/commonjs/button/lib/BaseButton.d.ts.map +1 -1
  18. package/dist/commonjs/button/lib/BaseButton.js +199 -192
  19. package/dist/commonjs/button/lib/Button.d.ts +17 -0
  20. package/dist/commonjs/button/lib/Button.d.ts.map +1 -0
  21. package/dist/commonjs/button/lib/Button.js +42 -0
  22. package/dist/commonjs/button/lib/DeleteButton.d.ts +7 -9
  23. package/dist/commonjs/button/lib/DeleteButton.d.ts.map +1 -1
  24. package/dist/commonjs/button/lib/DeleteButton.js +29 -19
  25. package/dist/commonjs/button/lib/PrimaryButton.d.ts +15 -36
  26. package/dist/commonjs/button/lib/PrimaryButton.d.ts.map +1 -1
  27. package/dist/commonjs/button/lib/PrimaryButton.js +67 -79
  28. package/dist/commonjs/button/lib/SecondaryButton.d.ts +16 -43
  29. package/dist/commonjs/button/lib/SecondaryButton.d.ts.map +1 -1
  30. package/dist/commonjs/button/lib/SecondaryButton.js +71 -96
  31. package/dist/commonjs/button/lib/TertiaryButton.d.ts +35 -47
  32. package/dist/commonjs/button/lib/TertiaryButton.d.ts.map +1 -1
  33. package/dist/commonjs/button/lib/TertiaryButton.js +136 -134
  34. package/dist/commonjs/button/lib/ToolbarDropdownButton.d.ts.map +1 -1
  35. package/dist/commonjs/button/lib/ToolbarDropdownButton.js +11 -2
  36. package/dist/commonjs/button/lib/ToolbarIconButton.d.ts.map +1 -1
  37. package/dist/commonjs/button/lib/ToolbarIconButton.js +10 -2
  38. package/dist/commonjs/button/lib/parts/ButtonLabelIcon.d.ts +1 -7
  39. package/dist/commonjs/button/lib/parts/ButtonLabelIcon.d.ts.map +1 -1
  40. package/dist/commonjs/button/lib/types.d.ts +6 -7
  41. package/dist/commonjs/button/lib/types.d.ts.map +1 -1
  42. package/dist/commonjs/card/lib/Card.d.ts +1 -1
  43. package/dist/commonjs/card/lib/CardBody.d.ts +1 -1
  44. package/dist/commonjs/card/lib/CardBody.d.ts.map +1 -1
  45. package/dist/commonjs/common/lib/CanvasProvider.d.ts +1 -8
  46. package/dist/commonjs/common/lib/CanvasProvider.d.ts.map +1 -1
  47. package/dist/commonjs/common/lib/CanvasProvider.js +31 -13
  48. package/dist/commonjs/dialog/lib/Dialog.d.ts +1 -1
  49. package/dist/commonjs/layout/lib/Box.d.ts +3 -2
  50. package/dist/commonjs/layout/lib/Box.d.ts.map +1 -1
  51. package/dist/commonjs/layout/lib/Box.js +2 -1
  52. package/dist/commonjs/layout/lib/Flex.d.ts +1 -1
  53. package/dist/commonjs/layout/lib/Grid.d.ts +1 -1
  54. package/dist/commonjs/menu/lib/MenuItem.d.ts +1 -1
  55. package/dist/commonjs/popup/lib/Popup.d.ts +1 -1
  56. package/dist/commonjs/popup/lib/PopupBody.d.ts +1 -1
  57. package/dist/commonjs/popup/lib/PopupCloseIcon.js +1 -1
  58. package/dist/commonjs/segmented-control/lib/SegmentedControlButton.d.ts.map +1 -1
  59. package/dist/commonjs/segmented-control/lib/SegmentedControlButton.js +3 -1
  60. package/dist/commonjs/tabs/lib/TabsItem.d.ts +1 -1
  61. package/dist/es6/button/index.d.ts +8 -5
  62. package/dist/es6/button/index.d.ts.map +1 -1
  63. package/dist/es6/button/index.js +8 -5
  64. package/dist/es6/button/lib/BaseButton.d.ts +69 -5
  65. package/dist/es6/button/lib/BaseButton.d.ts.map +1 -1
  66. package/dist/es6/button/lib/BaseButton.js +199 -192
  67. package/dist/es6/button/lib/Button.d.ts +17 -0
  68. package/dist/es6/button/lib/Button.d.ts.map +1 -0
  69. package/dist/es6/button/lib/Button.js +20 -0
  70. package/dist/es6/button/lib/DeleteButton.d.ts +7 -9
  71. package/dist/es6/button/lib/DeleteButton.d.ts.map +1 -1
  72. package/dist/es6/button/lib/DeleteButton.js +31 -21
  73. package/dist/es6/button/lib/PrimaryButton.d.ts +15 -36
  74. package/dist/es6/button/lib/PrimaryButton.d.ts.map +1 -1
  75. package/dist/es6/button/lib/PrimaryButton.js +67 -79
  76. package/dist/es6/button/lib/SecondaryButton.d.ts +16 -43
  77. package/dist/es6/button/lib/SecondaryButton.d.ts.map +1 -1
  78. package/dist/es6/button/lib/SecondaryButton.js +71 -95
  79. package/dist/es6/button/lib/TertiaryButton.d.ts +35 -47
  80. package/dist/es6/button/lib/TertiaryButton.d.ts.map +1 -1
  81. package/dist/es6/button/lib/TertiaryButton.js +137 -135
  82. package/dist/es6/button/lib/ToolbarDropdownButton.d.ts.map +1 -1
  83. package/dist/es6/button/lib/ToolbarDropdownButton.js +11 -2
  84. package/dist/es6/button/lib/ToolbarIconButton.d.ts.map +1 -1
  85. package/dist/es6/button/lib/ToolbarIconButton.js +10 -2
  86. package/dist/es6/button/lib/parts/ButtonLabelIcon.d.ts +1 -7
  87. package/dist/es6/button/lib/parts/ButtonLabelIcon.d.ts.map +1 -1
  88. package/dist/es6/button/lib/types.d.ts +6 -7
  89. package/dist/es6/button/lib/types.d.ts.map +1 -1
  90. package/dist/es6/card/lib/Card.d.ts +1 -1
  91. package/dist/es6/card/lib/CardBody.d.ts +1 -1
  92. package/dist/es6/card/lib/CardBody.d.ts.map +1 -1
  93. package/dist/es6/common/lib/CanvasProvider.d.ts +1 -8
  94. package/dist/es6/common/lib/CanvasProvider.d.ts.map +1 -1
  95. package/dist/es6/common/lib/CanvasProvider.js +31 -13
  96. package/dist/es6/dialog/lib/Dialog.d.ts +1 -1
  97. package/dist/es6/layout/lib/Box.d.ts +3 -2
  98. package/dist/es6/layout/lib/Box.d.ts.map +1 -1
  99. package/dist/es6/layout/lib/Box.js +2 -1
  100. package/dist/es6/layout/lib/Flex.d.ts +1 -1
  101. package/dist/es6/layout/lib/Grid.d.ts +1 -1
  102. package/dist/es6/menu/lib/MenuItem.d.ts +1 -1
  103. package/dist/es6/popup/lib/Popup.d.ts +1 -1
  104. package/dist/es6/popup/lib/PopupBody.d.ts +1 -1
  105. package/dist/es6/popup/lib/PopupCloseIcon.js +1 -1
  106. package/dist/es6/segmented-control/lib/SegmentedControlButton.d.ts.map +1 -1
  107. package/dist/es6/segmented-control/lib/SegmentedControlButton.js +3 -1
  108. package/dist/es6/tabs/lib/TabsItem.d.ts +1 -1
  109. package/layout/lib/Box.tsx +6 -4
  110. package/package.json +5 -3
  111. package/popup/lib/PopupCloseIcon.tsx +1 -1
  112. package/segmented-control/lib/SegmentedControlButton.tsx +3 -1
@@ -1,221 +1,228 @@
1
1
  import * as React from 'react';
2
- import { ButtonLabelIcon } from './parts/ButtonLabelIcon';
3
- import { ButtonLabel } from './parts/ButtonLabel';
4
- import { createComponent, mouseFocusBehavior, focusRing, styled, } from '@workday/canvas-kit-react/common';
5
- import { boxStyleFn } from '@workday/canvas-kit-react/layout';
6
- import { borderRadius, space, spaceNumbers, type } from '@workday/canvas-kit-react/tokens';
7
- function getIconColorSelectors({ canvas: { palette: { primary: themePrimary }, }, }, color, fill) {
8
- return {
9
- '&:focus span, &:hover span, & span': {
10
- '.wd-icon-fill, .wd-icon-accent, .wd-icon-accent2': {
11
- fill: color,
12
- },
13
- '.wd-icon-background': {
14
- fill: fill ? color : undefined,
15
- },
16
- '.wd-icon-background ~ .wd-icon-accent, .wd-icon-background ~ .wd-icon-accent2': {
17
- fill: fill
18
- ? color === themePrimary.contrast
19
- ? themePrimary.main
20
- : themePrimary.contrast
21
- : color,
22
- },
23
- },
24
- };
25
- }
26
- const ButtonContainer = styled('button')({
27
- ...type.levels.subtext.large,
2
+ import { ButtonLabelIcon } from '../lib/parts/ButtonLabelIcon';
3
+ import { ButtonLabel } from '../lib/parts/ButtonLabel';
4
+ import { createComponent, focusRing } from '@workday/canvas-kit-react/common';
5
+ import { createStyles, createVars, cssVar, createModifiers } from '@workday/canvas-kit-styling';
6
+ import { Box } from '@workday/canvas-kit-react/layout';
7
+ import { space } from '@workday/canvas-kit-react/tokens';
8
+ import { base, brand, system } from '@workday/canvas-tokens-web';
9
+ /**
10
+ * Factory function for creating Button vars.
11
+ */
12
+ const createButtonVars = () => createVars('background', 'border', 'boxShadowInner', 'boxShadowOuter', 'icon', 'label', 'opacity', 'borderRadius');
13
+ /**
14
+ * Temporary css variables to be used across all Buttons.
15
+ */
16
+ export const buttonVars = {
17
+ default: createButtonVars(),
18
+ hover: createButtonVars(),
19
+ active: createButtonVars(),
20
+ focus: createButtonVars(),
21
+ disabled: createButtonVars(),
22
+ };
23
+ /**
24
+ * Base styles for Buttons.
25
+ */
26
+ const baseButtonStyles = createStyles({
27
+ fontFamily: '"Roboto", "Helvetica Neue", "Helvetica", Arial, sans-serif',
28
+ fontSize: '0.875rem',
29
+ lineHeight: 'normal',
30
+ letterSpacing: '0.015rem',
31
+ fontWeight: 'bold',
32
+ backgroundColor: cssVar(buttonVars.default.background, 'transparent'),
33
+ color: cssVar(buttonVars.default.label, cssVar(base.blackPepper400)),
34
+ borderWidth: '1px',
35
+ borderStyle: 'solid',
36
+ gap: cssVar(system.space.x2, space.xxs),
37
+ borderColor: cssVar(buttonVars.default.border, 'transparent'),
28
38
  cursor: 'pointer',
29
39
  display: 'inline-flex',
40
+ boxShadow: 'none',
30
41
  alignItems: 'center',
31
42
  justifyContent: 'center',
32
43
  boxSizing: 'border-box',
33
- boxShadow: 'none',
34
- outline: 'none',
35
- fontWeight: type.properties.fontWeights.bold,
36
- lineHeight: 'normal',
44
+ outline: '2px transparent',
37
45
  whiteSpace: 'nowrap',
38
46
  WebkitFontSmoothing: 'antialiased',
39
47
  MozOsxFontSmoothing: 'grayscale',
40
- borderRadius: borderRadius.circle,
48
+ borderRadius: cssVar(buttonVars.default.borderRadius, system.shape.circle),
41
49
  position: 'relative',
42
50
  verticalAlign: 'middle',
43
51
  overflow: 'hidden',
44
- border: '1px solid transparent',
45
- background: 'transparent',
46
52
  transition: 'box-shadow 120ms linear, border 120ms linear, background-color 120ms linear, color 120ms linear',
47
53
  '&:disabled, &:disabled:active': {
48
54
  cursor: 'default',
49
55
  boxShadow: 'none',
50
- opacity: 0.4,
56
+ opacity: cssVar(buttonVars.disabled.opacity, '1'),
51
57
  },
52
- '&:hover:active': { transitionDuration: '40ms' },
53
- '& > *:first-of-type': {
54
- marginLeft: '0',
58
+ '& span .wd-icon-fill': {
59
+ transitionDuration: '40ms',
60
+ fill: cssVar(buttonVars.default.icon, cssVar(base.blackPepper400)),
55
61
  },
56
- '& > *:last-of-type': {
57
- marginRight: 0,
62
+ '.wd-icon-background ~ .wd-icon-accent, .wd-icon-background ~ .wd-icon-accent2': {
63
+ fill: cssVar(buttonVars.default.icon, cssVar(base.blackPepper400)),
58
64
  },
59
- }, ({ size }) => {
60
- switch (size) {
61
- case 'large':
62
- return {
63
- ...type.levels.body.small,
64
- fontWeight: type.properties.fontWeights.bold,
65
- height: '48px',
66
- '& > * ': {
67
- margin: `0 ${space.xxxs}`,
68
- },
69
- };
70
- case 'medium':
71
- default:
72
- return {
73
- height: space.xl,
74
- '& > * ': {
75
- margin: `0 ${space.xxxs}`,
76
- },
77
- };
78
- case 'small':
79
- return {
80
- height: space.l,
81
- '& > * ': {
82
- margin: `0 ${spaceNumbers.xxxs / 2}rem`,
83
- },
84
- };
85
- case 'extraSmall':
86
- return {
87
- ...type.levels.subtext.medium,
88
- fontWeight: type.properties.fontWeights.bold,
89
- height: space.m,
90
- '& > * ': {
91
- margin: `0 ${spaceNumbers.xxxs / 2}rem`,
92
- },
93
- };
94
- }
95
- }, ({ grow }) => grow && { width: '100%', maxWidth: '100%' }, ({ colors, fillIcon, theme }) => {
96
- if (!colors) {
97
- return;
98
- }
99
- const baseStyles = {
100
- ...(colors.default.icon && {
101
- '.wd-icon-fill, .wd-icon-accent, .wd-icon-accent2, .wd-icon-background': {
102
- transition: 'fill 120ms ease-in',
103
- },
104
- ...getIconColorSelectors(theme, colors.default.icon, fillIcon),
65
+ '&:focus-visible, &.focus': {
66
+ backgroundColor: cssVar(buttonVars.focus.background, 'transparent'),
67
+ borderColor: cssVar(buttonVars.focus.border, 'transparent'),
68
+ color: cssVar(buttonVars.focus.label, cssVar(base.blackPepper400)),
69
+ '& span .wd-icon-fill': {
70
+ fill: cssVar(buttonVars.focus.icon, cssVar(base.blackPepper400)),
71
+ },
72
+ '.wd-icon-background ~ .wd-icon-accent, .wd-icon-background ~ .wd-icon-accent2': {
73
+ fill: cssVar(buttonVars.focus.icon, cssVar(base.blackPepper400)),
74
+ },
75
+ ...focusRing({
76
+ width: 2,
77
+ separation: 2,
78
+ innerColor: cssVar(buttonVars.focus.boxShadowInner, cssVar(base.frenchVanilla100)),
79
+ outerColor: cssVar(buttonVars.focus.boxShadowOuter, cssVar(brand.primary.base)),
105
80
  }),
106
- backgroundColor: colors.default.background,
107
- borderColor: colors.default.border,
108
- color: colors.default.label,
109
- };
110
- const hoverStyles = {
111
- '&:hover': {
112
- ...(colors.hover.icon && getIconColorSelectors(theme, colors.hover.icon, fillIcon)),
113
- backgroundColor: colors.hover.background,
114
- borderColor: colors.hover.border,
115
- color: colors.hover.label,
81
+ },
82
+ '&:hover, &.hover': {
83
+ backgroundColor: cssVar(buttonVars.hover.background, cssVar(base.blackPepper500)),
84
+ borderColor: cssVar(buttonVars.hover.border, 'transparent'),
85
+ color: cssVar(buttonVars.hover.label, cssVar(base.blackPepper500)),
86
+ '& span .wd-icon-fill': {
87
+ fill: cssVar(buttonVars.hover.icon, cssVar(base.blackPepper500)),
116
88
  },
117
- };
118
- const activeStyles = {
119
- '&:active, &:focus:active, &:hover:active': {
120
- ...(colors.active.icon && getIconColorSelectors(theme, colors.active.icon, fillIcon)),
121
- backgroundColor: colors.active.background,
122
- borderColor: colors.active.border,
123
- color: colors.active.label,
89
+ '.wd-icon-background ~ .wd-icon-accent, .wd-icon-background ~ .wd-icon-accent2': {
90
+ fill: cssVar(buttonVars.hover.icon, cssVar(base.blackPepper500)),
124
91
  },
125
- };
126
- return {
127
- ...baseStyles,
128
- '&:focus': {
129
- ...(colors.focus.focusRing || focusRing({ separation: 2 }, theme)),
130
- ...(colors.focus.icon && getIconColorSelectors(theme, colors.focus.icon, fillIcon)),
131
- backgroundColor: colors.focus.background,
132
- borderColor: colors.focus.border,
133
- color: colors.focus.label,
92
+ },
93
+ '&:hover:active': { transitionDuration: '40ms' },
94
+ '&:active, &.active': {
95
+ backgroundColor: cssVar(buttonVars.active.background, 'transparent'),
96
+ borderColor: cssVar(buttonVars.active.border, 'transparent'),
97
+ color: cssVar(buttonVars.active.label, cssVar(base.blackPepper400)),
98
+ '& span .wd-icon-fill': {
99
+ fill: cssVar(buttonVars.active.icon, cssVar(base.blackPepper400)),
134
100
  },
135
- ...activeStyles,
136
- ...hoverStyles,
137
- '&:disabled, &:active:disabled, &:focus:disabled, &:hover:disabled': {
138
- ...(colors.disabled.icon && getIconColorSelectors(theme, colors.disabled.icon, fillIcon)),
139
- backgroundColor: colors.disabled.background,
140
- borderColor: colors.disabled.border,
141
- color: colors.disabled.label,
142
- opacity: colors.disabled.opacity,
101
+ '.wd-icon-background ~ .wd-icon-accent, .wd-icon-background ~ .wd-icon-accent2': {
102
+ fill: cssVar(buttonVars.active.icon),
103
+ },
104
+ },
105
+ '&:disabled': {
106
+ backgroundColor: cssVar(buttonVars.disabled.background, 'transparent'),
107
+ borderColor: cssVar(buttonVars.disabled.border, 'transparent'),
108
+ color: cssVar(buttonVars.disabled.label, cssVar(base.blackPepper400)),
109
+ '& span .wd-icon-fill': {
110
+ fill: cssVar(buttonVars.disabled.icon, cssVar(base.blackPepper400)),
143
111
  },
144
- ...mouseFocusBehavior({
145
- '&:focus': {
146
- ...baseStyles,
147
- ...hoverStyles,
148
- ...activeStyles,
149
- outline: 'none',
150
- boxShadow: 'none',
151
- animation: 'none',
152
- },
112
+ '.wd-icon-background ~ .wd-icon-accent, .wd-icon-background ~ .wd-icon-accent2': {
113
+ fill: cssVar(buttonVars.disabled.icon, cssVar(base.blackPepper400)),
114
+ },
115
+ },
116
+ });
117
+ /**
118
+ * Button modifiers that will overwrite the base styles of Buttons.
119
+ * - `Size`: These modifiers will dictate a size of a Button and has a set of styles to associated with it.
120
+ * - `iconPosition`: These modifiers will override the existing `Size` styles. These are specific to icon locations
121
+ * within a button or if there is only an icon and no text.
122
+ */
123
+ export const buttonModifiers = createModifiers({
124
+ size: {
125
+ large: createStyles({
126
+ fontSize: cssVar(system.space.x4),
127
+ lineHeight: cssVar(system.space.x6),
128
+ letterSpacing: '0.01rem',
129
+ height: '48px',
130
+ paddingInline: cssVar(system.space.x8),
131
+ minWidth: '112px',
153
132
  }),
154
- };
155
- }, boxStyleFn);
156
- export const getMinWidthStyles = (children, size) => {
157
- switch (size) {
158
- case 'large':
159
- return children ? '112px' : '48px';
160
- case 'medium':
161
- return children ? '96px' : space.xl;
162
- case 'small':
163
- return children ? space.xxxl : space.l;
164
- case 'extraSmall':
165
- return children ? 'auto' : space.m;
166
- default:
167
- return children ? '96px' : space.xl;
168
- }
169
- };
170
- export const getPaddingStyles = (children, size, icon, iconPosition) => {
171
- // In order to calculate the correct padding, we need to know its children
172
- // and what side the icon is on and if there's an icon provided
173
- if (!children) {
174
- // icon buttons do not have any padding
175
- return 0;
176
- }
177
- // If there are children AND an icon
178
- // 1. We check what side the icon is in
179
- // 2. Adjust padding to visually center the icon and text
180
- // If there is children (most likely just text)
181
- // 1. We keep the padding the same on both side
182
- switch (size) {
183
- case 'large':
184
- return icon
185
- ? iconPosition === 'start'
186
- ? `0 ${space.l} 0 ${space.m}`
187
- : `0 ${space.m} 0 ${space.l}`
188
- : `0 ${space.l}`;
189
- case 'medium':
190
- return icon
191
- ? iconPosition === 'start'
192
- ? `0 ${space.m} 0 20px`
193
- : `0 20px 0 ${space.m}`
194
- : `0 ${space.m}`;
195
- case 'small':
196
- return icon
197
- ? iconPosition === 'start'
198
- ? `0 ${space.s} 0 ${space.xs}`
199
- : `0 ${space.xs} 0 ${space.s}`
200
- : `0 ${space.s}`;
201
- case 'extraSmall':
202
- return icon
203
- ? iconPosition === 'start'
204
- ? `0 ${space.xs} 0 ${space.xxs}`
205
- : `0 ${space.xxs} 0 ${space.xs}`
206
- : `0 ${space.xs}`;
207
- default:
208
- return icon
209
- ? iconPosition === 'start'
210
- ? `0 ${space.m} 0 20px`
211
- : `0 20px 0 ${space.m}`
212
- : `0 ${space.m}`;
213
- }
214
- };
133
+ medium: createStyles({
134
+ fontSize: '0.875rem',
135
+ letterSpacing: '0.015rem',
136
+ minWidth: '96px',
137
+ paddingInline: cssVar(system.space.x6),
138
+ height: cssVar(system.space.x10),
139
+ }),
140
+ small: createStyles({
141
+ fontSize: '0.875rem',
142
+ letterSpacing: '0.015rem',
143
+ height: cssVar(system.space.x8),
144
+ minWidth: cssVar(system.space.x20),
145
+ paddingInline: cssVar(system.space.x4),
146
+ gap: cssVar(system.space.x1),
147
+ }),
148
+ extraSmall: createStyles({
149
+ fontSize: '0.75rem',
150
+ lineHeight: cssVar(system.space.x4),
151
+ letterSpacing: '0.02rem',
152
+ height: cssVar(system.space.x6),
153
+ minWidth: 'auto',
154
+ paddingInline: cssVar(system.space.x3),
155
+ gap: cssVar(system.space.x1),
156
+ }),
157
+ },
158
+ iconPosition: {
159
+ largeOnly: createStyles({
160
+ padding: '0',
161
+ minWidth: cssVar(system.space.x12),
162
+ }),
163
+ largeStart: createStyles({
164
+ paddingInlineStart: cssVar(system.space.x6),
165
+ paddingInlineEnd: cssVar(system.space.x8),
166
+ }),
167
+ largeEnd: createStyles({
168
+ paddingInlineStart: cssVar(system.space.x8),
169
+ paddingInlineEnd: cssVar(system.space.x6),
170
+ }),
171
+ mediumOnly: createStyles({ padding: '0', minWidth: cssVar(system.space.x10, space.xl) }),
172
+ mediumStart: createStyles({
173
+ paddingInlineStart: cssVar(system.space.x5),
174
+ paddingInlineEnd: cssVar(system.space.x6),
175
+ }),
176
+ mediumEnd: createStyles({
177
+ paddingInlineStart: cssVar(system.space.x6),
178
+ paddingInlineEnd: cssVar(system.space.x5),
179
+ }),
180
+ smallOnly: createStyles({ padding: '0', minWidth: cssVar(system.space.x8, space.l) }),
181
+ smallStart: createStyles({
182
+ paddingInlineStart: cssVar(system.space.x3),
183
+ paddingInlineEnd: cssVar(system.space.x4),
184
+ }),
185
+ smallEnd: createStyles({
186
+ paddingInlineStart: cssVar(system.space.x4),
187
+ paddingInlineEnd: cssVar(system.space.x3),
188
+ }),
189
+ extraSmallOnly: createStyles({ padding: '0', minWidth: cssVar(system.space.x6, space.m) }),
190
+ extraSmallStart: createStyles({
191
+ paddingInlineStart: cssVar(system.space.x2),
192
+ paddingInlineEnd: cssVar(system.space.x3),
193
+ }),
194
+ extraSmallEnd: createStyles({
195
+ paddingInlineStart: cssVar(system.space.x3),
196
+ paddingInlineEnd: cssVar(system.space.x2),
197
+ }),
198
+ },
199
+ });
200
+ export function capitalize(string = '') {
201
+ return string.charAt(0).toUpperCase() + string.substring(1);
202
+ }
203
+ export function getIconPosition(size, iconPosition, children) {
204
+ return `${size}${capitalize(iconPosition)}`;
205
+ }
206
+ /**
207
+ * The base button which all other buttons are built.
208
+ */
215
209
  export const BaseButton = createComponent('button')({
216
- displayName: 'Button',
217
- Component: ({ children, ...elemProps }, ref, Element) => {
218
- return (React.createElement(ButtonContainer, Object.assign({ as: Element, ref: ref, type: "button" }, elemProps), children));
210
+ displayName: 'BaseButton',
211
+ Component: ({ children, cs, size, fillIcon, iconPosition, icon, colors, shouldMirrorIcon = false, ...elemProps }, ref, Element) => {
212
+ // console.log('iconPosition', children, getIconPosition(size, iconPosition));
213
+ return (React.createElement(Box, Object.assign({ as: Element, ref: ref, type: "button", cs: [
214
+ baseButtonStyles,
215
+ buttonModifiers({
216
+ size: size,
217
+ iconPosition: getIconPosition(size, iconPosition, children),
218
+ }),
219
+ buttonVars.default((colors === null || colors === void 0 ? void 0 : colors.default) || {}),
220
+ buttonVars.focus((colors === null || colors === void 0 ? void 0 : colors.focus) || {}),
221
+ buttonVars.hover((colors === null || colors === void 0 ? void 0 : colors.hover) || {}),
222
+ buttonVars.active((colors === null || colors === void 0 ? void 0 : colors.active) || {}),
223
+ buttonVars.disabled((colors === null || colors === void 0 ? void 0 : colors.disabled) || {}),
224
+ cs,
225
+ ] }, elemProps), children));
219
226
  },
220
227
  subComponents: {
221
228
  Icon: ButtonLabelIcon,
@@ -0,0 +1,17 @@
1
+ import { ButtonContainerProps } from './BaseButton';
2
+ /**
3
+ * Extends all the style properties from Box to our buttons as well as props from ButtonContainerProps.
4
+ * We omit `ref` since all of our buttons use `createComponent` and already give access to `ref`.
5
+ * Use this type to extend and customize any one off buttons that you want full control over styling.
6
+ */
7
+ export interface ButtonProps extends Omit<ButtonContainerProps, 'ref'> {
8
+ /**
9
+ * Button icon positions can either be `start` or `end`.
10
+ * If no value is provided, it defaults to `start`.
11
+ *
12
+ * @default 'start'
13
+ */
14
+ iconPosition?: 'start' | 'end';
15
+ }
16
+ export declare const Button: import("@workday/canvas-kit-react/common").ElementComponent<"button", ButtonProps>;
17
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../../button/lib/Button.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAa,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAG9D;;;;GAIG;AACH,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC;IACpE;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CAChC;AAED,eAAO,MAAM,MAAM,oFA8CjB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import * as React from 'react';
2
+ import { BaseButton } from './BaseButton';
3
+ import { createComponent } from '@workday/canvas-kit-react/common';
4
+ export const Button = createComponent('button')({
5
+ displayName: 'Button',
6
+ Component: ({ children, icon, colors, iconPosition, shouldMirrorIcon, size = 'medium', ...elemProps }, ref, Element) => {
7
+ const baseIconPosition = iconPosition
8
+ ? iconPosition
9
+ : icon
10
+ ? children
11
+ ? 'start'
12
+ : 'only'
13
+ : undefined;
14
+ return (React.createElement(BaseButton, Object.assign({ as: Element, ref: ref, size: size, icon: icon, iconPosition: baseIconPosition }, elemProps),
15
+ icon && baseIconPosition === 'start' && (React.createElement(BaseButton.Icon, { size: size, icon: icon, shouldMirrorIcon: shouldMirrorIcon })),
16
+ children && React.createElement(BaseButton.Label, null, children),
17
+ icon && baseIconPosition === 'only' && (React.createElement(BaseButton.Icon, { size: size, icon: icon, shouldMirrorIcon: shouldMirrorIcon })),
18
+ icon && baseIconPosition === 'end' && (React.createElement(BaseButton.Icon, { size: size, icon: icon, shouldMirrorIcon: shouldMirrorIcon }))));
19
+ },
20
+ });
@@ -1,12 +1,10 @@
1
- import * as React from 'react';
2
- import { BaseButtonProps } from './BaseButton';
3
- import { GrowthBehavior, Themeable } from '@workday/canvas-kit-react/common';
4
- export interface DeleteButtonProps extends Themeable, GrowthBehavior, BaseButtonProps {
5
- /**
6
- * The size of the Button.
7
- */
8
- size?: 'small' | 'medium' | 'large';
9
- children?: React.ReactNode;
1
+ import { ButtonProps } from './Button';
2
+ /**
3
+ * Extends all the style properties from Box to our buttons as well as props from ButtonProps.
4
+ * We omit `ref` since all of our buttons use `createComponent` and already give access to `ref`.
5
+ * Use this type to extend and customize any one off buttons that you want full control over styling.
6
+ */
7
+ export interface DeleteButtonProps extends ButtonProps {
10
8
  }
11
9
  /**
12
10
  * Use sparingly for destructive actions that will result in data loss, can’t be undone, or will
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteButton.d.ts","sourceRoot":"","sources":["../../../../button/lib/DeleteButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAa,eAAe,EAAsC,MAAM,cAAc,CAAC;AAC9F,OAAO,EACL,cAAc,EAEd,SAAS,EAGV,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,iBAAkB,SAAQ,SAAS,EAAE,cAAc,EAAE,eAAe;IACnF;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AA0BD;;;;GAIG;AACH,eAAO,MAAM,YAAY,0FA0BvB,CAAC"}
1
+ {"version":3,"file":"DeleteButton.d.ts","sourceRoot":"","sources":["../../../../button/lib/DeleteButton.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAS,WAAW,EAAC,MAAM,UAAU,CAAC;AAE7C;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,WAAW;CAAG;AA+BzD;;;;GAIG;AACH,eAAO,MAAM,YAAY,0FASvB,CAAC"}
@@ -1,23 +1,35 @@
1
1
  import * as React from 'react';
2
- import { BaseButton, getMinWidthStyles, getPaddingStyles } from './BaseButton';
3
- import { useTheme, createComponent, } from '@workday/canvas-kit-react/common';
4
- const getDeleteButtonColors = ({ canvas: { palette: { error: themeError }, }, }) => ({
5
- default: {
6
- background: themeError.main,
7
- label: themeError.contrast,
2
+ import { buttonVars } from './BaseButton';
3
+ import { createComponent } from '@workday/canvas-kit-react/common';
4
+ import { createStyles, cssVar } from '@workday/canvas-kit-styling';
5
+ import { base, brand, system } from '@workday/canvas-tokens-web';
6
+ import { Button } from './Button';
7
+ const deleteStyles = createStyles({
8
+ [buttonVars.default.background]: cssVar(brand.error.base),
9
+ [buttonVars.default.border]: 'transparent',
10
+ [buttonVars.default.borderRadius]: cssVar(system.shape.circle),
11
+ [buttonVars.default.label]: cssVar(brand.error.accent),
12
+ '&:hover, &.hover': {
13
+ [buttonVars.hover.background]: cssVar(brand.error.dark),
14
+ [buttonVars.hover.border]: 'transparent',
15
+ [buttonVars.hover.label]: cssVar(brand.error.accent),
8
16
  },
9
- hover: {
10
- background: themeError.dark,
17
+ '&:focus-visible, &.focus': {
18
+ [buttonVars.focus.background]: cssVar(brand.error.base),
19
+ [buttonVars.focus.border]: 'transparent',
20
+ [buttonVars.focus.label]: cssVar(brand.error.accent),
21
+ [buttonVars.focus.boxShadowInner]: cssVar(base.frenchVanilla100),
22
+ [buttonVars.focus.boxShadowOuter]: cssVar(brand.common.focusOutline),
11
23
  },
12
- active: {
13
- background: themeError.darkest,
24
+ '&:active, &.active': {
25
+ [buttonVars.active.background]: cssVar(brand.error.darkest),
26
+ [buttonVars.active.border]: 'transparent',
27
+ [buttonVars.active.label]: cssVar(brand.error.accent),
14
28
  },
15
- focus: {
16
- background: themeError.main,
17
- },
18
- disabled: {
19
- background: themeError.light,
20
- opacity: '1', // allows for overriding the default opacity of 0.4
29
+ '&:disabled, &:active:disabled, &:focus:disabled, &:hover:disabled': {
30
+ [buttonVars.disabled.background]: cssVar(brand.error.light),
31
+ [buttonVars.disabled.label]: cssVar(brand.error.accent),
32
+ opacity: 1,
21
33
  },
22
34
  });
23
35
  /**
@@ -27,9 +39,7 @@ const getDeleteButtonColors = ({ canvas: { palette: { error: themeError }, }, })
27
39
  */
28
40
  export const DeleteButton = createComponent('button')({
29
41
  displayName: 'DeleteButton',
30
- Component: ({
31
- // TODO: Fix useTheme and make it a real hook
32
- // eslint-disable-next-line react-hooks/rules-of-hooks
33
- theme = useTheme(), size = 'medium', children, ...elemProps }, ref, Element) => (React.createElement(BaseButton, Object.assign({ padding: getPaddingStyles(children, size, undefined, undefined), minWidth: getMinWidthStyles(children, size), ref: ref, as: Element, colors: getDeleteButtonColors(theme), size: size }, elemProps),
34
- React.createElement(BaseButton.Label, null, children))),
42
+ Component: ({ children, cs, size, ...elemProps }, ref, Element) => {
43
+ return (React.createElement(Button, Object.assign({ as: Element, ref: ref, size: size, cs: [deleteStyles, cs] }, elemProps), children));
44
+ },
35
45
  });
@@ -1,42 +1,21 @@
1
- import * as React from 'react';
2
- import { GrowthBehavior, Themeable } from '@workday/canvas-kit-react/common';
3
- import { CanvasSystemIcon } from '@workday/design-assets-types';
4
- import { ButtonSizes, IconPositions } from './types';
5
- import { BaseButtonProps } from './BaseButton';
6
- export interface PrimaryButtonProps extends Themeable, GrowthBehavior, BaseButtonProps {
1
+ import { ButtonProps } from './Button';
2
+ /**
3
+ * Extends all the style properties from Box to our buttons as well as props from ButtonProps.
4
+ * We omit `ref` since all of our buttons use `createComponent` and already give access to `ref`.
5
+ * Use this type to extend and customize any one off buttons that you want full control over styling.
6
+ */
7
+ export interface PrimaryButtonProps extends ButtonProps {
7
8
  /**
8
- * The variant of the PrimaryButton.
9
+ * Variant has an option for `inverse` which will inverse the styling
9
10
  */
10
11
  variant?: 'inverse';
11
- /**
12
- * There are four button sizes: `extraSmall`, `small`, `medium`, and `large`.
13
- * If no size is provided, it will default to `medium`.
14
- */
15
- size?: ButtonSizes;
16
- /**
17
- * The icon of the Button.
18
- * Note: not displayed at `small` size
19
- */
20
- icon?: CanvasSystemIcon;
21
- /**
22
- * Button icon positions can either be `start` or `end`.
23
- * If no value is provided, it defaults to `start`.
24
- */
25
- iconPosition?: IconPositions;
26
- /**
27
- * If set to `true`, transform the icon's x-axis to mirror the graphic
28
- */
29
- shouldMirrorIcon?: boolean;
30
- children?: React.ReactNode;
31
12
  }
32
- /**
33
- * Primary Buttons are high emphasis. Use once per screen to draw attention to the highest priority
34
- * action. Multiple primary buttons make it confusing for the user to understand what action they
35
- * should take. Not all screens require a Primary Button.
36
- *
37
- * Primary Buttons have four sizes: `extraSmall`, `small`, `medium`, and `large`. Icons are
38
- * supported for every size and can be positioned at the `start` or `end` with the `iconPosition`
39
- * prop.
40
- */
13
+ export declare const primaryButtonModifiers: {
14
+ variant: {
15
+ inverse: string;
16
+ };
17
+ } & ((modifiers: Partial<{
18
+ variant: "inverse";
19
+ }>) => string);
41
20
  export declare const PrimaryButton: import("@workday/canvas-kit-react/common").ElementComponent<"button", PrimaryButtonProps>;
42
21
  //# sourceMappingURL=PrimaryButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrimaryButton.d.ts","sourceRoot":"","sources":["../../../../button/lib/PrimaryButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EACL,cAAc,EAEd,SAAS,EAIV,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAC,WAAW,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AACnD,OAAO,EAAa,eAAe,EAAsC,MAAM,cAAc,CAAC;AA0E9F,MAAM,WAAW,kBAAmB,SAAQ,SAAS,EAAE,cAAc,EAAE,eAAe;IACpF;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;OAGG;IACH,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB;;;OAGG;IACH,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,2FA+CxB,CAAC"}
1
+ {"version":3,"file":"PrimaryButton.d.ts","sourceRoot":"","sources":["../../../../button/lib/PrimaryButton.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAS,WAAW,EAAC,MAAM,UAAU,CAAC;AAE7C;;;;GAIG;AACH,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAkCD,eAAO,MAAM,sBAAsB;;;;;;cA4BjC,CAAC;AAEH,eAAO,MAAM,aAAa,2FAqBxB,CAAC"}