@next-degree/pickle-shared-js 0.12.1 → 0.12.2

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 (85) hide show
  1. package/dist/{company_service_sanity-Br0R7m-A.d.cts → company_service_sanity-2J1ZuUnu.d.cts} +1 -1
  2. package/dist/{company_service_sanity-DF01qvTz.d.ts → company_service_sanity-KaAGfnNV.d.ts} +1 -1
  3. package/dist/components/jobCard/JobLocation.cjs +92 -12
  4. package/dist/components/jobCard/JobLocation.cjs.map +1 -1
  5. package/dist/components/jobCard/JobLocation.d.cts +7 -5
  6. package/dist/components/jobCard/JobLocation.d.ts +7 -5
  7. package/dist/components/jobCard/JobLocation.js +92 -12
  8. package/dist/components/jobCard/JobLocation.js.map +1 -1
  9. package/dist/components/jobPost/JobHeader.cjs +1 -0
  10. package/dist/components/jobPost/JobHeader.cjs.map +1 -1
  11. package/dist/components/jobPost/JobHeader.js +1 -0
  12. package/dist/components/jobPost/JobHeader.js.map +1 -1
  13. package/dist/components/jobPost/JobPost.cjs +9 -5
  14. package/dist/components/jobPost/JobPost.cjs.map +1 -1
  15. package/dist/components/jobPost/JobPost.d.cts +1 -1
  16. package/dist/components/jobPost/JobPost.d.ts +1 -1
  17. package/dist/components/jobPost/JobPost.js +9 -5
  18. package/dist/components/jobPost/JobPost.js.map +1 -1
  19. package/dist/components/primitives/command.d.cts +3 -3
  20. package/dist/components/primitives/command.d.ts +3 -3
  21. package/dist/components/primitives/input-otp.d.cts +2 -2
  22. package/dist/components/primitives/input-otp.d.ts +2 -2
  23. package/dist/components/ui/Button.d.cts +1 -1
  24. package/dist/components/ui/Button.d.ts +1 -1
  25. package/dist/components/ui/Chip.cjs +1 -0
  26. package/dist/components/ui/Chip.cjs.map +1 -1
  27. package/dist/components/ui/Chip.d.cts +1 -1
  28. package/dist/components/ui/Chip.d.ts +1 -1
  29. package/dist/components/ui/Chip.js +1 -0
  30. package/dist/components/ui/Chip.js.map +1 -1
  31. package/dist/components/ui/Select.cjs +1 -0
  32. package/dist/components/ui/Select.cjs.map +1 -1
  33. package/dist/components/ui/Select.js +1 -0
  34. package/dist/components/ui/Select.js.map +1 -1
  35. package/dist/components/ui/buttonShadcn.d.cts +1 -1
  36. package/dist/components/ui/buttonShadcn.d.ts +1 -1
  37. package/dist/{displayText-DzxDrQAT.d.cts → displayText-DW0qiJqh.d.cts} +2 -2
  38. package/dist/{displayText-C1DIK8hr.d.ts → displayText-DahwdHdi.d.ts} +2 -2
  39. package/dist/hooks/useDisplayText.d.cts +3 -3
  40. package/dist/hooks/useDisplayText.d.ts +3 -3
  41. package/dist/index.cjs +59 -15
  42. package/dist/index.cjs.map +1 -1
  43. package/dist/index.d.cts +5 -4
  44. package/dist/index.d.ts +5 -4
  45. package/dist/index.js +59 -15
  46. package/dist/index.js.map +1 -1
  47. package/dist/{job_posting_service_latest-DCbi2bXu.d.cts → job_posting_service_latest-DdgK8Nnz.d.cts} +29 -29
  48. package/dist/{job_posting_service_latest-DCbi2bXu.d.ts → job_posting_service_latest-DdgK8Nnz.d.ts} +29 -29
  49. package/dist/{job_posting_service_sanity-CfLaGMVK.d.ts → job_posting_service_sanity-BKo9TBDT.d.ts} +106 -106
  50. package/dist/{job_posting_service_sanity-B7GvIdYQ.d.cts → job_posting_service_sanity-BNq-Am9N.d.cts} +106 -106
  51. package/dist/lib/locations.cjs +32 -7
  52. package/dist/lib/locations.cjs.map +1 -1
  53. package/dist/lib/locations.d.cts +8 -5
  54. package/dist/lib/locations.d.ts +8 -5
  55. package/dist/lib/locations.js +30 -6
  56. package/dist/lib/locations.js.map +1 -1
  57. package/dist/lib/mappings.d.cts +3 -3
  58. package/dist/lib/mappings.d.ts +3 -3
  59. package/dist/lib/salaryRange.d.cts +1 -1
  60. package/dist/lib/salaryRange.d.ts +1 -1
  61. package/dist/services/displayText.d.cts +3 -3
  62. package/dist/services/displayText.d.ts +3 -3
  63. package/dist/styles/globals.css +0 -7
  64. package/dist/styles/globals.css.map +1 -1
  65. package/dist/types/data/job_posting_service_latest.d.cts +1 -1
  66. package/dist/types/data/job_posting_service_latest.d.ts +1 -1
  67. package/dist/types/data/shared_pickle_output_latest.d.cts +1 -1
  68. package/dist/types/data/shared_pickle_output_latest.d.ts +1 -1
  69. package/dist/types/index.d.cts +4 -4
  70. package/dist/types/index.d.ts +4 -4
  71. package/dist/types/latest/custom/company_service_sanity.d.cts +2 -2
  72. package/dist/types/latest/custom/company_service_sanity.d.ts +2 -2
  73. package/dist/types/latest/custom/job_posting_service_sanity.d.cts +3 -3
  74. package/dist/types/latest/custom/job_posting_service_sanity.d.ts +3 -3
  75. package/dist/types/latest/job_posting_service_latest.d.cts +1 -1
  76. package/dist/types/latest/job_posting_service_latest.d.ts +1 -1
  77. package/dist/types/latest/shared_pickle_output_latest.d.cts +1 -1
  78. package/dist/types/latest/shared_pickle_output_latest.d.ts +1 -1
  79. package/package.json +3 -2
  80. package/dist/{job_posting_service_latest-tqnHqjwc.d.cts → job_posting_service_latest-C_TEBzCf.d.cts} +28 -28
  81. package/dist/{job_posting_service_latest-tqnHqjwc.d.ts → job_posting_service_latest-C_TEBzCf.d.ts} +28 -28
  82. package/dist/{shared_pickle_output_latest-DKOmTyYk.d.cts → shared_pickle_output_latest-CXBCG04N.d.cts} +4 -4
  83. package/dist/{shared_pickle_output_latest-DKOmTyYk.d.ts → shared_pickle_output_latest-CXBCG04N.d.ts} +4 -4
  84. package/dist/{shared_pickle_output_latest--XZhOUyE.d.cts → shared_pickle_output_latest-CtvHTPeX.d.cts} +4 -4
  85. package/dist/{shared_pickle_output_latest--XZhOUyE.d.ts → shared_pickle_output_latest-CtvHTPeX.d.ts} +4 -4
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { O as OfficeTypeEnum, P as PublishStatusEnum, T as TitleEnum, i as industrySchema, o as officeSchema, s as socialMediaSchema } from './company_service_latest-C7Moeufo.cjs';
3
- import { i as imageSchema } from './shared_pickle_output_latest--XZhOUyE.cjs';
3
+ import { i as imageSchema } from './shared_pickle_output_latest-CtvHTPeX.cjs';
4
4
 
5
5
  declare const foundingInformationSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<Omit<z.objectUtil.extendShape<{
6
6
  version: z.ZodDefault<z.ZodLiteral<"1.0.0">>;
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { O as OfficeTypeEnum, P as PublishStatusEnum, T as TitleEnum, i as industrySchema, o as officeSchema, s as socialMediaSchema } from './company_service_latest-C7Moeufo.js';
3
- import { i as imageSchema } from './shared_pickle_output_latest--XZhOUyE.js';
3
+ import { i as imageSchema } from './shared_pickle_output_latest-CtvHTPeX.js';
4
4
 
5
5
  declare const foundingInformationSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<Omit<z.objectUtil.extendShape<{
6
6
  version: z.ZodDefault<z.ZodLiteral<"1.0.0">>;
@@ -65,19 +65,99 @@ var TooltipContent = React.forwardRef(({ className, sideOffset = 4, ...props },
65
65
  ));
66
66
  TooltipContent.displayName = TooltipPrimitive.Content.displayName;
67
67
 
68
- // src/components/jobCard/JobLocation.tsx
68
+ // src/components/ui/Chip.tsx
69
+ var import_cva = require("cva");
70
+ var import_tailwind_merge2 = require("tailwind-merge");
69
71
  var import_jsx_runtime2 = require("react/jsx-runtime");
70
- function JobLocation({ mainLocation, extendedLocations }) {
71
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "flex items-center gap-2", "data-testid": "job-card-location", children: [
72
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react.MapPin, { size: 16 }),
73
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "text-sm font-thin", children: mainLocation }),
74
- extendedLocations && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Tooltip, { children: [
75
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(TooltipTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "length-text group text-nowrap rounded-full bg-grey-5 px-2 py-1 text-sm font-bold text-gray-700 group-hover:cursor-pointer", children: [
76
- "+ ",
77
- extendedLocations.length,
78
- " more"
79
- ] }) }),
80
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(TooltipContent, { className: "border-1 rounded-md border border-grey-5 bg-white p-2", children: extendedLocations.map((location) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "text-nowrap text-sm", children: location }, location)) })
72
+ var Chip = ({ className, variant, size, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: (0, import_tailwind_merge2.twMerge)(chipVariants({ variant, size, className })), ...props });
73
+ var chipVariants = (0, import_cva.cva)(["flex", "items-center", "rounded-3xl", "border", "w-fit"], {
74
+ variants: {
75
+ variant: {
76
+ neutral: ["text-grey-80", "border-grey-10"],
77
+ primary: ["text-purple-100", "border-purple-20"],
78
+ danger: ["text-pumpkin-100", "border-pumpkin-20"],
79
+ jobLocation: ["text-grey-80", "border-grey-10", "bg-grey-5"],
80
+ onboarding: ["text-green-100", "bg-green-10", "cursor-pointer"],
81
+ onboardingSelected: ["text-white", "bg-green-90", "cursor-pointer"]
82
+ },
83
+ size: {
84
+ small: ["text-sm", "leading-5", "px-2", "py-1", "gap-1.5"],
85
+ medium: ["text-base", "leading-6", "px-3", "py-2", "gap-2"]
86
+ }
87
+ },
88
+ defaultVariants: {
89
+ variant: "neutral",
90
+ size: "medium"
91
+ }
92
+ });
93
+ var Chip_default = Chip;
94
+
95
+ // src/lib/locations.ts
96
+ function formattedAddress(address, isRemote = false) {
97
+ if (!address) return null;
98
+ const { addressLocality, addressRegion, addressCountry } = address;
99
+ const remoteMessage = isRemote ? " | Remote" : "";
100
+ if (addressLocality && addressRegion)
101
+ return `${addressLocality}, ${addressRegion + remoteMessage}`;
102
+ if (addressRegion && addressCountry) return `${addressRegion}, ${addressCountry + remoteMessage}`;
103
+ if (addressRegion) return `${addressRegion + remoteMessage}`;
104
+ if (addressCountry) return `${addressCountry + remoteMessage}`;
105
+ return null;
106
+ }
107
+ function getAddressList(jobPost) {
108
+ const locations = [];
109
+ if (jobPost.jobLocation) {
110
+ const address = formattedAddress(jobPost.jobLocation, jobPost.isRemote);
111
+ if (address) locations.push(address);
112
+ }
113
+ if (jobPost.applicableOffices && jobPost.applicableOffices.length > 0) {
114
+ jobPost.applicableOffices.map((office) => {
115
+ const address = formattedAddress(office?.geoLocation?.address, jobPost.isRemote);
116
+ if (address && !locations.includes(address)) locations.push(address);
117
+ });
118
+ }
119
+ if (jobPost.applicantLocationRequirements && jobPost.applicantLocationRequirements.length > 0) {
120
+ jobPost.applicantLocationRequirements.map((place) => {
121
+ const address = formattedAddress(place?.address, jobPost.isRemote);
122
+ if (address && !locations.includes(address)) locations.push(address);
123
+ });
124
+ }
125
+ return locations;
126
+ }
127
+
128
+ // src/components/jobCard/JobLocation.tsx
129
+ var import_jsx_runtime3 = require("react/jsx-runtime");
130
+ function JobLocation({ jobPost }) {
131
+ const locations = getAddressList(jobPost);
132
+ if (!locations || locations.length === 0) return null;
133
+ const primaryOffice = locations[0];
134
+ const extendedLocations = locations.slice(1).map((address) => address);
135
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex items-center gap-2", "data-testid": "job-location-element", children: [
136
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react.MapPin, { size: 16 }),
137
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-sm font-thin", children: primaryOffice }),
138
+ extendedLocations.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Tooltip, { children: [
139
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TooltipTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
140
+ Chip_default,
141
+ {
142
+ className: "font-bold",
143
+ size: "small",
144
+ variant: "jobLocation",
145
+ "data-testid": "job-location-tooltip",
146
+ children: [
147
+ "+ ",
148
+ extendedLocations.length,
149
+ " more"
150
+ ]
151
+ }
152
+ ) }),
153
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
154
+ TooltipContent,
155
+ {
156
+ className: "border-1 rounded-md border border-grey-5 bg-white p-2",
157
+ "data-testid": "job-location-tooltip-content",
158
+ children: extendedLocations.map((location) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "text-nowrap text-sm", children: location }, location))
159
+ }
160
+ )
81
161
  ] }) })
82
162
  ] });
83
163
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/jobCard/JobLocation.tsx","../../../src/components/primitives/tooltip.tsx","../../../src/lib/utils.ts"],"sourcesContent":["import { MapPin } from 'lucide-react'\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@/components/primitives/tooltip'\n\nexport type JobLocationProps = Readonly<{\n mainLocation: string\n extendedLocations?: string[]\n}>\n\nexport function JobLocation({ mainLocation, extendedLocations }: JobLocationProps) {\n return (\n <div className=\"flex items-center gap-2\" data-testid=\"job-card-location\">\n <MapPin size={16} />\n <span className=\"text-sm font-thin\">{mainLocation}</span>\n {extendedLocations && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger>\n <div className=\"length-text group text-nowrap rounded-full bg-grey-5 px-2 py-1 text-sm font-bold text-gray-700 group-hover:cursor-pointer\">\n + {extendedLocations.length} more\n </div>\n </TooltipTrigger>\n <TooltipContent className=\"border-1 rounded-md border border-grey-5 bg-white p-2\">\n {extendedLocations.map((location) => (\n <div key={location} className=\"text-nowrap text-sm\">\n {location}\n </div>\n ))}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 overflow-hidden rounded-md border border-neutral-200 bg-white px-3 py-1.5 text-sm text-neutral-950 shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50',\n className\n )}\n {...props}\n />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAuB;;;ACEvB,uBAAkC;AAClC,YAAuB;;;ACHvB,kBAAsC;AACtC,4BAAwB;AAEjB,SAAS,MAAM,QAAsB;AAC1C,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC7B;;;ADYE;AAVF,IAAM,kBAAmC;AAEzC,IAAM,UAA2B;AAEjC,IAAM,iBAAkC;AAExC,IAAM,iBAAuB,iBAG3B,CAAC,EAAE,WAAW,aAAa,GAAG,GAAG,MAAM,GAAG,QAC1C;AAAA,EAAkB;AAAA,EAAjB;AAAA,IACC;AAAA,IACA;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,eAAe,cAA+B,yBAAQ;;;ADVhD,IAAAA,sBAAA;AAHC,SAAS,YAAY,EAAE,cAAc,kBAAkB,GAAqB;AACjF,SACE,8CAAC,SAAI,WAAU,2BAA0B,eAAY,qBACnD;AAAA,iDAAC,8BAAO,MAAM,IAAI;AAAA,IAClB,6CAAC,UAAK,WAAU,qBAAqB,wBAAa;AAAA,IACjD,qBACC,6CAAC,mBACC,wDAAC,WACC;AAAA,mDAAC,kBACC,wDAAC,SAAI,WAAU,6HAA4H;AAAA;AAAA,QACtI,kBAAkB;AAAA,QAAO;AAAA,SAC9B,GACF;AAAA,MACA,6CAAC,kBAAe,WAAU,yDACvB,4BAAkB,IAAI,CAAC,aACtB,6CAAC,SAAmB,WAAU,uBAC3B,sBADO,QAEV,CACD,GACH;AAAA,OACF,GACF;AAAA,KAEJ;AAEJ;","names":["import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../../src/components/jobCard/JobLocation.tsx","../../../src/components/primitives/tooltip.tsx","../../../src/lib/utils.ts","../../../src/components/ui/Chip.tsx","../../../src/lib/locations.ts"],"sourcesContent":["import { MapPin } from 'lucide-react'\nimport { type z } from 'zod'\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@/components/primitives/tooltip'\nimport Chip from '@/components/ui/Chip'\nimport { getAddressList } from '@/lib/locations'\nimport { type jobPostSchema } from '@/types/latest/job_posting_service_latest'\n\ntype JobPost = z.infer<typeof jobPostSchema>\n\nexport type JobLocationProps = {\n jobPost: JobPost\n}\n\nexport function JobLocation({ jobPost }: JobLocationProps) {\n const locations = getAddressList(jobPost)\n if (!locations || locations.length === 0) return null\n\n const primaryOffice = locations[0]\n const extendedLocations = locations.slice(1).map((address) => address)\n\n return (\n <div className=\"flex items-center gap-2\" data-testid=\"job-location-element\">\n <MapPin size={16} />\n <span className=\"text-sm font-thin\">{primaryOffice}</span>\n {extendedLocations.length > 0 && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger>\n <Chip\n className=\"font-bold\"\n size={'small'}\n variant={'jobLocation'}\n data-testid=\"job-location-tooltip\"\n >\n + {extendedLocations.length} more\n </Chip>\n </TooltipTrigger>\n <TooltipContent\n className=\"border-1 rounded-md border border-grey-5 bg-white p-2\"\n data-testid=\"job-location-tooltip-content\"\n >\n {extendedLocations.map((location) => (\n <div key={location} className=\"text-nowrap text-sm\">\n {location}\n </div>\n ))}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 overflow-hidden rounded-md border border-neutral-200 bg-white px-3 py-1.5 text-sm text-neutral-950 shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50',\n className\n )}\n {...props}\n />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { cva, type VariantProps } from 'cva'\nimport React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\ninterface ChipProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof chipVariants> {}\n\nconst Chip = ({ className, variant, size, ...props }: ChipProps) => (\n <div className={twMerge(chipVariants({ variant, size, className }))} {...props} />\n)\n\nconst chipVariants = cva(['flex', 'items-center', 'rounded-3xl', 'border', 'w-fit'], {\n variants: {\n variant: {\n neutral: ['text-grey-80', 'border-grey-10'],\n primary: ['text-purple-100', 'border-purple-20'],\n danger: ['text-pumpkin-100', 'border-pumpkin-20'],\n jobLocation: ['text-grey-80', 'border-grey-10', 'bg-grey-5'],\n onboarding: ['text-green-100', 'bg-green-10', 'cursor-pointer'],\n onboardingSelected: ['text-white', 'bg-green-90', 'cursor-pointer'],\n },\n size: {\n small: ['text-sm', 'leading-5', 'px-2', 'py-1', 'gap-1.5'],\n medium: ['text-base', 'leading-6', 'px-3', 'py-2', 'gap-2'],\n },\n },\n defaultVariants: {\n variant: 'neutral',\n size: 'medium',\n },\n})\n\nexport default Chip\n","import { type z } from 'zod'\n\nimport { type JobPostModel } from '@/types/data/job_posting_service_latest'\nimport { type PostalAddressModel } from '@/types/data/shared_pickle_output_latest'\nimport { type jobPostSchema } from '@/types/latest/job_posting_service_latest'\n\ntype JobPost = z.infer<typeof jobPostSchema>\n\nexport function formattedAddress(\n address: PostalAddressModel | undefined,\n isRemote: boolean = false\n): string | null {\n if (!address) return null\n const { addressLocality, addressRegion, addressCountry } = address\n const remoteMessage = isRemote ? ' | Remote' : ''\n if (addressLocality && addressRegion)\n return `${addressLocality}, ${addressRegion + remoteMessage}`\n if (addressRegion && addressCountry) return `${addressRegion}, ${addressCountry + remoteMessage}`\n if (addressRegion) return `${addressRegion + remoteMessage}`\n if (addressCountry) return `${addressCountry + remoteMessage}`\n return null\n}\n\nexport function getAddressList(jobPost: JobPost): string[] {\n const locations: string[] = []\n if (jobPost.jobLocation) {\n const address = formattedAddress(jobPost.jobLocation, jobPost.isRemote)\n if (address) locations.push(address)\n }\n if (jobPost.applicableOffices && jobPost.applicableOffices.length > 0) {\n jobPost.applicableOffices.map((office) => {\n const address = formattedAddress(office?.geoLocation?.address, jobPost.isRemote)\n if (address && !locations.includes(address)) locations.push(address)\n })\n }\n if (jobPost.applicantLocationRequirements && jobPost.applicantLocationRequirements.length > 0) {\n jobPost.applicantLocationRequirements.map((place) => {\n const address = formattedAddress(place?.address, jobPost.isRemote)\n if (address && !locations.includes(address)) locations.push(address)\n })\n }\n return locations\n}\n\nexport function formattedJobLocation(job: JobPostModel) {\n const address = job.jobLocation && formattedAddress(job.jobLocation)\n const remote = job.isRemote ? 'Remote' : ''\n\n return [address, remote].filter(Boolean).join(' | ')\n}\n"],"mappings":"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","names":["import_tailwind_merge","import_jsx_runtime","import_jsx_runtime"]}
@@ -1,9 +1,11 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { z } from 'zod';
3
+ import { a as jobPostSchema } from '../../job_posting_service_latest-DdgK8Nnz.cjs';
2
4
 
3
- type JobLocationProps = Readonly<{
4
- mainLocation: string;
5
- extendedLocations?: string[];
6
- }>;
7
- declare function JobLocation({ mainLocation, extendedLocations }: JobLocationProps): react_jsx_runtime.JSX.Element;
5
+ type JobPost = z.infer<typeof jobPostSchema>;
6
+ type JobLocationProps = {
7
+ jobPost: JobPost;
8
+ };
9
+ declare function JobLocation({ jobPost }: JobLocationProps): react_jsx_runtime.JSX.Element | null;
8
10
 
9
11
  export { JobLocation, type JobLocationProps };
@@ -1,9 +1,11 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { z } from 'zod';
3
+ import { a as jobPostSchema } from '../../job_posting_service_latest-DdgK8Nnz.js';
2
4
 
3
- type JobLocationProps = Readonly<{
4
- mainLocation: string;
5
- extendedLocations?: string[];
6
- }>;
7
- declare function JobLocation({ mainLocation, extendedLocations }: JobLocationProps): react_jsx_runtime.JSX.Element;
5
+ type JobPost = z.infer<typeof jobPostSchema>;
6
+ type JobLocationProps = {
7
+ jobPost: JobPost;
8
+ };
9
+ declare function JobLocation({ jobPost }: JobLocationProps): react_jsx_runtime.JSX.Element | null;
8
10
 
9
11
  export { JobLocation, type JobLocationProps };
@@ -31,19 +31,99 @@ var TooltipContent = React.forwardRef(({ className, sideOffset = 4, ...props },
31
31
  ));
32
32
  TooltipContent.displayName = TooltipPrimitive.Content.displayName;
33
33
 
34
+ // src/components/ui/Chip.tsx
35
+ import { cva } from "cva";
36
+ import { twMerge as twMerge2 } from "tailwind-merge";
37
+ import { jsx as jsx2 } from "react/jsx-runtime";
38
+ var Chip = ({ className, variant, size, ...props }) => /* @__PURE__ */ jsx2("div", { className: twMerge2(chipVariants({ variant, size, className })), ...props });
39
+ var chipVariants = cva(["flex", "items-center", "rounded-3xl", "border", "w-fit"], {
40
+ variants: {
41
+ variant: {
42
+ neutral: ["text-grey-80", "border-grey-10"],
43
+ primary: ["text-purple-100", "border-purple-20"],
44
+ danger: ["text-pumpkin-100", "border-pumpkin-20"],
45
+ jobLocation: ["text-grey-80", "border-grey-10", "bg-grey-5"],
46
+ onboarding: ["text-green-100", "bg-green-10", "cursor-pointer"],
47
+ onboardingSelected: ["text-white", "bg-green-90", "cursor-pointer"]
48
+ },
49
+ size: {
50
+ small: ["text-sm", "leading-5", "px-2", "py-1", "gap-1.5"],
51
+ medium: ["text-base", "leading-6", "px-3", "py-2", "gap-2"]
52
+ }
53
+ },
54
+ defaultVariants: {
55
+ variant: "neutral",
56
+ size: "medium"
57
+ }
58
+ });
59
+ var Chip_default = Chip;
60
+
61
+ // src/lib/locations.ts
62
+ function formattedAddress(address, isRemote = false) {
63
+ if (!address) return null;
64
+ const { addressLocality, addressRegion, addressCountry } = address;
65
+ const remoteMessage = isRemote ? " | Remote" : "";
66
+ if (addressLocality && addressRegion)
67
+ return `${addressLocality}, ${addressRegion + remoteMessage}`;
68
+ if (addressRegion && addressCountry) return `${addressRegion}, ${addressCountry + remoteMessage}`;
69
+ if (addressRegion) return `${addressRegion + remoteMessage}`;
70
+ if (addressCountry) return `${addressCountry + remoteMessage}`;
71
+ return null;
72
+ }
73
+ function getAddressList(jobPost) {
74
+ const locations = [];
75
+ if (jobPost.jobLocation) {
76
+ const address = formattedAddress(jobPost.jobLocation, jobPost.isRemote);
77
+ if (address) locations.push(address);
78
+ }
79
+ if (jobPost.applicableOffices && jobPost.applicableOffices.length > 0) {
80
+ jobPost.applicableOffices.map((office) => {
81
+ const address = formattedAddress(office?.geoLocation?.address, jobPost.isRemote);
82
+ if (address && !locations.includes(address)) locations.push(address);
83
+ });
84
+ }
85
+ if (jobPost.applicantLocationRequirements && jobPost.applicantLocationRequirements.length > 0) {
86
+ jobPost.applicantLocationRequirements.map((place) => {
87
+ const address = formattedAddress(place?.address, jobPost.isRemote);
88
+ if (address && !locations.includes(address)) locations.push(address);
89
+ });
90
+ }
91
+ return locations;
92
+ }
93
+
34
94
  // src/components/jobCard/JobLocation.tsx
35
- import { jsx as jsx2, jsxs } from "react/jsx-runtime";
36
- function JobLocation({ mainLocation, extendedLocations }) {
37
- return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", "data-testid": "job-card-location", children: [
38
- /* @__PURE__ */ jsx2(MapPin, { size: 16 }),
39
- /* @__PURE__ */ jsx2("span", { className: "text-sm font-thin", children: mainLocation }),
40
- extendedLocations && /* @__PURE__ */ jsx2(TooltipProvider, { children: /* @__PURE__ */ jsxs(Tooltip, { children: [
41
- /* @__PURE__ */ jsx2(TooltipTrigger, { children: /* @__PURE__ */ jsxs("div", { className: "length-text group text-nowrap rounded-full bg-grey-5 px-2 py-1 text-sm font-bold text-gray-700 group-hover:cursor-pointer", children: [
42
- "+ ",
43
- extendedLocations.length,
44
- " more"
45
- ] }) }),
46
- /* @__PURE__ */ jsx2(TooltipContent, { className: "border-1 rounded-md border border-grey-5 bg-white p-2", children: extendedLocations.map((location) => /* @__PURE__ */ jsx2("div", { className: "text-nowrap text-sm", children: location }, location)) })
95
+ import { jsx as jsx3, jsxs } from "react/jsx-runtime";
96
+ function JobLocation({ jobPost }) {
97
+ const locations = getAddressList(jobPost);
98
+ if (!locations || locations.length === 0) return null;
99
+ const primaryOffice = locations[0];
100
+ const extendedLocations = locations.slice(1).map((address) => address);
101
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", "data-testid": "job-location-element", children: [
102
+ /* @__PURE__ */ jsx3(MapPin, { size: 16 }),
103
+ /* @__PURE__ */ jsx3("span", { className: "text-sm font-thin", children: primaryOffice }),
104
+ extendedLocations.length > 0 && /* @__PURE__ */ jsx3(TooltipProvider, { children: /* @__PURE__ */ jsxs(Tooltip, { children: [
105
+ /* @__PURE__ */ jsx3(TooltipTrigger, { children: /* @__PURE__ */ jsxs(
106
+ Chip_default,
107
+ {
108
+ className: "font-bold",
109
+ size: "small",
110
+ variant: "jobLocation",
111
+ "data-testid": "job-location-tooltip",
112
+ children: [
113
+ "+ ",
114
+ extendedLocations.length,
115
+ " more"
116
+ ]
117
+ }
118
+ ) }),
119
+ /* @__PURE__ */ jsx3(
120
+ TooltipContent,
121
+ {
122
+ className: "border-1 rounded-md border border-grey-5 bg-white p-2",
123
+ "data-testid": "job-location-tooltip-content",
124
+ children: extendedLocations.map((location) => /* @__PURE__ */ jsx3("div", { className: "text-nowrap text-sm", children: location }, location))
125
+ }
126
+ )
47
127
  ] }) })
48
128
  ] });
49
129
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/jobCard/JobLocation.tsx","../../../src/components/primitives/tooltip.tsx","../../../src/lib/utils.ts"],"sourcesContent":["import { MapPin } from 'lucide-react'\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@/components/primitives/tooltip'\n\nexport type JobLocationProps = Readonly<{\n mainLocation: string\n extendedLocations?: string[]\n}>\n\nexport function JobLocation({ mainLocation, extendedLocations }: JobLocationProps) {\n return (\n <div className=\"flex items-center gap-2\" data-testid=\"job-card-location\">\n <MapPin size={16} />\n <span className=\"text-sm font-thin\">{mainLocation}</span>\n {extendedLocations && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger>\n <div className=\"length-text group text-nowrap rounded-full bg-grey-5 px-2 py-1 text-sm font-bold text-gray-700 group-hover:cursor-pointer\">\n + {extendedLocations.length} more\n </div>\n </TooltipTrigger>\n <TooltipContent className=\"border-1 rounded-md border border-grey-5 bg-white p-2\">\n {extendedLocations.map((location) => (\n <div key={location} className=\"text-nowrap text-sm\">\n {location}\n </div>\n ))}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 overflow-hidden rounded-md border border-neutral-200 bg-white px-3 py-1.5 text-sm text-neutral-950 shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50',\n className\n )}\n {...props}\n />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"mappings":";AAAA,SAAS,cAAc;;;ACEvB,YAAY,sBAAsB;AAClC,YAAY,WAAW;;;ACHvB,SAA0B,YAAY;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ADYE;AAVF,IAAM,kBAAmC;AAEzC,IAAM,UAA2B;AAEjC,IAAM,iBAAkC;AAExC,IAAM,iBAAuB,iBAG3B,CAAC,EAAE,WAAW,aAAa,GAAG,GAAG,MAAM,GAAG,QAC1C;AAAA,EAAkB;AAAA,EAAjB;AAAA,IACC;AAAA,IACA;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,eAAe,cAA+B,yBAAQ;;;ADVhD,gBAAAA,MAMQ,YANR;AAHC,SAAS,YAAY,EAAE,cAAc,kBAAkB,GAAqB;AACjF,SACE,qBAAC,SAAI,WAAU,2BAA0B,eAAY,qBACnD;AAAA,oBAAAA,KAAC,UAAO,MAAM,IAAI;AAAA,IAClB,gBAAAA,KAAC,UAAK,WAAU,qBAAqB,wBAAa;AAAA,IACjD,qBACC,gBAAAA,KAAC,mBACC,+BAAC,WACC;AAAA,sBAAAA,KAAC,kBACC,+BAAC,SAAI,WAAU,6HAA4H;AAAA;AAAA,QACtI,kBAAkB;AAAA,QAAO;AAAA,SAC9B,GACF;AAAA,MACA,gBAAAA,KAAC,kBAAe,WAAU,yDACvB,4BAAkB,IAAI,CAAC,aACtB,gBAAAA,KAAC,SAAmB,WAAU,uBAC3B,sBADO,QAEV,CACD,GACH;AAAA,OACF,GACF;AAAA,KAEJ;AAEJ;","names":["jsx"]}
1
+ {"version":3,"sources":["../../../src/components/jobCard/JobLocation.tsx","../../../src/components/primitives/tooltip.tsx","../../../src/lib/utils.ts","../../../src/components/ui/Chip.tsx","../../../src/lib/locations.ts"],"sourcesContent":["import { MapPin } from 'lucide-react'\nimport { type z } from 'zod'\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@/components/primitives/tooltip'\nimport Chip from '@/components/ui/Chip'\nimport { getAddressList } from '@/lib/locations'\nimport { type jobPostSchema } from '@/types/latest/job_posting_service_latest'\n\ntype JobPost = z.infer<typeof jobPostSchema>\n\nexport type JobLocationProps = {\n jobPost: JobPost\n}\n\nexport function JobLocation({ jobPost }: JobLocationProps) {\n const locations = getAddressList(jobPost)\n if (!locations || locations.length === 0) return null\n\n const primaryOffice = locations[0]\n const extendedLocations = locations.slice(1).map((address) => address)\n\n return (\n <div className=\"flex items-center gap-2\" data-testid=\"job-location-element\">\n <MapPin size={16} />\n <span className=\"text-sm font-thin\">{primaryOffice}</span>\n {extendedLocations.length > 0 && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger>\n <Chip\n className=\"font-bold\"\n size={'small'}\n variant={'jobLocation'}\n data-testid=\"job-location-tooltip\"\n >\n + {extendedLocations.length} more\n </Chip>\n </TooltipTrigger>\n <TooltipContent\n className=\"border-1 rounded-md border border-grey-5 bg-white p-2\"\n data-testid=\"job-location-tooltip-content\"\n >\n {extendedLocations.map((location) => (\n <div key={location} className=\"text-nowrap text-sm\">\n {location}\n </div>\n ))}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 overflow-hidden rounded-md border border-neutral-200 bg-white px-3 py-1.5 text-sm text-neutral-950 shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50',\n className\n )}\n {...props}\n />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { cva, type VariantProps } from 'cva'\nimport React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\ninterface ChipProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof chipVariants> {}\n\nconst Chip = ({ className, variant, size, ...props }: ChipProps) => (\n <div className={twMerge(chipVariants({ variant, size, className }))} {...props} />\n)\n\nconst chipVariants = cva(['flex', 'items-center', 'rounded-3xl', 'border', 'w-fit'], {\n variants: {\n variant: {\n neutral: ['text-grey-80', 'border-grey-10'],\n primary: ['text-purple-100', 'border-purple-20'],\n danger: ['text-pumpkin-100', 'border-pumpkin-20'],\n jobLocation: ['text-grey-80', 'border-grey-10', 'bg-grey-5'],\n onboarding: ['text-green-100', 'bg-green-10', 'cursor-pointer'],\n onboardingSelected: ['text-white', 'bg-green-90', 'cursor-pointer'],\n },\n size: {\n small: ['text-sm', 'leading-5', 'px-2', 'py-1', 'gap-1.5'],\n medium: ['text-base', 'leading-6', 'px-3', 'py-2', 'gap-2'],\n },\n },\n defaultVariants: {\n variant: 'neutral',\n size: 'medium',\n },\n})\n\nexport default Chip\n","import { type z } from 'zod'\n\nimport { type JobPostModel } from '@/types/data/job_posting_service_latest'\nimport { type PostalAddressModel } from '@/types/data/shared_pickle_output_latest'\nimport { type jobPostSchema } from '@/types/latest/job_posting_service_latest'\n\ntype JobPost = z.infer<typeof jobPostSchema>\n\nexport function formattedAddress(\n address: PostalAddressModel | undefined,\n isRemote: boolean = false\n): string | null {\n if (!address) return null\n const { addressLocality, addressRegion, addressCountry } = address\n const remoteMessage = isRemote ? ' | Remote' : ''\n if (addressLocality && addressRegion)\n return `${addressLocality}, ${addressRegion + remoteMessage}`\n if (addressRegion && addressCountry) return `${addressRegion}, ${addressCountry + remoteMessage}`\n if (addressRegion) return `${addressRegion + remoteMessage}`\n if (addressCountry) return `${addressCountry + remoteMessage}`\n return null\n}\n\nexport function getAddressList(jobPost: JobPost): string[] {\n const locations: string[] = []\n if (jobPost.jobLocation) {\n const address = formattedAddress(jobPost.jobLocation, jobPost.isRemote)\n if (address) locations.push(address)\n }\n if (jobPost.applicableOffices && jobPost.applicableOffices.length > 0) {\n jobPost.applicableOffices.map((office) => {\n const address = formattedAddress(office?.geoLocation?.address, jobPost.isRemote)\n if (address && !locations.includes(address)) locations.push(address)\n })\n }\n if (jobPost.applicantLocationRequirements && jobPost.applicantLocationRequirements.length > 0) {\n jobPost.applicantLocationRequirements.map((place) => {\n const address = formattedAddress(place?.address, jobPost.isRemote)\n if (address && !locations.includes(address)) locations.push(address)\n })\n }\n return locations\n}\n\nexport function formattedJobLocation(job: JobPostModel) {\n const address = job.jobLocation && formattedAddress(job.jobLocation)\n const remote = job.isRemote ? 'Remote' : ''\n\n return [address, remote].filter(Boolean).join(' | ')\n}\n"],"mappings":"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","names":["twMerge","jsx","jsx"]}
@@ -249,6 +249,7 @@ var chipVariants = (0, import_cva3.cva)(["flex", "items-center", "rounded-3xl",
249
249
  neutral: ["text-grey-80", "border-grey-10"],
250
250
  primary: ["text-purple-100", "border-purple-20"],
251
251
  danger: ["text-pumpkin-100", "border-pumpkin-20"],
252
+ jobLocation: ["text-grey-80", "border-grey-10", "bg-grey-5"],
252
253
  onboarding: ["text-green-100", "bg-green-10", "cursor-pointer"],
253
254
  onboardingSelected: ["text-white", "bg-green-90", "cursor-pointer"]
254
255
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/jobPost/JobHeader.tsx","../../../src/components/buttons/BackButton.tsx","../../../src/components/ui/Icon.tsx","../../../src/lib/utils.ts","../../../src/hooks/useWindowHistory.ts","../../../src/contexts/WindowHistoryProvider.tsx","../../../src/components/ui/Avatar.tsx","../../../src/components/primitives/avatar.tsx","../../../src/components/ui/Chip.tsx","../../../src/lib/icons.ts"],"sourcesContent":["'use client'\n\nimport { Dot } from 'lucide-react'\nimport Image from 'next/image'\nimport { type ReactNode } from 'react'\n\nimport { BackButton } from '@/components/buttons/BackButton'\nimport { Avatar } from '@/components/ui/Avatar'\nimport Chip from '@/components/ui/Chip'\nimport { iconMap } from '@/lib/icons'\nimport { cn } from '@/lib/utils'\n\nexport type JobHeaderTag = {\n name: string\n label: string\n icon: keyof typeof iconMap\n}\n\nexport type JobHeaderProps = {\n title: string\n bannerSrc: string\n subtitles?: string[]\n standalone?: boolean\n avatarSrc?: string\n avatarName?: string\n avatarHref?: string\n backFallbackHref?: string\n backAcceptedRoutes?: string[]\n actions?: ReactNode\n tags?: JobHeaderTag[]\n}\n\nexport function JobHeader({\n title,\n subtitles,\n standalone,\n bannerSrc,\n avatarSrc,\n avatarName,\n avatarHref,\n backFallbackHref,\n backAcceptedRoutes,\n actions,\n tags,\n}: Readonly<JobHeaderProps>) {\n const renderIcon = (icon: JobHeaderTag['icon']) => {\n const Icon = iconMap[icon]\n return <Icon size={18} />\n }\n\n return (\n <div\n data-testid=\"job-header-root\"\n className={cn(\n '-mt-8 flex w-full flex-col items-center justify-between gap-6 md:-mt-0',\n !standalone && 'rounded-3xl'\n )}\n >\n {!standalone && (\n <div className=\"relative flex min-h-16 w-full items-center rounded-t-3xl bg-transparent md:min-h-24 md:flex-row lg:min-h-32\">\n <Image\n className=\"h-full w-full rounded-t-3xl object-cover\"\n src={bannerSrc}\n alt=\"job banner\"\n fill\n />\n <BackButton\n acceptedRoutes={backAcceptedRoutes}\n fallbackHref={backFallbackHref}\n className=\"absolute right-2 top-2 flex items-center justify-center text-white sm:hidden\"\n data-testid=\"job-header-back-button\"\n />\n <div\n className=\"absolute left-4 top-8 md:left-6 md:top-16 lg:top-24\"\n data-testid=\"job-header-avatar\"\n >\n <Avatar\n size=\"large\"\n target=\"_blank\"\n href={avatarHref}\n name={avatarName}\n src={avatarSrc}\n rel=\"noopener noreferrer\"\n />\n </div>\n </div>\n )}\n\n <div className=\"flex w-full flex-col items-start justify-start gap-4 px-6\">\n <div className=\"flex flex-col md:flex-row\">\n {standalone && (\n <div className=\"-mt-4 mr-4 md:mt-0\" data-testid=\"job-header-avatar\">\n <Avatar\n size=\"large\"\n target=\"_blank\"\n href={avatarHref}\n name={avatarName}\n src={avatarSrc}\n rel=\"noopener noreferrer\"\n />\n </div>\n )}\n\n <div className=\"prose mt-4 flex w-full items-center text-grey-80 lg:prose-lg\">\n {subtitles?.map((subtitle, i) => (\n <div\n key={subtitle}\n data-testid={`job-header-subtitle-${i}`}\n className=\"flex items-center\"\n >\n {subtitle}\n {i < subtitles.length - 1 && <Dot className=\"mx-1 shrink-0\" size={10} />}\n </div>\n ))}\n </div>\n </div>\n\n <div\n data-testid=\"job-header-content\"\n className=\"mt-2 flex w-full flex-row flex-wrap items-center justify-between gap-1\"\n >\n <h2\n data-testid=\"job-header-title\"\n className=\"break-word max-w-full text-2xl font-bold text-black sm:max-w-2xl md:max-w-lg\"\n >\n {title}\n </h2>\n\n {!!actions && (\n <div\n className=\"flex w-full justify-end gap-2 md:w-auto\"\n data-testid=\"job-header-actions\"\n >\n {actions}\n </div>\n )}\n </div>\n\n <div\n data-testid=\"job-header-tags\"\n className=\"flex flex-row flex-wrap items-center justify-start gap-2\"\n >\n {tags?.map(({ name, label, icon }) => (\n <Chip\n key={name}\n size=\"small\"\n variant=\"neutral\"\n aria-label={name}\n data-testid={`job-header-tag-${name}`}\n >\n {renderIcon(icon)}\n <span>{label}</span>\n </Chip>\n ))}\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { X } from 'lucide-react'\nimport { useRouter } from 'next/navigation'\n\nimport { Icon } from '@/components/ui/Icon'\nimport { useWindowHistory } from '@/hooks/useWindowHistory'\n\ninterface Props extends React.HTMLAttributes<HTMLButtonElement> {\n acceptedRoutes?: string[]\n fallbackHref?: string\n}\n\nexport function BackButton({ acceptedRoutes, fallbackHref, className, ...props }: Readonly<Props>) {\n const { history } = useWindowHistory()\n const router = useRouter()\n\n const isAcceptedRoute = (r: string) =>\n !!acceptedRoutes?.find((route) => new RegExp('^' + route + '$', 'i').test(new URL(r).pathname))\n\n const goBack = () => {\n const previous = history[history.length - 2]\n if (history.length > 1 && isAcceptedRoute(previous)) {\n router.back()\n } else {\n router.push(fallbackHref ?? '/')\n }\n }\n\n return (\n <Icon\n aria-label=\"back button\"\n variant=\"transparent\"\n size=\"small\"\n onClick={goBack}\n className={className}\n {...props}\n >\n <X />\n </Icon>\n )\n}\n","import { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'cva'\nimport { forwardRef } from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nimport { cn } from '@/lib/utils'\n\ninterface IconProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof iconVariants> {\n active?: boolean\n readonly?: boolean\n}\n\nexport const Icon = forwardRef<HTMLButtonElement, IconProps>(\n ({ variant, size, active = false, readonly = false, className, ...props }, ref) => {\n const Component = readonly ? Slot : 'button'\n return (\n <Component\n className={cn(\n twMerge(iconVariants({ variant: active ? 'active' : variant, size })),\n className\n )}\n {...props}\n ref={ref}\n />\n )\n }\n)\n\nIcon.displayName = 'Icon'\n\nconst iconVariants = cva(\n [\n 'inline-flex',\n 'items-center',\n 'rounded-full',\n 'outline-2',\n 'outline-offset-2',\n 'outline-dashed',\n 'outline-transparent',\n 'disabled:text-grey-40',\n 'disabled:bg-transparent',\n 'disabled:pointer-events-none',\n ],\n {\n variants: {\n variant: {\n filled: [\n 'border',\n 'border-green-80',\n 'bg-green-90',\n 'text-white',\n 'hover:bg-green-80',\n 'active:bg-green-80',\n 'focus:outline-pickle-100',\n 'disabled:bg-green-70',\n ],\n transparent: [\n 'text-black',\n 'hover:bg-grey-5',\n 'active:bg-grey-10',\n 'focus:outline-purple-100',\n ],\n tonal: [\n 'border',\n 'border-grey-5',\n 'hover:border-grey-10',\n 'active:border-grey-20',\n 'focus:outline-purple-100',\n ],\n active: ['text-black', 'bg-pickle-100'],\n },\n size: {\n small: ['h-10', 'w-10', 'p-3'],\n medium: ['h-12', 'w-12', 'p-4'],\n large: ['h-14', 'w-14', 'p-4'],\n },\n },\n defaultVariants: {\n variant: 'filled',\n size: 'medium',\n },\n }\n)\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { useContext } from 'react'\n\nimport {\n WindowHistoryContext,\n type WindowHistoryContextProps,\n} from '@/contexts/WindowHistoryProvider'\n\nexport function useWindowHistory(): WindowHistoryContextProps {\n const windowHistoryContext = useContext(WindowHistoryContext)\n\n return windowHistoryContext\n}\n","'use client'\n\nimport { useSearchParams } from 'next/navigation'\nimport { createContext, type PropsWithChildren, useEffect, useMemo, useState } from 'react'\n\nexport interface WindowHistoryContextProps {\n history: string[]\n}\n\nexport const WindowHistoryContext = createContext({} as WindowHistoryContextProps)\n\nexport function WindowHistoryProvider({ children }: Readonly<PropsWithChildren>) {\n const [history, setHistory] = useState<string[]>([])\n const searchParams = useSearchParams()\n\n useEffect(() => {\n setHistory((prev) =>\n prev.at(-1) === window.location.href ? prev : [...prev, window.location.href]\n )\n }, [searchParams])\n\n const contextValue = useMemo(() => ({ history }), [history])\n\n return (\n <WindowHistoryContext.Provider value={contextValue}>{children}</WindowHistoryContext.Provider>\n )\n}\n","import { cva, type VariantProps } from 'cva'\nimport Link from 'next/link'\nimport { type ComponentProps } from 'react'\n\nimport { AvatarBase, AvatarFallback, AvatarImage } from '@/components/primitives/avatar'\n\nexport type AvatarProps = VariantProps<typeof avatarVariants> &\n Omit<ComponentProps<'a'>, 'href'> & {\n src?: string\n href?: string\n name?: string\n }\n\nexport function Avatar({ size, src, href, name, ...linkProps }: AvatarProps) {\n const fallbackShort = name?.slice(0, 2)\n const fallbackWords = name\n ?.split(' ')\n .map((n) => n[0])\n .join('')\n .slice(0, 2)\n\n const fallback = fallbackWords && fallbackWords.length > 1 ? fallbackWords : fallbackShort\n\n const renderAvatar = () => (\n <AvatarBase className={avatarVariants({ size })}>\n <AvatarImage src={src} alt={name} />\n <AvatarFallback>{fallback?.toUpperCase()}</AvatarFallback>\n </AvatarBase>\n )\n\n if (href) {\n return (\n <Link href={href} {...linkProps}>\n {renderAvatar()}\n </Link>\n )\n }\n\n return renderAvatar()\n}\n\nexport const avatarVariants = cva('ring ring-white ring-2', {\n variants: {\n size: {\n large: 'h-16 w-16',\n medium: 'h-10 w-10',\n small: 'h-8 w-8',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n})\n","'use client'\n\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/**\n * Adapted from Radix Primitives Avatar\n * https://ui.shadcn.com/docs/components/avatar\n * Changes made to support custom size prop and to export Avatar wrapper component\n */\n\nexport const AvatarBase = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn('relative flex shrink-0 overflow-hidden rounded-full', className)}\n {...props}\n />\n))\nAvatarBase.displayName = AvatarPrimitive.Root.displayName\n\nexport const AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn('aspect-square h-full w-full', className)}\n data-testid=\"job-card-avatar\"\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nexport const AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n 'flex h-full w-full items-center justify-center rounded-full bg-pumpkin-100 py-2 text-sm font-bold capitalize leading-normal text-white md:text-lg',\n className\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n","import { cva, type VariantProps } from 'cva'\nimport React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\ninterface ChipProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof chipVariants> {}\n\nconst Chip = ({ className, variant, size, ...props }: ChipProps) => (\n <div className={twMerge(chipVariants({ variant, size, className }))} {...props} />\n)\n\nconst chipVariants = cva(['flex', 'items-center', 'rounded-3xl', 'border', 'w-fit'], {\n variants: {\n variant: {\n neutral: ['text-grey-80', 'border-grey-10'],\n primary: ['text-purple-100', 'border-purple-20'],\n danger: ['text-pumpkin-100', 'border-pumpkin-20'],\n onboarding: ['text-green-100', 'bg-green-10', 'cursor-pointer'],\n onboardingSelected: ['text-white', 'bg-green-90', 'cursor-pointer'],\n },\n size: {\n small: ['text-sm', 'leading-5', 'px-2', 'py-1', 'gap-1.5'],\n medium: ['text-base', 'leading-6', 'px-3', 'py-2', 'gap-2'],\n },\n },\n defaultVariants: {\n variant: 'neutral',\n size: 'medium',\n },\n})\n\nexport default Chip\n","import {\n Banknote,\n Bell,\n BriefcaseBusiness,\n Building,\n Building2,\n CircleUser,\n CircleUserRound,\n Clock2,\n Contact,\n GalleryVerticalEnd,\n Home,\n KeyRound,\n Layers,\n LifeBuoy,\n MapPin,\n MessageSquareDot,\n Settings,\n SquareKanban,\n Users,\n Wallet,\n} from 'lucide-react'\n\nexport const iconMap = {\n house: Home,\n layers: Layers,\n users: Users,\n settings: Settings,\n building: Building,\n bell: Bell,\n wallet: Wallet,\n contact: Contact,\n banknote: Banknote,\n 'message-square-dot': MessageSquareDot,\n 'life-buoy': LifeBuoy,\n 'building-2': Building2,\n 'gallery-vertical-end': GalleryVerticalEnd,\n 'square-kanban': SquareKanban,\n 'briefcase-business': BriefcaseBusiness,\n 'circle-user': CircleUser,\n 'key-round': KeyRound,\n 'clock-2': Clock2,\n 'circle-user-round': CircleUserRound,\n 'map-pin': MapPin,\n} as const\n"],"mappings":"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","names":["import_lucide_react","import_navigation","import_tailwind_merge","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_cva","import_jsx_runtime","import_jsx_runtime","Link","import_cva","import_tailwind_merge","import_jsx_runtime","import_lucide_react","import_jsx_runtime","Icon","Image"]}
1
+ {"version":3,"sources":["../../../src/components/jobPost/JobHeader.tsx","../../../src/components/buttons/BackButton.tsx","../../../src/components/ui/Icon.tsx","../../../src/lib/utils.ts","../../../src/hooks/useWindowHistory.ts","../../../src/contexts/WindowHistoryProvider.tsx","../../../src/components/ui/Avatar.tsx","../../../src/components/primitives/avatar.tsx","../../../src/components/ui/Chip.tsx","../../../src/lib/icons.ts"],"sourcesContent":["'use client'\n\nimport { Dot } from 'lucide-react'\nimport Image from 'next/image'\nimport { type ReactNode } from 'react'\n\nimport { BackButton } from '@/components/buttons/BackButton'\nimport { Avatar } from '@/components/ui/Avatar'\nimport Chip from '@/components/ui/Chip'\nimport { iconMap } from '@/lib/icons'\nimport { cn } from '@/lib/utils'\n\nexport type JobHeaderTag = {\n name: string\n label: string\n icon: keyof typeof iconMap\n}\n\nexport type JobHeaderProps = {\n title: string\n bannerSrc: string\n subtitles?: string[]\n standalone?: boolean\n avatarSrc?: string\n avatarName?: string\n avatarHref?: string\n backFallbackHref?: string\n backAcceptedRoutes?: string[]\n actions?: ReactNode\n tags?: JobHeaderTag[]\n}\n\nexport function JobHeader({\n title,\n subtitles,\n standalone,\n bannerSrc,\n avatarSrc,\n avatarName,\n avatarHref,\n backFallbackHref,\n backAcceptedRoutes,\n actions,\n tags,\n}: Readonly<JobHeaderProps>) {\n const renderIcon = (icon: JobHeaderTag['icon']) => {\n const Icon = iconMap[icon]\n return <Icon size={18} />\n }\n\n return (\n <div\n data-testid=\"job-header-root\"\n className={cn(\n '-mt-8 flex w-full flex-col items-center justify-between gap-6 md:-mt-0',\n !standalone && 'rounded-3xl'\n )}\n >\n {!standalone && (\n <div className=\"relative flex min-h-16 w-full items-center rounded-t-3xl bg-transparent md:min-h-24 md:flex-row lg:min-h-32\">\n <Image\n className=\"h-full w-full rounded-t-3xl object-cover\"\n src={bannerSrc}\n alt=\"job banner\"\n fill\n />\n <BackButton\n acceptedRoutes={backAcceptedRoutes}\n fallbackHref={backFallbackHref}\n className=\"absolute right-2 top-2 flex items-center justify-center text-white sm:hidden\"\n data-testid=\"job-header-back-button\"\n />\n <div\n className=\"absolute left-4 top-8 md:left-6 md:top-16 lg:top-24\"\n data-testid=\"job-header-avatar\"\n >\n <Avatar\n size=\"large\"\n target=\"_blank\"\n href={avatarHref}\n name={avatarName}\n src={avatarSrc}\n rel=\"noopener noreferrer\"\n />\n </div>\n </div>\n )}\n\n <div className=\"flex w-full flex-col items-start justify-start gap-4 px-6\">\n <div className=\"flex flex-col md:flex-row\">\n {standalone && (\n <div className=\"-mt-4 mr-4 md:mt-0\" data-testid=\"job-header-avatar\">\n <Avatar\n size=\"large\"\n target=\"_blank\"\n href={avatarHref}\n name={avatarName}\n src={avatarSrc}\n rel=\"noopener noreferrer\"\n />\n </div>\n )}\n\n <div className=\"prose mt-4 flex w-full items-center text-grey-80 lg:prose-lg\">\n {subtitles?.map((subtitle, i) => (\n <div\n key={subtitle}\n data-testid={`job-header-subtitle-${i}`}\n className=\"flex items-center\"\n >\n {subtitle}\n {i < subtitles.length - 1 && <Dot className=\"mx-1 shrink-0\" size={10} />}\n </div>\n ))}\n </div>\n </div>\n\n <div\n data-testid=\"job-header-content\"\n className=\"mt-2 flex w-full flex-row flex-wrap items-center justify-between gap-1\"\n >\n <h2\n data-testid=\"job-header-title\"\n className=\"break-word max-w-full text-2xl font-bold text-black sm:max-w-2xl md:max-w-lg\"\n >\n {title}\n </h2>\n\n {!!actions && (\n <div\n className=\"flex w-full justify-end gap-2 md:w-auto\"\n data-testid=\"job-header-actions\"\n >\n {actions}\n </div>\n )}\n </div>\n\n <div\n data-testid=\"job-header-tags\"\n className=\"flex flex-row flex-wrap items-center justify-start gap-2\"\n >\n {tags?.map(({ name, label, icon }) => (\n <Chip\n key={name}\n size=\"small\"\n variant=\"neutral\"\n aria-label={name}\n data-testid={`job-header-tag-${name}`}\n >\n {renderIcon(icon)}\n <span>{label}</span>\n </Chip>\n ))}\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { X } from 'lucide-react'\nimport { useRouter } from 'next/navigation'\n\nimport { Icon } from '@/components/ui/Icon'\nimport { useWindowHistory } from '@/hooks/useWindowHistory'\n\ninterface Props extends React.HTMLAttributes<HTMLButtonElement> {\n acceptedRoutes?: string[]\n fallbackHref?: string\n}\n\nexport function BackButton({ acceptedRoutes, fallbackHref, className, ...props }: Readonly<Props>) {\n const { history } = useWindowHistory()\n const router = useRouter()\n\n const isAcceptedRoute = (r: string) =>\n !!acceptedRoutes?.find((route) => new RegExp('^' + route + '$', 'i').test(new URL(r).pathname))\n\n const goBack = () => {\n const previous = history[history.length - 2]\n if (history.length > 1 && isAcceptedRoute(previous)) {\n router.back()\n } else {\n router.push(fallbackHref ?? '/')\n }\n }\n\n return (\n <Icon\n aria-label=\"back button\"\n variant=\"transparent\"\n size=\"small\"\n onClick={goBack}\n className={className}\n {...props}\n >\n <X />\n </Icon>\n )\n}\n","import { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'cva'\nimport { forwardRef } from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nimport { cn } from '@/lib/utils'\n\ninterface IconProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof iconVariants> {\n active?: boolean\n readonly?: boolean\n}\n\nexport const Icon = forwardRef<HTMLButtonElement, IconProps>(\n ({ variant, size, active = false, readonly = false, className, ...props }, ref) => {\n const Component = readonly ? Slot : 'button'\n return (\n <Component\n className={cn(\n twMerge(iconVariants({ variant: active ? 'active' : variant, size })),\n className\n )}\n {...props}\n ref={ref}\n />\n )\n }\n)\n\nIcon.displayName = 'Icon'\n\nconst iconVariants = cva(\n [\n 'inline-flex',\n 'items-center',\n 'rounded-full',\n 'outline-2',\n 'outline-offset-2',\n 'outline-dashed',\n 'outline-transparent',\n 'disabled:text-grey-40',\n 'disabled:bg-transparent',\n 'disabled:pointer-events-none',\n ],\n {\n variants: {\n variant: {\n filled: [\n 'border',\n 'border-green-80',\n 'bg-green-90',\n 'text-white',\n 'hover:bg-green-80',\n 'active:bg-green-80',\n 'focus:outline-pickle-100',\n 'disabled:bg-green-70',\n ],\n transparent: [\n 'text-black',\n 'hover:bg-grey-5',\n 'active:bg-grey-10',\n 'focus:outline-purple-100',\n ],\n tonal: [\n 'border',\n 'border-grey-5',\n 'hover:border-grey-10',\n 'active:border-grey-20',\n 'focus:outline-purple-100',\n ],\n active: ['text-black', 'bg-pickle-100'],\n },\n size: {\n small: ['h-10', 'w-10', 'p-3'],\n medium: ['h-12', 'w-12', 'p-4'],\n large: ['h-14', 'w-14', 'p-4'],\n },\n },\n defaultVariants: {\n variant: 'filled',\n size: 'medium',\n },\n }\n)\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { useContext } from 'react'\n\nimport {\n WindowHistoryContext,\n type WindowHistoryContextProps,\n} from '@/contexts/WindowHistoryProvider'\n\nexport function useWindowHistory(): WindowHistoryContextProps {\n const windowHistoryContext = useContext(WindowHistoryContext)\n\n return windowHistoryContext\n}\n","'use client'\n\nimport { useSearchParams } from 'next/navigation'\nimport { createContext, type PropsWithChildren, useEffect, useMemo, useState } from 'react'\n\nexport interface WindowHistoryContextProps {\n history: string[]\n}\n\nexport const WindowHistoryContext = createContext({} as WindowHistoryContextProps)\n\nexport function WindowHistoryProvider({ children }: Readonly<PropsWithChildren>) {\n const [history, setHistory] = useState<string[]>([])\n const searchParams = useSearchParams()\n\n useEffect(() => {\n setHistory((prev) =>\n prev.at(-1) === window.location.href ? prev : [...prev, window.location.href]\n )\n }, [searchParams])\n\n const contextValue = useMemo(() => ({ history }), [history])\n\n return (\n <WindowHistoryContext.Provider value={contextValue}>{children}</WindowHistoryContext.Provider>\n )\n}\n","import { cva, type VariantProps } from 'cva'\nimport Link from 'next/link'\nimport { type ComponentProps } from 'react'\n\nimport { AvatarBase, AvatarFallback, AvatarImage } from '@/components/primitives/avatar'\n\nexport type AvatarProps = VariantProps<typeof avatarVariants> &\n Omit<ComponentProps<'a'>, 'href'> & {\n src?: string\n href?: string\n name?: string\n }\n\nexport function Avatar({ size, src, href, name, ...linkProps }: AvatarProps) {\n const fallbackShort = name?.slice(0, 2)\n const fallbackWords = name\n ?.split(' ')\n .map((n) => n[0])\n .join('')\n .slice(0, 2)\n\n const fallback = fallbackWords && fallbackWords.length > 1 ? fallbackWords : fallbackShort\n\n const renderAvatar = () => (\n <AvatarBase className={avatarVariants({ size })}>\n <AvatarImage src={src} alt={name} />\n <AvatarFallback>{fallback?.toUpperCase()}</AvatarFallback>\n </AvatarBase>\n )\n\n if (href) {\n return (\n <Link href={href} {...linkProps}>\n {renderAvatar()}\n </Link>\n )\n }\n\n return renderAvatar()\n}\n\nexport const avatarVariants = cva('ring ring-white ring-2', {\n variants: {\n size: {\n large: 'h-16 w-16',\n medium: 'h-10 w-10',\n small: 'h-8 w-8',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n})\n","'use client'\n\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/**\n * Adapted from Radix Primitives Avatar\n * https://ui.shadcn.com/docs/components/avatar\n * Changes made to support custom size prop and to export Avatar wrapper component\n */\n\nexport const AvatarBase = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn('relative flex shrink-0 overflow-hidden rounded-full', className)}\n {...props}\n />\n))\nAvatarBase.displayName = AvatarPrimitive.Root.displayName\n\nexport const AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn('aspect-square h-full w-full', className)}\n data-testid=\"job-card-avatar\"\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nexport const AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n 'flex h-full w-full items-center justify-center rounded-full bg-pumpkin-100 py-2 text-sm font-bold capitalize leading-normal text-white md:text-lg',\n className\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n","import { cva, type VariantProps } from 'cva'\nimport React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\ninterface ChipProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof chipVariants> {}\n\nconst Chip = ({ className, variant, size, ...props }: ChipProps) => (\n <div className={twMerge(chipVariants({ variant, size, className }))} {...props} />\n)\n\nconst chipVariants = cva(['flex', 'items-center', 'rounded-3xl', 'border', 'w-fit'], {\n variants: {\n variant: {\n neutral: ['text-grey-80', 'border-grey-10'],\n primary: ['text-purple-100', 'border-purple-20'],\n danger: ['text-pumpkin-100', 'border-pumpkin-20'],\n jobLocation: ['text-grey-80', 'border-grey-10', 'bg-grey-5'],\n onboarding: ['text-green-100', 'bg-green-10', 'cursor-pointer'],\n onboardingSelected: ['text-white', 'bg-green-90', 'cursor-pointer'],\n },\n size: {\n small: ['text-sm', 'leading-5', 'px-2', 'py-1', 'gap-1.5'],\n medium: ['text-base', 'leading-6', 'px-3', 'py-2', 'gap-2'],\n },\n },\n defaultVariants: {\n variant: 'neutral',\n size: 'medium',\n },\n})\n\nexport default Chip\n","import {\n Banknote,\n Bell,\n BriefcaseBusiness,\n Building,\n Building2,\n CircleUser,\n CircleUserRound,\n Clock2,\n Contact,\n GalleryVerticalEnd,\n Home,\n KeyRound,\n Layers,\n LifeBuoy,\n MapPin,\n MessageSquareDot,\n Settings,\n SquareKanban,\n Users,\n Wallet,\n} from 'lucide-react'\n\nexport const iconMap = {\n house: Home,\n layers: Layers,\n users: Users,\n settings: Settings,\n building: Building,\n bell: Bell,\n wallet: Wallet,\n contact: Contact,\n banknote: Banknote,\n 'message-square-dot': MessageSquareDot,\n 'life-buoy': LifeBuoy,\n 'building-2': Building2,\n 'gallery-vertical-end': GalleryVerticalEnd,\n 'square-kanban': SquareKanban,\n 'briefcase-business': BriefcaseBusiness,\n 'circle-user': CircleUser,\n 'key-round': KeyRound,\n 'clock-2': Clock2,\n 'circle-user-round': CircleUserRound,\n 'map-pin': MapPin,\n} as const\n"],"mappings":"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","names":["import_lucide_react","import_navigation","import_tailwind_merge","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_cva","import_jsx_runtime","import_jsx_runtime","Link","import_cva","import_tailwind_merge","import_jsx_runtime","import_lucide_react","import_jsx_runtime","Icon","Image"]}
@@ -216,6 +216,7 @@ var chipVariants = cva3(["flex", "items-center", "rounded-3xl", "border", "w-fit
216
216
  neutral: ["text-grey-80", "border-grey-10"],
217
217
  primary: ["text-purple-100", "border-purple-20"],
218
218
  danger: ["text-pumpkin-100", "border-pumpkin-20"],
219
+ jobLocation: ["text-grey-80", "border-grey-10", "bg-grey-5"],
219
220
  onboarding: ["text-green-100", "bg-green-10", "cursor-pointer"],
220
221
  onboardingSelected: ["text-white", "bg-green-90", "cursor-pointer"]
221
222
  },