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

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 (91) hide show
  1. package/dist/{company_service_sanity-Bedw6Mhk.d.cts → company_service_sanity-Br0R7m-A.d.cts} +114 -114
  2. package/dist/{company_service_sanity-BZtdt7Df.d.ts → company_service_sanity-DF01qvTz.d.ts} +114 -114
  3. package/dist/components/jobCard/JobLocation.cjs +88 -0
  4. package/dist/components/jobCard/JobLocation.cjs.map +1 -0
  5. package/dist/components/jobCard/JobLocation.d.cts +9 -0
  6. package/dist/components/jobCard/JobLocation.d.ts +9 -0
  7. package/dist/components/jobCard/JobLocation.js +53 -0
  8. package/dist/components/jobCard/JobLocation.js.map +1 -0
  9. package/dist/components/jobPost/JobDescription.cjs +3 -1
  10. package/dist/components/jobPost/JobDescription.cjs.map +1 -1
  11. package/dist/components/jobPost/JobDescription.js +3 -1
  12. package/dist/components/jobPost/JobDescription.js.map +1 -1
  13. package/dist/components/jobPost/JobPost.cjs +17 -13
  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 +17 -13
  18. package/dist/components/jobPost/JobPost.js.map +1 -1
  19. package/dist/components/ui/Button.d.cts +1 -1
  20. package/dist/components/ui/Button.d.ts +1 -1
  21. package/dist/components/ui/Combobox.cjs +28 -19
  22. package/dist/components/ui/Combobox.cjs.map +1 -1
  23. package/dist/components/ui/Combobox.js +29 -20
  24. package/dist/components/ui/Combobox.js.map +1 -1
  25. package/dist/components/ui/DismissibleBanner.cjs +85 -0
  26. package/dist/components/ui/DismissibleBanner.cjs.map +1 -0
  27. package/dist/components/ui/DismissibleBanner.d.cts +11 -0
  28. package/dist/components/ui/DismissibleBanner.d.ts +11 -0
  29. package/dist/components/ui/DismissibleBanner.js +60 -0
  30. package/dist/components/ui/DismissibleBanner.js.map +1 -0
  31. package/dist/components/ui/ReadMore.cjs +3 -1
  32. package/dist/components/ui/ReadMore.cjs.map +1 -1
  33. package/dist/components/ui/ReadMore.js +3 -1
  34. package/dist/components/ui/ReadMore.js.map +1 -1
  35. package/dist/components/ui/StepTabs.cjs +32 -4
  36. package/dist/components/ui/StepTabs.cjs.map +1 -1
  37. package/dist/components/ui/StepTabs.d.cts +12 -3
  38. package/dist/components/ui/StepTabs.d.ts +12 -3
  39. package/dist/components/ui/StepTabs.js +32 -4
  40. package/dist/components/ui/StepTabs.js.map +1 -1
  41. package/dist/components/ui/buttonShadcn.d.cts +1 -1
  42. package/dist/components/ui/buttonShadcn.d.ts +1 -1
  43. package/dist/{displayText-CBIWVZVw.d.ts → displayText-C1DIK8hr.d.ts} +1 -1
  44. package/dist/{displayText-4cJ7-3Mw.d.cts → displayText-DzxDrQAT.d.cts} +1 -1
  45. package/dist/hooks/useDisplayText.d.cts +2 -2
  46. package/dist/hooks/useDisplayText.d.ts +2 -2
  47. package/dist/index.cjs +1240 -1127
  48. package/dist/index.cjs.map +1 -1
  49. package/dist/index.d.cts +8 -4
  50. package/dist/index.d.ts +8 -4
  51. package/dist/index.js +1375 -1265
  52. package/dist/index.js.map +1 -1
  53. package/dist/{job_posting_service_sanity-Kcoloigd.d.cts → job_posting_service_sanity-B7GvIdYQ.d.cts} +173 -173
  54. package/dist/{job_posting_service_sanity-fAGLW3rj.d.ts → job_posting_service_sanity-CfLaGMVK.d.ts} +173 -173
  55. package/dist/lib/locations.d.cts +1 -1
  56. package/dist/lib/locations.d.ts +1 -1
  57. package/dist/lib/mappings.d.cts +2 -2
  58. package/dist/lib/mappings.d.ts +2 -2
  59. package/dist/lib/salaryRange.cjs +14 -12
  60. package/dist/lib/salaryRange.cjs.map +1 -1
  61. package/dist/lib/salaryRange.d.cts +1 -1
  62. package/dist/lib/salaryRange.d.ts +1 -1
  63. package/dist/lib/salaryRange.js +14 -12
  64. package/dist/lib/salaryRange.js.map +1 -1
  65. package/dist/services/displayText.d.cts +2 -2
  66. package/dist/services/displayText.d.ts +2 -2
  67. package/dist/styles/globals.css +25 -0
  68. package/dist/styles/globals.css.map +1 -1
  69. package/dist/types/data/company_service_latest.d.cts +1 -1
  70. package/dist/types/data/company_service_latest.d.ts +1 -1
  71. package/dist/types/data/job_posting_service_latest.d.cts +1 -1
  72. package/dist/types/data/job_posting_service_latest.d.ts +1 -1
  73. package/dist/types/index.d.cts +4 -4
  74. package/dist/types/index.d.ts +4 -4
  75. package/dist/types/latest/company_service_latest.d.cts +1 -1
  76. package/dist/types/latest/company_service_latest.d.ts +1 -1
  77. package/dist/types/latest/custom/company_service_sanity.d.cts +2 -2
  78. package/dist/types/latest/custom/company_service_sanity.d.ts +2 -2
  79. package/dist/types/latest/custom/job_posting_service_sanity.d.cts +2 -2
  80. package/dist/types/latest/custom/job_posting_service_sanity.d.ts +2 -2
  81. package/dist/types/latest/job_posting_service_latest.d.cts +1 -1
  82. package/dist/types/latest/job_posting_service_latest.d.ts +1 -1
  83. package/package.json +2 -2
  84. package/dist/{company_service_latest-BmiEQ4dO.d.cts → company_service_latest-C7Moeufo.d.cts} +54 -54
  85. package/dist/{company_service_latest-BmiEQ4dO.d.ts → company_service_latest-C7Moeufo.d.ts} +54 -54
  86. package/dist/{company_service_latest-Ba8VhDao.d.cts → company_service_latest-CITz7F53.d.cts} +54 -54
  87. package/dist/{company_service_latest-Ba8VhDao.d.ts → company_service_latest-CITz7F53.d.ts} +54 -54
  88. package/dist/{job_posting_service_latest-DdsTbMSJ.d.cts → job_posting_service_latest-DCbi2bXu.d.cts} +85 -85
  89. package/dist/{job_posting_service_latest-DdsTbMSJ.d.ts → job_posting_service_latest-DCbi2bXu.d.ts} +85 -85
  90. package/dist/{job_posting_service_latest-DOGQ9tEu.d.cts → job_posting_service_latest-tqnHqjwc.d.cts} +85 -85
  91. package/dist/{job_posting_service_latest-DOGQ9tEu.d.ts → job_posting_service_latest-tqnHqjwc.d.ts} +85 -85
package/dist/index.js CHANGED
@@ -1081,7 +1081,7 @@ var buttonVariants = cva5(
1081
1081
  // src/components/ui/Combobox.tsx
1082
1082
  import { cva as cva6 } from "cva";
1083
1083
  import { ChevronDownIcon as ChevronDownIcon2, CircleX as CircleX2, icons as icons3 } from "lucide-react";
1084
- import { forwardRef as forwardRef11, useEffect as useEffect3, useState as useState3 } from "react";
1084
+ import { forwardRef as forwardRef11, useEffect as useEffect3, useRef as useRef3, useState as useState3 } from "react";
1085
1085
 
1086
1086
  // src/components/primitives/popover.tsx
1087
1087
  import * as PopoverPrimitive from "@radix-ui/react-popover";
@@ -1128,40 +1128,49 @@ var Combobox = forwardRef11((props, ref) => {
1128
1128
  } = props;
1129
1129
  const [selected, setSelected] = useState3([]);
1130
1130
  const [open, setOpen] = useState3(false);
1131
+ const isUserUpdate = useRef3(false);
1131
1132
  const IconComponent = icon && icons3[icon];
1132
1133
  const hideSearchBox = options?.length <= 5;
1133
1134
  const isDefault = variant === "default";
1134
1135
  const isChip = variant === "chip";
1135
- const isEmpty = selected.length == 0;
1136
+ const isEmpty = selected.length === 0;
1136
1137
  const showChevron = isDefault ? isEmpty : true;
1137
1138
  const close = () => setOpen(false);
1138
1139
  useEffect3(() => {
1139
- const valueArray = multiselect ? value ?? [] : value ? [value] : [];
1140
- setSelected(
1141
- valueArray.map((v) => options.find((o) => o.value === v)).filter((v) => v !== void 0)
1142
- );
1143
- }, [value]);
1140
+ if (!isUserUpdate.current) {
1141
+ const valueArray = multiselect ? value ?? [] : value ? [value] : [];
1142
+ setSelected(
1143
+ valueArray.map((v) => options.find((o) => o.value === v)).filter((v) => v !== void 0)
1144
+ );
1145
+ }
1146
+ }, [value, options, multiselect]);
1147
+ useEffect3(() => {
1148
+ if (isUserUpdate.current) {
1149
+ if (multiselect) {
1150
+ handleChange?.(selected.map((o) => o.value));
1151
+ } else {
1152
+ handleChange?.(selected[0]?.value ?? "");
1153
+ }
1154
+ isUserUpdate.current = false;
1155
+ }
1156
+ }, [selected, multiselect, handleChange]);
1157
+ const updateMultiSelect = (prev, option) => {
1158
+ return prev.some((o) => o.value === option.value) ? prev.filter((v) => v !== option) : [...prev, option];
1159
+ };
1144
1160
  const handleSelect = (value2) => {
1145
1161
  const option = options.find((o) => o.value === value2);
1146
1162
  if (!option) return;
1163
+ isUserUpdate.current = true;
1147
1164
  if (multiselect) {
1148
- return setSelected((prev) => {
1149
- const newSelected = prev.some((o) => o.value === value2) ? prev.filter((v) => v !== option) : [...prev, option];
1150
- handleChange?.(newSelected.map((o) => o.value));
1151
- return newSelected;
1152
- });
1165
+ setSelected((prev) => updateMultiSelect(prev, option));
1166
+ } else {
1167
+ setSelected([option]);
1168
+ close();
1153
1169
  }
1154
- setSelected([option]);
1155
- handleChange?.(option.value);
1156
- close();
1157
1170
  };
1158
1171
  const handleClear = () => {
1172
+ isUserUpdate.current = true;
1159
1173
  setSelected([]);
1160
- if (multiselect) {
1161
- handleChange?.([]);
1162
- } else {
1163
- handleChange?.("");
1164
- }
1165
1174
  };
1166
1175
  const handleDisplayValue = () => {
1167
1176
  const defaultLabel = !isEmpty ? selected.map((s) => s.title).join(", ") : placeholder;
@@ -1743,6 +1752,7 @@ import { jsx as jsx28, jsxs as jsxs17 } from "react/jsx-runtime";
1743
1752
  function ReadMore({ text, ...props }) {
1744
1753
  const [isExpanded, setIsExpanded] = useState5(false);
1745
1754
  const [maxWords, setMaxWords] = useState5(160);
1755
+ const isOverMaxWords = text.split(" ").length > maxWords;
1746
1756
  useEffect5(() => {
1747
1757
  const updateMaxWords = () => {
1748
1758
  const windowWidth = window.innerWidth;
@@ -1757,6 +1767,7 @@ function ReadMore({ text, ...props }) {
1757
1767
  return () => window.removeEventListener("resize", updateMaxWords);
1758
1768
  }, []);
1759
1769
  function createReadMoreText(text2, maxWords2, isExpanded2) {
1770
+ if (!isOverMaxWords) return text2;
1760
1771
  const words = text2.split(" ");
1761
1772
  const snippet2 = isExpanded2 ? text2 : words.slice(0, maxWords2).join(" ");
1762
1773
  const readMoreText = isExpanded2 ? "" : "...";
@@ -1766,7 +1777,7 @@ function ReadMore({ text, ...props }) {
1766
1777
  const snippet = createReadMoreText(text, maxWords, isExpanded);
1767
1778
  return /* @__PURE__ */ jsxs17("div", { ...props, children: [
1768
1779
  /* @__PURE__ */ jsx28("div", { "data-testid": "read-more-text", className: "prose lg:prose-lg", children: /* @__PURE__ */ jsx28(Markdown, { children: snippet }) }),
1769
- /* @__PURE__ */ jsx28(
1780
+ isOverMaxWords && /* @__PURE__ */ jsx28(
1770
1781
  Button,
1771
1782
  {
1772
1783
  type: "button",
@@ -1960,14 +1971,42 @@ var datePickerStyle = cva10([
1960
1971
 
1961
1972
  // src/components/ui/StepTabs.tsx
1962
1973
  import * as Tabs from "@radix-ui/react-tabs";
1974
+ import { cva as cva11 } from "cva";
1963
1975
  import { jsx as jsx32, jsxs as jsxs19 } from "react/jsx-runtime";
1976
+ var tabParentVariants = cva11("flex flex-col", {
1977
+ variants: {
1978
+ variant: {
1979
+ primary: "rounded-lg border shadow-sm",
1980
+ neutral: ""
1981
+ }
1982
+ },
1983
+ defaultVariants: {
1984
+ variant: "primary"
1985
+ }
1986
+ });
1987
+ var singleTabVariants = cva11(
1988
+ "flex h-[45px] flex-1 cursor-pointer select-none items-center justify-center bg-white px-5 text-[15px] leading-none text-gray-800 outline-none",
1989
+ {
1990
+ variants: {
1991
+ variant: {
1992
+ primary: "first:rounded-tl-md last:rounded-tr-md hover:text-purple-100 data-[state=active]:text-purple-100 data-[state=active]:shadow-[inset_0_-1px_0_0,0_1px_0_0] data-[state=active]:shadow-current data-[state=active]:focus:relative data-[state=active]:focus:shadow-[0_0_0_2px] data-[state=active]:focus:shadow-black",
1993
+ neutral: "first:rounded-tl-md last:rounded-tr-md hover:text-black data-[state=active]:text-black data-[state=active]:shadow-[inset_0_-1px_0_0,0_1px_0_0] data-[state=active]:shadow-current data-[state=active]:focus:relative"
1994
+ }
1995
+ },
1996
+ defaultVariants: {
1997
+ variant: "primary"
1998
+ }
1999
+ }
2000
+ );
1964
2001
  function StepTabs({
1965
2002
  list,
1966
2003
  currentStep,
1967
2004
  setCurrentStep,
1968
2005
  children,
1969
2006
  className,
2007
+ classNameTab,
1970
2008
  defaultValue,
2009
+ variant,
1971
2010
  ...props
1972
2011
  }) {
1973
2012
  return /* @__PURE__ */ jsxs19(
@@ -1976,19 +2015,19 @@ function StepTabs({
1976
2015
  value: currentStep,
1977
2016
  onValueChange: setCurrentStep,
1978
2017
  defaultValue: defaultValue ?? "0",
1979
- className: cn("flex flex-col rounded-lg border shadow-sm", className),
2018
+ className: cn(tabParentVariants({ variant }), className),
1980
2019
  ...props,
1981
2020
  children: [
1982
- /* @__PURE__ */ jsx32(Tabs.List, { className: "flex shrink-0 border-b border-grey-20", children: children.length > 1 && list.map((item, index) => /* @__PURE__ */ jsx32(
2021
+ /* @__PURE__ */ jsx32(Tabs.List, { className: "flex shrink-0 border-b border-grey-20", children: list.length > 1 && list.map((item, index) => /* @__PURE__ */ jsx32(
1983
2022
  Tabs.Trigger,
1984
2023
  {
1985
- className: "flex h-[45px] flex-1 cursor-default select-none items-center justify-center bg-white px-5 text-[15px] leading-none text-gray-800 outline-none first:rounded-tl-md last:rounded-tr-md hover:text-purple-100 data-[state=active]:text-purple-100 data-[state=active]:shadow-[inset_0_-1px_0_0,0_1px_0_0] data-[state=active]:shadow-current data-[state=active]:focus:relative data-[state=active]:focus:shadow-[0_0_0_2px] data-[state=active]:focus:shadow-black",
2024
+ className: cn(singleTabVariants({ variant }), classNameTab),
1986
2025
  value: index.toString(),
1987
2026
  children: item
1988
2027
  },
1989
2028
  `${item}-${index}`
1990
2029
  )) }),
1991
- children.map((child, index) => /* @__PURE__ */ jsx32(
2030
+ children && children.map((child, index) => /* @__PURE__ */ jsx32(
1992
2031
  Tabs.Content,
1993
2032
  {
1994
2033
  className: "grow rounded-b-md bg-white p-5 outline-none",
@@ -2002,1272 +2041,1322 @@ function StepTabs({
2002
2041
  );
2003
2042
  }
2004
2043
 
2005
- // src/components/company/CompanyBenefits.tsx
2044
+ // src/components/ui/DismissibleBanner.tsx
2045
+ import { X as X4 } from "lucide-react";
2046
+ import { useEffect as useEffect7, useState as useState7 } from "react";
2006
2047
  import { jsx as jsx33, jsxs as jsxs20 } from "react/jsx-runtime";
2007
- function CompanyBenefits({ benefits }) {
2008
- if (!benefits) return null;
2009
- return /* @__PURE__ */ jsxs20("div", { className: "flex flex-col gap-2", "data-testid": "company-benefits", children: [
2010
- /* @__PURE__ */ jsx33("h2", { className: "break-word max-w-full text-xl font-bold text-black sm:max-w-2xl md:max-w-lg", children: "Company benefits" }),
2011
- /* @__PURE__ */ jsx33("ul", { className: "flex flex-col gap-3", children: benefits.map((benefit, i) => /* @__PURE__ */ jsx33("li", { className: "text-base text-grey-80", children: benefit }, `${benefit}-${i}`)) })
2012
- ] });
2013
- }
2014
-
2015
- // src/components/company/CompanyInformation.tsx
2016
- import { jsx as jsx34, jsxs as jsxs21 } from "react/jsx-runtime";
2017
- function CompanyInformation({
2018
- name,
2019
- how,
2020
- mission,
2021
- wow,
2022
- website
2048
+ function DismissibleBanner({
2049
+ children,
2050
+ cookieId,
2051
+ className,
2052
+ textClassNames,
2053
+ buttonClassNames
2023
2054
  }) {
2024
- return /* @__PURE__ */ jsxs21("div", { className: "flex flex-col gap-2", children: [
2025
- /* @__PURE__ */ jsxs21(
2026
- "h2",
2027
- {
2028
- "data-testid": "company-name",
2029
- className: "break-word max-w-full text-xl font-bold text-black sm:max-w-2xl md:max-w-lg",
2030
- children: [
2031
- "About ",
2032
- name
2033
- ]
2034
- }
2035
- ),
2036
- how && /* @__PURE__ */ jsx34("p", { "data-testid": "company-information", className: "text-base text-grey-80", children: how }),
2037
- mission && /* @__PURE__ */ jsxs21("div", { className: "flex gap-2", children: [
2038
- /* @__PURE__ */ jsx34("span", { children: "\u{1F680}" }),
2039
- /* @__PURE__ */ jsxs21("p", { className: "text-base text-grey-80", children: [
2040
- /* @__PURE__ */ jsx34("span", { className: "pr-1 font-bold", children: "Mission" }),
2041
- mission
2042
- ] })
2043
- ] }),
2044
- wow && /* @__PURE__ */ jsxs21("div", { className: "flex gap-2", children: [
2045
- /* @__PURE__ */ jsx34("span", { children: "\u{1F31F}" }),
2046
- /* @__PURE__ */ jsxs21("p", { className: "text-base text-grey-80", children: [
2047
- /* @__PURE__ */ jsx34("span", { className: "pr-1 font-bold", children: "Wow Factor" }),
2048
- wow
2049
- ] })
2050
- ] }),
2051
- website && /* @__PURE__ */ jsx34("div", { className: "pt-2", children: /* @__PURE__ */ jsx34(
2052
- LinkButton,
2053
- {
2054
- "data-testid": "company-website-link",
2055
- href: website,
2056
- target: "_blank",
2057
- rel: "noopener noreferrer",
2058
- children: "Website"
2059
- }
2060
- ) })
2061
- ] });
2062
- }
2063
-
2064
- // src/components/company/CompanyTake.tsx
2065
- import { jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
2066
- function CompanyTake({ content, avatarSrc }) {
2067
- if (!content) return null;
2068
- return /* @__PURE__ */ jsxs22(
2069
- "div",
2070
- {
2071
- "data-testid": "company-take",
2072
- className: "align-center w-full justify-start rounded-2xl bg-green-90 p-6",
2073
- children: [
2074
- /* @__PURE__ */ jsx35("p", { className: "text-lg font-bold text-white sm:text-xl", children: "The Real Dill \u2618\uFE0F" }),
2075
- /* @__PURE__ */ jsx35("div", { className: "mt-2 flex items-center justify-start", children: /* @__PURE__ */ jsx35("p", { className: "text-sm font-normal text-grey-10", children: content }) }),
2076
- /* @__PURE__ */ jsxs22("div", { className: "mt-8 flex w-full items-center gap-3", children: [
2077
- /* @__PURE__ */ jsx35(Avatar, { name: "Jon Lee", src: avatarSrc }),
2078
- /* @__PURE__ */ jsxs22("div", { className: "flex flex-col flex-wrap items-start", children: [
2079
- /* @__PURE__ */ jsx35("p", { className: "text-sm font-bold text-white", children: "Jon Lee, PT, DPT, OCS, FAAOMPT, MBA" }),
2080
- /* @__PURE__ */ jsx35("p", { className: "text-xs font-normal text-grey-30", children: "Pickle co-founder" })
2081
- ] })
2082
- ] })
2083
- ]
2084
- }
2085
- );
2086
- }
2087
-
2088
- // src/components/jobPost/JobDescription.tsx
2089
- import { jsx as jsx36, jsxs as jsxs23 } from "react/jsx-runtime";
2090
- function JobDescription({ description }) {
2091
- if (!description) return null;
2092
- return /* @__PURE__ */ jsxs23("div", { className: "flex w-full flex-col gap-2", children: [
2093
- /* @__PURE__ */ jsx36("h3", { className: "text-xl font-bold", children: "Job Description" }),
2094
- /* @__PURE__ */ jsx36(ReadMore, { text: description })
2095
- ] });
2096
- }
2097
-
2098
- // src/components/jobPost/JobHeader.tsx
2099
- import { Dot as Dot2 } from "lucide-react";
2100
- import Image2 from "next/image";
2101
-
2102
- // src/components/buttons/BackButton.tsx
2103
- import { X as X4 } from "lucide-react";
2104
- import { useRouter } from "next/navigation";
2105
-
2106
- // src/hooks/useWindowHistory.ts
2107
- import { useContext as useContext2 } from "react";
2108
-
2109
- // src/contexts/WindowHistoryProvider.tsx
2110
- import { useSearchParams } from "next/navigation";
2111
- import { createContext, useEffect as useEffect7, useMemo, useState as useState7 } from "react";
2112
- import { jsx as jsx37 } from "react/jsx-runtime";
2113
- var WindowHistoryContext = createContext({});
2114
- function WindowHistoryProvider({ children }) {
2115
- const [history, setHistory] = useState7([]);
2116
- const searchParams = useSearchParams();
2055
+ const safeId = encodeURIComponent(cookieId);
2056
+ const [isVisible, setIsVisible] = useState7(false);
2117
2057
  useEffect7(() => {
2118
- setHistory(
2119
- (prev) => prev.at(-1) === window.location.href ? prev : [...prev, window.location.href]
2120
- );
2121
- }, [searchParams]);
2122
- const contextValue = useMemo(() => ({ history }), [history]);
2123
- return /* @__PURE__ */ jsx37(WindowHistoryContext.Provider, { value: contextValue, children });
2124
- }
2125
-
2126
- // src/hooks/useWindowHistory.ts
2127
- function useWindowHistory() {
2128
- const windowHistoryContext = useContext2(WindowHistoryContext);
2129
- return windowHistoryContext;
2130
- }
2131
-
2132
- // src/components/buttons/BackButton.tsx
2133
- import { jsx as jsx38 } from "react/jsx-runtime";
2134
- function BackButton({ acceptedRoutes, fallbackHref, className, ...props }) {
2135
- const { history } = useWindowHistory();
2136
- const router = useRouter();
2137
- const isAcceptedRoute = (r) => !!acceptedRoutes?.find((route) => new RegExp("^" + route + "$", "i").test(new URL(r).pathname));
2138
- const goBack = () => {
2139
- const previous = history[history.length - 2];
2140
- if (history.length > 1 && isAcceptedRoute(previous)) {
2141
- router.back();
2142
- } else {
2143
- router.push(fallbackHref ?? "/");
2058
+ const cookies = document.cookie.split(";");
2059
+ const isDismissed = cookies.some((cookie) => cookie.trim().startsWith(`${safeId}=true`));
2060
+ if (!isDismissed) {
2061
+ setIsVisible(true);
2144
2062
  }
2063
+ }, [safeId]);
2064
+ const handleDismiss = () => {
2065
+ document.cookie = `${safeId}=true;path=/`;
2066
+ setIsVisible(false);
2145
2067
  };
2146
- return /* @__PURE__ */ jsx38(
2147
- Icon,
2068
+ if (!isVisible) return null;
2069
+ return /* @__PURE__ */ jsxs20(
2070
+ "nav",
2148
2071
  {
2149
- "aria-label": "back button",
2150
- variant: "transparent",
2151
- size: "small",
2152
- onClick: goBack,
2153
- className,
2154
- ...props,
2155
- children: /* @__PURE__ */ jsx38(X4, {})
2072
+ className: cn(
2073
+ "align-center flex w-full items-center justify-between gap-2 bg-blue-100 px-4 py-3",
2074
+ className
2075
+ ),
2076
+ children: [
2077
+ /* @__PURE__ */ jsx33("div", { className: cn("w-full text-center text-sm text-green-100", textClassNames), children }),
2078
+ /* @__PURE__ */ jsx33(
2079
+ "button",
2080
+ {
2081
+ className: cn("text-green-100", buttonClassNames),
2082
+ "aria-label": "Close banner",
2083
+ onClick: handleDismiss,
2084
+ children: /* @__PURE__ */ jsx33(X4, { size: 28 })
2085
+ }
2086
+ )
2087
+ ]
2156
2088
  }
2157
2089
  );
2158
2090
  }
2159
2091
 
2160
- // src/lib/icons.ts
2161
- import {
2162
- Banknote,
2163
- Bell,
2164
- BriefcaseBusiness,
2165
- Building,
2166
- Building2,
2167
- CircleUser,
2168
- CircleUserRound,
2169
- Clock2,
2170
- Contact,
2171
- GalleryVerticalEnd,
2172
- Home,
2173
- KeyRound,
2174
- Layers,
2175
- LifeBuoy,
2176
- MapPin,
2177
- MessageSquareDot,
2178
- Settings,
2179
- SquareKanban,
2180
- Users,
2181
- Wallet
2182
- } from "lucide-react";
2183
- var iconMap = {
2184
- house: Home,
2185
- layers: Layers,
2186
- users: Users,
2187
- settings: Settings,
2188
- building: Building,
2189
- bell: Bell,
2190
- wallet: Wallet,
2191
- contact: Contact,
2192
- banknote: Banknote,
2193
- "message-square-dot": MessageSquareDot,
2194
- "life-buoy": LifeBuoy,
2195
- "building-2": Building2,
2196
- "gallery-vertical-end": GalleryVerticalEnd,
2197
- "square-kanban": SquareKanban,
2198
- "briefcase-business": BriefcaseBusiness,
2199
- "circle-user": CircleUser,
2200
- "key-round": KeyRound,
2201
- "clock-2": Clock2,
2202
- "circle-user-round": CircleUserRound,
2203
- "map-pin": MapPin
2204
- };
2092
+ // src/types/latest/company_service_latest.ts
2093
+ import { z as z2 } from "zod";
2205
2094
 
2206
- // src/components/jobPost/JobHeader.tsx
2207
- import { jsx as jsx39, jsxs as jsxs24 } from "react/jsx-runtime";
2208
- function JobHeader({
2209
- title,
2210
- subtitles,
2211
- standalone,
2212
- bannerSrc,
2213
- avatarSrc,
2214
- avatarName,
2215
- avatarHref,
2216
- backFallbackHref,
2217
- backAcceptedRoutes,
2218
- actions,
2219
- tags
2220
- }) {
2221
- const renderIcon = (icon) => {
2222
- const Icon2 = iconMap[icon];
2223
- return /* @__PURE__ */ jsx39(Icon2, { size: 18 });
2224
- };
2225
- return /* @__PURE__ */ jsxs24(
2226
- "div",
2227
- {
2228
- "data-testid": "job-header-root",
2229
- className: cn(
2230
- "-mt-8 flex w-full flex-col items-center justify-between gap-6 md:-mt-0",
2231
- !standalone && "rounded-3xl"
2232
- ),
2233
- children: [
2234
- !standalone && /* @__PURE__ */ jsxs24("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", children: [
2235
- /* @__PURE__ */ jsx39(
2236
- Image2,
2237
- {
2238
- className: "h-full w-full rounded-t-3xl object-cover",
2239
- src: bannerSrc,
2240
- alt: "job banner",
2241
- fill: true
2242
- }
2243
- ),
2244
- /* @__PURE__ */ jsx39(
2245
- BackButton,
2246
- {
2247
- acceptedRoutes: backAcceptedRoutes,
2248
- fallbackHref: backFallbackHref,
2249
- className: "absolute right-2 top-2 flex items-center justify-center text-white sm:hidden",
2250
- "data-testid": "job-header-back-button"
2251
- }
2252
- ),
2253
- /* @__PURE__ */ jsx39(
2254
- "div",
2255
- {
2256
- className: "absolute left-4 top-8 md:left-6 md:top-16 lg:top-24",
2257
- "data-testid": "job-header-avatar",
2258
- children: /* @__PURE__ */ jsx39(
2259
- Avatar,
2260
- {
2261
- size: "large",
2262
- target: "_blank",
2263
- href: avatarHref,
2264
- name: avatarName,
2265
- src: avatarSrc,
2266
- rel: "noopener noreferrer"
2267
- }
2268
- )
2269
- }
2270
- )
2271
- ] }),
2272
- /* @__PURE__ */ jsxs24("div", { className: "flex w-full flex-col items-start justify-start gap-4 px-6", children: [
2273
- /* @__PURE__ */ jsxs24("div", { className: "flex flex-col md:flex-row", children: [
2274
- standalone && /* @__PURE__ */ jsx39("div", { className: "-mt-4 mr-4 md:mt-0", "data-testid": "job-header-avatar", children: /* @__PURE__ */ jsx39(
2275
- Avatar,
2276
- {
2277
- size: "large",
2278
- target: "_blank",
2279
- href: avatarHref,
2280
- name: avatarName,
2281
- src: avatarSrc,
2282
- rel: "noopener noreferrer"
2283
- }
2284
- ) }),
2285
- /* @__PURE__ */ jsx39("div", { className: "prose mt-4 flex w-full items-center text-grey-80 lg:prose-lg", children: subtitles?.map((subtitle, i) => /* @__PURE__ */ jsxs24(
2286
- "div",
2287
- {
2288
- "data-testid": `job-header-subtitle-${i}`,
2289
- className: "flex items-center",
2290
- children: [
2291
- subtitle,
2292
- i < subtitles.length - 1 && /* @__PURE__ */ jsx39(Dot2, { className: "mx-1 shrink-0", size: 10 })
2293
- ]
2294
- },
2295
- subtitle
2296
- )) })
2297
- ] }),
2298
- /* @__PURE__ */ jsxs24(
2299
- "div",
2300
- {
2301
- "data-testid": "job-header-content",
2302
- className: "mt-2 flex w-full flex-row flex-wrap items-center justify-between gap-1",
2303
- children: [
2304
- /* @__PURE__ */ jsx39(
2305
- "h2",
2306
- {
2307
- "data-testid": "job-header-title",
2308
- className: "break-word max-w-full text-2xl font-bold text-black sm:max-w-2xl md:max-w-lg",
2309
- children: title
2310
- }
2311
- ),
2312
- !!actions && /* @__PURE__ */ jsx39(
2313
- "div",
2314
- {
2315
- className: "flex w-full justify-end gap-2 md:w-auto",
2316
- "data-testid": "job-header-actions",
2317
- children: actions
2318
- }
2319
- )
2320
- ]
2321
- }
2322
- ),
2323
- /* @__PURE__ */ jsx39(
2324
- "div",
2325
- {
2326
- "data-testid": "job-header-tags",
2327
- className: "flex flex-row flex-wrap items-center justify-start gap-2",
2328
- children: tags?.map(({ name, label, icon }) => /* @__PURE__ */ jsxs24(
2329
- Chip_default,
2330
- {
2331
- size: "small",
2332
- variant: "neutral",
2333
- "aria-label": name,
2334
- "data-testid": `job-header-tag-${name}`,
2335
- children: [
2336
- renderIcon(icon),
2337
- /* @__PURE__ */ jsx39("span", { children: label })
2338
- ]
2339
- },
2340
- name
2341
- ))
2342
- }
2343
- )
2344
- ] })
2345
- ]
2346
- }
2347
- );
2348
- }
2349
-
2350
- // src/components/jobPost/JobPost.tsx
2351
- import * as DateFns from "date-fns";
2352
-
2353
- // src/hooks/useDisplayText.ts
2354
- import { useEffect as useEffect8, useMemo as useMemo2, useState as useState8 } from "react";
2095
+ // src/types/latest/shared_pickle_output_latest.ts
2096
+ var shared_pickle_output_latest_exports = {};
2097
+ __export(shared_pickle_output_latest_exports, {
2098
+ CurrencyEnum: () => CurrencyEnum,
2099
+ DetailLevelEnum: () => DetailLevelEnum,
2100
+ TypeEnum: () => TypeEnum,
2101
+ UnitTextEnum: () => UnitTextEnum,
2102
+ imageAssetSchema: () => imageAssetSchema,
2103
+ imageSchema: () => imageSchema,
2104
+ monetaryAmountSchema: () => monetaryAmountSchema,
2105
+ placeSchema: () => placeSchema,
2106
+ postalAddressSchema: () => postalAddressSchema,
2107
+ quantitativeValueSchema: () => quantitativeValueSchema
2108
+ });
2109
+ import { z } from "zod";
2110
+ var TypeEnum = z.enum(["IMAGE"]);
2111
+ var DetailLevelEnum = z.enum(["COUNTRY", "GEO", "LOCALITY", "POSTAL_CODE", "REGION"]);
2112
+ var UnitTextEnum = z.enum(["DAY", "HOUR", "MONTH", "PER_ACTIVITY", "WEEK", "YEAR"]);
2113
+ var CurrencyEnum = z.enum(["EUR", "GBP", "USD"]);
2114
+ var postalAddressSchema = z.object({
2115
+ version: z.literal("1.0.0").default("1.0.0"),
2116
+ type: z.string().describe("Document type used for schema"),
2117
+ addressCountry: z.string().describe("The physical country as defined in ISO 3166 Alpha-2"),
2118
+ addressRegion: z.optional(z.string()).describe("The region in which the locality is, and which is in the country."),
2119
+ addressLocality: z.optional(z.string()).describe("The locality in which the street address is, and which is in the region. In the US this would be city."),
2120
+ streetAddress: z.optional(z.string()).describe("The street name of the address within the locality."),
2121
+ streetNumber: z.optional(z.string()).describe("The house of building number within the street."),
2122
+ postalCode: z.optional(z.string()).describe("The postal code"),
2123
+ description: z.optional(z.string()).describe("A descriptive string containing the full address.")
2124
+ });
2125
+ var placeSchema = z.object({
2126
+ version: z.literal("1.0.0").default("1.0.0"),
2127
+ detailLevel: z.optional(DetailLevelEnum),
2128
+ latitude: z.optional(z.number()).describe("The latitude of a location."),
2129
+ longitude: z.optional(z.number()).describe("The longitude of a location."),
2130
+ address: z.optional(postalAddressSchema).describe("The physical place of the location")
2131
+ });
2132
+ var quantitativeValueSchema = z.object({
2133
+ version: z.literal("1.0.0").default("1.0.0"),
2134
+ type: z.string().describe("Document type used for schema"),
2135
+ value: z.optional(z.number()).describe("The single value for some quantity e.g 5000, if a range is needed use minValue and maxValue. Typically used for a single salary."),
2136
+ minValue: z.optional(z.number()).describe("The single minium value in a range for a quantitative_value, requires a maximum value."),
2137
+ maxValue: z.optional(z.number()).describe("The maximum value in a range for a quantitative_value, requires a minimum value."),
2138
+ unitText: UnitTextEnum
2139
+ });
2140
+ var monetaryAmountSchema = z.object({
2141
+ version: z.literal("1.0.0").default("1.0.0"),
2142
+ type: z.string().describe("Document type used for schema"),
2143
+ singleValue: z.optional(z.number()).describe("The annualized single value for some quantity e.g 5000, if a range is needed use minValue and maxValue. Deprecated - use value.value instead."),
2144
+ minValue: z.optional(z.number()).describe("The annualized single minium value in a range for a quantitative_value. Deprecated use value.minValue"),
2145
+ maxValue: z.optional(z.number()).describe("The annualized maximum value in a range for a quantitative_value. Deprecated use value.maxValue"),
2146
+ value: z.optional(quantitativeValueSchema).describe("The quantitative_value for a given salary"),
2147
+ currency: z.optional(CurrencyEnum)
2148
+ });
2149
+ var imageAssetSchema = z.object({
2150
+ version: z.literal("1.0.0").default("1.0.0"),
2151
+ altText: z.optional(z.string()).describe("The alt text for the image"),
2152
+ assetId: z.optional(z.string()).describe("The asset ID for the image"),
2153
+ description: z.optional(z.string()).describe("The description for the image"),
2154
+ extension: z.optional(z.string()).describe("The extension for the image"),
2155
+ label: z.optional(z.string()).describe("The label for the image"),
2156
+ mimeType: z.optional(z.string()).describe("The mime type for the image"),
2157
+ originalFilename: z.optional(z.string()).describe("The original filename for the image"),
2158
+ path: z.optional(z.string()).describe("The path for the image"),
2159
+ sha1Hash: z.optional(z.string()).describe("The SHA1 hash for the image"),
2160
+ size: z.optional(z.number()).describe("The size for the image"),
2161
+ title: z.optional(z.string()).describe("The title for the image"),
2162
+ uploadId: z.optional(z.string()).describe("The upload ID for the image"),
2163
+ url: z.optional(z.string()).describe("The URL for the image")
2164
+ });
2165
+ var imageSchema = z.object({
2166
+ version: z.literal("1.0.0").default("1.0.0"),
2167
+ type: z.string().describe("Document type used for schema"),
2168
+ asset: z.optional(imageAssetSchema).describe("The asset for the image")
2169
+ });
2355
2170
 
2356
- // src/lib/mappings.ts
2357
- var employmentTypeDisplayText = {
2358
- FULL_TIME: {
2359
- en: "Full Time"
2360
- },
2361
- INTERNSHIP: {
2362
- en: "Internship"
2363
- },
2364
- OTHER: {
2365
- en: "Other"
2366
- },
2367
- PART_TIME: {
2368
- en: "Part Time"
2369
- },
2370
- PER_DIEM: {
2371
- en: "Per-Diem"
2372
- },
2373
- TEMPORARY: {
2374
- en: "Temporary"
2375
- },
2376
- CONTRACT: {
2377
- en: "Contract"
2378
- }
2379
- };
2380
- var unitTextDisplayText = {
2381
- DAY: {
2382
- en: "Day"
2383
- },
2384
- HOUR: {
2385
- en: "Hour"
2386
- },
2387
- MONTH: {
2388
- en: "Month"
2389
- },
2390
- PER_ACTIVITY: {
2391
- en: "Per Activity"
2392
- },
2393
- WEEK: {
2394
- en: "Week"
2395
- },
2396
- YEAR: {
2397
- en: "Year"
2398
- }
2399
- };
2400
- var currencyDisplayText = {
2401
- EUR: {
2402
- en: "\u20AC"
2403
- },
2404
- GBP: {
2405
- en: "\xA3"
2406
- },
2407
- USD: {
2408
- en: "$"
2409
- }
2410
- };
2411
- var employmentLevelDisplayText = {
2412
- DIRECTOR: {
2413
- en: "Director"
2414
- },
2415
- ENTRY_LEVEL: {
2416
- en: "Entry Level"
2417
- },
2418
- EXECUTIVE: {
2419
- en: "Executive"
2420
- },
2421
- EXPERIENCED: {
2422
- en: "Experienced"
2423
- },
2424
- INTERN: {
2425
- en: "Intern"
2426
- },
2427
- MANAGER: {
2428
- en: "Manager"
2429
- }
2430
- };
2431
- var jobFunctionDisplayText = {
2432
- CLINICAL_RESEARCH: {
2433
- en: "Clinical Research"
2434
- },
2435
- CUSTOMER_SUCCESS: {
2436
- en: "Customer Success"
2437
- },
2438
- DATA_ANALYTICS: {
2439
- en: "Data Analytics"
2440
- },
2441
- FINANCE_AND_AUDIT: {
2442
- en: "Finance and Audit"
2443
- },
2444
- MARKETING: {
2445
- en: "Marketing"
2446
- },
2447
- OPERATIONS: {
2448
- en: "Operations"
2449
- },
2450
- PEOPLE_HUMAN_RESOURCES: {
2451
- en: "People Human Resources"
2452
- },
2453
- PRODUCT_AND_TECH: {
2454
- en: "Product and Tech"
2455
- },
2456
- QUALITY_ASSURANCE_AND_OUTCOMES: {
2457
- en: "Quality Assurance and Outcomes"
2458
- },
2459
- SALES_AND_BUSINESS_DEVELOPMENT: {
2460
- en: "Sales and Business Development"
2461
- },
2462
- STRATEGY_AND_CONSULTING: {
2463
- en: "Strategy and Consulting"
2464
- }
2465
- };
2466
- var bestFitDisplayText = {
2467
- DENTIST: {
2468
- en: "Dentist"
2469
- },
2470
- DIETICIAN: {
2471
- en: "Dietician"
2472
- },
2473
- DOULA: {
2474
- en: "Doula"
2475
- },
2476
- MEDICAL_ASSISTANT: {
2477
- en: "Medical Assistant"
2478
- },
2479
- MIDWIFE: {
2480
- en: "Midwife"
2481
- },
2482
- NURSE: {
2483
- en: "Nurse"
2484
- },
2485
- OCCUPATIONAL_THERAPIST: {
2486
- en: "Occupational Therapist"
2487
- },
2488
- PHARMACIST: {
2489
- en: "Pharmacist"
2490
- },
2491
- PHYSICAL_THERAPIST: {
2492
- en: "Physical Therapist"
2493
- },
2494
- PHYSICIAN: {
2495
- en: "Physician"
2496
- },
2497
- PHYSICIAN_ASSISTANT: {
2498
- en: "Physician Assistant"
2499
- },
2500
- PSYCHOLOGIST: {
2501
- en: "Psychologist"
2502
- },
2503
- RADIOLOGIST: {
2504
- en: "Radiologist"
2505
- },
2506
- SOCIAL_WORKER: {
2507
- en: "Social Worker"
2508
- },
2509
- SPEECH_LANGUAGE_PATHOLOGIST: {
2510
- en: "Speech Language Pathologist"
2511
- },
2512
- SURGEON: {
2513
- en: "Surgeon"
2514
- }
2515
- };
2516
- var clinicalSpecialtyDisplayText = {
2517
- ANESTHESIOLOGY: {
2518
- en: "Anesthesiology"
2519
- },
2520
- CARDIOLOGY: {
2521
- en: "Cardiology"
2522
- },
2523
- CARDIOVASCULAR_AND_PULMONARY: {
2524
- en: "Cardiovascular and Pulmonary"
2525
- },
2526
- CASE_MANAGEMENT: {
2527
- en: "Case Management"
2528
- },
2529
- CHRONIC_PAIN: {
2530
- en: "Chronic Pain"
2531
- },
2532
- CLINICAL_ELECTROPHYSIOLOGY: {
2533
- en: "Clinical Electrophysiology"
2534
- },
2535
- CRITICAL_AND_ACUTE_CARE: {
2536
- en: "Critical and Acute Care"
2537
- },
2538
- DERMATOLOGY: {
2539
- en: "Dermatology"
2540
- },
2541
- DIALYSIS: {
2542
- en: "Dialysis"
2543
- },
2544
- EMERGENCY_MEDICINE: {
2545
- en: "Emergency Medicine"
2546
- },
2547
- ENDOCRINOLOGY: {
2548
- en: "Endocrinology"
2549
- },
2550
- ERGONOMICS: {
2551
- en: "Ergonomics"
2552
- },
2553
- FEEDING_EATING_AND_SWALLOWING: {
2554
- en: "Feeding, Eating, and Swallowing"
2555
- },
2556
- GASTROENTEROLOGY: {
2557
- en: "Gastroenterology"
2558
- },
2559
- GERIATRICS: {
2560
- en: "Geriatrics"
2561
- },
2562
- HAND_THERAPY: {
2563
- en: "Hand Therapy"
2564
- },
2565
- HEMATOLOGY: {
2566
- en: "Hematology"
2567
- },
2568
- HOLISTIC_MEDICINE: {
2569
- en: "Holistic Medicine"
2570
- },
2571
- INFORMATICS: {
2572
- en: "Informatics"
2573
- },
2574
- INTERNAL_MEDICINE: {
2575
- en: "Internal Medicine"
2576
- },
2577
- LABOR_AND_DELIVERY: {
2578
- en: "Labor and Delivery"
2579
- },
2580
- MANUAL_THERAPY: {
2581
- en: "Manual Therapy"
2582
- },
2583
- MED_SURG: {
2584
- en: "Medical-Surgical"
2585
- },
2586
- MENTAL_HEALTH: {
2587
- en: "Mental Health"
2588
- },
2589
- NEPHROLOGY: {
2590
- en: "Nephrology"
2591
- },
2592
- NEUROLOGY: {
2593
- en: "Neurology"
2594
- },
2595
- ONCOLOGY: {
2596
- en: "Oncology"
2597
- },
2598
- ORTHOPEDICS: {
2599
- en: "Orthopedics"
2600
- },
2601
- OTOLARYNGOLOGY: {
2602
- en: "Otolaryngology"
2603
- },
2604
- PEDIATRICS: {
2605
- en: "Pediatrics"
2606
- },
2607
- PHYSICAL_AND_REHABILITATION_MEDICINE: {
2608
- en: "Physical and Rehabilitation Medicine"
2609
- },
2610
- PLASTIC_SURGERY: {
2611
- en: "Plastic Surgery"
2612
- },
2613
- PRIMARY_CARE: {
2614
- en: "Primary Care"
2615
- },
2616
- PSYCHIATRY: {
2617
- en: "Psychiatry"
2618
- },
2619
- PULMONOLOGY: {
2620
- en: "Pulmonology"
2621
- },
2622
- RADIOLOGY: {
2623
- en: "Radiology"
2624
- },
2625
- SENSORY: {
2626
- en: "Sensory"
2627
- },
2628
- SPORTS: {
2629
- en: "Sports"
2630
- },
2631
- SURGERY: {
2632
- en: "Surgery"
2633
- },
2634
- TRANSPLANT_SURGERY: {
2635
- en: "Transplant Surgery"
2636
- },
2637
- TRAUMA_MEDICINE: {
2638
- en: "Trauma Medicine"
2639
- },
2640
- URGENT_CARE: {
2641
- en: "Urgent Care"
2642
- },
2643
- UROLOGY: {
2644
- en: "Urology"
2645
- },
2646
- VISION: {
2647
- en: "Vision"
2648
- },
2649
- WOMENS_HEALTH: {
2650
- en: "Women's Health"
2651
- },
2652
- WOUND_AND_BURN_CARE: {
2653
- en: "Wound and Burn Care"
2654
- },
2655
- WOUND_MANAGEMENT: {
2656
- en: "Wound Management"
2657
- }
2658
- };
2659
- var shiftDisplayText = {
2660
- TEN_HOUR: {
2661
- en: "10 Hour"
2662
- },
2663
- TWELVE_HOUR: {
2664
- en: "12 Hour"
2665
- },
2666
- EIGHT_HOUR: {
2667
- en: "8 Hour"
2668
- },
2669
- DAY: {
2670
- en: "Day"
2671
- },
2672
- EVENING: {
2673
- en: "Evening"
2674
- },
2675
- FLEXIBLE: {
2676
- en: "Flexible"
2677
- },
2678
- MID_SHIFT: {
2679
- en: "Mid Shift"
2680
- },
2681
- MONDAY_TO_FRIDAY: {
2682
- en: "Monday to Friday"
2683
- },
2684
- NIGHT: {
2685
- en: "Night"
2686
- },
2687
- ON_CALL: {
2688
- en: "On Call"
2689
- },
2690
- WEEKENDS: {
2691
- en: "Weekends"
2692
- }
2693
- };
2694
- var clinicalSettingDisplayText = {
2695
- ACUTE_CARE: {
2696
- en: "Acute Care"
2697
- },
2698
- AMBULATORY_SURGERY_CENTER: {
2699
- en: "Ambulatory Surgery Center"
2700
- },
2701
- CLINIC: {
2702
- en: "Clinic"
2703
- },
2704
- HOME_HEALTH: {
2705
- en: "Home Health"
2706
- },
2707
- HOSPITAL: {
2708
- en: "Hospital"
2709
- },
2710
- INPATIENT: {
2711
- en: "Inpatient"
2712
- },
2713
- LONG_TERM_CARE: {
2714
- en: "Long Term Care"
2715
- },
2716
- MED_SPA: {
2717
- en: "Med Spa"
2718
- },
2719
- NURSING_HOME: {
2720
- en: "Nursing Home"
2721
- },
2722
- OFFICE: {
2723
- en: "Office"
2724
- },
2725
- OUTPATIENT: {
2726
- en: "Outpatient"
2727
- },
2728
- PRIVATE_PRACTICE: {
2729
- en: "Private Practice"
2730
- },
2731
- REHAB_CENTER: {
2732
- en: "Rehab Center"
2733
- },
2734
- SCHOOL: {
2735
- en: "School"
2736
- },
2737
- SKILLED_NURSING_FACILITY: {
2738
- en: "Skilled Nursing Facility"
2739
- }
2740
- };
2741
- var defaultMappings = {
2742
- employmentType: employmentTypeDisplayText,
2743
- unitText: unitTextDisplayText,
2744
- currency: currencyDisplayText,
2745
- employmentLevel: employmentLevelDisplayText,
2746
- jobFunction: jobFunctionDisplayText,
2747
- bestFit: bestFitDisplayText,
2748
- clinicalSpecialty: clinicalSpecialtyDisplayText,
2749
- clinicalSetting: clinicalSettingDisplayText,
2750
- shift: shiftDisplayText
2751
- };
2171
+ // src/types/latest/company_service_latest.ts
2172
+ var TypeEnum2 = z2.enum(["OFFICE"]);
2173
+ var CategoryEnum = z2.enum(["FINANCIAL", "HEALTH", "PROFESSIONAL_DEVELOPMENT", "WORK_LIFE_BALANCE"]);
2174
+ var TitleEnum = z2.enum(["DMD", "JD", "MBA", "MD", "MHA", "MPH", "PT", "PH_D", "RN"]);
2175
+ var PublishStatusEnum = z2.enum(["DRAFT", "IN_REVIEW", "PUBLISHED", "REMOVED"]);
2176
+ var OfficeTypeEnum = z2.enum(["BRANCH", "HEADQUARTERS", "SATELLITE"]);
2177
+ var socialMediaSchema = z2.object({
2178
+ version: z2.literal("1.0.0").default("1.0.0"),
2179
+ url: z2.string().describe("The link to the social media platform"),
2180
+ type: z2.string().describe("The type of social media link")
2181
+ });
2182
+ var companyBenefitsSchema = z2.object({
2183
+ version: z2.literal("1.0.0").default("1.0.0"),
2184
+ type: z2.string().describe("Document type used for schema"),
2185
+ title: z2.string(),
2186
+ description: z2.optional(z2.string()),
2187
+ category: CategoryEnum
2188
+ });
2189
+ var industrySchema = z2.lazy(() => z2.object({
2190
+ version: z2.literal("1.0.0").default("1.0.0"),
2191
+ type: z2.string().describe("Document type used for schema"),
2192
+ name: z2.string(),
2193
+ description: z2.optional(z2.string()).describe("A brief description of the industry"),
2194
+ onetIndustryId: z2.optional(z2.string()).describe("ONET industry ID"),
2195
+ parent: z2.optional(industrySchema)
2196
+ }));
2197
+ var jobBoardSchema = z2.object({
2198
+ version: z2.literal("1.0.0").default("1.0.0"),
2199
+ type: z2.string().describe("Document type used for schema"),
2200
+ name: z2.string().describe("The name of the job board"),
2201
+ description: z2.string().describe("A brief description of the job board"),
2202
+ logo: z2.optional(imageSchema).describe("The logo of the job board"),
2203
+ baseUrl: z2.optional(z2.string()).describe("The base URL of the job board")
2204
+ });
2205
+ var personSchema = z2.object({
2206
+ version: z2.literal("1.0.0").default("1.0.0"),
2207
+ type: z2.string().describe("Document type used for schema"),
2208
+ firstName: z2.string().describe("The first name of the person"),
2209
+ lastName: z2.string().describe("The last name of the person"),
2210
+ title: z2.optional(z2.array(z2.string())).describe("The titles of the degree of the person"),
2211
+ slug: z2.string().describe("person slug - should be familyname-givenname-title(s)"),
2212
+ jobTitle: z2.optional(z2.string()).describe("The job title of the person"),
2213
+ isDoctor: z2.optional(z2.boolean()).describe("Is the person a doctor"),
2214
+ isMedical: z2.optional(z2.boolean()).describe("Are they of a medical background?"),
2215
+ isScientist: z2.optional(z2.boolean()).describe("Are they a scientist?"),
2216
+ image: z2.optional(imageSchema).describe("The image of the person"),
2217
+ email: z2.optional(z2.string()).describe("The email of the person"),
2218
+ socialMedia: z2.optional(z2.array(socialMediaSchema)).describe("The social media links of the person"),
2219
+ telephone: z2.optional(z2.string()).describe("The telephone number of the person"),
2220
+ url: z2.optional(z2.string()).describe("The URL of the person"),
2221
+ address: z2.optional(placeSchema).describe("The address of the person")
2222
+ });
2223
+ var companyCareersSchema = z2.object({
2224
+ version: z2.literal("1.0.0").default("1.0.0"),
2225
+ type: z2.string().describe("Document type used for schema"),
2226
+ careersUrl: z2.string().describe("The URL of the company careers page"),
2227
+ jobBoard: z2.optional(jobBoardSchema),
2228
+ jobBoardSlug: z2.optional(z2.array(z2.string())),
2229
+ companyBenefits: z2.optional(z2.array(companyBenefitsSchema)).describe("What are the specific benefits of that company. The benefit is generic.")
2230
+ });
2231
+ var companyPhilosophySchema = z2.object({
2232
+ version: z2.literal("1.0.0").default("1.0.0"),
2233
+ type: z2.string().describe("Document type used for schema"),
2234
+ companyMission: z2.optional(z2.string()).describe("The mission statement of the company."),
2235
+ companyHow: z2.optional(z2.string()).describe("How does the company achieve its mission"),
2236
+ companyCulture: z2.optional(z2.array(z2.string())).describe("What are some of the culture aspects of this company?")
2237
+ });
2238
+ var companyNdgSchema = z2.object({
2239
+ version: z2.literal("1.0.0").default("1.0.0"),
2240
+ type: z2.string().describe("Document type used for schema"),
2241
+ companyWow: z2.optional(z2.string()).describe("What is the wow of this company?"),
2242
+ companyNdgTake: z2.optional(z2.string()).describe("What is the NDG POV on this company?"),
2243
+ companyBestFit: z2.optional(z2.array(z2.string())),
2244
+ companyInterests: z2.optional(z2.array(z2.string()))
2245
+ });
2246
+ var foundingInformationSchema = z2.object({
2247
+ version: z2.literal("1.0.0").default("1.0.0"),
2248
+ type: z2.string().describe("Document type used for schema"),
2249
+ foundedDate: z2.optional(z2.string()),
2250
+ foundedCountry: z2.optional(z2.string()),
2251
+ foundedCity: z2.optional(z2.string()),
2252
+ founders: z2.optional(z2.array(personSchema))
2253
+ });
2254
+ var ngdMetadataSchema = z2.object({
2255
+ version: z2.literal("1.0.0").default("1.0.0"),
2256
+ type: z2.string().describe("Document type used for schema"),
2257
+ lastScraped: z2.optional(z2.string()).describe("Date the last entity was scraped, if applicable"),
2258
+ scraperVersion: z2.optional(z2.string()),
2259
+ postProcessorVersion: z2.optional(z2.string()),
2260
+ uniqueRunId: z2.optional(z2.string()),
2261
+ postProcessorUniqueRunId: z2.optional(z2.string()),
2262
+ isScrapeManaged: z2.optional(z2.boolean()).default(true)
2263
+ });
2264
+ var companySchema = z2.object({
2265
+ version: z2.literal("1.0.0").default("1.0.0"),
2266
+ id: z2.string().describe("The NDG specific id for a company. Cannot be changed."),
2267
+ createdAt: z2.string().datetime().describe("Time document was created. Autoset by Sanity"),
2268
+ updatedAt: z2.string().datetime().describe("Time document was created. Autoset by Sanity"),
2269
+ companyName: z2.string().describe("The name of the company"),
2270
+ slug: z2.string().describe("The NDG specific slug for a company."),
2271
+ type: z2.string().describe("Document type used for schema"),
2272
+ logo: z2.optional(imageSchema).describe("The logo of the company"),
2273
+ companyWebsite: z2.optional(z2.string()).describe("The website of the company"),
2274
+ socialMedia: z2.optional(z2.array(socialMediaSchema)).describe("The social media links of the company"),
2275
+ brandColor: z2.optional(z2.string()).describe("The brand color of the company"),
2276
+ companyCareers: z2.optional(companyCareersSchema).describe("Career Specific Information for the company."),
2277
+ companyPhilosophy: z2.optional(companyPhilosophySchema).describe("Company mission,values and how the company achieves its mission."),
2278
+ companyNdg: z2.optional(companyNdgSchema).describe("Next Degree specific information for the company."),
2279
+ foundingInfo: z2.optional(foundingInformationSchema),
2280
+ headquartersLocation: z2.optional(placeSchema),
2281
+ employeeEstimate: z2.optional(z2.string()),
2282
+ publishStatus: z2.optional(z2.string()),
2283
+ ngdMetadata: z2.optional(ngdMetadataSchema)
2284
+ });
2285
+ var officeSchema = z2.object({
2286
+ version: z2.literal("1.0.0").default("1.0.0"),
2287
+ type: z2.string().describe("Document type used for schema"),
2288
+ name: z2.string().describe("Name or nickname for the office (e.g., 'NYC HQ', 'West Coast Branch')"),
2289
+ officeType: OfficeTypeEnum,
2290
+ companyId: z2.optional(companySchema),
2291
+ geoLocation: z2.optional(placeSchema).describe("Geographical location details: coordinates + postal address"),
2292
+ createdAt: z2.optional(z2.string()),
2293
+ updatedAt: z2.optional(z2.string())
2294
+ });
2752
2295
 
2753
- // src/types/displayText.errors.tsx
2754
- var DisplayTextScopeNotFoundError = class extends Error {
2755
- constructor(scope) {
2756
- super(`No display text mapping found for scope: ${scope}`);
2757
- this.name = "DisplayTextScopeNotFoundError";
2758
- }
2759
- };
2760
- var DisplayTextValueNotFoundError = class extends Error {
2761
- constructor(value, scope) {
2762
- super(`No display text found for value: '${value}' in scope: '${scope}'`);
2763
- this.name = "DisplayTextValueNotFoundError";
2764
- }
2765
- };
2296
+ // src/types/latest/job_posting_service_latest.ts
2297
+ import { z as z3 } from "zod";
2298
+ var TypeEnum3 = z3.enum(["JOB_POST"]);
2299
+ var JobLocationTypeEnum = z3.enum(["FLOAT", "HYBRID", "ONSITE", "REMOTE"]);
2300
+ var EmploymentTypeEnum = z3.enum(["CONTRACT", "FULL_TIME", "INTERNSHIP", "OTHER", "PART_TIME", "PER_DIEM", "TEMPORARY"]);
2301
+ var EmploymentLevelEnum = z3.enum(["DIRECTOR", "ENTRY_LEVEL", "EXECUTIVE", "EXPERIENCED", "INTERN", "MANAGER"]);
2302
+ var JobFunctionEnum = z3.enum(["CLINICAL_RESEARCH", "CUSTOMER_SUCCESS", "DATA_ANALYTICS", "FINANCE_AND_AUDIT", "MARKETING", "OPERATIONS", "PEOPLE_HUMAN_RESOURCES", "PRODUCT_AND_TECH", "QUALITY_ASSURANCE_AND_OUTCOMES", "SALES_AND_BUSINESS_DEVELOPMENT", "STRATEGY_AND_CONSULTING"]);
2303
+ var PublishStatusEnum2 = z3.enum(["DRAFT", "IN_REVIEW", "PUBLISHED", "REMOVED"]);
2304
+ var BestFitEnum = z3.enum(["DENTIST", "DIETICIAN", "DOULA", "MEDICAL_ASSISTANT", "MIDWIFE", "NURSE", "OCCUPATIONAL_THERAPIST", "PHARMACIST", "PHYSICAL_THERAPIST", "PHYSICIAN", "PHYSICIAN_ASSISTANT", "PSYCHOLOGIST", "RADIOLOGIST", "SOCIAL_WORKER", "SPEECH_LANGUAGE_PATHOLOGIST", "SURGEON"]);
2305
+ var ClinicalLicenseEnum = z3.enum(["CNA", "CNM", "CNS", "COTA", "CRNA", "LPN", "LVN", "NP", "OT", "PT", "PTA", "RN"]);
2306
+ var ShiftEnum = z3.enum(["DAY", "EIGHT_HOUR", "EVENING", "FLEXIBLE", "MID_SHIFT", "MONDAY_TO_FRIDAY", "NIGHT", "ON_CALL", "TEN_HOUR", "TWELVE_HOUR", "WEEKENDS"]);
2307
+ var ClinicalSettingEnum = z3.enum(["ACUTE_CARE", "AMBULATORY_SURGERY_CENTER", "CLINIC", "HOME_HEALTH", "HOSPITAL", "INPATIENT", "LONG_TERM_CARE", "MED_SPA", "NURSING_HOME", "OFFICE", "OUTPATIENT", "PRIVATE_PRACTICE", "REHAB_CENTER", "SCHOOL", "SKILLED_NURSING_FACILITY"]);
2308
+ var ClinicalSpecialtyEnum = z3.enum(["ANESTHESIOLOGY", "CARDIOLOGY", "CASE_MANAGEMENT", "CHRONIC_PAIN", "CLINICAL_ELECTROPHYSIOLOGY", "CRITICAL_AND_ACUTE_CARE", "DERMATOLOGY", "DIALYSIS", "EMERGENCY_MEDICINE", "ENDOCRINOLOGY", "ERGONOMICS", "FEEDING_EATING_AND_SWALLOWING", "GASTROENTEROLOGY", "GERIATRICS", "HAND_THERAPY", "HEMATOLOGY", "HOLISTIC_MEDICINE", "INFORMATICS", "INTERNAL_MEDICINE", "LABOR_AND_DELIVERY", "MANUAL_THERAPY", "MED_SURG", "MENTAL_HEALTH", "NEPHROLOGY", "NEUROLOGY", "ONCOLOGY", "ORTHOPEDICS", "OTOLARYNGOLOGY", "PEDIATRICS", "PHYSICAL_AND_REHABILITATION_MEDICINE", "PLASTIC_SURGERY", "PRIMARY_CARE", "PSYCHIATRY", "PULMONOLOGY", "RADIOLOGY", "SENSORY", "SPORTS", "SURGERY", "TRAUMA_MEDICINE", "URGENT_CARE", "UROLOGY", "VISION", "WOMENS_HEALTH", "WOUND_AND_BURN_CARE"]);
2309
+ var jobPostSchema = z3.object({
2310
+ version: z3.literal("1.0.0").default("1.0.0"),
2311
+ id: z3.string().describe("The NDG specific id for a job posting in form of ndg-<company_slug>-<unique-job-id>. Serves as unique identifier. Cannot be changed."),
2312
+ type: z3.string().describe("Document type used for schema"),
2313
+ createdAt: z3.string().datetime().describe("Time document was created. Autoset by Sanity"),
2314
+ updatedAt: z3.string().datetime().describe("Time document was created. Autoset by Sanity"),
2315
+ dateAdded: z3.optional(z3.string().datetime()).describe("The date the job was added to the platform"),
2316
+ datePosted: z3.optional(z3.string().datetime()).describe("The date the job was published for public viewing"),
2317
+ dateRemoved: z3.optional(z3.string().datetime()).describe("The date the job was removed from public viewing"),
2318
+ validThrough: z3.optional(z3.string().datetime()).describe("The date the job posting is valid through. After this date it will be removed from public viewing"),
2319
+ vacancyCount: z3.optional(z3.number().int()).describe("The number of vacancies for a given job posting"),
2320
+ clientId: z3.string().describe("The ID assigned by the client to a job - normally the same as the GH / Lever / Ashby ID or internal ID"),
2321
+ url: z3.string().describe("The URL of the job to be displayed for users to apply with. Direct job link."),
2322
+ title: z3.string().describe("The title of the job post"),
2323
+ description: z3.string().describe("The description of the job post saved as markdown. Used for rendering the job description."),
2324
+ richTextDescription: z3.optional(z3.string()).describe("The description of the job post saved as rich text"),
2325
+ isClinical: z3.boolean().default(false).describe("Denotes if a job posting is clinical in nature or not. A role is clinical if it requires direct clinical patient care."),
2326
+ isRemote: z3.boolean().default(false).describe("Denotes if a job posting is remote in nature. For a posting to be 'remote' it must be 100% remote (e.g hybrid roles would denote this to false)."),
2327
+ isVerified: z3.boolean().default(false).describe("Denotes if a job posting has been manually verified - and thus ALL fields can be considered accurate. Can be used for DS training."),
2328
+ isDirectApply: z3.boolean().default(false).describe("Denotes if a job posting url is direct apply. To be direct apply a user must be able to apply to the role without logging in and under 2 clicks."),
2329
+ jobLocationType: z3.optional(z3.array(JobLocationTypeEnum)),
2330
+ employmentType: z3.optional(z3.array(EmploymentTypeEnum)),
2331
+ employmentLevel: z3.optional(EmploymentLevelEnum),
2332
+ jobFunction: z3.optional(JobFunctionEnum),
2333
+ publishStatus: PublishStatusEnum2,
2334
+ bestFit: z3.optional(z3.array(BestFitEnum)),
2335
+ clinicalLicense: z3.optional(z3.array(ClinicalLicenseEnum)),
2336
+ shift: z3.optional(z3.array(ShiftEnum)),
2337
+ clinicalSetting: z3.optional(z3.array(ClinicalSettingEnum)),
2338
+ clinicalSpecialty: z3.optional(z3.array(ClinicalSpecialtyEnum)),
2339
+ estimatedSalary: z3.optional(monetaryAmountSchema).describe("Determines the estimated salary for a given job posting"),
2340
+ jobLocation: z3.optional(postalAddressSchema).describe("Determines the primary physical location where the job is to be performed. For remote roles, use applicantLocationRequirements"),
2341
+ applicableOffices: z3.optional(z3.array(officeSchema)).describe("The physical location(s) in which employees may be located for to be eligible for the job. Used in conjunction with job_location_type."),
2342
+ applicantLocationRequirements: z3.optional(z3.array(placeSchema)).describe("The geographic location(s) in which employees may be located for to be eligible for the job. The job description must clearly state that the applicant may be located in certain geographical location(s). This property is required if applicants may be located in one or more geographic locations and the job is 100% remote."),
2343
+ hiringOrganization: z3.optional(companySchema).describe("The organization that is hiring for the role")
2344
+ });
2345
+
2346
+ // src/types/latest/custom/company_service_sanity.ts
2347
+ import { z as z5 } from "zod";
2348
+
2349
+ // src/types/latest/custom/custom_sanity_models.ts
2350
+ import { z as z4 } from "zod";
2351
+ var sanityReferenceSchema = z4.object({
2352
+ _ref: z4.string(),
2353
+ _type: z4.string(),
2354
+ _key: z4.optional(z4.string())
2355
+ });
2356
+ var sanitySlugSchema = z4.object({
2357
+ current: z4.string(),
2358
+ _type: z4.string(),
2359
+ _key: z4.optional(z4.string())
2360
+ });
2361
+
2362
+ // src/types/latest/custom/company_service_sanity.ts
2363
+ var foundingInformationSchema2 = foundingInformationSchema.extend({
2364
+ _type: z5.string().describe("Document type used within sanity").default("companyFounding"),
2365
+ founders: z5.optional(z5.union([z5.array(personSchema), z5.array(sanityReferenceSchema)])).nullable(),
2366
+ founderList: z5.optional(z5.union([z5.array(personSchema), z5.array(sanityReferenceSchema)])).nullable()
2367
+ }).omit({ type: true }).strict().transform((data) => ({
2368
+ ...data,
2369
+ type: data._type,
2370
+ founders: data.founders || data.founderList || void 0
2371
+ })).transform(({ _type, founderList, ...rest }) => rest);
2372
+ var companyNdgSchema2 = companyNdgSchema.extend({
2373
+ _type: z5.string().describe("Document type used within sanity").default("companyNDG"),
2374
+ companyNDGTake: z5.string().nullable().describe("What is the NDG POV on this company?")
2375
+ }).omit({ type: true }).strict().transform((data) => ({
2376
+ ...data,
2377
+ type: data._type,
2378
+ companyNdgTake: data.companyNDGTake
2379
+ })).transform(({ _type, companyNDGTake, ...rest }) => rest);
2380
+ var ngdMetadataSchema2 = ngdMetadataSchema.extend({
2381
+ _type: z5.string().describe("Document type used within sanity").default("ndgMetadata")
2382
+ }).omit({ type: true }).transform((data) => ({
2383
+ ...data,
2384
+ type: data._type
2385
+ })).transform(({ _type, ...rest }) => rest);
2386
+ var companyPhilosophySchema2 = companyPhilosophySchema.extend({
2387
+ _type: z5.string().describe("Document type used within sanity").default("companyPhilosophy")
2388
+ }).omit({ type: true }).strict().transform((data) => ({
2389
+ ...data,
2390
+ type: data._type
2391
+ })).transform(({ _type, ...rest }) => rest);
2392
+ var companyCareersSchema2 = companyCareersSchema.extend({
2393
+ _type: z5.string().describe("Document type used within sanity").default("companyCareers"),
2394
+ companyBenefits: z5.optional(z5.array(
2395
+ z5.union([companyBenefitsSchema, sanityReferenceSchema])
2396
+ )).nullable().describe("What are the specific benefits of that company. The benefit is generic."),
2397
+ jobBoard: z5.union([jobBoardSchema, sanityReferenceSchema]).nullable(),
2398
+ jobBoardSlug: z5.optional(z5.union([z5.array(z5.string()), z5.array(sanitySlugSchema)]))
2399
+ }).omit({ type: true }).strict().transform((data) => ({
2400
+ ...data,
2401
+ type: data._type
2402
+ })).transform(({ _type, ...rest }) => rest);
2403
+ var companySchema2 = companySchema.extend({
2404
+ _id: z5.string().describe("The NDG specific id for a job posting in form of ndg-<company_slug>-<unique-job-id>. Serves as unique identifier. Cannot be changed."),
2405
+ _rev: z5.string().nullable().describe("Revision number"),
2406
+ _type: z5.string().describe("Document type used within sanity").default("company"),
2407
+ _createdAt: z5.string().datetime().describe("Time document was created. Autoset by Sanity"),
2408
+ _updatedAt: z5.string().datetime().describe("Time document was created. Autoset by Sanity"),
2409
+ companyCareers: companyCareersSchema2.nullable().describe("Career Specific Information for the company."),
2410
+ companyPhilosophy: companyPhilosophySchema2.nullable().describe("Company mission,values and how the company achieves its mission."),
2411
+ companyNDG: companyNdgSchema2.nullable().describe("Next Degree specific information for the company."),
2412
+ foundingInfo: foundingInformationSchema2.nullable(),
2413
+ slug: z5.union([z5.string(), sanitySlugSchema]).describe("The NDG specific slug for a company."),
2414
+ ndgMetadata: ngdMetadataSchema2.nullable(),
2415
+ logo: z5.union([imageSchema, z5.record(z5.any())]).nullable().describe("The logo of the company"),
2416
+ //Deprecated Models
2417
+ logoImageURL: z5.optional(z5.string()).describe("The logo of the company"),
2418
+ industryList: z5.optional(z5.array(sanityReferenceSchema)).describe("The industry of the company")
2419
+ }).omit({ type: true, id: true, createdAt: true, updatedAt: true }).strict().transform((data) => ({
2420
+ ...data,
2421
+ type: data._type,
2422
+ id: data._id,
2423
+ createdAt: data._createdAt,
2424
+ updatedAt: data._updatedAt,
2425
+ rev: data._rev
2426
+ })).transform(({ _type, _id, _rev, _createdAt, _updatedAt, ...rest }) => rest);
2427
+
2428
+ // src/types/latest/custom/job_posting_service_sanity.ts
2429
+ import { z as z6 } from "zod";
2430
+ var JobPostTypeEnum = z6.enum(["jobPost"]);
2431
+ var MonetaryAmountTypeEnum = z6.enum(["monetaryAmount"]);
2432
+ var postalAddressSchema2 = postalAddressSchema.extend({
2433
+ _type: z6.string().describe("Document type used within sanity").default("address")
2434
+ }).omit({ type: true }).strict().transform((data) => ({
2435
+ ...data,
2436
+ type: data._type
2437
+ })).transform(({ _type, ...rest }) => rest);
2438
+ var quantitativeValueSchema2 = quantitativeValueSchema.extend({
2439
+ _type: z6.string().describe("Document type used within sanity").default("quantitativeValue")
2440
+ }).omit({ type: true }).strict().transform((data) => ({
2441
+ ...data,
2442
+ type: data._type
2443
+ })).transform(({ _type, ...rest }) => rest);
2444
+ var monetaryAmountSchema2 = monetaryAmountSchema.extend({
2445
+ _type: z6.string().describe("Document type used within sanity").default("monetaryAmount"),
2446
+ value: quantitativeValueSchema2.optional().describe("The quantitative_value for a given salary")
2447
+ }).omit({ type: true }).strict().transform((data) => ({
2448
+ ...data,
2449
+ type: data._type
2450
+ })).transform(({ _type, ...rest }) => rest);
2451
+ var jobPostSchema2 = jobPostSchema.extend({
2452
+ // Override base fields with Sanity-specific fields
2453
+ _id: z6.string().describe("The NDG specific id for a job posting in form of ndg-<company_slug>-<unique-job-id>. Serves as unique identifier. Cannot be changed.").regex(/^ndg-.*-.*$/),
2454
+ _rev: z6.string().optional().describe("Revision number"),
2455
+ _type: z6.string().describe("Document type used within sanity").default("jobPost"),
2456
+ _createdAt: z6.string().datetime().describe("Time document was created. Autoset by Sanity"),
2457
+ _updatedAt: z6.string().datetime().describe("Time document was created. Autoset by Sanity"),
2458
+ // Override fields with new schemas
2459
+ estimatedSalary: monetaryAmountSchema2.optional().describe("Determines the estimated salary for a given job posting"),
2460
+ jobLocation: postalAddressSchema2.optional().describe("Determines the primary physical location where the job is to be performed. For remote roles, use applicantLocationRequirements"),
2461
+ // Add Sanity-specific fields
2462
+ ndgMetadata: z6.record(z6.any()).optional(),
2463
+ ndgID: z6.string().optional(),
2464
+ hiringOrganization: z6.optional(z6.union([sanityReferenceSchema, companySchema])),
2465
+ raw: z6.record(z6.any()).optional(),
2466
+ isLoaded: z6.boolean().default(false),
2467
+ isVerified: z6.boolean().default(false),
2468
+ needsReview: z6.boolean().default(false),
2469
+ schema_version: z6.string().optional(),
2470
+ origin: z6.string().optional(),
2471
+ temp: z6.record(z6.any()).optional(),
2472
+ applicationType: z6.string().optional(),
2473
+ // Override clientId to use Sanity naming convention
2474
+ clientID: z6.string()
2475
+ }).omit({ type: true, id: true, createdAt: true, updatedAt: true, clientId: true }).transform((data) => ({
2476
+ ...data,
2477
+ type: data._type,
2478
+ id: data._id,
2479
+ createdAt: data._createdAt,
2480
+ updatedAt: data._updatedAt,
2481
+ rev: data._rev
2482
+ })).transform(({ _type, _id, _rev, _createdAt, _updatedAt, ...rest }) => rest);
2766
2483
 
2767
- // src/services/displayText.tsx
2768
- var DisplayTextService = class {
2769
- constructor(customMappings) {
2770
- this.defaultLanguage = "en";
2771
- this.mappings = {
2772
- ...defaultMappings,
2773
- // Use all pre-defined mappings as defaults
2774
- ...customMappings
2775
- // Override with any custom mappings if provided
2776
- };
2777
- }
2778
- async getDisplayText(scope, value, language = this.defaultLanguage) {
2779
- const scopeMapping = this.mappings[scope];
2780
- if (!scopeMapping) {
2781
- throw new DisplayTextScopeNotFoundError(scope);
2782
- }
2783
- if (Array.isArray(value)) {
2784
- const displayTextPromises = value.map((v) => this.getDisplayText(scope, v, language));
2785
- const displayTexts2 = await Promise.all(displayTextPromises);
2786
- return displayTexts2.filter((v) => !!v).join(", ");
2787
- }
2788
- const displayTexts = scopeMapping[value];
2789
- if (!displayTexts) {
2790
- throw new DisplayTextValueNotFoundError(value, scope);
2791
- }
2792
- return displayTexts[language] || displayTexts[this.defaultLanguage] || value;
2484
+ // src/lib/salaryRange.ts
2485
+ var CurrencyEnum2 = shared_pickle_output_latest_exports.CurrencyEnum;
2486
+ function salaryRange(salary, showUnitText = true) {
2487
+ if (!salary) return null;
2488
+ let min = salary.minValue;
2489
+ let max = salary.maxValue;
2490
+ let single = salary.singleValue;
2491
+ let value = salary.value;
2492
+ let unitText = "YEAR";
2493
+ const signs = {
2494
+ [CurrencyEnum2.Values.USD]: "$",
2495
+ [CurrencyEnum2.Values.GBP]: "\xA3",
2496
+ [CurrencyEnum2.Values.EUR]: "\u20AC"
2497
+ };
2498
+ const sign = signs[salary.currency ?? CurrencyEnum2.Values.USD];
2499
+ if (value != null && typeof value === "object") {
2500
+ min = value.minValue;
2501
+ max = value.maxValue;
2502
+ single = value.value;
2503
+ unitText = value.unitText;
2793
2504
  }
2794
- };
2505
+ if (unitText === "YEAR") unitText = " per year";
2506
+ if (unitText === "MONTH") unitText = " per month";
2507
+ if (unitText === "WEEK") unitText = " per week";
2508
+ if (unitText === "DAY") unitText = " per day";
2509
+ if (unitText === "PER_ACTIVITY") unitText = " per activity";
2510
+ if (unitText === "HOUR") unitText = " per hour";
2511
+ if (showUnitText === false) unitText = "";
2512
+ const isValid = (v) => v != null && v >= 0;
2513
+ if (!isValid(min) && !isValid(max) && !isValid(single)) return null;
2514
+ if (isValid(single)) return sign + single.toLocaleString() + unitText;
2515
+ if (min === max) return sign + min?.toLocaleString() + unitText;
2516
+ if (isValid(min) && isValid(max))
2517
+ return sign + min?.toLocaleString() + " - " + sign + max?.toLocaleString() + unitText;
2518
+ return null;
2519
+ }
2795
2520
 
2796
- // src/hooks/useDisplayText.ts
2797
- var useDisplayText = (scope, value) => {
2798
- const [displayText, setDisplayText] = useState8("");
2799
- const displayService = useMemo2(() => new DisplayTextService(), []);
2800
- useEffect8(() => {
2801
- if (!displayService || !value) {
2802
- setDisplayText("");
2803
- return;
2804
- }
2805
- void (async () => {
2806
- try {
2807
- const result = await displayService.getDisplayText(scope, value);
2808
- if (typeof result === "string") {
2809
- setDisplayText(result);
2810
- } else {
2811
- console.error("Expected a string result, but got:", result);
2812
- }
2813
- } catch (error) {
2814
- if (error instanceof DisplayTextValueNotFoundError) {
2815
- console.warn("Display text value not found:", value);
2816
- setDisplayText(String(value));
2817
- } else {
2818
- console.error("Unexpected error formatting text:", error);
2819
- setDisplayText(String(value));
2820
- }
2521
+ // src/components/company/CompanyBenefits.tsx
2522
+ import { jsx as jsx34, jsxs as jsxs21 } from "react/jsx-runtime";
2523
+ function CompanyBenefits({ benefits }) {
2524
+ if (!benefits) return null;
2525
+ return /* @__PURE__ */ jsxs21("div", { className: "flex flex-col gap-2", "data-testid": "company-benefits", children: [
2526
+ /* @__PURE__ */ jsx34("h2", { className: "break-word max-w-full text-xl font-bold text-black sm:max-w-2xl md:max-w-lg", children: "Company benefits" }),
2527
+ /* @__PURE__ */ jsx34("ul", { className: "flex flex-col gap-3", children: benefits.map((benefit, i) => /* @__PURE__ */ jsx34("li", { className: "text-base text-grey-80", children: benefit }, `${benefit}-${i}`)) })
2528
+ ] });
2529
+ }
2530
+
2531
+ // src/components/company/CompanyInformation.tsx
2532
+ import { jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
2533
+ function CompanyInformation({
2534
+ name,
2535
+ how,
2536
+ mission,
2537
+ wow,
2538
+ website
2539
+ }) {
2540
+ return /* @__PURE__ */ jsxs22("div", { className: "flex flex-col gap-2", children: [
2541
+ /* @__PURE__ */ jsxs22(
2542
+ "h2",
2543
+ {
2544
+ "data-testid": "company-name",
2545
+ className: "break-word max-w-full text-xl font-bold text-black sm:max-w-2xl md:max-w-lg",
2546
+ children: [
2547
+ "About ",
2548
+ name
2549
+ ]
2821
2550
  }
2822
- })();
2823
- }, [scope, value, displayService]);
2824
- return displayText;
2825
- };
2551
+ ),
2552
+ how && /* @__PURE__ */ jsx35("p", { "data-testid": "company-information", className: "text-base text-grey-80", children: how }),
2553
+ mission && /* @__PURE__ */ jsxs22("div", { className: "flex gap-2", children: [
2554
+ /* @__PURE__ */ jsx35("span", { children: "\u{1F680}" }),
2555
+ /* @__PURE__ */ jsxs22("p", { className: "text-base text-grey-80", children: [
2556
+ /* @__PURE__ */ jsx35("span", { className: "pr-1 font-bold", children: "Mission" }),
2557
+ mission
2558
+ ] })
2559
+ ] }),
2560
+ wow && /* @__PURE__ */ jsxs22("div", { className: "flex gap-2", children: [
2561
+ /* @__PURE__ */ jsx35("span", { children: "\u{1F31F}" }),
2562
+ /* @__PURE__ */ jsxs22("p", { className: "text-base text-grey-80", children: [
2563
+ /* @__PURE__ */ jsx35("span", { className: "pr-1 font-bold", children: "Wow Factor" }),
2564
+ wow
2565
+ ] })
2566
+ ] }),
2567
+ website && /* @__PURE__ */ jsx35("div", { className: "pt-2", children: /* @__PURE__ */ jsx35(
2568
+ LinkButton,
2569
+ {
2570
+ "data-testid": "company-website-link",
2571
+ href: website,
2572
+ target: "_blank",
2573
+ rel: "noopener noreferrer",
2574
+ children: "Website"
2575
+ }
2576
+ ) })
2577
+ ] });
2578
+ }
2826
2579
 
2827
- // src/lib/locations.ts
2828
- function formattedAddress(address) {
2829
- const { addressLocality, addressRegion, addressCountry } = address;
2830
- if (addressLocality && addressRegion) return `${addressLocality}, ${addressRegion}`;
2831
- if (addressRegion && addressCountry) return `${addressRegion}, ${addressCountry}`;
2832
- if (addressRegion) return addressRegion;
2833
- if (addressCountry) return addressCountry;
2834
- return null;
2580
+ // src/components/company/CompanyTake.tsx
2581
+ import { jsx as jsx36, jsxs as jsxs23 } from "react/jsx-runtime";
2582
+ function CompanyTake({ content, avatarSrc }) {
2583
+ if (!content) return null;
2584
+ return /* @__PURE__ */ jsxs23(
2585
+ "div",
2586
+ {
2587
+ "data-testid": "company-take",
2588
+ className: "align-center w-full justify-start rounded-2xl bg-green-90 p-6",
2589
+ children: [
2590
+ /* @__PURE__ */ jsx36("p", { className: "text-lg font-bold text-white sm:text-xl", children: "The Real Dill \u2618\uFE0F" }),
2591
+ /* @__PURE__ */ jsx36("div", { className: "mt-2 flex items-center justify-start", children: /* @__PURE__ */ jsx36("p", { className: "text-sm font-normal text-grey-10", children: content }) }),
2592
+ /* @__PURE__ */ jsxs23("div", { className: "mt-8 flex w-full items-center gap-3", children: [
2593
+ /* @__PURE__ */ jsx36(Avatar, { name: "Jon Lee", src: avatarSrc }),
2594
+ /* @__PURE__ */ jsxs23("div", { className: "flex flex-col flex-wrap items-start", children: [
2595
+ /* @__PURE__ */ jsx36("p", { className: "text-sm font-bold text-white", children: "Jon Lee, PT, DPT, OCS, FAAOMPT, MBA" }),
2596
+ /* @__PURE__ */ jsx36("p", { className: "text-xs font-normal text-grey-30", children: "Pickle co-founder" })
2597
+ ] })
2598
+ ] })
2599
+ ]
2600
+ }
2601
+ );
2835
2602
  }
2836
- function formattedJobLocation(job) {
2837
- const address = job.jobLocation && formattedAddress(job.jobLocation);
2838
- const remote = job.isRemote ? "Remote" : "";
2839
- return [address, remote].filter(Boolean).join(" | ");
2603
+
2604
+ // src/components/jobPost/JobDescription.tsx
2605
+ import { jsx as jsx37, jsxs as jsxs24 } from "react/jsx-runtime";
2606
+ function JobDescription({ description }) {
2607
+ if (!description) return null;
2608
+ return /* @__PURE__ */ jsxs24("div", { className: "flex w-full flex-col gap-2", children: [
2609
+ /* @__PURE__ */ jsx37("h3", { className: "text-xl font-bold", children: "Job Description" }),
2610
+ /* @__PURE__ */ jsx37(ReadMore, { text: description })
2611
+ ] });
2840
2612
  }
2841
2613
 
2842
- // src/types/latest/company_service_latest.ts
2843
- import { z as z2 } from "zod";
2614
+ // src/components/jobPost/JobHeader.tsx
2615
+ import { Dot as Dot2 } from "lucide-react";
2616
+ import Image2 from "next/image";
2844
2617
 
2845
- // src/types/latest/shared_pickle_output_latest.ts
2846
- var shared_pickle_output_latest_exports = {};
2847
- __export(shared_pickle_output_latest_exports, {
2848
- CurrencyEnum: () => CurrencyEnum,
2849
- DetailLevelEnum: () => DetailLevelEnum,
2850
- TypeEnum: () => TypeEnum,
2851
- UnitTextEnum: () => UnitTextEnum,
2852
- imageAssetSchema: () => imageAssetSchema,
2853
- imageSchema: () => imageSchema,
2854
- monetaryAmountSchema: () => monetaryAmountSchema,
2855
- placeSchema: () => placeSchema,
2856
- postalAddressSchema: () => postalAddressSchema,
2857
- quantitativeValueSchema: () => quantitativeValueSchema
2858
- });
2859
- import { z } from "zod";
2860
- var TypeEnum = z.enum(["IMAGE"]);
2861
- var DetailLevelEnum = z.enum(["COUNTRY", "GEO", "LOCALITY", "POSTAL_CODE", "REGION"]);
2862
- var UnitTextEnum = z.enum(["DAY", "HOUR", "MONTH", "PER_ACTIVITY", "WEEK", "YEAR"]);
2863
- var CurrencyEnum = z.enum(["EUR", "GBP", "USD"]);
2864
- var postalAddressSchema = z.object({
2865
- version: z.literal("1.0.0").default("1.0.0"),
2866
- type: z.string().describe("Document type used for schema"),
2867
- addressCountry: z.string().describe("The physical country as defined in ISO 3166 Alpha-2"),
2868
- addressRegion: z.optional(z.string()).describe("The region in which the locality is, and which is in the country."),
2869
- addressLocality: z.optional(z.string()).describe("The locality in which the street address is, and which is in the region. In the US this would be city."),
2870
- streetAddress: z.optional(z.string()).describe("The street name of the address within the locality."),
2871
- streetNumber: z.optional(z.string()).describe("The house of building number within the street."),
2872
- postalCode: z.optional(z.string()).describe("The postal code"),
2873
- description: z.optional(z.string()).describe("A descriptive string containing the full address.")
2874
- });
2875
- var placeSchema = z.object({
2876
- version: z.literal("1.0.0").default("1.0.0"),
2877
- detailLevel: z.optional(DetailLevelEnum),
2878
- latitude: z.optional(z.number()).describe("The latitude of a location."),
2879
- longitude: z.optional(z.number()).describe("The longitude of a location."),
2880
- address: z.optional(postalAddressSchema).describe("The physical place of the location")
2881
- });
2882
- var quantitativeValueSchema = z.object({
2883
- version: z.literal("1.0.0").default("1.0.0"),
2884
- type: z.string().describe("Document type used for schema"),
2885
- value: z.optional(z.number()).describe("The single value for some quantity e.g 5000, if a range is needed use minValue and maxValue. Typically used for a single salary."),
2886
- minValue: z.optional(z.number()).describe("The single minium value in a range for a quantitative_value, requires a maximum value."),
2887
- maxValue: z.optional(z.number()).describe("The maximum value in a range for a quantitative_value, requires a minimum value."),
2888
- unitText: UnitTextEnum
2889
- });
2890
- var monetaryAmountSchema = z.object({
2891
- version: z.literal("1.0.0").default("1.0.0"),
2892
- type: z.string().describe("Document type used for schema"),
2893
- singleValue: z.optional(z.number()).describe("The annualized single value for some quantity e.g 5000, if a range is needed use minValue and maxValue. Deprecated - use value.value instead."),
2894
- minValue: z.optional(z.number()).describe("The annualized single minium value in a range for a quantitative_value. Deprecated use value.minValue"),
2895
- maxValue: z.optional(z.number()).describe("The annualized maximum value in a range for a quantitative_value. Deprecated use value.maxValue"),
2896
- value: z.optional(quantitativeValueSchema).describe("The quantitative_value for a given salary"),
2897
- currency: z.optional(CurrencyEnum)
2898
- });
2899
- var imageAssetSchema = z.object({
2900
- version: z.literal("1.0.0").default("1.0.0"),
2901
- altText: z.optional(z.string()).describe("The alt text for the image"),
2902
- assetId: z.optional(z.string()).describe("The asset ID for the image"),
2903
- description: z.optional(z.string()).describe("The description for the image"),
2904
- extension: z.optional(z.string()).describe("The extension for the image"),
2905
- label: z.optional(z.string()).describe("The label for the image"),
2906
- mimeType: z.optional(z.string()).describe("The mime type for the image"),
2907
- originalFilename: z.optional(z.string()).describe("The original filename for the image"),
2908
- path: z.optional(z.string()).describe("The path for the image"),
2909
- sha1Hash: z.optional(z.string()).describe("The SHA1 hash for the image"),
2910
- size: z.optional(z.number()).describe("The size for the image"),
2911
- title: z.optional(z.string()).describe("The title for the image"),
2912
- uploadId: z.optional(z.string()).describe("The upload ID for the image"),
2913
- url: z.optional(z.string()).describe("The URL for the image")
2914
- });
2915
- var imageSchema = z.object({
2916
- version: z.literal("1.0.0").default("1.0.0"),
2917
- type: z.string().describe("Document type used for schema"),
2918
- asset: z.optional(imageAssetSchema).describe("The asset for the image")
2919
- });
2618
+ // src/components/buttons/BackButton.tsx
2619
+ import { X as X5 } from "lucide-react";
2620
+ import { useRouter } from "next/navigation";
2621
+
2622
+ // src/hooks/useWindowHistory.ts
2623
+ import { useContext as useContext2 } from "react";
2624
+
2625
+ // src/contexts/WindowHistoryProvider.tsx
2626
+ import { useSearchParams } from "next/navigation";
2627
+ import { createContext, useEffect as useEffect8, useMemo, useState as useState8 } from "react";
2628
+ import { jsx as jsx38 } from "react/jsx-runtime";
2629
+ var WindowHistoryContext = createContext({});
2630
+ function WindowHistoryProvider({ children }) {
2631
+ const [history, setHistory] = useState8([]);
2632
+ const searchParams = useSearchParams();
2633
+ useEffect8(() => {
2634
+ setHistory(
2635
+ (prev) => prev.at(-1) === window.location.href ? prev : [...prev, window.location.href]
2636
+ );
2637
+ }, [searchParams]);
2638
+ const contextValue = useMemo(() => ({ history }), [history]);
2639
+ return /* @__PURE__ */ jsx38(WindowHistoryContext.Provider, { value: contextValue, children });
2640
+ }
2920
2641
 
2921
- // src/types/latest/company_service_latest.ts
2922
- var TypeEnum2 = z2.enum(["OFFICE"]);
2923
- var CategoryEnum = z2.enum(["FINANCIAL", "HEALTH", "PROFESSIONAL_DEVELOPMENT", "WORK_LIFE_BALANCE"]);
2924
- var TitleEnum = z2.enum(["DMD", "JD", "MBA", "MD", "MHA", "MPH", "PT", "PH_D", "RN"]);
2925
- var PublishStatusEnum = z2.enum(["DRAFT", "IN_REVIEW", "PUBLISHED", "REMOVED"]);
2926
- var OfficeTypeEnum = z2.enum(["BRANCH", "HEADQUARTERS", "SATELLITE"]);
2927
- var socialMediaSchema = z2.object({
2928
- version: z2.literal("1.0.0").default("1.0.0"),
2929
- url: z2.string().describe("The link to the social media platform"),
2930
- type: z2.string().describe("The type of social media link")
2931
- });
2932
- var companyBenefitsSchema = z2.object({
2933
- version: z2.literal("1.0.0").default("1.0.0"),
2934
- type: z2.string().describe("Document type used for schema"),
2935
- title: z2.string(),
2936
- description: z2.optional(z2.string()),
2937
- category: CategoryEnum
2938
- });
2939
- var industrySchema = z2.lazy(() => z2.object({
2940
- version: z2.literal("1.0.0").default("1.0.0"),
2941
- type: z2.string().describe("Document type used for schema"),
2942
- name: z2.string(),
2943
- description: z2.optional(z2.string()).describe("A brief description of the industry"),
2944
- onetIndustryId: z2.optional(z2.string()).describe("ONET industry ID"),
2945
- parent: z2.optional(industrySchema)
2946
- }));
2947
- var jobBoardSchema = z2.object({
2948
- version: z2.literal("1.0.0").default("1.0.0"),
2949
- type: z2.string().describe("Document type used for schema"),
2950
- name: z2.string().describe("The name of the job board"),
2951
- description: z2.string().describe("A brief description of the job board"),
2952
- logo: z2.optional(imageSchema).describe("The logo of the job board"),
2953
- baseUrl: z2.optional(z2.string()).describe("The base URL of the job board")
2954
- });
2955
- var personSchema = z2.object({
2956
- version: z2.literal("1.0.0").default("1.0.0"),
2957
- type: z2.string().describe("Document type used for schema"),
2958
- firstName: z2.string().describe("The first name of the person"),
2959
- lastName: z2.string().describe("The last name of the person"),
2960
- title: z2.optional(z2.array(z2.string())).describe("The titles of the degree of the person"),
2961
- slug: z2.string().describe("person slug - should be familyname-givenname-title(s)"),
2962
- jobTitle: z2.optional(z2.string()).describe("The job title of the person"),
2963
- isDoctor: z2.optional(z2.boolean()).describe("Is the person a doctor"),
2964
- isMedical: z2.optional(z2.boolean()).describe("Are they of a medical background?"),
2965
- isScientist: z2.optional(z2.boolean()).describe("Are they a scientist?"),
2966
- image: z2.optional(imageSchema).describe("The image of the person"),
2967
- email: z2.optional(z2.string()).describe("The email of the person"),
2968
- socialMedia: z2.optional(z2.array(socialMediaSchema)).describe("The social media links of the person"),
2969
- telephone: z2.optional(z2.string()).describe("The telephone number of the person"),
2970
- url: z2.optional(z2.string()).describe("The URL of the person"),
2971
- address: z2.optional(placeSchema).describe("The address of the person")
2972
- });
2973
- var companyCareersSchema = z2.object({
2974
- version: z2.literal("1.0.0").default("1.0.0"),
2975
- type: z2.string().describe("Document type used for schema"),
2976
- careersUrl: z2.string().describe("The URL of the company careers page"),
2977
- jobBoard: z2.optional(jobBoardSchema),
2978
- jobBoardSlug: z2.optional(z2.array(z2.string())),
2979
- companyBenefits: z2.optional(z2.array(companyBenefitsSchema)).describe("What are the specific benefits of that company. The benefit is generic.")
2980
- });
2981
- var companyPhilosophySchema = z2.object({
2982
- version: z2.literal("1.0.0").default("1.0.0"),
2983
- type: z2.string().describe("Document type used for schema"),
2984
- companyMission: z2.optional(z2.string()).describe("The mission statement of the company."),
2985
- companyHow: z2.optional(z2.string()).describe("How does the company achieve its mission"),
2986
- companyCulture: z2.optional(z2.array(z2.string())).describe("What are some of the culture aspects of this company?")
2987
- });
2988
- var companyNdgSchema = z2.object({
2989
- version: z2.literal("1.0.0").default("1.0.0"),
2990
- type: z2.string().describe("Document type used for schema"),
2991
- companyWow: z2.optional(z2.string()).describe("What is the wow of this company?"),
2992
- companyNdgTake: z2.optional(z2.string()).describe("What is the NDG POV on this company?"),
2993
- companyBestFit: z2.optional(z2.array(z2.string())),
2994
- companyInterests: z2.optional(z2.array(z2.string()))
2995
- });
2996
- var foundingInformationSchema = z2.object({
2997
- version: z2.literal("1.0.0").default("1.0.0"),
2998
- type: z2.string().describe("Document type used for schema"),
2999
- foundedDate: z2.optional(z2.string()),
3000
- foundedCountry: z2.optional(z2.string()),
3001
- foundedCity: z2.optional(z2.string()),
3002
- founders: z2.optional(z2.array(personSchema))
3003
- });
3004
- var ngdMetadataSchema = z2.object({
3005
- version: z2.literal("1.0.0").default("1.0.0"),
3006
- type: z2.string().describe("Document type used for schema"),
3007
- lastScraped: z2.optional(z2.string()).describe("Date the last entity was scraped, if applicable"),
3008
- scraperVersion: z2.optional(z2.string()),
3009
- postProcessorVersion: z2.optional(z2.string()),
3010
- uniqueRunId: z2.optional(z2.string()),
3011
- postProcessorUniqueRunId: z2.optional(z2.string()),
3012
- isScrapeManaged: z2.optional(z2.boolean()).default(true)
3013
- });
3014
- var companySchema = z2.object({
3015
- version: z2.literal("1.0.0").default("1.0.0"),
3016
- id: z2.string().describe("The NDG specific id for a company. Cannot be changed."),
3017
- createdAt: z2.string().datetime().describe("Time document was created. Autoset by Sanity"),
3018
- updatedAt: z2.string().datetime().describe("Time document was created. Autoset by Sanity"),
3019
- companyName: z2.string().describe("The name of the company"),
3020
- slug: z2.string().describe("The NDG specific slug for a company."),
3021
- type: z2.string().describe("Document type used for schema"),
3022
- logo: z2.optional(imageSchema).describe("The logo of the company"),
3023
- companyWebsite: z2.optional(z2.string()).describe("The website of the company"),
3024
- socialMedia: z2.optional(z2.array(socialMediaSchema)).describe("The social media links of the company"),
3025
- brandColor: z2.optional(z2.string()).describe("The brand color of the company"),
3026
- companyCareers: z2.optional(companyCareersSchema).describe("Career Specific Information for the company."),
3027
- companyPhilosophy: z2.optional(companyPhilosophySchema).describe("Company mission,values and how the company achieves its mission."),
3028
- companyNdg: z2.optional(companyNdgSchema).describe("Next Degree specific information for the company."),
3029
- foundingInfo: z2.optional(foundingInformationSchema),
3030
- headquartersLocation: z2.optional(placeSchema),
3031
- employeeEstimate: z2.optional(z2.string()),
3032
- publishStatus: z2.optional(z2.string()),
3033
- ngdMetadata: z2.optional(ngdMetadataSchema)
3034
- });
3035
- var officeSchema = z2.object({
3036
- version: z2.literal("1.0.0").default("1.0.0"),
3037
- type: z2.string().describe("Document type used for schema"),
3038
- name: z2.string().describe("Name or nickname for the office (e.g., 'NYC HQ', 'West Coast Branch')"),
3039
- officeType: OfficeTypeEnum,
3040
- companyId: z2.optional(companySchema),
3041
- geoLocation: z2.optional(placeSchema).describe("Geographical location details: coordinates + postal address"),
3042
- createdAt: z2.optional(z2.string()),
3043
- updatedAt: z2.optional(z2.string())
3044
- });
2642
+ // src/hooks/useWindowHistory.ts
2643
+ function useWindowHistory() {
2644
+ const windowHistoryContext = useContext2(WindowHistoryContext);
2645
+ return windowHistoryContext;
2646
+ }
2647
+
2648
+ // src/components/buttons/BackButton.tsx
2649
+ import { jsx as jsx39 } from "react/jsx-runtime";
2650
+ function BackButton({ acceptedRoutes, fallbackHref, className, ...props }) {
2651
+ const { history } = useWindowHistory();
2652
+ const router = useRouter();
2653
+ const isAcceptedRoute = (r) => !!acceptedRoutes?.find((route) => new RegExp("^" + route + "$", "i").test(new URL(r).pathname));
2654
+ const goBack = () => {
2655
+ const previous = history[history.length - 2];
2656
+ if (history.length > 1 && isAcceptedRoute(previous)) {
2657
+ router.back();
2658
+ } else {
2659
+ router.push(fallbackHref ?? "/");
2660
+ }
2661
+ };
2662
+ return /* @__PURE__ */ jsx39(
2663
+ Icon,
2664
+ {
2665
+ "aria-label": "back button",
2666
+ variant: "transparent",
2667
+ size: "small",
2668
+ onClick: goBack,
2669
+ className,
2670
+ ...props,
2671
+ children: /* @__PURE__ */ jsx39(X5, {})
2672
+ }
2673
+ );
2674
+ }
2675
+
2676
+ // src/lib/icons.ts
2677
+ import {
2678
+ Banknote,
2679
+ Bell,
2680
+ BriefcaseBusiness,
2681
+ Building,
2682
+ Building2,
2683
+ CircleUser,
2684
+ CircleUserRound,
2685
+ Clock2,
2686
+ Contact,
2687
+ GalleryVerticalEnd,
2688
+ Home,
2689
+ KeyRound,
2690
+ Layers,
2691
+ LifeBuoy,
2692
+ MapPin,
2693
+ MessageSquareDot,
2694
+ Settings,
2695
+ SquareKanban,
2696
+ Users,
2697
+ Wallet
2698
+ } from "lucide-react";
2699
+ var iconMap = {
2700
+ house: Home,
2701
+ layers: Layers,
2702
+ users: Users,
2703
+ settings: Settings,
2704
+ building: Building,
2705
+ bell: Bell,
2706
+ wallet: Wallet,
2707
+ contact: Contact,
2708
+ banknote: Banknote,
2709
+ "message-square-dot": MessageSquareDot,
2710
+ "life-buoy": LifeBuoy,
2711
+ "building-2": Building2,
2712
+ "gallery-vertical-end": GalleryVerticalEnd,
2713
+ "square-kanban": SquareKanban,
2714
+ "briefcase-business": BriefcaseBusiness,
2715
+ "circle-user": CircleUser,
2716
+ "key-round": KeyRound,
2717
+ "clock-2": Clock2,
2718
+ "circle-user-round": CircleUserRound,
2719
+ "map-pin": MapPin
2720
+ };
2721
+
2722
+ // src/components/jobPost/JobHeader.tsx
2723
+ import { jsx as jsx40, jsxs as jsxs25 } from "react/jsx-runtime";
2724
+ function JobHeader({
2725
+ title,
2726
+ subtitles,
2727
+ standalone,
2728
+ bannerSrc,
2729
+ avatarSrc,
2730
+ avatarName,
2731
+ avatarHref,
2732
+ backFallbackHref,
2733
+ backAcceptedRoutes,
2734
+ actions,
2735
+ tags
2736
+ }) {
2737
+ const renderIcon = (icon) => {
2738
+ const Icon2 = iconMap[icon];
2739
+ return /* @__PURE__ */ jsx40(Icon2, { size: 18 });
2740
+ };
2741
+ return /* @__PURE__ */ jsxs25(
2742
+ "div",
2743
+ {
2744
+ "data-testid": "job-header-root",
2745
+ className: cn(
2746
+ "-mt-8 flex w-full flex-col items-center justify-between gap-6 md:-mt-0",
2747
+ !standalone && "rounded-3xl"
2748
+ ),
2749
+ children: [
2750
+ !standalone && /* @__PURE__ */ jsxs25("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", children: [
2751
+ /* @__PURE__ */ jsx40(
2752
+ Image2,
2753
+ {
2754
+ className: "h-full w-full rounded-t-3xl object-cover",
2755
+ src: bannerSrc,
2756
+ alt: "job banner",
2757
+ fill: true
2758
+ }
2759
+ ),
2760
+ /* @__PURE__ */ jsx40(
2761
+ BackButton,
2762
+ {
2763
+ acceptedRoutes: backAcceptedRoutes,
2764
+ fallbackHref: backFallbackHref,
2765
+ className: "absolute right-2 top-2 flex items-center justify-center text-white sm:hidden",
2766
+ "data-testid": "job-header-back-button"
2767
+ }
2768
+ ),
2769
+ /* @__PURE__ */ jsx40(
2770
+ "div",
2771
+ {
2772
+ className: "absolute left-4 top-8 md:left-6 md:top-16 lg:top-24",
2773
+ "data-testid": "job-header-avatar",
2774
+ children: /* @__PURE__ */ jsx40(
2775
+ Avatar,
2776
+ {
2777
+ size: "large",
2778
+ target: "_blank",
2779
+ href: avatarHref,
2780
+ name: avatarName,
2781
+ src: avatarSrc,
2782
+ rel: "noopener noreferrer"
2783
+ }
2784
+ )
2785
+ }
2786
+ )
2787
+ ] }),
2788
+ /* @__PURE__ */ jsxs25("div", { className: "flex w-full flex-col items-start justify-start gap-4 px-6", children: [
2789
+ /* @__PURE__ */ jsxs25("div", { className: "flex flex-col md:flex-row", children: [
2790
+ standalone && /* @__PURE__ */ jsx40("div", { className: "-mt-4 mr-4 md:mt-0", "data-testid": "job-header-avatar", children: /* @__PURE__ */ jsx40(
2791
+ Avatar,
2792
+ {
2793
+ size: "large",
2794
+ target: "_blank",
2795
+ href: avatarHref,
2796
+ name: avatarName,
2797
+ src: avatarSrc,
2798
+ rel: "noopener noreferrer"
2799
+ }
2800
+ ) }),
2801
+ /* @__PURE__ */ jsx40("div", { className: "prose mt-4 flex w-full items-center text-grey-80 lg:prose-lg", children: subtitles?.map((subtitle, i) => /* @__PURE__ */ jsxs25(
2802
+ "div",
2803
+ {
2804
+ "data-testid": `job-header-subtitle-${i}`,
2805
+ className: "flex items-center",
2806
+ children: [
2807
+ subtitle,
2808
+ i < subtitles.length - 1 && /* @__PURE__ */ jsx40(Dot2, { className: "mx-1 shrink-0", size: 10 })
2809
+ ]
2810
+ },
2811
+ subtitle
2812
+ )) })
2813
+ ] }),
2814
+ /* @__PURE__ */ jsxs25(
2815
+ "div",
2816
+ {
2817
+ "data-testid": "job-header-content",
2818
+ className: "mt-2 flex w-full flex-row flex-wrap items-center justify-between gap-1",
2819
+ children: [
2820
+ /* @__PURE__ */ jsx40(
2821
+ "h2",
2822
+ {
2823
+ "data-testid": "job-header-title",
2824
+ className: "break-word max-w-full text-2xl font-bold text-black sm:max-w-2xl md:max-w-lg",
2825
+ children: title
2826
+ }
2827
+ ),
2828
+ !!actions && /* @__PURE__ */ jsx40(
2829
+ "div",
2830
+ {
2831
+ className: "flex w-full justify-end gap-2 md:w-auto",
2832
+ "data-testid": "job-header-actions",
2833
+ children: actions
2834
+ }
2835
+ )
2836
+ ]
2837
+ }
2838
+ ),
2839
+ /* @__PURE__ */ jsx40(
2840
+ "div",
2841
+ {
2842
+ "data-testid": "job-header-tags",
2843
+ className: "flex flex-row flex-wrap items-center justify-start gap-2",
2844
+ children: tags?.map(({ name, label, icon }) => /* @__PURE__ */ jsxs25(
2845
+ Chip_default,
2846
+ {
2847
+ size: "small",
2848
+ variant: "neutral",
2849
+ "aria-label": name,
2850
+ "data-testid": `job-header-tag-${name}`,
2851
+ children: [
2852
+ renderIcon(icon),
2853
+ /* @__PURE__ */ jsx40("span", { children: label })
2854
+ ]
2855
+ },
2856
+ name
2857
+ ))
2858
+ }
2859
+ )
2860
+ ] })
2861
+ ]
2862
+ }
2863
+ );
2864
+ }
3045
2865
 
3046
- // src/types/latest/job_posting_service_latest.ts
3047
- import { z as z3 } from "zod";
3048
- var TypeEnum3 = z3.enum(["JOB_POST"]);
3049
- var JobLocationTypeEnum = z3.enum(["FLOAT", "HYBRID", "ONSITE", "REMOTE"]);
3050
- var EmploymentTypeEnum = z3.enum(["CONTRACT", "FULL_TIME", "INTERNSHIP", "OTHER", "PART_TIME", "PER_DIEM", "TEMPORARY"]);
3051
- var EmploymentLevelEnum = z3.enum(["DIRECTOR", "ENTRY_LEVEL", "EXECUTIVE", "EXPERIENCED", "INTERN", "MANAGER"]);
3052
- var JobFunctionEnum = z3.enum(["CLINICAL_RESEARCH", "CUSTOMER_SUCCESS", "DATA_ANALYTICS", "FINANCE_AND_AUDIT", "MARKETING", "OPERATIONS", "PEOPLE_HUMAN_RESOURCES", "PRODUCT_AND_TECH", "QUALITY_ASSURANCE_AND_OUTCOMES", "SALES_AND_BUSINESS_DEVELOPMENT", "STRATEGY_AND_CONSULTING"]);
3053
- var PublishStatusEnum2 = z3.enum(["DRAFT", "IN_REVIEW", "PUBLISHED", "REMOVED"]);
3054
- var BestFitEnum = z3.enum(["DENTIST", "DIETICIAN", "DOULA", "MEDICAL_ASSISTANT", "MIDWIFE", "NURSE", "OCCUPATIONAL_THERAPIST", "PHARMACIST", "PHYSICAL_THERAPIST", "PHYSICIAN", "PHYSICIAN_ASSISTANT", "PSYCHOLOGIST", "RADIOLOGIST", "SOCIAL_WORKER", "SPEECH_LANGUAGE_PATHOLOGIST", "SURGEON"]);
3055
- var ClinicalLicenseEnum = z3.enum(["CNA", "CNM", "CNS", "COTA", "CRNA", "LPN", "LVN", "NP", "OT", "PT", "PTA", "RN"]);
3056
- var ShiftEnum = z3.enum(["DAY", "EIGHT_HOUR", "EVENING", "FLEXIBLE", "MID_SHIFT", "MONDAY_TO_FRIDAY", "NIGHT", "ON_CALL", "TEN_HOUR", "TWELVE_HOUR", "WEEKENDS"]);
3057
- var ClinicalSettingEnum = z3.enum(["ACUTE_CARE", "AMBULATORY_SURGERY_CENTER", "CLINIC", "HOME_HEALTH", "HOSPITAL", "INPATIENT", "LONG_TERM_CARE", "MED_SPA", "NURSING_HOME", "OFFICE", "OUTPATIENT", "PRIVATE_PRACTICE", "REHAB_CENTER", "SCHOOL", "SKILLED_NURSING_FACILITY"]);
3058
- var ClinicalSpecialtyEnum = z3.enum(["ANESTHESIOLOGY", "CARDIOLOGY", "CASE_MANAGEMENT", "CHRONIC_PAIN", "CLINICAL_ELECTROPHYSIOLOGY", "CRITICAL_AND_ACUTE_CARE", "DERMATOLOGY", "DIALYSIS", "EMERGENCY_MEDICINE", "ENDOCRINOLOGY", "ERGONOMICS", "FEEDING_EATING_AND_SWALLOWING", "GASTROENTEROLOGY", "GERIATRICS", "HAND_THERAPY", "HEMATOLOGY", "HOLISTIC_MEDICINE", "INFORMATICS", "INTERNAL_MEDICINE", "LABOR_AND_DELIVERY", "MANUAL_THERAPY", "MED_SURG", "MENTAL_HEALTH", "NEPHROLOGY", "NEUROLOGY", "ONCOLOGY", "ORTHOPEDICS", "OTOLARYNGOLOGY", "PEDIATRICS", "PHYSICAL_AND_REHABILITATION_MEDICINE", "PLASTIC_SURGERY", "PRIMARY_CARE", "PSYCHIATRY", "PULMONOLOGY", "RADIOLOGY", "SENSORY", "SPORTS", "SURGERY", "TRAUMA_MEDICINE", "URGENT_CARE", "UROLOGY", "VISION", "WOMENS_HEALTH", "WOUND_AND_BURN_CARE"]);
3059
- var jobPostSchema = z3.object({
3060
- version: z3.literal("1.0.0").default("1.0.0"),
3061
- id: z3.string().describe("The NDG specific id for a job posting in form of ndg-<company_slug>-<unique-job-id>. Serves as unique identifier. Cannot be changed."),
3062
- type: z3.string().describe("Document type used for schema"),
3063
- createdAt: z3.string().datetime().describe("Time document was created. Autoset by Sanity"),
3064
- updatedAt: z3.string().datetime().describe("Time document was created. Autoset by Sanity"),
3065
- dateAdded: z3.optional(z3.string().datetime()).describe("The date the job was added to the platform"),
3066
- datePosted: z3.optional(z3.string().datetime()).describe("The date the job was published for public viewing"),
3067
- dateRemoved: z3.optional(z3.string().datetime()).describe("The date the job was removed from public viewing"),
3068
- validThrough: z3.optional(z3.string().datetime()).describe("The date the job posting is valid through. After this date it will be removed from public viewing"),
3069
- vacancyCount: z3.optional(z3.number().int()).describe("The number of vacancies for a given job posting"),
3070
- clientId: z3.string().describe("The ID assigned by the client to a job - normally the same as the GH / Lever / Ashby ID or internal ID"),
3071
- url: z3.string().describe("The URL of the job to be displayed for users to apply with. Direct job link."),
3072
- title: z3.string().describe("The title of the job post"),
3073
- description: z3.string().describe("The description of the job post saved as markdown. Used for rendering the job description."),
3074
- richTextDescription: z3.optional(z3.string()).describe("The description of the job post saved as rich text"),
3075
- isClinical: z3.boolean().default(false).describe("Denotes if a job posting is clinical in nature or not. A role is clinical if it requires direct clinical patient care."),
3076
- isRemote: z3.boolean().default(false).describe("Denotes if a job posting is remote in nature. For a posting to be 'remote' it must be 100% remote (e.g hybrid roles would denote this to false)."),
3077
- isVerified: z3.boolean().default(false).describe("Denotes if a job posting has been manually verified - and thus ALL fields can be considered accurate. Can be used for DS training."),
3078
- isDirectApply: z3.boolean().default(false).describe("Denotes if a job posting url is direct apply. To be direct apply a user must be able to apply to the role without logging in and under 2 clicks."),
3079
- jobLocationType: z3.optional(z3.array(JobLocationTypeEnum)),
3080
- employmentType: z3.optional(z3.array(EmploymentTypeEnum)),
3081
- employmentLevel: z3.optional(EmploymentLevelEnum),
3082
- jobFunction: z3.optional(JobFunctionEnum),
3083
- publishStatus: PublishStatusEnum2,
3084
- bestFit: z3.optional(z3.array(BestFitEnum)),
3085
- clinicalLicense: z3.optional(z3.array(ClinicalLicenseEnum)),
3086
- shift: z3.optional(z3.array(ShiftEnum)),
3087
- clinicalSetting: z3.optional(z3.array(ClinicalSettingEnum)),
3088
- clinicalSpecialty: z3.optional(z3.array(ClinicalSpecialtyEnum)),
3089
- estimatedSalary: z3.optional(monetaryAmountSchema).describe("Determines the estimated salary for a given job posting"),
3090
- jobLocation: z3.optional(postalAddressSchema).describe("Determines the primary physical location where the job is to be performed. For remote roles, use applicantLocationRequirements"),
3091
- applicableOffices: z3.optional(z3.array(officeSchema)).describe("The physical location(s) in which employees may be located for to be eligible for the job. Used in conjunction with job_location_type."),
3092
- applicantLocationRequirements: z3.optional(z3.array(placeSchema)).describe("The geographic location(s) in which employees may be located for to be eligible for the job. The job description must clearly state that the applicant may be located in certain geographical location(s). This property is required if applicants may be located in one or more geographic locations and the job is 100% remote."),
3093
- hiringOrganization: z3.optional(companySchema).describe("The organization that is hiring for the role")
3094
- });
2866
+ // src/components/jobPost/JobPost.tsx
2867
+ import * as DateFns from "date-fns";
3095
2868
 
3096
- // src/types/latest/custom/company_service_sanity.ts
3097
- import { z as z5 } from "zod";
2869
+ // src/hooks/useDisplayText.ts
2870
+ import { useEffect as useEffect9, useMemo as useMemo2, useState as useState9 } from "react";
2871
+
2872
+ // src/lib/mappings.ts
2873
+ var employmentTypeDisplayText = {
2874
+ FULL_TIME: {
2875
+ en: "Full Time"
2876
+ },
2877
+ INTERNSHIP: {
2878
+ en: "Internship"
2879
+ },
2880
+ OTHER: {
2881
+ en: "Other"
2882
+ },
2883
+ PART_TIME: {
2884
+ en: "Part Time"
2885
+ },
2886
+ PER_DIEM: {
2887
+ en: "Per-Diem"
2888
+ },
2889
+ TEMPORARY: {
2890
+ en: "Temporary"
2891
+ },
2892
+ CONTRACT: {
2893
+ en: "Contract"
2894
+ }
2895
+ };
2896
+ var unitTextDisplayText = {
2897
+ DAY: {
2898
+ en: "Day"
2899
+ },
2900
+ HOUR: {
2901
+ en: "Hour"
2902
+ },
2903
+ MONTH: {
2904
+ en: "Month"
2905
+ },
2906
+ PER_ACTIVITY: {
2907
+ en: "Per Activity"
2908
+ },
2909
+ WEEK: {
2910
+ en: "Week"
2911
+ },
2912
+ YEAR: {
2913
+ en: "Year"
2914
+ }
2915
+ };
2916
+ var currencyDisplayText = {
2917
+ EUR: {
2918
+ en: "\u20AC"
2919
+ },
2920
+ GBP: {
2921
+ en: "\xA3"
2922
+ },
2923
+ USD: {
2924
+ en: "$"
2925
+ }
2926
+ };
2927
+ var employmentLevelDisplayText = {
2928
+ DIRECTOR: {
2929
+ en: "Director"
2930
+ },
2931
+ ENTRY_LEVEL: {
2932
+ en: "Entry Level"
2933
+ },
2934
+ EXECUTIVE: {
2935
+ en: "Executive"
2936
+ },
2937
+ EXPERIENCED: {
2938
+ en: "Experienced"
2939
+ },
2940
+ INTERN: {
2941
+ en: "Intern"
2942
+ },
2943
+ MANAGER: {
2944
+ en: "Manager"
2945
+ }
2946
+ };
2947
+ var jobFunctionDisplayText = {
2948
+ CLINICAL_RESEARCH: {
2949
+ en: "Clinical Research"
2950
+ },
2951
+ CUSTOMER_SUCCESS: {
2952
+ en: "Customer Success"
2953
+ },
2954
+ DATA_ANALYTICS: {
2955
+ en: "Data Analytics"
2956
+ },
2957
+ FINANCE_AND_AUDIT: {
2958
+ en: "Finance and Audit"
2959
+ },
2960
+ MARKETING: {
2961
+ en: "Marketing"
2962
+ },
2963
+ OPERATIONS: {
2964
+ en: "Operations"
2965
+ },
2966
+ PEOPLE_HUMAN_RESOURCES: {
2967
+ en: "People Human Resources"
2968
+ },
2969
+ PRODUCT_AND_TECH: {
2970
+ en: "Product and Tech"
2971
+ },
2972
+ QUALITY_ASSURANCE_AND_OUTCOMES: {
2973
+ en: "Quality Assurance and Outcomes"
2974
+ },
2975
+ SALES_AND_BUSINESS_DEVELOPMENT: {
2976
+ en: "Sales and Business Development"
2977
+ },
2978
+ STRATEGY_AND_CONSULTING: {
2979
+ en: "Strategy and Consulting"
2980
+ }
2981
+ };
2982
+ var bestFitDisplayText = {
2983
+ DENTIST: {
2984
+ en: "Dentist"
2985
+ },
2986
+ DIETICIAN: {
2987
+ en: "Dietician"
2988
+ },
2989
+ DOULA: {
2990
+ en: "Doula"
2991
+ },
2992
+ MEDICAL_ASSISTANT: {
2993
+ en: "Medical Assistant"
2994
+ },
2995
+ MIDWIFE: {
2996
+ en: "Midwife"
2997
+ },
2998
+ NURSE: {
2999
+ en: "Nurse"
3000
+ },
3001
+ OCCUPATIONAL_THERAPIST: {
3002
+ en: "Occupational Therapist"
3003
+ },
3004
+ PHARMACIST: {
3005
+ en: "Pharmacist"
3006
+ },
3007
+ PHYSICAL_THERAPIST: {
3008
+ en: "Physical Therapist"
3009
+ },
3010
+ PHYSICIAN: {
3011
+ en: "Physician"
3012
+ },
3013
+ PHYSICIAN_ASSISTANT: {
3014
+ en: "Physician Assistant"
3015
+ },
3016
+ PSYCHOLOGIST: {
3017
+ en: "Psychologist"
3018
+ },
3019
+ RADIOLOGIST: {
3020
+ en: "Radiologist"
3021
+ },
3022
+ SOCIAL_WORKER: {
3023
+ en: "Social Worker"
3024
+ },
3025
+ SPEECH_LANGUAGE_PATHOLOGIST: {
3026
+ en: "Speech Language Pathologist"
3027
+ },
3028
+ SURGEON: {
3029
+ en: "Surgeon"
3030
+ }
3031
+ };
3032
+ var clinicalSpecialtyDisplayText = {
3033
+ ANESTHESIOLOGY: {
3034
+ en: "Anesthesiology"
3035
+ },
3036
+ CARDIOLOGY: {
3037
+ en: "Cardiology"
3038
+ },
3039
+ CARDIOVASCULAR_AND_PULMONARY: {
3040
+ en: "Cardiovascular and Pulmonary"
3041
+ },
3042
+ CASE_MANAGEMENT: {
3043
+ en: "Case Management"
3044
+ },
3045
+ CHRONIC_PAIN: {
3046
+ en: "Chronic Pain"
3047
+ },
3048
+ CLINICAL_ELECTROPHYSIOLOGY: {
3049
+ en: "Clinical Electrophysiology"
3050
+ },
3051
+ CRITICAL_AND_ACUTE_CARE: {
3052
+ en: "Critical and Acute Care"
3053
+ },
3054
+ DERMATOLOGY: {
3055
+ en: "Dermatology"
3056
+ },
3057
+ DIALYSIS: {
3058
+ en: "Dialysis"
3059
+ },
3060
+ EMERGENCY_MEDICINE: {
3061
+ en: "Emergency Medicine"
3062
+ },
3063
+ ENDOCRINOLOGY: {
3064
+ en: "Endocrinology"
3065
+ },
3066
+ ERGONOMICS: {
3067
+ en: "Ergonomics"
3068
+ },
3069
+ FEEDING_EATING_AND_SWALLOWING: {
3070
+ en: "Feeding, Eating, and Swallowing"
3071
+ },
3072
+ GASTROENTEROLOGY: {
3073
+ en: "Gastroenterology"
3074
+ },
3075
+ GERIATRICS: {
3076
+ en: "Geriatrics"
3077
+ },
3078
+ HAND_THERAPY: {
3079
+ en: "Hand Therapy"
3080
+ },
3081
+ HEMATOLOGY: {
3082
+ en: "Hematology"
3083
+ },
3084
+ HOLISTIC_MEDICINE: {
3085
+ en: "Holistic Medicine"
3086
+ },
3087
+ INFORMATICS: {
3088
+ en: "Informatics"
3089
+ },
3090
+ INTERNAL_MEDICINE: {
3091
+ en: "Internal Medicine"
3092
+ },
3093
+ LABOR_AND_DELIVERY: {
3094
+ en: "Labor and Delivery"
3095
+ },
3096
+ MANUAL_THERAPY: {
3097
+ en: "Manual Therapy"
3098
+ },
3099
+ MED_SURG: {
3100
+ en: "Medical-Surgical"
3101
+ },
3102
+ MENTAL_HEALTH: {
3103
+ en: "Mental Health"
3104
+ },
3105
+ NEPHROLOGY: {
3106
+ en: "Nephrology"
3107
+ },
3108
+ NEUROLOGY: {
3109
+ en: "Neurology"
3110
+ },
3111
+ ONCOLOGY: {
3112
+ en: "Oncology"
3113
+ },
3114
+ ORTHOPEDICS: {
3115
+ en: "Orthopedics"
3116
+ },
3117
+ OTOLARYNGOLOGY: {
3118
+ en: "Otolaryngology"
3119
+ },
3120
+ PEDIATRICS: {
3121
+ en: "Pediatrics"
3122
+ },
3123
+ PHYSICAL_AND_REHABILITATION_MEDICINE: {
3124
+ en: "Physical and Rehabilitation Medicine"
3125
+ },
3126
+ PLASTIC_SURGERY: {
3127
+ en: "Plastic Surgery"
3128
+ },
3129
+ PRIMARY_CARE: {
3130
+ en: "Primary Care"
3131
+ },
3132
+ PSYCHIATRY: {
3133
+ en: "Psychiatry"
3134
+ },
3135
+ PULMONOLOGY: {
3136
+ en: "Pulmonology"
3137
+ },
3138
+ RADIOLOGY: {
3139
+ en: "Radiology"
3140
+ },
3141
+ SENSORY: {
3142
+ en: "Sensory"
3143
+ },
3144
+ SPORTS: {
3145
+ en: "Sports"
3146
+ },
3147
+ SURGERY: {
3148
+ en: "Surgery"
3149
+ },
3150
+ TRANSPLANT_SURGERY: {
3151
+ en: "Transplant Surgery"
3152
+ },
3153
+ TRAUMA_MEDICINE: {
3154
+ en: "Trauma Medicine"
3155
+ },
3156
+ URGENT_CARE: {
3157
+ en: "Urgent Care"
3158
+ },
3159
+ UROLOGY: {
3160
+ en: "Urology"
3161
+ },
3162
+ VISION: {
3163
+ en: "Vision"
3164
+ },
3165
+ WOMENS_HEALTH: {
3166
+ en: "Women's Health"
3167
+ },
3168
+ WOUND_AND_BURN_CARE: {
3169
+ en: "Wound and Burn Care"
3170
+ },
3171
+ WOUND_MANAGEMENT: {
3172
+ en: "Wound Management"
3173
+ }
3174
+ };
3175
+ var shiftDisplayText = {
3176
+ TEN_HOUR: {
3177
+ en: "10 Hour"
3178
+ },
3179
+ TWELVE_HOUR: {
3180
+ en: "12 Hour"
3181
+ },
3182
+ EIGHT_HOUR: {
3183
+ en: "8 Hour"
3184
+ },
3185
+ DAY: {
3186
+ en: "Day"
3187
+ },
3188
+ EVENING: {
3189
+ en: "Evening"
3190
+ },
3191
+ FLEXIBLE: {
3192
+ en: "Flexible"
3193
+ },
3194
+ MID_SHIFT: {
3195
+ en: "Mid Shift"
3196
+ },
3197
+ MONDAY_TO_FRIDAY: {
3198
+ en: "Monday to Friday"
3199
+ },
3200
+ NIGHT: {
3201
+ en: "Night"
3202
+ },
3203
+ ON_CALL: {
3204
+ en: "On Call"
3205
+ },
3206
+ WEEKENDS: {
3207
+ en: "Weekends"
3208
+ }
3209
+ };
3210
+ var clinicalSettingDisplayText = {
3211
+ ACUTE_CARE: {
3212
+ en: "Acute Care"
3213
+ },
3214
+ AMBULATORY_SURGERY_CENTER: {
3215
+ en: "Ambulatory Surgery Center"
3216
+ },
3217
+ CLINIC: {
3218
+ en: "Clinic"
3219
+ },
3220
+ HOME_HEALTH: {
3221
+ en: "Home Health"
3222
+ },
3223
+ HOSPITAL: {
3224
+ en: "Hospital"
3225
+ },
3226
+ INPATIENT: {
3227
+ en: "Inpatient"
3228
+ },
3229
+ LONG_TERM_CARE: {
3230
+ en: "Long Term Care"
3231
+ },
3232
+ MED_SPA: {
3233
+ en: "Med Spa"
3234
+ },
3235
+ NURSING_HOME: {
3236
+ en: "Nursing Home"
3237
+ },
3238
+ OFFICE: {
3239
+ en: "Office"
3240
+ },
3241
+ OUTPATIENT: {
3242
+ en: "Outpatient"
3243
+ },
3244
+ PRIVATE_PRACTICE: {
3245
+ en: "Private Practice"
3246
+ },
3247
+ REHAB_CENTER: {
3248
+ en: "Rehab Center"
3249
+ },
3250
+ SCHOOL: {
3251
+ en: "School"
3252
+ },
3253
+ SKILLED_NURSING_FACILITY: {
3254
+ en: "Skilled Nursing Facility"
3255
+ }
3256
+ };
3257
+ var defaultMappings = {
3258
+ employmentType: employmentTypeDisplayText,
3259
+ unitText: unitTextDisplayText,
3260
+ currency: currencyDisplayText,
3261
+ employmentLevel: employmentLevelDisplayText,
3262
+ jobFunction: jobFunctionDisplayText,
3263
+ bestFit: bestFitDisplayText,
3264
+ clinicalSpecialty: clinicalSpecialtyDisplayText,
3265
+ clinicalSetting: clinicalSettingDisplayText,
3266
+ shift: shiftDisplayText
3267
+ };
3098
3268
 
3099
- // src/types/latest/custom/custom_sanity_models.ts
3100
- import { z as z4 } from "zod";
3101
- var sanityReferenceSchema = z4.object({
3102
- _ref: z4.string(),
3103
- _type: z4.string(),
3104
- _key: z4.optional(z4.string())
3105
- });
3106
- var sanitySlugSchema = z4.object({
3107
- current: z4.string(),
3108
- _type: z4.string(),
3109
- _key: z4.optional(z4.string())
3110
- });
3269
+ // src/types/displayText.errors.tsx
3270
+ var DisplayTextScopeNotFoundError = class extends Error {
3271
+ constructor(scope) {
3272
+ super(`No display text mapping found for scope: ${scope}`);
3273
+ this.name = "DisplayTextScopeNotFoundError";
3274
+ }
3275
+ };
3276
+ var DisplayTextValueNotFoundError = class extends Error {
3277
+ constructor(value, scope) {
3278
+ super(`No display text found for value: '${value}' in scope: '${scope}'`);
3279
+ this.name = "DisplayTextValueNotFoundError";
3280
+ }
3281
+ };
3111
3282
 
3112
- // src/types/latest/custom/company_service_sanity.ts
3113
- var foundingInformationSchema2 = foundingInformationSchema.extend({
3114
- _type: z5.string().describe("Document type used within sanity").default("companyFounding"),
3115
- founders: z5.optional(z5.union([z5.array(personSchema), z5.array(sanityReferenceSchema)])).nullable(),
3116
- founderList: z5.optional(z5.union([z5.array(personSchema), z5.array(sanityReferenceSchema)])).nullable()
3117
- }).omit({ type: true }).strict().transform((data) => ({
3118
- ...data,
3119
- type: data._type,
3120
- founders: data.founders || data.founderList || void 0
3121
- })).transform(({ _type, founderList, ...rest }) => rest);
3122
- var companyNdgSchema2 = companyNdgSchema.extend({
3123
- _type: z5.string().describe("Document type used within sanity").default("companyNDG"),
3124
- companyNDGTake: z5.string().nullable().describe("What is the NDG POV on this company?")
3125
- }).omit({ type: true }).strict().transform((data) => ({
3126
- ...data,
3127
- type: data._type,
3128
- companyNdgTake: data.companyNDGTake
3129
- })).transform(({ _type, companyNDGTake, ...rest }) => rest);
3130
- var ngdMetadataSchema2 = ngdMetadataSchema.extend({
3131
- _type: z5.string().describe("Document type used within sanity").default("ndgMetadata")
3132
- }).omit({ type: true }).transform((data) => ({
3133
- ...data,
3134
- type: data._type
3135
- })).transform(({ _type, ...rest }) => rest);
3136
- var companyPhilosophySchema2 = companyPhilosophySchema.extend({
3137
- _type: z5.string().describe("Document type used within sanity").default("companyPhilosophy")
3138
- }).omit({ type: true }).strict().transform((data) => ({
3139
- ...data,
3140
- type: data._type
3141
- })).transform(({ _type, ...rest }) => rest);
3142
- var companyCareersSchema2 = companyCareersSchema.extend({
3143
- _type: z5.string().describe("Document type used within sanity").default("companyCareers"),
3144
- companyBenefits: z5.optional(z5.array(
3145
- z5.union([companyBenefitsSchema, sanityReferenceSchema])
3146
- )).nullable().describe("What are the specific benefits of that company. The benefit is generic."),
3147
- jobBoard: z5.union([jobBoardSchema, sanityReferenceSchema]).nullable(),
3148
- jobBoardSlug: z5.optional(z5.union([z5.array(z5.string()), z5.array(sanitySlugSchema)]))
3149
- }).omit({ type: true }).strict().transform((data) => ({
3150
- ...data,
3151
- type: data._type
3152
- })).transform(({ _type, ...rest }) => rest);
3153
- var companySchema2 = companySchema.extend({
3154
- _id: z5.string().describe("The NDG specific id for a job posting in form of ndg-<company_slug>-<unique-job-id>. Serves as unique identifier. Cannot be changed."),
3155
- _rev: z5.string().nullable().describe("Revision number"),
3156
- _type: z5.string().describe("Document type used within sanity").default("company"),
3157
- _createdAt: z5.string().datetime().describe("Time document was created. Autoset by Sanity"),
3158
- _updatedAt: z5.string().datetime().describe("Time document was created. Autoset by Sanity"),
3159
- companyCareers: companyCareersSchema2.nullable().describe("Career Specific Information for the company."),
3160
- companyPhilosophy: companyPhilosophySchema2.nullable().describe("Company mission,values and how the company achieves its mission."),
3161
- companyNDG: companyNdgSchema2.nullable().describe("Next Degree specific information for the company."),
3162
- foundingInfo: foundingInformationSchema2.nullable(),
3163
- slug: z5.union([z5.string(), sanitySlugSchema]).describe("The NDG specific slug for a company."),
3164
- ndgMetadata: ngdMetadataSchema2.nullable(),
3165
- logo: z5.union([imageSchema, z5.record(z5.any())]).nullable().describe("The logo of the company"),
3166
- //Deprecated Models
3167
- logoImageURL: z5.optional(z5.string()).describe("The logo of the company"),
3168
- industryList: z5.optional(z5.array(sanityReferenceSchema)).describe("The industry of the company")
3169
- }).omit({ type: true, id: true, createdAt: true, updatedAt: true }).strict().transform((data) => ({
3170
- ...data,
3171
- type: data._type,
3172
- id: data._id,
3173
- createdAt: data._createdAt,
3174
- updatedAt: data._updatedAt,
3175
- rev: data._rev
3176
- })).transform(({ _type, _id, _rev, _createdAt, _updatedAt, ...rest }) => rest);
3283
+ // src/services/displayText.tsx
3284
+ var DisplayTextService = class {
3285
+ constructor(customMappings) {
3286
+ this.defaultLanguage = "en";
3287
+ this.mappings = {
3288
+ ...defaultMappings,
3289
+ // Use all pre-defined mappings as defaults
3290
+ ...customMappings
3291
+ // Override with any custom mappings if provided
3292
+ };
3293
+ }
3294
+ async getDisplayText(scope, value, language = this.defaultLanguage) {
3295
+ const scopeMapping = this.mappings[scope];
3296
+ if (!scopeMapping) {
3297
+ throw new DisplayTextScopeNotFoundError(scope);
3298
+ }
3299
+ if (Array.isArray(value)) {
3300
+ const displayTextPromises = value.map((v) => this.getDisplayText(scope, v, language));
3301
+ const displayTexts2 = await Promise.all(displayTextPromises);
3302
+ return displayTexts2.filter((v) => !!v).join(", ");
3303
+ }
3304
+ const displayTexts = scopeMapping[value];
3305
+ if (!displayTexts) {
3306
+ throw new DisplayTextValueNotFoundError(value, scope);
3307
+ }
3308
+ return displayTexts[language] || displayTexts[this.defaultLanguage] || value;
3309
+ }
3310
+ };
3177
3311
 
3178
- // src/types/latest/custom/job_posting_service_sanity.ts
3179
- import { z as z6 } from "zod";
3180
- var JobPostTypeEnum = z6.enum(["jobPost"]);
3181
- var MonetaryAmountTypeEnum = z6.enum(["monetaryAmount"]);
3182
- var postalAddressSchema2 = postalAddressSchema.extend({
3183
- _type: z6.string().describe("Document type used within sanity").default("address")
3184
- }).omit({ type: true }).strict().transform((data) => ({
3185
- ...data,
3186
- type: data._type
3187
- })).transform(({ _type, ...rest }) => rest);
3188
- var quantitativeValueSchema2 = quantitativeValueSchema.extend({
3189
- _type: z6.string().describe("Document type used within sanity").default("quantitativeValue")
3190
- }).omit({ type: true }).strict().transform((data) => ({
3191
- ...data,
3192
- type: data._type
3193
- })).transform(({ _type, ...rest }) => rest);
3194
- var monetaryAmountSchema2 = monetaryAmountSchema.extend({
3195
- _type: z6.string().describe("Document type used within sanity").default("monetaryAmount"),
3196
- value: quantitativeValueSchema2.optional().describe("The quantitative_value for a given salary")
3197
- }).omit({ type: true }).strict().transform((data) => ({
3198
- ...data,
3199
- type: data._type
3200
- })).transform(({ _type, ...rest }) => rest);
3201
- var jobPostSchema2 = jobPostSchema.extend({
3202
- // Override base fields with Sanity-specific fields
3203
- _id: z6.string().describe("The NDG specific id for a job posting in form of ndg-<company_slug>-<unique-job-id>. Serves as unique identifier. Cannot be changed.").regex(/^ndg-.*-.*$/),
3204
- _rev: z6.string().optional().describe("Revision number"),
3205
- _type: z6.string().describe("Document type used within sanity").default("jobPost"),
3206
- _createdAt: z6.string().datetime().describe("Time document was created. Autoset by Sanity"),
3207
- _updatedAt: z6.string().datetime().describe("Time document was created. Autoset by Sanity"),
3208
- // Override fields with new schemas
3209
- estimatedSalary: monetaryAmountSchema2.optional().describe("Determines the estimated salary for a given job posting"),
3210
- jobLocation: postalAddressSchema2.optional().describe("Determines the primary physical location where the job is to be performed. For remote roles, use applicantLocationRequirements"),
3211
- // Add Sanity-specific fields
3212
- ndgMetadata: z6.record(z6.any()).optional(),
3213
- ndgID: z6.string().optional(),
3214
- hiringOrganization: z6.optional(z6.union([sanityReferenceSchema, companySchema])),
3215
- raw: z6.record(z6.any()).optional(),
3216
- isLoaded: z6.boolean().default(false),
3217
- isVerified: z6.boolean().default(false),
3218
- needsReview: z6.boolean().default(false),
3219
- schema_version: z6.string().optional(),
3220
- origin: z6.string().optional(),
3221
- temp: z6.record(z6.any()).optional(),
3222
- applicationType: z6.string().optional(),
3223
- // Override clientId to use Sanity naming convention
3224
- clientID: z6.string()
3225
- }).omit({ type: true, id: true, createdAt: true, updatedAt: true, clientId: true }).transform((data) => ({
3226
- ...data,
3227
- type: data._type,
3228
- id: data._id,
3229
- createdAt: data._createdAt,
3230
- updatedAt: data._updatedAt,
3231
- rev: data._rev
3232
- })).transform(({ _type, _id, _rev, _createdAt, _updatedAt, ...rest }) => rest);
3312
+ // src/hooks/useDisplayText.ts
3313
+ var useDisplayText = (scope, value) => {
3314
+ const [displayText, setDisplayText] = useState9("");
3315
+ const displayService = useMemo2(() => new DisplayTextService(), []);
3316
+ useEffect9(() => {
3317
+ if (!displayService || !value) {
3318
+ setDisplayText("");
3319
+ return;
3320
+ }
3321
+ void (async () => {
3322
+ try {
3323
+ const result = await displayService.getDisplayText(scope, value);
3324
+ if (typeof result === "string") {
3325
+ setDisplayText(result);
3326
+ } else {
3327
+ console.error("Expected a string result, but got:", result);
3328
+ }
3329
+ } catch (error) {
3330
+ if (error instanceof DisplayTextValueNotFoundError) {
3331
+ console.warn("Display text value not found:", value);
3332
+ setDisplayText(String(value));
3333
+ } else {
3334
+ console.error("Unexpected error formatting text:", error);
3335
+ setDisplayText(String(value));
3336
+ }
3337
+ }
3338
+ })();
3339
+ }, [scope, value, displayService]);
3340
+ return displayText;
3341
+ };
3233
3342
 
3234
- // src/lib/salaryRange.ts
3235
- var CurrencyEnum2 = shared_pickle_output_latest_exports.CurrencyEnum;
3236
- function salaryRange(salary) {
3237
- if (!salary) return null;
3238
- let min = salary.minValue;
3239
- let max = salary.maxValue;
3240
- let single = salary.singleValue;
3241
- let value = salary.value;
3242
- let unitText = "YEAR";
3243
- const signs = {
3244
- [CurrencyEnum2.Values.USD]: "$",
3245
- [CurrencyEnum2.Values.GBP]: "\xA3",
3246
- [CurrencyEnum2.Values.EUR]: "\u20AC"
3247
- };
3248
- const sign = signs[salary.currency ?? CurrencyEnum2.Values.USD];
3249
- if (value != null && typeof value === "object") {
3250
- min = value.minValue;
3251
- max = value.maxValue;
3252
- single = value.value;
3253
- unitText = value.unitText;
3254
- }
3255
- if (unitText === "YEAR") unitText = "per year";
3256
- if (unitText === "MONTH") unitText = "per month";
3257
- if (unitText === "WEEK") unitText = "per week";
3258
- if (unitText === "DAY") unitText = "per day";
3259
- if (unitText === "PER_ACTIVITY") unitText = "per activity";
3260
- if (unitText === "HOUR") unitText = "per hour";
3261
- if (min == null && max == null && single == null) return null;
3262
- if (single != null) return sign + single.toLocaleString() + " " + unitText;
3263
- if (min === max) return sign + min?.toLocaleString() + " " + unitText;
3264
- if (min != null && max != null)
3265
- return sign + min?.toLocaleString() + " - " + sign + max?.toLocaleString() + " " + unitText;
3343
+ // src/lib/locations.ts
3344
+ function formattedAddress(address) {
3345
+ const { addressLocality, addressRegion, addressCountry } = address;
3346
+ if (addressLocality && addressRegion) return `${addressLocality}, ${addressRegion}`;
3347
+ if (addressRegion && addressCountry) return `${addressRegion}, ${addressCountry}`;
3348
+ if (addressRegion) return addressRegion;
3349
+ if (addressCountry) return addressCountry;
3266
3350
  return null;
3267
3351
  }
3352
+ function formattedJobLocation(job) {
3353
+ const address = job.jobLocation && formattedAddress(job.jobLocation);
3354
+ const remote = job.isRemote ? "Remote" : "";
3355
+ return [address, remote].filter(Boolean).join(" | ");
3356
+ }
3268
3357
 
3269
3358
  // src/components/jobPost/JobPost.tsx
3270
- import { jsx as jsx40, jsxs as jsxs25 } from "react/jsx-runtime";
3359
+ import { jsx as jsx41, jsxs as jsxs26 } from "react/jsx-runtime";
3271
3360
  function JobPost({
3272
3361
  job,
3273
3362
  bannerSrc,
@@ -3313,7 +3402,7 @@ function JobPost({
3313
3402
  label: formattedLocation
3314
3403
  }
3315
3404
  ].filter((t) => !!t);
3316
- return /* @__PURE__ */ jsxs25(
3405
+ return /* @__PURE__ */ jsxs26(
3317
3406
  "div",
3318
3407
  {
3319
3408
  className: cn(
@@ -3321,7 +3410,7 @@ function JobPost({
3321
3410
  !standalone && "border-1 rounded-3xl border-grey-5"
3322
3411
  ),
3323
3412
  children: [
3324
- /* @__PURE__ */ jsx40(
3413
+ /* @__PURE__ */ jsx41(
3325
3414
  JobHeader,
3326
3415
  {
3327
3416
  title: job.title,
@@ -3337,16 +3426,16 @@ function JobPost({
3337
3426
  tags
3338
3427
  }
3339
3428
  ),
3340
- /* @__PURE__ */ jsxs25("div", { className: "flex flex-col gap-8 px-6", children: [
3341
- /* @__PURE__ */ jsx40(JobDescription, { description: job.description }),
3342
- /* @__PURE__ */ jsx40(
3429
+ /* @__PURE__ */ jsxs26("div", { className: "flex flex-col gap-8 px-6", children: [
3430
+ /* @__PURE__ */ jsx41(JobDescription, { description: job.description }),
3431
+ /* @__PURE__ */ jsx41(
3343
3432
  CompanyTake,
3344
3433
  {
3345
3434
  avatarSrc,
3346
3435
  content: job.hiringOrganization?.companyNDG?.companyNDGTake
3347
3436
  }
3348
3437
  ),
3349
- /* @__PURE__ */ jsx40(
3438
+ /* @__PURE__ */ jsx41(
3350
3439
  CompanyInformation,
3351
3440
  {
3352
3441
  name: job.hiringOrganization?.companyName ?? "",
@@ -3356,7 +3445,7 @@ function JobPost({
3356
3445
  website: job.hiringOrganization?.companyWebsite
3357
3446
  }
3358
3447
  ),
3359
- /* @__PURE__ */ jsx40(
3448
+ /* @__PURE__ */ jsx41(
3360
3449
  CompanyBenefits,
3361
3450
  {
3362
3451
  benefits: job.hiringOrganization?.companyCareers?.companyBenefits?.map((b) => b.title).filter((d) => d !== void 0)
@@ -3368,6 +3457,24 @@ function JobPost({
3368
3457
  );
3369
3458
  }
3370
3459
 
3460
+ // src/components/jobCard/JobLocation.tsx
3461
+ import { MapPin as MapPin2 } from "lucide-react";
3462
+ import { jsx as jsx42, jsxs as jsxs27 } from "react/jsx-runtime";
3463
+ function JobLocation({ mainLocation, extendedLocations }) {
3464
+ return /* @__PURE__ */ jsxs27("div", { className: "flex items-center gap-2", "data-testid": "job-card-location", children: [
3465
+ /* @__PURE__ */ jsx42(MapPin2, { size: 16 }),
3466
+ /* @__PURE__ */ jsx42("span", { className: "text-sm font-thin", children: mainLocation }),
3467
+ extendedLocations && /* @__PURE__ */ jsx42(TooltipProvider, { children: /* @__PURE__ */ jsxs27(Tooltip, { children: [
3468
+ /* @__PURE__ */ jsx42(TooltipTrigger, { children: /* @__PURE__ */ jsxs27("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: [
3469
+ "+ ",
3470
+ extendedLocations.length,
3471
+ " more"
3472
+ ] }) }),
3473
+ /* @__PURE__ */ jsx42(TooltipContent, { className: "border-1 rounded-md border border-grey-5 bg-white p-2", children: extendedLocations.map((location) => /* @__PURE__ */ jsx42("div", { className: "text-nowrap text-sm", children: location }, location)) })
3474
+ ] }) })
3475
+ ] });
3476
+ }
3477
+
3371
3478
  // src/types/data/company_service_latest.ts
3372
3479
  var company_service_latest_exports2 = {};
3373
3480
  __export(company_service_latest_exports2, {
@@ -3670,11 +3777,13 @@ export {
3670
3777
  CompanyTake,
3671
3778
  Counter,
3672
3779
  DatePicker,
3780
+ DismissibleBanner,
3673
3781
  Icon,
3674
3782
  Input_default as Input,
3675
3783
  InputOtp,
3676
3784
  JobDescription,
3677
3785
  JobHeader,
3786
+ JobLocation,
3678
3787
  JobPost,
3679
3788
  job_posting_service_latest_exports2 as JobPostService,
3680
3789
  Label_default as Label,
@@ -3691,6 +3800,7 @@ export {
3691
3800
  WindowHistoryProvider,
3692
3801
  cn,
3693
3802
  fetchLocation,
3803
+ salaryRange,
3694
3804
  useDisplayText,
3695
3805
  useWindowHistory
3696
3806
  };