@abcagency/hc-ui-components 1.3.14 → 1.3.15

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 (147) hide show
  1. package/dist/_virtual/_rollupPluginBabelHelpers.js +1 -1
  2. package/dist/apis/hcApi.js +1 -1
  3. package/dist/apis/hcApi.js.map +1 -1
  4. package/dist/clientToken.js.map +1 -1
  5. package/dist/components/HireControlMap.js.map +1 -1
  6. package/dist/components/modules/accordions/MapAccordionItem.js.map +1 -1
  7. package/dist/components/modules/accordions/default.js.map +1 -1
  8. package/dist/components/modules/accordions/filterItem.js +2 -1
  9. package/dist/components/modules/accordions/filterItem.js.map +1 -1
  10. package/dist/components/modules/accordions/filters.js +0 -3
  11. package/dist/components/modules/accordions/filters.js.map +1 -1
  12. package/dist/components/modules/buttons/button-group-apply.js.map +1 -1
  13. package/dist/components/modules/buttons/commute-pill.js.map +1 -1
  14. package/dist/components/modules/buttons/default.js.map +1 -1
  15. package/dist/components/modules/buttons/items-pill.js.map +1 -1
  16. package/dist/components/modules/buttons/pill-wrapper.js.map +1 -1
  17. package/dist/components/modules/buttons/show-all-button.js.map +1 -1
  18. package/dist/components/modules/cards/default.js.map +1 -1
  19. package/dist/components/modules/cards/filter.js.map +1 -1
  20. package/dist/components/modules/dialogs/apply-dialog.js.map +1 -1
  21. package/dist/components/modules/filter/commute.js.map +1 -1
  22. package/dist/components/modules/filter/item.js +6 -1
  23. package/dist/components/modules/filter/item.js.map +1 -1
  24. package/dist/components/modules/filter/location.js +5 -3
  25. package/dist/components/modules/filter/location.js.map +1 -1
  26. package/dist/components/modules/filter/points-of-interest.js.map +1 -1
  27. package/dist/components/modules/filter/radio-item.js.map +1 -1
  28. package/dist/components/modules/filter/search.js.map +1 -1
  29. package/dist/components/modules/filter/sort.js.map +1 -1
  30. package/dist/components/modules/grid.js.map +1 -1
  31. package/dist/components/modules/icon.js.map +1 -1
  32. package/dist/components/modules/jobListing/listing-details.js.map +1 -1
  33. package/dist/components/modules/maps/info-window-card.js.map +1 -1
  34. package/dist/components/modules/maps/info-window-content.js.map +1 -1
  35. package/dist/components/modules/maps/list/field-mapper.js.map +1 -1
  36. package/dist/components/modules/maps/list/header-item.js.map +1 -1
  37. package/dist/components/modules/maps/list/header.js.map +1 -1
  38. package/dist/components/modules/maps/list/index.js +11 -10
  39. package/dist/components/modules/maps/list/index.js.map +1 -1
  40. package/dist/components/modules/maps/list/item-expand-card/index.js.map +1 -1
  41. package/dist/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js.map +1 -1
  42. package/dist/components/modules/maps/list/item-expand-card/recruiter-details.js.map +1 -1
  43. package/dist/components/modules/maps/list/item-expand-card/recruiter-headshot.js.map +1 -1
  44. package/dist/components/modules/maps/list/list-item/index.js.map +1 -1
  45. package/dist/components/modules/maps/map-list.js.map +1 -1
  46. package/dist/components/modules/maps/map-marker.js.map +1 -1
  47. package/dist/components/modules/maps/map.js.map +1 -1
  48. package/dist/components/modules/maps/place-marker.js.map +1 -1
  49. package/dist/components/modules/maps/tabs.js.map +1 -1
  50. package/dist/constants/placeTypes.js.map +1 -1
  51. package/dist/contexts/mapContext.js +9 -27
  52. package/dist/contexts/mapContext.js.map +1 -1
  53. package/dist/contexts/mapListContext.js +54 -37
  54. package/dist/contexts/mapListContext.js.map +1 -1
  55. package/dist/contexts/placesContext.js.map +1 -1
  56. package/dist/hooks/useList.js +1 -13
  57. package/dist/hooks/useList.js.map +1 -1
  58. package/dist/services/apis/hcApi.js +1 -1
  59. package/dist/services/apis/hcApi.js.map +1 -1
  60. package/dist/services/clientToken.js.map +1 -1
  61. package/dist/services/configService.js.map +1 -1
  62. package/dist/services/googlePlacesNearbyService.js.map +1 -1
  63. package/dist/services/listingAggregatorService.js +43 -16
  64. package/dist/services/listingAggregatorService.js.map +1 -1
  65. package/dist/services/listingEntityService.js.map +1 -1
  66. package/dist/services/listingService.js.map +1 -1
  67. package/dist/services/recruiterService.js.map +1 -1
  68. package/dist/util/filterUtil.js.map +1 -1
  69. package/dist/util/loading.js.map +1 -1
  70. package/dist/util/localStorageUtil.js.map +1 -1
  71. package/dist/util/mapIconUtil.js.map +1 -1
  72. package/dist/util/mapUtil.js.map +1 -1
  73. package/dist/util/sortUtil.js.map +1 -1
  74. package/dist/util/stringUtils.js.map +1 -1
  75. package/jsconfig.json +7 -7
  76. package/package.json +7 -7
  77. package/postcss.config.js +13 -13
  78. package/preset.default.js +15 -15
  79. package/rollup.config.mjs +88 -87
  80. package/src/apis/hcApi.js +93 -93
  81. package/src/clientToken.js +9 -9
  82. package/src/components/HireControlMap.js +124 -124
  83. package/src/components/modules/accordions/MapAccordionItem.js +72 -72
  84. package/src/components/modules/accordions/default.js +171 -171
  85. package/src/components/modules/accordions/filterItem.js +3 -1
  86. package/src/components/modules/accordions/filters.js +1 -1
  87. package/src/components/modules/buttons/button-group-apply.js +116 -116
  88. package/src/components/modules/buttons/commute-pill.js +22 -22
  89. package/src/components/modules/buttons/default.js +194 -194
  90. package/src/components/modules/buttons/items-pill.js +35 -35
  91. package/src/components/modules/buttons/pill-wrapper.js +27 -27
  92. package/src/components/modules/buttons/show-all-button.js +20 -20
  93. package/src/components/modules/cards/default.js +167 -167
  94. package/src/components/modules/cards/filter.js +56 -56
  95. package/src/components/modules/dialogs/apply-dialog.js +48 -48
  96. package/src/components/modules/filter/commute.js +149 -149
  97. package/src/components/modules/filter/item.js +5 -0
  98. package/src/components/modules/filter/location.js +5 -3
  99. package/src/components/modules/filter/points-of-interest.js +44 -44
  100. package/src/components/modules/filter/radio-item.js +53 -53
  101. package/src/components/modules/filter/search.js +92 -92
  102. package/src/components/modules/filter/sort.js +83 -83
  103. package/src/components/modules/grid.js +54 -54
  104. package/src/components/modules/icon.js +33 -33
  105. package/src/components/modules/jobListing/listing-details.js +95 -95
  106. package/src/components/modules/maps/info-window-card.js +17 -17
  107. package/src/components/modules/maps/info-window-content.js +74 -74
  108. package/src/components/modules/maps/list/field-mapper.js +112 -112
  109. package/src/components/modules/maps/list/header-item.js +91 -91
  110. package/src/components/modules/maps/list/header.js +47 -47
  111. package/src/components/modules/maps/list/index.js +7 -7
  112. package/src/components/modules/maps/list/item-expand-card/index.js +22 -22
  113. package/src/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js +50 -50
  114. package/src/components/modules/maps/list/item-expand-card/recruiter-details.js +68 -68
  115. package/src/components/modules/maps/list/item-expand-card/recruiter-headshot.js +22 -22
  116. package/src/components/modules/maps/list/list-item/index.js +133 -133
  117. package/src/components/modules/maps/map-list.js +74 -74
  118. package/src/components/modules/maps/map-marker.js +86 -86
  119. package/src/components/modules/maps/map.js +230 -230
  120. package/src/components/modules/maps/place-marker.js +41 -41
  121. package/src/components/modules/maps/tabs.js +81 -81
  122. package/src/constants/placeTypes.js +8 -8
  123. package/src/contexts/mapContext.js +0 -14
  124. package/src/contexts/mapListContext.js +26 -8
  125. package/src/contexts/placesContext.js +102 -102
  126. package/src/hooks/useList.js +2 -13
  127. package/src/index.js +3 -3
  128. package/src/services/configService.js +16 -16
  129. package/src/services/googlePlacesNearbyService.js +33 -33
  130. package/src/services/listingAggregatorService.js +9 -4
  131. package/src/services/listingEntityService.js +15 -15
  132. package/src/services/listingService.js +26 -26
  133. package/src/services/recruiterService.js +17 -17
  134. package/src/styles/index.css +23 -23
  135. package/src/util/arrayUtil.js +3 -3
  136. package/src/util/fieldMapper.js +22 -22
  137. package/src/util/filterUtil.js +195 -195
  138. package/src/util/loading.js +17 -17
  139. package/src/util/localStorageUtil.js +26 -26
  140. package/src/util/mapIconUtil.js +180 -180
  141. package/src/util/mapUtil.js +91 -91
  142. package/src/util/sortUtil.js +32 -32
  143. package/src/util/stringUtils.js +6 -6
  144. package/tailwind.config.js +126 -126
  145. package/.editorconfig +0 -12
  146. package/.eslintrc +0 -105
  147. package/.prettierignore +0 -3
@@ -1,116 +1,116 @@
1
- import React from 'react';
2
- import { twMerge } from 'tailwind-merge';
3
-
4
- import Button from '~/components/modules/buttons/default';
5
- import ApplyDialog from '../dialogs/apply-dialog';
6
-
7
- const ButtonGroupApply = ({
8
- applyUrl,
9
- useDetailsPostMessage,
10
- navigateToDetails,
11
- navigateToEasyApply,
12
- Link,
13
- linkFormat,
14
- applyText = 'Apply Now',
15
- detailsUrl,
16
- detailsText = 'View Details',
17
- className,
18
- buttonSize = 'sm',
19
- applyButtonVariant = 'primary',
20
- detailsButtonVariant = 'outline',
21
- includeDialog = false,
22
- internalApplyLink,
23
- itemId,
24
- item,
25
- companyName
26
- }) => {
27
- const applyButton = () => {
28
- return <Button.Anchor
29
- variant={applyButtonVariant}
30
- size={buttonSize}
31
- >
32
- {applyText}
33
- </Button.Anchor>;;
34
- };
35
-
36
- const href = linkFormat.replace('[slug]', item.slug ?? item.id);
37
-
38
- return (
39
- <nav
40
- className={twMerge`
41
- hc-flex hc-flex-row hc-justify-between hc-gap-2 hc-w-full
42
- ${className ?? ''}
43
- `}
44
- >
45
- {Link &&
46
- <Button.Link
47
- Link={Link}
48
- href={href}
49
- variant={detailsButtonVariant}
50
- size={buttonSize}
51
- >
52
- {detailsText}
53
- </Button.Link>
54
- }
55
- {navigateToDetails &&
56
- <Button.Anchor
57
- href={href}
58
- onClick={e => {
59
- e.preventDefault();
60
- navigateToDetails(item);
61
- }}
62
- variant={detailsButtonVariant}
63
- size={buttonSize}
64
- >
65
- {detailsText}
66
- </Button.Anchor>
67
- }
68
- {detailsUrl && useDetailsPostMessage !== true && navigateToDetails === null &&
69
- <Button.Anchor
70
- href={detailsUrl}
71
- variant={detailsButtonVariant}
72
- size={buttonSize}
73
- >
74
- {detailsText}
75
- </Button.Anchor>
76
- }
77
- {useDetailsPostMessage === true && navigateToDetails === null &&
78
- <Button.Btn
79
- onClick={() => { window.parent.postMessage({ itemId: itemId, type: 'LISTING_ID' }, '*'); }}
80
- variant={detailsButtonVariant}
81
- size={buttonSize}
82
- >
83
- {detailsText}
84
- </Button.Btn>}
85
- {applyUrl && !includeDialog && navigateToEasyApply == null &&
86
- <>
87
- <Button.Anchor
88
- href={applyUrl}
89
- variant={applyButtonVariant}
90
- size={buttonSize}
91
- >
92
- {applyText}
93
- </Button.Anchor>
94
- </>
95
- }
96
- {applyUrl && !includeDialog && navigateToEasyApply != null &&
97
- <>
98
- <Button.Btn
99
- onClick={() => { navigateToEasyApply(item); }}
100
- variant={applyButtonVariant}
101
- size={buttonSize}
102
- >
103
- {applyText}
104
- </Button.Btn>
105
- </>
106
- }
107
- {applyUrl && includeDialog &&
108
- <ApplyDialog applyUrl={applyUrl} internalApplyLink={internalApplyLink} companyName={companyName}>
109
- {applyButton()}
110
- </ApplyDialog>
111
- }
112
- </nav>
113
- );
114
- };
115
-
116
- export default ButtonGroupApply;
1
+ import React from 'react';
2
+ import { twMerge } from 'tailwind-merge';
3
+
4
+ import Button from '~/components/modules/buttons/default';
5
+ import ApplyDialog from '../dialogs/apply-dialog';
6
+
7
+ const ButtonGroupApply = ({
8
+ applyUrl,
9
+ useDetailsPostMessage,
10
+ navigateToDetails,
11
+ navigateToEasyApply,
12
+ Link,
13
+ linkFormat,
14
+ applyText = 'Apply Now',
15
+ detailsUrl,
16
+ detailsText = 'View Details',
17
+ className,
18
+ buttonSize = 'sm',
19
+ applyButtonVariant = 'primary',
20
+ detailsButtonVariant = 'outline',
21
+ includeDialog = false,
22
+ internalApplyLink,
23
+ itemId,
24
+ item,
25
+ companyName
26
+ }) => {
27
+ const applyButton = () => {
28
+ return <Button.Anchor
29
+ variant={applyButtonVariant}
30
+ size={buttonSize}
31
+ >
32
+ {applyText}
33
+ </Button.Anchor>;;
34
+ };
35
+
36
+ const href = linkFormat.replace('[slug]', item.slug ?? item.id);
37
+
38
+ return (
39
+ <nav
40
+ className={twMerge`
41
+ hc-flex hc-flex-row hc-justify-between hc-gap-2 hc-w-full
42
+ ${className ?? ''}
43
+ `}
44
+ >
45
+ {Link &&
46
+ <Button.Link
47
+ Link={Link}
48
+ href={href}
49
+ variant={detailsButtonVariant}
50
+ size={buttonSize}
51
+ >
52
+ {detailsText}
53
+ </Button.Link>
54
+ }
55
+ {navigateToDetails &&
56
+ <Button.Anchor
57
+ href={href}
58
+ onClick={e => {
59
+ e.preventDefault();
60
+ navigateToDetails(item);
61
+ }}
62
+ variant={detailsButtonVariant}
63
+ size={buttonSize}
64
+ >
65
+ {detailsText}
66
+ </Button.Anchor>
67
+ }
68
+ {detailsUrl && useDetailsPostMessage !== true && navigateToDetails === null &&
69
+ <Button.Anchor
70
+ href={detailsUrl}
71
+ variant={detailsButtonVariant}
72
+ size={buttonSize}
73
+ >
74
+ {detailsText}
75
+ </Button.Anchor>
76
+ }
77
+ {useDetailsPostMessage === true && navigateToDetails === null &&
78
+ <Button.Btn
79
+ onClick={() => { window.parent.postMessage({ itemId: itemId, type: 'LISTING_ID' }, '*'); }}
80
+ variant={detailsButtonVariant}
81
+ size={buttonSize}
82
+ >
83
+ {detailsText}
84
+ </Button.Btn>}
85
+ {applyUrl && !includeDialog && navigateToEasyApply == null &&
86
+ <>
87
+ <Button.Anchor
88
+ href={applyUrl}
89
+ variant={applyButtonVariant}
90
+ size={buttonSize}
91
+ >
92
+ {applyText}
93
+ </Button.Anchor>
94
+ </>
95
+ }
96
+ {applyUrl && !includeDialog && navigateToEasyApply != null &&
97
+ <>
98
+ <Button.Btn
99
+ onClick={() => { navigateToEasyApply(item); }}
100
+ variant={applyButtonVariant}
101
+ size={buttonSize}
102
+ >
103
+ {applyText}
104
+ </Button.Btn>
105
+ </>
106
+ }
107
+ {applyUrl && includeDialog &&
108
+ <ApplyDialog applyUrl={applyUrl} internalApplyLink={internalApplyLink} companyName={companyName}>
109
+ {applyButton()}
110
+ </ApplyDialog>
111
+ }
112
+ </nav>
113
+ );
114
+ };
115
+
116
+ export default ButtonGroupApply;
@@ -1,22 +1,22 @@
1
- import React from 'react';
2
-
3
- import Icon from '~/components/modules/icon';
4
- import PillWrapper from '~/components/modules/buttons/pill-wrapper';
5
-
6
- const CommutePill = ({ travelTime }) => {
7
- if (!travelTime) return;
8
- return (
9
- <div className="pt-2">
10
- <PillWrapper >
11
- <Icon
12
- icon="ri:pin-distance-fill"
13
- size="hc-size-5"
14
- className="hc-text-uiAccent/30"
15
- />
16
- commute time = {travelTime}
17
- </PillWrapper>
18
- </div>
19
- );
20
- };
21
-
22
- export default CommutePill;
1
+ import React from 'react';
2
+
3
+ import Icon from '~/components/modules/icon';
4
+ import PillWrapper from '~/components/modules/buttons/pill-wrapper';
5
+
6
+ const CommutePill = ({ travelTime }) => {
7
+ if (!travelTime) return;
8
+ return (
9
+ <div className="pt-2">
10
+ <PillWrapper >
11
+ <Icon
12
+ icon="ri:pin-distance-fill"
13
+ size="hc-size-5"
14
+ className="hc-text-uiAccent/30"
15
+ />
16
+ commute time = {travelTime}
17
+ </PillWrapper>
18
+ </div>
19
+ );
20
+ };
21
+
22
+ export default CommutePill;
@@ -1,194 +1,194 @@
1
- import React from 'react';
2
- import { forwardRef } from 'react';
3
- import { Link } from 'react-router-dom';
4
- import { twMerge } from 'tailwind-merge';
5
-
6
- import Icon from '~/components/modules/icon';
7
-
8
- const linkDefaultClasses = "hc-normal-case hc-text-inherit !hc-font-[inherit] hc-[font-weight:inherit] !hc-p-0 hc-rounded-none";
9
- const underlineClasses = "!underline decoration-1 underline-offset-2 hover:!no-underline focus:!no-underline";
10
-
11
- const ButtonVariant = {
12
- none: '',
13
- primary: 'hc-bg-primary hc-border hc-border-primary hc-text-white hover:hc-bg-opacity-70 focus:hc-bg-opacity-70',
14
- secondary: 'hc-bg-secondary hc-border hc-border-secondary hc-text-white hover:hc-bg-opacity-70 focus:hc-bg-opacity-70',
15
- outline: 'hc-bg-transparent hc-border hc-border-primary hc-text-primary hover:hc-bg-primaryDark hover:hc-border-primaryDark hover:hc-text-white focus:hc-bg-primaryDark focus:hc-border-primaryDark focus:hc-text-white',
16
- link: `${linkDefaultClasses} hc-text-primary hover:hc-text-uiText focus:hc-text-uiText`,
17
- icon: 'hc-opacity-100 hover:hc-opacity-70 focus:hc-opacity-70'
18
- };
19
-
20
- const ButtonSize = {
21
- none: '',
22
- default: 'hc-py-2 hc-px-6 hc-text-base',
23
- sq: 'hc-p-2.5',
24
- sqsm: 'hc-p-1',
25
- xs: 'hc-py-1.5 hc-px-3 hc-text-xs',
26
- sm: 'hc-py-1.5 hc-px-4 hc-text-sm',
27
- lg: 'hc-py-4 hc-px-10 hc-text-lg'
28
- };
29
-
30
- const ButtonDefaults = {
31
- style: 'hc-group hc-font-medium hc-uppercase hc-text-center hc-rounded hc-transition',
32
- size: ButtonSize.default,
33
- variant: ButtonVariant.primary,
34
- block: 'hc-block hc-w-full'
35
- };
36
-
37
- const linkVariants = variant => variant === 'link';
38
-
39
- const buttonClasses = (variant, size, isBlock, hasUnderline, className) => twMerge(
40
- isBlock ? ButtonDefaults.block : linkVariants(variant) ? 'hc-inline' : 'hc-inline-block',
41
- ButtonDefaults.style,
42
- variant ? ButtonVariant[variant] : ButtonDefaults.variant,
43
- size ? ButtonSize[size] : ButtonDefaults.size,
44
- hasUnderline ? underlineClasses : '',
45
- className ?? ''
46
- );
47
-
48
- const Button = ({
49
- children
50
- }) => {
51
- return (
52
- { children }
53
- );
54
- };
55
-
56
- export const Anchor = ({
57
- children,
58
- href,
59
- className,
60
- size,
61
- variant,
62
- isBlock,
63
- hasUnderline,
64
- target = '_blank',
65
- ...rest
66
- }) => {
67
- return (
68
- <a
69
- href={href}
70
- target={target}
71
- className={buttonClasses(variant, size, isBlock, hasUnderline, className)}
72
- onClick={href === '#' ? e => {
73
- e.preventDefault();
74
- } : null}
75
- {...rest}
76
- >
77
- {children}
78
- </a>
79
- );
80
- };
81
-
82
- export const AnchorLink = ({
83
- children,
84
- Link,
85
- href,
86
- className,
87
- size,
88
- variant,
89
- isBlock,
90
- hasUnderline,
91
- ...rest
92
- }) => {
93
- return (
94
- <Link
95
- href={href}
96
- className={`
97
- ${buttonClasses(variant, size, isBlock, hasUnderline, className)}
98
- `}
99
- {...rest}
100
- >
101
- {children}
102
- </Link>
103
- );
104
- };
105
-
106
- export const ScrollAnchor = forwardRef((props, ref) => {
107
- const {
108
- children,
109
- href,
110
- className,
111
- size,
112
- variant,
113
- isBlock,
114
- hasUnderline,
115
- ...rest
116
- } = props;
117
-
118
- return (
119
- <Link
120
- ref={ref}
121
- href={`#${href}`}
122
- scroll={false}
123
- className={buttonClasses(variant, size, isBlock, hasUnderline, className)}
124
- {...rest}
125
- >
126
- {children}
127
- </Link>
128
- );
129
- });
130
-
131
- export const Btn = forwardRef((props, ref) => {
132
- const {
133
- children,
134
- type = 'button',
135
- className,
136
- size,
137
- variant,
138
- isBlock,
139
- hasUnderline,
140
- ...rest
141
- } = props;
142
- return (
143
- <button
144
- ref={ref}
145
- type={type}
146
- className={buttonClasses(variant, size, isBlock, hasUnderline, className)}
147
- {...rest}
148
- >
149
- {children}
150
- </button>
151
- );
152
- });
153
-
154
- export const ButtonBody = ({
155
- children,
156
- className
157
- }) => {
158
- return (
159
- <span
160
- className={twMerge(
161
- 'hc-inline-flex hc-w-full hc-items-center hc-justify-between hc-gap-1.5',
162
- className ?? ''
163
- )}
164
- >
165
- {children}
166
- </span>
167
- );
168
- };
169
-
170
- export const ButtonIcon = ({
171
- icon,
172
- size = 'hc-size-4',
173
- className
174
- }) => {
175
- return (
176
- <Icon
177
-
178
- icon={icon}
179
- size={size}
180
- className={className ?? ''}
181
- />
182
- );
183
- };
184
-
185
- Button.Anchor = Anchor;
186
- Button.Link = AnchorLink;
187
- Button.Scroll = ScrollAnchor;
188
- Button.Btn = Btn;
189
- Button.Body = ButtonBody;
190
- Button.Icon = ButtonIcon;
191
-
192
- Btn.displayName = 'Button:Button';
193
- ScrollAnchor.displayName = 'Button:ScrollAnchor';
194
- export default Button;
1
+ import React from 'react';
2
+ import { forwardRef } from 'react';
3
+ import { Link } from 'react-router-dom';
4
+ import { twMerge } from 'tailwind-merge';
5
+
6
+ import Icon from '~/components/modules/icon';
7
+
8
+ const linkDefaultClasses = "hc-normal-case hc-text-inherit !hc-font-[inherit] hc-[font-weight:inherit] !hc-p-0 hc-rounded-none";
9
+ const underlineClasses = "!underline decoration-1 underline-offset-2 hover:!no-underline focus:!no-underline";
10
+
11
+ const ButtonVariant = {
12
+ none: '',
13
+ primary: 'hc-bg-primary hc-border hc-border-primary hc-text-white hover:hc-bg-opacity-70 focus:hc-bg-opacity-70',
14
+ secondary: 'hc-bg-secondary hc-border hc-border-secondary hc-text-white hover:hc-bg-opacity-70 focus:hc-bg-opacity-70',
15
+ outline: 'hc-bg-transparent hc-border hc-border-primary hc-text-primary hover:hc-bg-primaryDark hover:hc-border-primaryDark hover:hc-text-white focus:hc-bg-primaryDark focus:hc-border-primaryDark focus:hc-text-white',
16
+ link: `${linkDefaultClasses} hc-text-primary hover:hc-text-uiText focus:hc-text-uiText`,
17
+ icon: 'hc-opacity-100 hover:hc-opacity-70 focus:hc-opacity-70'
18
+ };
19
+
20
+ const ButtonSize = {
21
+ none: '',
22
+ default: 'hc-py-2 hc-px-6 hc-text-base',
23
+ sq: 'hc-p-2.5',
24
+ sqsm: 'hc-p-1',
25
+ xs: 'hc-py-1.5 hc-px-3 hc-text-xs',
26
+ sm: 'hc-py-1.5 hc-px-4 hc-text-sm',
27
+ lg: 'hc-py-4 hc-px-10 hc-text-lg'
28
+ };
29
+
30
+ const ButtonDefaults = {
31
+ style: 'hc-group hc-font-medium hc-uppercase hc-text-center hc-rounded hc-transition',
32
+ size: ButtonSize.default,
33
+ variant: ButtonVariant.primary,
34
+ block: 'hc-block hc-w-full'
35
+ };
36
+
37
+ const linkVariants = variant => variant === 'link';
38
+
39
+ const buttonClasses = (variant, size, isBlock, hasUnderline, className) => twMerge(
40
+ isBlock ? ButtonDefaults.block : linkVariants(variant) ? 'hc-inline' : 'hc-inline-block',
41
+ ButtonDefaults.style,
42
+ variant ? ButtonVariant[variant] : ButtonDefaults.variant,
43
+ size ? ButtonSize[size] : ButtonDefaults.size,
44
+ hasUnderline ? underlineClasses : '',
45
+ className ?? ''
46
+ );
47
+
48
+ const Button = ({
49
+ children
50
+ }) => {
51
+ return (
52
+ { children }
53
+ );
54
+ };
55
+
56
+ export const Anchor = ({
57
+ children,
58
+ href,
59
+ className,
60
+ size,
61
+ variant,
62
+ isBlock,
63
+ hasUnderline,
64
+ target = '_blank',
65
+ ...rest
66
+ }) => {
67
+ return (
68
+ <a
69
+ href={href}
70
+ target={target}
71
+ className={buttonClasses(variant, size, isBlock, hasUnderline, className)}
72
+ onClick={href === '#' ? e => {
73
+ e.preventDefault();
74
+ } : null}
75
+ {...rest}
76
+ >
77
+ {children}
78
+ </a>
79
+ );
80
+ };
81
+
82
+ export const AnchorLink = ({
83
+ children,
84
+ Link,
85
+ href,
86
+ className,
87
+ size,
88
+ variant,
89
+ isBlock,
90
+ hasUnderline,
91
+ ...rest
92
+ }) => {
93
+ return (
94
+ <Link
95
+ href={href}
96
+ className={`
97
+ ${buttonClasses(variant, size, isBlock, hasUnderline, className)}
98
+ `}
99
+ {...rest}
100
+ >
101
+ {children}
102
+ </Link>
103
+ );
104
+ };
105
+
106
+ export const ScrollAnchor = forwardRef((props, ref) => {
107
+ const {
108
+ children,
109
+ href,
110
+ className,
111
+ size,
112
+ variant,
113
+ isBlock,
114
+ hasUnderline,
115
+ ...rest
116
+ } = props;
117
+
118
+ return (
119
+ <Link
120
+ ref={ref}
121
+ href={`#${href}`}
122
+ scroll={false}
123
+ className={buttonClasses(variant, size, isBlock, hasUnderline, className)}
124
+ {...rest}
125
+ >
126
+ {children}
127
+ </Link>
128
+ );
129
+ });
130
+
131
+ export const Btn = forwardRef((props, ref) => {
132
+ const {
133
+ children,
134
+ type = 'button',
135
+ className,
136
+ size,
137
+ variant,
138
+ isBlock,
139
+ hasUnderline,
140
+ ...rest
141
+ } = props;
142
+ return (
143
+ <button
144
+ ref={ref}
145
+ type={type}
146
+ className={buttonClasses(variant, size, isBlock, hasUnderline, className)}
147
+ {...rest}
148
+ >
149
+ {children}
150
+ </button>
151
+ );
152
+ });
153
+
154
+ export const ButtonBody = ({
155
+ children,
156
+ className
157
+ }) => {
158
+ return (
159
+ <span
160
+ className={twMerge(
161
+ 'hc-inline-flex hc-w-full hc-items-center hc-justify-between hc-gap-1.5',
162
+ className ?? ''
163
+ )}
164
+ >
165
+ {children}
166
+ </span>
167
+ );
168
+ };
169
+
170
+ export const ButtonIcon = ({
171
+ icon,
172
+ size = 'hc-size-4',
173
+ className
174
+ }) => {
175
+ return (
176
+ <Icon
177
+
178
+ icon={icon}
179
+ size={size}
180
+ className={className ?? ''}
181
+ />
182
+ );
183
+ };
184
+
185
+ Button.Anchor = Anchor;
186
+ Button.Link = AnchorLink;
187
+ Button.Scroll = ScrollAnchor;
188
+ Button.Btn = Btn;
189
+ Button.Body = ButtonBody;
190
+ Button.Icon = ButtonIcon;
191
+
192
+ Btn.displayName = 'Button:Button';
193
+ ScrollAnchor.displayName = 'Button:ScrollAnchor';
194
+ export default Button;