@abcagency/hc-ui-components 1.1.1 → 1.2.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 (234) hide show
  1. package/.editorconfig +12 -0
  2. package/.eslintrc +144 -0
  3. package/.prettierignore +3 -0
  4. package/dist/_virtual/_rollupPluginBabelHelpers.js +516 -0
  5. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  6. package/dist/apis/hcApi.js +189 -0
  7. package/dist/apis/hcApi.js.map +1 -0
  8. package/dist/clientToken.js +10 -0
  9. package/dist/clientToken.js.map +1 -0
  10. package/dist/components/HireControlMap.js +129 -0
  11. package/dist/components/HireControlMap.js.map +1 -0
  12. package/dist/components/modules/accordions/MapAccordionItem.js +76 -0
  13. package/dist/components/modules/accordions/MapAccordionItem.js.map +1 -0
  14. package/dist/components/modules/accordions/default.js +108 -0
  15. package/dist/components/modules/accordions/default.js.map +1 -0
  16. package/dist/components/modules/accordions/filterItem.js +50 -0
  17. package/dist/components/modules/accordions/filterItem.js.map +1 -0
  18. package/dist/components/modules/accordions/filters.js +46 -0
  19. package/dist/components/modules/accordions/filters.js.map +1 -0
  20. package/dist/components/modules/buttons/button-group-apply.js +84 -0
  21. package/dist/components/modules/buttons/button-group-apply.js.map +1 -0
  22. package/dist/components/modules/buttons/commute-pill.js +18 -0
  23. package/dist/components/modules/buttons/commute-pill.js.map +1 -0
  24. package/dist/components/modules/buttons/default.js +145 -0
  25. package/dist/components/modules/buttons/default.js.map +1 -0
  26. package/dist/components/modules/buttons/items-pill.js +23 -0
  27. package/dist/components/modules/buttons/items-pill.js.map +1 -0
  28. package/dist/components/modules/buttons/pill-wrapper.js +20 -0
  29. package/dist/components/modules/buttons/pill-wrapper.js.map +1 -0
  30. package/dist/components/modules/buttons/show-all-button.js +39 -0
  31. package/dist/components/modules/buttons/show-all-button.js.map +1 -0
  32. package/dist/components/modules/cards/default.js +102 -0
  33. package/dist/components/modules/cards/default.js.map +1 -0
  34. package/dist/components/modules/cards/filter.js +38 -0
  35. package/dist/components/modules/cards/filter.js.map +1 -0
  36. package/dist/components/modules/dialogs/apply-dialog.js +46 -0
  37. package/dist/components/modules/dialogs/apply-dialog.js.map +1 -0
  38. package/dist/components/modules/filter/commute.js +184 -0
  39. package/dist/components/modules/filter/commute.js.map +1 -0
  40. package/dist/components/modules/filter/index.js +79 -0
  41. package/dist/components/modules/filter/index.js.map +1 -0
  42. package/dist/components/modules/filter/item.js +71 -0
  43. package/dist/components/modules/filter/item.js.map +1 -0
  44. package/dist/components/modules/filter/location.js +68 -0
  45. package/dist/components/modules/filter/location.js.map +1 -0
  46. package/dist/components/modules/filter/points-of-interest.js +38 -0
  47. package/dist/components/modules/filter/points-of-interest.js.map +1 -0
  48. package/dist/components/modules/filter/radio-item.js +46 -0
  49. package/dist/components/modules/filter/radio-item.js.map +1 -0
  50. package/dist/components/modules/filter/search.js +83 -0
  51. package/dist/components/modules/filter/search.js.map +1 -0
  52. package/dist/components/modules/filter/sort.js +93 -0
  53. package/dist/components/modules/filter/sort.js.map +1 -0
  54. package/dist/components/modules/grid.js +39 -0
  55. package/dist/components/modules/grid.js.map +1 -0
  56. package/dist/components/modules/icon.js +23 -0
  57. package/dist/components/modules/icon.js.map +1 -0
  58. package/dist/components/modules/jobListing/listing-details.js +69 -0
  59. package/dist/components/modules/jobListing/listing-details.js.map +1 -0
  60. package/dist/components/modules/maps/info-window-card.js +14 -0
  61. package/dist/components/modules/maps/info-window-card.js.map +1 -0
  62. package/dist/components/modules/maps/info-window-content.js +39 -0
  63. package/dist/components/modules/maps/info-window-content.js.map +1 -0
  64. package/dist/components/modules/maps/list/field-mapper.js +88 -0
  65. package/dist/components/modules/maps/list/field-mapper.js.map +1 -0
  66. package/dist/components/modules/maps/list/header-item.js +59 -0
  67. package/dist/components/modules/maps/list/header-item.js.map +1 -0
  68. package/dist/components/modules/maps/list/header.js +37 -0
  69. package/dist/components/modules/maps/list/header.js.map +1 -0
  70. package/dist/components/modules/maps/list/index.js +93 -0
  71. package/dist/components/modules/maps/list/index.js.map +1 -0
  72. package/dist/components/modules/maps/list/item-expand-card/index.js +16 -0
  73. package/dist/components/modules/maps/list/item-expand-card/index.js.map +1 -0
  74. package/dist/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js +38 -0
  75. package/dist/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js.map +1 -0
  76. package/dist/components/modules/maps/list/item-expand-card/recruiter-details.js +40 -0
  77. package/dist/components/modules/maps/list/item-expand-card/recruiter-details.js.map +1 -0
  78. package/dist/components/modules/maps/list/item-expand-card/recruiter-headshot.js +20 -0
  79. package/dist/components/modules/maps/list/item-expand-card/recruiter-headshot.js.map +1 -0
  80. package/dist/components/modules/maps/list/list-item/index.js +98 -0
  81. package/dist/components/modules/maps/list/list-item/index.js.map +1 -0
  82. package/dist/components/modules/maps/map-list.js +57 -0
  83. package/dist/components/modules/maps/map-list.js.map +1 -0
  84. package/dist/components/modules/maps/map-marker.js +85 -0
  85. package/dist/components/modules/maps/map-marker.js.map +1 -0
  86. package/dist/components/modules/maps/map.js +201 -0
  87. package/dist/components/modules/maps/map.js.map +1 -0
  88. package/dist/components/modules/maps/place-marker.js +37 -0
  89. package/dist/components/modules/maps/place-marker.js.map +1 -0
  90. package/dist/components/modules/maps/tabs.js +84 -0
  91. package/dist/components/modules/maps/tabs.js.map +1 -0
  92. package/dist/constants/placeTypes.js +11 -0
  93. package/dist/constants/placeTypes.js.map +1 -0
  94. package/dist/contexts/mapContext.js +133 -0
  95. package/dist/contexts/mapContext.js.map +1 -0
  96. package/dist/contexts/mapListContext.js +278 -0
  97. package/dist/contexts/mapListContext.js.map +1 -0
  98. package/dist/contexts/placesContext.js +152 -0
  99. package/dist/contexts/placesContext.js.map +1 -0
  100. package/dist/hooks/useList.js +119 -0
  101. package/dist/hooks/useList.js.map +1 -0
  102. package/dist/index.js +2 -4536
  103. package/dist/index.js.map +1 -0
  104. package/dist/services/_virtual/_rollupPluginBabelHelpers.js +372 -0
  105. package/dist/services/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  106. package/dist/services/apis/hcApi.js +189 -0
  107. package/dist/services/apis/hcApi.js.map +1 -0
  108. package/dist/services/clientToken.js +7 -0
  109. package/dist/services/clientToken.js.map +1 -0
  110. package/dist/services/configService.js +33 -0
  111. package/dist/services/configService.js.map +1 -0
  112. package/dist/services/googlePlacesNearbyService.js +61 -0
  113. package/dist/services/googlePlacesNearbyService.js.map +1 -0
  114. package/dist/services/listingAggregatorService.js +56 -0
  115. package/dist/services/listingAggregatorService.js.map +1 -0
  116. package/dist/services/listingEntityService.js +36 -0
  117. package/dist/services/listingEntityService.js.map +1 -0
  118. package/dist/services/listingService.js +60 -112
  119. package/dist/services/listingService.js.map +1 -0
  120. package/dist/services/recruiterService.js +36 -0
  121. package/dist/services/recruiterService.js.map +1 -0
  122. package/dist/services/styles/index.css +3 -0
  123. package/dist/styles/index.css +3 -0
  124. package/dist/util/filterUtil.js +213 -0
  125. package/dist/util/filterUtil.js.map +1 -0
  126. package/dist/util/loading.js +16 -0
  127. package/dist/util/loading.js.map +1 -0
  128. package/dist/util/localStorageUtil.js +32 -0
  129. package/dist/util/localStorageUtil.js.map +1 -0
  130. package/dist/util/mapIconUtil.js +73 -0
  131. package/dist/util/mapIconUtil.js.map +1 -0
  132. package/dist/util/mapUtil.js +76 -0
  133. package/dist/util/mapUtil.js.map +1 -0
  134. package/dist/util/sortUtil.js +33 -0
  135. package/dist/util/sortUtil.js.map +1 -0
  136. package/dist/util/stringUtils.js +9 -0
  137. package/dist/util/stringUtils.js.map +1 -0
  138. package/jsconfig.json +7 -0
  139. package/package.json +51 -38
  140. package/postcss.config.js +13 -15
  141. package/{src/tailwind/preset.default.js → preset.default.js} +15 -15
  142. package/rollup.config.mjs +87 -0
  143. package/src/apis/hcApi.js +93 -87
  144. package/src/clientToken.js +9 -9
  145. package/src/components/HireControlMap.js +120 -0
  146. package/src/components/modules/accordions/MapAccordionItem.js +72 -69
  147. package/src/components/modules/accordions/default.js +171 -173
  148. package/src/components/modules/accordions/filterItem.js +53 -53
  149. package/src/components/modules/accordions/filters.js +47 -44
  150. package/src/components/modules/buttons/button-group-apply.js +113 -85
  151. package/src/components/modules/buttons/commute-pill.js +22 -21
  152. package/src/components/modules/buttons/default.js +196 -196
  153. package/src/components/modules/buttons/items-pill.js +32 -31
  154. package/src/components/modules/buttons/pill-wrapper.js +27 -26
  155. package/src/components/modules/buttons/show-all-button.js +20 -20
  156. package/src/components/modules/cards/default.js +167 -168
  157. package/src/components/modules/cards/filter.js +56 -55
  158. package/src/components/modules/dialogs/apply-dialog.js +48 -47
  159. package/src/components/modules/filter/commute.js +148 -151
  160. package/src/components/modules/filter/index.js +87 -86
  161. package/src/components/modules/filter/item.js +76 -77
  162. package/src/components/modules/filter/location.js +71 -69
  163. package/src/components/modules/filter/points-of-interest.js +44 -43
  164. package/src/components/modules/filter/radio-item.js +53 -51
  165. package/src/components/modules/filter/search.js +92 -91
  166. package/src/components/modules/filter/sort.js +83 -83
  167. package/src/components/modules/grid.js +55 -56
  168. package/src/components/modules/icon.js +33 -33
  169. package/src/components/modules/jobListing/listing-details.js +94 -88
  170. package/src/components/modules/maps/info-window-card.js +17 -17
  171. package/src/components/modules/maps/info-window-content.js +58 -60
  172. package/src/components/modules/maps/list/field-mapper.js +112 -111
  173. package/src/components/modules/maps/list/header-item.js +91 -90
  174. package/src/components/modules/maps/list/header.js +47 -46
  175. package/src/components/modules/maps/list/index.js +107 -104
  176. package/src/components/modules/maps/list/item-expand-card/index.js +22 -21
  177. package/src/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js +50 -48
  178. package/src/components/modules/maps/list/item-expand-card/recruiter-details.js +68 -67
  179. package/src/components/modules/maps/list/item-expand-card/recruiter-headshot.js +22 -22
  180. package/src/components/modules/maps/list/list-item/index.js +134 -133
  181. package/src/components/modules/maps/map-list.js +74 -73
  182. package/src/components/modules/maps/map-marker.js +86 -84
  183. package/src/components/modules/maps/map.js +229 -226
  184. package/src/components/modules/maps/place-marker.js +1 -1
  185. package/src/components/modules/maps/tabs.js +81 -79
  186. package/src/constants/placeTypes.js +8 -8
  187. package/src/contexts/mapContext.js +20 -19
  188. package/src/contexts/mapListContext.js +20 -15
  189. package/src/contexts/placesContext.js +4 -0
  190. package/src/hooks/useList.js +12 -10
  191. package/src/index.js +3 -103
  192. package/src/services/configService.js +16 -16
  193. package/src/services/googlePlacesNearbyService.js +33 -33
  194. package/src/services/listingAggregatorService.js +5 -4
  195. package/src/services/listingEntityService.js +2 -1
  196. package/src/services/listingService.js +27 -28
  197. package/src/services/recruiterService.js +17 -17
  198. package/src/styles/{globals.css → index.css} +23 -23
  199. package/src/util/arrayUtil.js +3 -3
  200. package/src/util/fieldMapper.js +22 -19
  201. package/src/util/filterUtil.js +19 -19
  202. package/src/util/loading.js +17 -17
  203. package/src/util/localStorageUtil.js +26 -26
  204. package/src/util/mapIconUtil.js +3 -3
  205. package/src/util/sortUtil.js +32 -32
  206. package/src/util/stringUtils.js +6 -6
  207. package/{src/tailwind/tailwind.config.js → tailwind.config.js} +126 -127
  208. package/dist/globals.css +0 -3
  209. package/dist/output.css +0 -784
  210. package/dist/services/globals.css +0 -3
  211. package/rollup.config.js +0 -68
  212. package/src/components/layout/footer.js +0 -34
  213. package/src/components/layout/header.js +0 -23
  214. package/src/components/layout/layout.js +0 -36
  215. package/src/components/modules/animations/slidein.js +0 -41
  216. package/src/components/modules/navigation/nav-link.js +0 -65
  217. package/src/components/modules/navigation/navbar.js +0 -106
  218. package/src/components/modules/navigation/skip-link.js +0 -21
  219. package/src/components/modules/navigation/social.js +0 -29
  220. package/src/components/modules/sections/default.js +0 -59
  221. package/src/components/modules/sections/sectionContext.js +0 -4
  222. package/src/hooks/useClickOutside.js +0 -16
  223. package/src/hooks/useEventListener.js +0 -25
  224. package/src/hooks/useEventTracker.js +0 -19
  225. package/src/hooks/useRefScrollProgress.js +0 -24
  226. package/src/hooks/useScript.js +0 -63
  227. package/src/hooks/useScrollDirection.js +0 -39
  228. package/src/hooks/useSectionTracker.js +0 -95
  229. package/src/hooks/useUserAgent.js +0 -43
  230. package/src/hooks/useWindowSize.js +0 -28
  231. package/src/index.css +0 -25
  232. package/src/styles/fonts.js +0 -0
  233. package/src/util/page-head.js +0 -62
  234. package/src/util/provider.js +0 -12
@@ -1,69 +1,72 @@
1
- import Accordion from "~/components/modules/accordions/default";
2
- import ListItem from "~/components/modules/maps/list/list-item";
3
- import ItemExpandCard from "~/components/modules/maps/list/item-expand-card";
4
- import { useMap } from "~/contexts/mapContext";
5
- import { setStorageObject } from "~/util/localStorageUtil";
6
- import { useEffect } from "react";
7
- import { useMapList } from "~/contexts/mapListContext";
8
- import React from 'react'
9
- const MapAccordionItem = ({
10
- item,
11
- itemRefs,
12
- itemExpandedContent,
13
- fieldsShown,
14
- showMap,
15
- hasListItemSelected,
16
- specialFeatures,
17
- isActive
18
- }) => {
19
- const {
20
- mapItems,
21
- recruiters,
22
- setMobileTab,
23
- favorites,
24
- handleSettingFavorites
25
- } = useMapList();
26
- const { selectItem } = useMap();
27
- const setSelectedItemAndZoomMap = item => {
28
- if (isActive) {
29
- localStorage.removeItem("selectedListItem");
30
- mapItems.find(x => x.items.hasOwnProperty(item.id)) || null;
31
- selectItem(null, null, 9, { lat: 39.8283, lng: -98.5795 });
32
- } else {
33
- setStorageObject("selectedListItem", item);
34
- let location = mapItems.find(x => x.items.hasOwnProperty(item.id)) || null;
35
- selectItem(item, location, 12, {
36
- lat: location?.latitude,
37
- lng: location?.longitude
38
- });
39
- }
40
- };
41
- return (
42
- <Accordion.Item key={item.id} id={item.id}>
43
- <Accordion.Trigger.Blank>
44
- <ListItem
45
- ref={el => (itemRefs.current[item.id] = el)}
46
- id={item.id}
47
- key={item.id}
48
- item={item}
49
- fieldsShown={fieldsShown}
50
- onClick={() => setSelectedItemAndZoomMap(item)}
51
- showMap={showMap}
52
- isActive={isActive}
53
- setMobileTab={setMobileTab}
54
- specialFeatures={specialFeatures}
55
- className={hasListItemSelected ? isActive ? "!hc-border-secondary hc-border hc-border-b-0" : "hc-opacity-85" : ""}
56
- favorites={favorites}
57
- setFavorites={handleSettingFavorites}
58
- />
59
- </Accordion.Trigger.Blank>
60
- {isActive &&
61
- <Accordion.Content bodyClassName="hc-px-2 hc-py-2 hc-pt-0 hc-bg-uiAccent/5 hc-border-secondary hc-border hc-border-t-0">
62
- <ItemExpandCard content={itemExpandedContent(item, recruiters)} />
63
- </Accordion.Content>
64
- }
65
- </Accordion.Item>
66
- );
67
- };
68
-
69
- export default MapAccordionItem;
1
+ import React from 'react'
2
+
3
+ import Accordion from '~/components/modules/accordions/default';
4
+ import ListItem from '~/components/modules/maps/list/list-item';
5
+ import ItemExpandCard from '~/components/modules/maps/list/item-expand-card';
6
+
7
+ import { useMap } from '~/contexts/mapContext';
8
+ import { useMapList } from '~/contexts/mapListContext';
9
+
10
+ import { setStorageObject } from '~/util/localStorageUtil';
11
+
12
+ const MapAccordionItem = ({
13
+ item,
14
+ itemRefs,
15
+ itemExpandedContent,
16
+ fieldsShown,
17
+ showMap,
18
+ hasListItemSelected,
19
+ specialFeatures,
20
+ isActive
21
+ }) => {
22
+ const {
23
+ mapItems,
24
+ recruiters,
25
+ setMobileTab,
26
+ favorites,
27
+ handleSettingFavorites
28
+ } = useMapList();
29
+ const { selectItem } = useMap();
30
+ const setSelectedItemAndZoomMap = item => {
31
+ if (isActive) {
32
+ localStorage.removeItem("selectedListItem");
33
+ mapItems.find(x => x.items.hasOwnProperty(item.id)) || null;
34
+ selectItem(null, null, 9, { lat: 39.8283, lng: -98.5795 });
35
+ } else {
36
+ setStorageObject("selectedListItem", item);
37
+ let location = mapItems.find(x => x.items.hasOwnProperty(item.id)) || null;
38
+ selectItem(item, location, 12, {
39
+ lat: location?.latitude,
40
+ lng: location?.longitude
41
+ });
42
+ }
43
+ };
44
+ return (
45
+ <Accordion.Item key={item.id} id={item.id}>
46
+ <Accordion.Trigger.Blank>
47
+ <ListItem
48
+ ref={el => (itemRefs.current[item.id] = el)}
49
+ id={item.id}
50
+ key={item.id}
51
+ item={item}
52
+ fieldsShown={fieldsShown}
53
+ onClick={() => setSelectedItemAndZoomMap(item)}
54
+ showMap={showMap}
55
+ isActive={isActive}
56
+ setMobileTab={setMobileTab}
57
+ specialFeatures={specialFeatures}
58
+ className={hasListItemSelected ? isActive ? "!hc-border-secondary hc-border hc-border-b-0" : "hc-opacity-85" : ""}
59
+ favorites={favorites}
60
+ setFavorites={handleSettingFavorites}
61
+ />
62
+ </Accordion.Trigger.Blank>
63
+ {isActive &&
64
+ <Accordion.Content bodyClassName="hc-px-2 hc-py-2 hc-pt-0 hc-bg-uiAccent/5 hc-border-secondary hc-border hc-border-t-0">
65
+ <ItemExpandCard content={itemExpandedContent(item, recruiters)} />
66
+ </Accordion.Content>
67
+ }
68
+ </Accordion.Item>
69
+ );
70
+ };
71
+
72
+ export default MapAccordionItem;
@@ -1,173 +1,171 @@
1
- import { forwardRef } from 'react';
2
- import * as RadixAccordion from '@radix-ui/react-accordion';
3
- import { twMerge } from 'tailwind-merge';
4
- import Icon from '~/components/modules/icon';
5
- import React from 'react';
6
- import trackEvent from '~/hooks/useEventTracker';
7
-
8
- const Accordion = ({
9
- className,
10
- type = 'single',
11
- defaultValue,
12
- collapsible = true,
13
- children
14
- }) => {
15
- return (
16
- <RadixAccordion.Root
17
- type={type}
18
- value={defaultValue ?? null}
19
- collapsible={collapsible}
20
- className={className ?? ''}
21
- onValueChange={value => trackEvent('Engagement', 'Open Accordion', value)}
22
- >
23
- {children}
24
- </RadixAccordion.Root>
25
- );
26
- };
27
-
28
- export const AccordionItem = forwardRef((
29
- {
30
- id,
31
- children,
32
- className,
33
- ...props
34
- },
35
- forwardedRef
36
- ) => {
37
- return (
38
- <RadixAccordion.Item
39
- ref={forwardedRef}
40
- value={id}
41
- className={className ?? ''}
42
- {...props}
43
- >
44
- {children}
45
- </RadixAccordion.Item>
46
- );
47
- });
48
-
49
- export const AccordionTrigger = forwardRef((
50
- {
51
- children,
52
- className,
53
- ...props
54
- },
55
- forwardedRef
56
- ) => (
57
- <RadixAccordion.Header asChild>
58
- <RadixAccordion.Trigger
59
- ref={forwardedRef}
60
- className={twMerge(
61
- 'hc-group hc-flex hc-justify-between hc-w-full hc-p-4 hc-font-bold hc-text-left hc-text-uiText focus:hc-outline-none hc-focus-visible:ring hc-focus-visible:hc-ring-uiAccent focus-visible:hc-ring-opacity-75 hover:hc-text-primary focus:hc-text-primary hc-transition data-[state=open]:hc-text-primary',
62
- className ?? ''
63
- )}
64
- {...props}
65
- >
66
- {children}
67
- <Icon
68
- icon="uil:angle-down"
69
- size="hc-size-5"
70
- className="hc-transition-transform hc-group-data-[state=open]:!hc-rotate-180"
71
- aria-hidden="true"
72
- />
73
- </RadixAccordion.Trigger>
74
- </RadixAccordion.Header>
75
- ));
76
-
77
- export const AccordionTriggerHasHeader = forwardRef((
78
- {
79
- header,
80
- headerClassName,
81
- iconClassName,
82
- children,
83
- className,
84
- ...props
85
- },
86
- forwardedRef
87
- ) => (
88
- <RadixAccordion.Header
89
- className={twMerge(
90
- 'hc-group hc-flex hc-items-start hc-justify-between hc-w-full hc-p-4 hc-pr-3 hc-font-bold hc-text-left hc-text-uiText focus:hc-outline-none focus-visible:hc-ring focus-visible:hc-ring-uiAccent focus-visible:hc-ring-opacity-75 hover:hc-text-primary focus:hc-text-primary hc-transition data-[state=open]:hc-text-primary',
91
- headerClassName ?? ''
92
- )}
93
- >
94
- <RadixAccordion.Trigger
95
- ref={forwardedRef}
96
- className={twMerge('hc-flex hc-items-center hc-justify-between hc-w-full', className ?? '')}
97
- {...props}
98
- >
99
- {children}
100
- <Icon
101
- icon="uil:angle-down"
102
- size="w-5 h-5"
103
- className={twMerge(
104
- 'hc-transition-transform group-data-[state=open]:!hc-hc-rotate-180',
105
- iconClassName ?? ''
106
- )}
107
- aria-hidden="true"
108
- />
109
- {header}
110
- </RadixAccordion.Trigger>
111
- </RadixAccordion.Header>
112
- ));
113
-
114
- export const AccordionTriggerBlank = forwardRef((
115
- {
116
- children,
117
- className,
118
- ...props
119
- },
120
- forwardedRef
121
- ) => (
122
- <RadixAccordion.Header asChild>
123
- <RadixAccordion.Trigger
124
- asChild
125
- ref={forwardedRef}
126
- {...props}
127
- >
128
- {children}
129
- </RadixAccordion.Trigger>
130
- </RadixAccordion.Header>
131
- ));
132
-
133
- export const AccordionContent = forwardRef((
134
- {
135
- children,
136
- className,
137
- bodyClassName,
138
- ...props
139
- },
140
- forwardedRef
141
- ) => (
142
- <RadixAccordion.Content
143
- ref={forwardedRef}
144
- className={twMerge(
145
- 'data-[state=open]:hc-animate-slideDown hc-data-[state=closed]:hc-animate-slideUp hc-overflow-hidden',
146
- className ?? ''
147
- )}
148
- {...props}
149
- >
150
- <div
151
- className={twMerge(
152
- 'p-4 pt-0.5',
153
- bodyClassName ?? ''
154
- )}
155
- >
156
- {children}
157
- </div>
158
- </RadixAccordion.Content>
159
- ));
160
-
161
- Accordion.Item = AccordionItem;
162
- Accordion.Trigger = AccordionTrigger;
163
- Accordion.Trigger.Blank = AccordionTriggerBlank;
164
- Accordion.Trigger.HasHeader = AccordionTriggerHasHeader;
165
- Accordion.Content = AccordionContent;
166
-
167
- AccordionItem.displayName = 'AccordionItem';
168
- AccordionTrigger.displayName = 'AccordionTrigger';
169
- AccordionTriggerBlank.displayName = 'AccordionTriggerBlank';
170
- AccordionTriggerHasHeader.displayName = 'AccordionTriggerHasHeader';
171
- AccordionContent.displayName = 'AccordionContent';
172
-
173
- export default Accordion;
1
+ import React, { forwardRef } from 'react';
2
+ import * as RadixAccordion from '@radix-ui/react-accordion';
3
+ import { twMerge } from 'tailwind-merge';
4
+
5
+ import Icon from '~/components/modules/icon';
6
+
7
+ const Accordion = ({
8
+ className,
9
+ type = 'single',
10
+ defaultValue,
11
+ collapsible = true,
12
+ children
13
+ }) => {
14
+ return (
15
+ <RadixAccordion.Root
16
+ type={type}
17
+ value={defaultValue ?? null}
18
+ collapsible={collapsible}
19
+ className={className ?? ''}
20
+ >
21
+ {children}
22
+ </RadixAccordion.Root>
23
+ );
24
+ };
25
+
26
+ export const AccordionItem = forwardRef((
27
+ {
28
+ id,
29
+ children,
30
+ className,
31
+ ...props
32
+ },
33
+ forwardedRef
34
+ ) => {
35
+ return (
36
+ <RadixAccordion.Item
37
+ ref={forwardedRef}
38
+ value={id}
39
+ className={className ?? ''}
40
+ {...props}
41
+ >
42
+ {children}
43
+ </RadixAccordion.Item>
44
+ );
45
+ });
46
+
47
+ export const AccordionTrigger = forwardRef((
48
+ {
49
+ children,
50
+ className,
51
+ ...props
52
+ },
53
+ forwardedRef
54
+ ) => (
55
+ <RadixAccordion.Header asChild>
56
+ <RadixAccordion.Trigger
57
+ ref={forwardedRef}
58
+ className={twMerge(
59
+ 'hc-group hc-flex hc-justify-between hc-w-full hc-p-4 hc-font-bold hc-text-left hc-text-uiText focus:hc-outline-none hfocus-visible:hcring focus-visible:hc-ring-uiAccent focus-visible:hc-ring-opacity-75 hover:hc-text-primary focus:hc-text-primary hc-transition data-[state=open]:hc-text-primary',
60
+ className ?? ''
61
+ )}
62
+ {...props}
63
+ >
64
+ {children}
65
+ <Icon
66
+ icon="uil:angle-down"
67
+ size="hc-size-5"
68
+ className="hc-transition-transform group-data-[state=open]:!hc-rotate-180"
69
+ aria-hidden="true"
70
+ />
71
+ </RadixAccordion.Trigger>
72
+ </RadixAccordion.Header>
73
+ ));
74
+
75
+ export const AccordionTriggerHasHeader = forwardRef((
76
+ {
77
+ header,
78
+ headerClassName,
79
+ iconClassName,
80
+ children,
81
+ className,
82
+ ...props
83
+ },
84
+ forwardedRef
85
+ ) => (
86
+ <RadixAccordion.Header
87
+ className={twMerge(
88
+ 'hc-group hc-flex hc-items-start hc-justify-between hc-w-full hc-p-4 hc-pr-3 hc-font-bold hc-text-left hc-text-uiText focus:hc-outline-none focus-visible:hc-ring focus-visible:hc-ring-uiAccent focus-visible:hc-ring-opacity-75 hover:hc-text-primary focus:hc-text-primary hc-transition data-[state=open]:hc-text-primary',
89
+ headerClassName ?? ''
90
+ )}
91
+ >
92
+ <RadixAccordion.Trigger
93
+ ref={forwardedRef}
94
+ className={twMerge('hc-flex hc-items-center hc-justify-between hc-w-full', className ?? '')}
95
+ {...props}
96
+ >
97
+ {children}
98
+ <Icon
99
+ icon="uil:angle-down"
100
+ size="w-5 h-5"
101
+ className={twMerge(
102
+ 'hc-transition-transform group-data-[state=open]:!hc-rotate-180',
103
+ iconClassName ?? ''
104
+ )}
105
+ aria-hidden="true"
106
+ />
107
+ {header}
108
+ </RadixAccordion.Trigger>
109
+ </RadixAccordion.Header>
110
+ ));
111
+
112
+ export const AccordionTriggerBlank = forwardRef((
113
+ {
114
+ children,
115
+ className,
116
+ ...props
117
+ },
118
+ forwardedRef
119
+ ) => (
120
+ <RadixAccordion.Header asChild>
121
+ <RadixAccordion.Trigger
122
+ asChild
123
+ ref={forwardedRef}
124
+ {...props}
125
+ >
126
+ {children}
127
+ </RadixAccordion.Trigger>
128
+ </RadixAccordion.Header>
129
+ ));
130
+
131
+ export const AccordionContent = forwardRef((
132
+ {
133
+ children,
134
+ className,
135
+ bodyClassName,
136
+ ...props
137
+ },
138
+ forwardedRef
139
+ ) => (
140
+ <RadixAccordion.Content
141
+ ref={forwardedRef}
142
+ className={twMerge(
143
+ 'data-[state=open]:hc-animate-slideDown data-[state=closed]:hc-animate-slideUp hc-overflow-hidden',
144
+ className ?? ''
145
+ )}
146
+ {...props}
147
+ >
148
+ <div
149
+ className={twMerge(
150
+ 'hc-p-4 hc-pt-0.5',
151
+ bodyClassName ?? ''
152
+ )}
153
+ >
154
+ {children}
155
+ </div>
156
+ </RadixAccordion.Content>
157
+ ));
158
+
159
+ Accordion.Item = AccordionItem;
160
+ Accordion.Trigger = AccordionTrigger;
161
+ Accordion.Trigger.Blank = AccordionTriggerBlank;
162
+ Accordion.Trigger.HasHeader = AccordionTriggerHasHeader;
163
+ Accordion.Content = AccordionContent;
164
+
165
+ AccordionItem.displayName = 'AccordionItem';
166
+ AccordionTrigger.displayName = 'AccordionTrigger';
167
+ AccordionTriggerBlank.displayName = 'AccordionTriggerBlank';
168
+ AccordionTriggerHasHeader.displayName = 'AccordionTriggerHasHeader';
169
+ AccordionContent.displayName = 'AccordionContent';
170
+
171
+ export default Accordion;
@@ -1,53 +1,53 @@
1
- import { memo } from "react";
2
- import React from 'react';
3
- import Accordion from "~/components/modules/accordions/default";
4
- import FilterItem from "~/components/modules/filter/item";
5
- import ItemsPill from "~/components/modules/buttons/items-pill";
6
-
7
- const AccordionFilterItem = memo(({ filter, setDefaultValue, setSelectedFilters, selectedFilters }) => {
8
- const fieldKey = filter.id;
9
- const activeItemsCount = selectedFilters != null && selectedFilters[fieldKey]
10
- ? Object.keys(selectedFilters[fieldKey]).length
11
- : 0;
12
-
13
- const handleClearFilters = () => {
14
- setSelectedFilters(prevFilters => {
15
- const updatedFilters = { ...prevFilters };
16
- delete updatedFilters[fieldKey];
17
- return updatedFilters;
18
- });
19
- };
20
- return (
21
- <Accordion.Item key={filter.id} id={filter.id}>
22
- <Accordion.Trigger.HasHeader
23
- onClick={() => setDefaultValue(filter.id)}
24
- className="hc-stretched-link hc-text-left"
25
- iconClassName="hc-order-last"
26
- headerClassName="hc-relative hc-py-2 hc-rounded hc-border hc-border-uiAccent/20 hc-bg-white hc-text-sm hc-transition data-[state=open]:hc-border-b-transparent data-[state=open]:hc-rounded-b-none"
27
- header={
28
- activeItemsCount > 0 && (
29
- <ItemsPill
30
- activeItemsCount={activeItemsCount}
31
- onClick={handleClearFilters}
32
- />
33
- )
34
- }
35
- >
36
- {filter.title}
37
- </Accordion.Trigger.HasHeader>
38
- <Accordion.Content bodyClassName="hc-px-2 hc-py-1 hc-bg-white hc-rounded-b hc-border hc-border-uiAccent/20 hc-border-t-0 hc-max-h-[20vh] md:hc-max-h-[25vh] hc-overflow-auto">
39
- {filter.items.sort().map(item => (
40
- <FilterItem
41
- key={item.name}
42
- item={item}
43
- field={filter.id}
44
- selectedFilters={selectedFilters}
45
- setSelectedFilters={setSelectedFilters}
46
- />
47
- ))}
48
- </Accordion.Content>
49
- </Accordion.Item>
50
- );
51
- });
52
- AccordionFilterItem.displayName = 'AccordionItem';
53
- export default AccordionFilterItem;
1
+ import React, { memo } from 'react';
2
+
3
+ import Accordion from '~/components/modules/accordions/default';
4
+ import FilterItem from '~/components/modules/filter/item';
5
+ import ItemsPill from '~/components/modules/buttons/items-pill';
6
+
7
+ const AccordionFilterItem = memo(({ filter, setDefaultValue, setSelectedFilters, selectedFilters }) => {
8
+ const fieldKey = filter.id;
9
+ const activeItemsCount = selectedFilters != null && selectedFilters[fieldKey]
10
+ ? Object.keys(selectedFilters[fieldKey]).length
11
+ : 0;
12
+
13
+ const handleClearFilters = () => {
14
+ setSelectedFilters(prevFilters => {
15
+ const updatedFilters = { ...prevFilters };
16
+ delete updatedFilters[fieldKey];
17
+ return updatedFilters;
18
+ });
19
+ };
20
+ return (
21
+ <Accordion.Item key={filter.id} id={filter.id}>
22
+ <Accordion.Trigger.HasHeader
23
+ onClick={() => setDefaultValue(filter.id)}
24
+ className="hc-stretched-link hc-text-left"
25
+ iconClassName="hc-order-last"
26
+ headerClassName="hc-relative hc-py-2 hc-rounded hc-border hc-border-uiAccent/20 hc-bg-white hc-text-sm hc-transition data-[state=open]:hc-border-b-transparent data-[state=open]:hc-rounded-b-none"
27
+ header={
28
+ activeItemsCount > 0 && (
29
+ <ItemsPill
30
+ activeItemsCount={activeItemsCount}
31
+ onClick={handleClearFilters}
32
+ />
33
+ )
34
+ }
35
+ >
36
+ {filter.title}
37
+ </Accordion.Trigger.HasHeader>
38
+ <Accordion.Content bodyClassName="hc-px-2 hc-py-1 hc-bg-white hc-rounded-b hc-border hc-border-uiAccent/20 hc-border-t-0 hc-max-h-[20vh] md:hc-max-h-[25vh] hc-overflow-auto">
39
+ {filter.items.sort().map(item => (
40
+ <FilterItem
41
+ key={item.name}
42
+ item={item}
43
+ field={filter.id}
44
+ selectedFilters={selectedFilters}
45
+ setSelectedFilters={setSelectedFilters}
46
+ />
47
+ ))}
48
+ </Accordion.Content>
49
+ </Accordion.Item>
50
+ );
51
+ });
52
+ AccordionFilterItem.displayName = 'AccordionItem';
53
+ export default AccordionFilterItem;