@next-degree/pickle-shared-js 0.5.31 → 0.6.43
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.
- package/dist/company_service_latest-Dwf4Fkjr.d.cts +2641 -0
- package/dist/company_service_latest-Dwf4Fkjr.d.ts +2641 -0
- package/dist/components/buttons/BackButton.cjs +161 -0
- package/dist/components/buttons/BackButton.cjs.map +1 -0
- package/dist/components/buttons/BackButton.d.cts +9 -0
- package/dist/components/buttons/BackButton.d.ts +9 -0
- package/dist/components/buttons/BackButton.js +137 -0
- package/dist/components/buttons/BackButton.js.map +1 -0
- package/dist/components/company/CompanyBenefits.cjs +38 -0
- package/dist/components/company/CompanyBenefits.cjs.map +1 -0
- package/dist/components/company/CompanyBenefits.d.cts +8 -0
- package/dist/components/company/CompanyBenefits.d.ts +8 -0
- package/dist/components/company/CompanyBenefits.js +13 -0
- package/dist/components/company/CompanyBenefits.js.map +1 -0
- package/dist/components/company/CompanyInformation.cjs +112 -0
- package/dist/components/company/CompanyInformation.cjs.map +1 -0
- package/dist/components/company/CompanyInformation.d.cts +12 -0
- package/dist/components/company/CompanyInformation.d.ts +12 -0
- package/dist/components/company/CompanyInformation.js +75 -0
- package/dist/components/company/CompanyInformation.js.map +1 -0
- package/dist/components/company/CompanyTake.cjs +140 -0
- package/dist/components/company/CompanyTake.cjs.map +1 -0
- package/dist/components/company/CompanyTake.d.cts +9 -0
- package/dist/components/company/CompanyTake.d.ts +9 -0
- package/dist/components/company/CompanyTake.js +104 -0
- package/dist/components/company/CompanyTake.js.map +1 -0
- package/dist/components/jobPost/JobDescription.cjs +205 -0
- package/dist/components/jobPost/JobDescription.cjs.map +1 -0
- package/dist/components/jobPost/JobDescription.d.cts +8 -0
- package/dist/components/jobPost/JobDescription.d.ts +8 -0
- package/dist/components/jobPost/JobDescription.js +168 -0
- package/dist/components/jobPost/JobDescription.js.map +1 -0
- package/dist/components/jobPost/JobHeader.cjs +436 -0
- package/dist/components/jobPost/JobHeader.cjs.map +1 -0
- package/dist/components/jobPost/JobHeader.d.cts +26 -0
- package/dist/components/jobPost/JobHeader.d.ts +26 -0
- package/dist/components/jobPost/JobHeader.js +423 -0
- package/dist/components/jobPost/JobHeader.js.map +1 -0
- package/dist/components/jobPost/JobPost.cjs +1349 -0
- package/dist/components/jobPost/JobPost.cjs.map +1 -0
- package/dist/components/jobPost/JobPost.d.cts +16 -0
- package/dist/components/jobPost/JobPost.d.ts +16 -0
- package/dist/components/jobPost/JobPost.js +1336 -0
- package/dist/components/jobPost/JobPost.js.map +1 -0
- package/dist/components/primitives/avatar.cjs +88 -0
- package/dist/components/primitives/avatar.cjs.map +1 -0
- package/dist/components/primitives/avatar.d.cts +13 -0
- package/dist/components/primitives/avatar.d.ts +13 -0
- package/dist/components/primitives/avatar.js +52 -0
- package/dist/components/primitives/avatar.js.map +1 -0
- package/dist/components/primitives/command.d.cts +3 -3
- package/dist/components/primitives/command.d.ts +3 -3
- package/dist/components/ui/Avatar.cjs +117 -0
- package/dist/components/ui/Avatar.cjs.map +1 -0
- package/dist/components/ui/Avatar.d.cts +16 -0
- package/dist/components/ui/Avatar.d.ts +16 -0
- package/dist/components/ui/Avatar.js +79 -0
- package/dist/components/ui/Avatar.js.map +1 -0
- package/dist/components/ui/Icon.cjs +114 -0
- package/dist/components/ui/Icon.cjs.map +1 -0
- package/dist/components/ui/Icon.d.cts +15 -0
- package/dist/components/ui/Icon.d.ts +15 -0
- package/dist/components/ui/Icon.js +89 -0
- package/dist/components/ui/Icon.js.map +1 -0
- package/dist/{app/layout.cjs → components/ui/LinkButton.cjs} +25 -35
- package/dist/components/ui/LinkButton.cjs.map +1 -0
- package/dist/components/ui/LinkButton.d.cts +29 -0
- package/dist/components/ui/LinkButton.d.ts +29 -0
- package/dist/components/ui/LinkButton.js +26 -0
- package/dist/components/ui/LinkButton.js.map +1 -0
- package/dist/components/ui/ReadMore.cjs +194 -0
- package/dist/components/ui/ReadMore.cjs.map +1 -0
- package/dist/components/ui/ReadMore.d.cts +9 -0
- package/dist/components/ui/ReadMore.d.ts +9 -0
- package/dist/components/ui/ReadMore.js +160 -0
- package/dist/components/ui/ReadMore.js.map +1 -0
- package/dist/contexts/WindowHistoryProvider.cjs +48 -0
- package/dist/contexts/WindowHistoryProvider.cjs.map +1 -0
- package/dist/contexts/WindowHistoryProvider.d.cts +11 -0
- package/dist/contexts/WindowHistoryProvider.d.ts +11 -0
- package/dist/contexts/WindowHistoryProvider.js +23 -0
- package/dist/contexts/WindowHistoryProvider.js.map +1 -0
- package/dist/displayText-C1qKqRYc.d.cts +48 -0
- package/dist/displayText-D-OzRlJf.d.ts +48 -0
- package/dist/hooks/useDisplayText.cjs +502 -0
- package/dist/hooks/useDisplayText.cjs.map +1 -0
- package/dist/hooks/useDisplayText.d.cts +8 -0
- package/dist/hooks/useDisplayText.d.ts +8 -0
- package/dist/hooks/useDisplayText.js +477 -0
- package/dist/hooks/useDisplayText.js.map +1 -0
- package/dist/hooks/useWindowHistory.cjs +46 -0
- package/dist/hooks/useWindowHistory.cjs.map +1 -0
- package/dist/hooks/useWindowHistory.d.cts +7 -0
- package/dist/hooks/useWindowHistory.d.ts +7 -0
- package/dist/hooks/useWindowHistory.js +21 -0
- package/dist/hooks/useWindowHistory.js.map +1 -0
- package/dist/index.cjs +1434 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +21 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +1443 -1
- package/dist/index.js.map +1 -1
- package/dist/job_posting_service_latest-D0AsiA4a.d.cts +2789 -0
- package/dist/job_posting_service_latest-D0AsiA4a.d.ts +2789 -0
- package/dist/lib/icons.cjs +53 -0
- package/dist/lib/icons.cjs.map +1 -0
- package/dist/lib/icons.d.cts +27 -0
- package/dist/lib/icons.d.ts +27 -0
- package/dist/lib/icons.js +49 -0
- package/dist/lib/icons.js.map +1 -0
- package/dist/lib/locations.cjs +45 -0
- package/dist/lib/locations.cjs.map +1 -0
- package/dist/lib/locations.d.cts +8 -0
- package/dist/lib/locations.d.ts +8 -0
- package/dist/lib/locations.js +19 -0
- package/dist/lib/locations.js.map +1 -0
- package/dist/lib/mappings.cjs +443 -0
- package/dist/lib/mappings.cjs.map +1 -0
- package/dist/lib/mappings.d.cts +4 -0
- package/dist/lib/mappings.d.ts +4 -0
- package/dist/lib/mappings.js +409 -0
- package/dist/lib/mappings.js.map +1 -0
- package/dist/lib/salaryRange.cjs +90 -0
- package/dist/lib/salaryRange.cjs.map +1 -0
- package/dist/lib/salaryRange.d.cts +6 -0
- package/dist/lib/salaryRange.d.ts +6 -0
- package/dist/lib/salaryRange.js +63 -0
- package/dist/lib/salaryRange.js.map +1 -0
- package/dist/services/displayText.cjs +470 -0
- package/dist/services/displayText.cjs.map +1 -0
- package/dist/services/displayText.d.cts +4 -0
- package/dist/services/displayText.d.ts +4 -0
- package/dist/services/displayText.js +443 -0
- package/dist/services/displayText.js.map +1 -0
- package/dist/shared_pickle_output_latest-DX6GQoVn.d.cts +194 -0
- package/dist/shared_pickle_output_latest-DX6GQoVn.d.ts +194 -0
- package/dist/styles/globals.css +817 -0
- package/dist/styles/globals.css.map +1 -1
- package/dist/types/data/company_service_latest.cjs +228 -0
- package/dist/types/data/company_service_latest.cjs.map +1 -0
- package/dist/types/data/company_service_latest.d.cts +2 -0
- package/dist/types/data/company_service_latest.d.ts +2 -0
- package/dist/types/data/company_service_latest.js +186 -0
- package/dist/types/data/company_service_latest.js.map +1 -0
- package/dist/types/data/job_posting_service_latest.cjs +266 -0
- package/dist/types/data/job_posting_service_latest.cjs.map +1 -0
- package/dist/types/data/job_posting_service_latest.d.cts +2 -0
- package/dist/types/data/job_posting_service_latest.d.ts +2 -0
- package/dist/types/data/job_posting_service_latest.js +230 -0
- package/dist/types/data/job_posting_service_latest.js.map +1 -0
- package/dist/types/data/shared_pickle_output_latest.cjs +82 -0
- package/dist/types/data/shared_pickle_output_latest.cjs.map +1 -0
- package/dist/types/data/shared_pickle_output_latest.d.cts +2 -0
- package/dist/types/data/shared_pickle_output_latest.d.ts +2 -0
- package/dist/types/data/shared_pickle_output_latest.js +50 -0
- package/dist/types/data/shared_pickle_output_latest.js.map +1 -0
- package/dist/types/displayText.errors.cjs +44 -0
- package/dist/types/displayText.errors.cjs.map +1 -0
- package/dist/types/displayText.errors.d.cts +8 -0
- package/dist/types/displayText.errors.d.ts +8 -0
- package/dist/types/displayText.errors.js +18 -0
- package/dist/types/displayText.errors.js.map +1 -0
- package/package.json +19 -7
- package/dist/AmbitBold-3SZZPYLH.otf +0 -0
- package/dist/AmbitBoldItalic-JSHFTN4A.otf +0 -0
- package/dist/AmbitRegular-MB5U7O3L.otf +0 -0
- package/dist/app/layout.cjs.map +0 -1
- package/dist/app/layout.css +0 -1423
- package/dist/app/layout.css.map +0 -1
- package/dist/app/layout.d.cts +0 -11
- package/dist/app/layout.d.ts +0 -11
- package/dist/app/layout.js +0 -36
- package/dist/app/layout.js.map +0 -1
- package/dist/app/page.cjs +0 -1607
- package/dist/app/page.cjs.map +0 -1
- package/dist/app/page.d.cts +0 -5
- package/dist/app/page.d.ts +0 -5
- package/dist/app/page.js +0 -1581
- package/dist/app/page.js.map +0 -1
- package/dist/assets/fonts/AmbitBold.cjs +0 -3
- package/dist/assets/fonts/AmbitBold.cjs.map +0 -1
- package/dist/assets/fonts/AmbitBold.d.cts +0 -2
- package/dist/assets/fonts/AmbitBold.d.ts +0 -2
- package/dist/assets/fonts/AmbitBold.js +0 -6
- package/dist/assets/fonts/AmbitBold.js.map +0 -1
- package/dist/assets/fonts/AmbitBoldItalic.cjs +0 -3
- package/dist/assets/fonts/AmbitBoldItalic.cjs.map +0 -1
- package/dist/assets/fonts/AmbitBoldItalic.d.cts +0 -2
- package/dist/assets/fonts/AmbitBoldItalic.d.ts +0 -2
- package/dist/assets/fonts/AmbitBoldItalic.js +0 -6
- package/dist/assets/fonts/AmbitBoldItalic.js.map +0 -1
- package/dist/assets/fonts/AmbitRegular.cjs +0 -3
- package/dist/assets/fonts/AmbitRegular.cjs.map +0 -1
- package/dist/assets/fonts/AmbitRegular.d.cts +0 -2
- package/dist/assets/fonts/AmbitRegular.d.ts +0 -2
- package/dist/assets/fonts/AmbitRegular.js +0 -6
- package/dist/assets/fonts/AmbitRegular.js.map +0 -1
- package/dist/components/demos/ComboboxDemo.cjs +0 -814
- package/dist/components/demos/ComboboxDemo.cjs.map +0 -1
- package/dist/components/demos/ComboboxDemo.d.cts +0 -5
- package/dist/components/demos/ComboboxDemo.d.ts +0 -5
- package/dist/components/demos/ComboboxDemo.js +0 -786
- package/dist/components/demos/ComboboxDemo.js.map +0 -1
- package/dist/components/demos/CounterDemo.cjs +0 -270
- package/dist/components/demos/CounterDemo.cjs.map +0 -1
- package/dist/components/demos/CounterDemo.d.cts +0 -5
- package/dist/components/demos/CounterDemo.d.ts +0 -5
- package/dist/components/demos/CounterDemo.js +0 -238
- package/dist/components/demos/CounterDemo.js.map +0 -1
- package/dist/components/demos/InputDemo.cjs +0 -225
- package/dist/components/demos/InputDemo.cjs.map +0 -1
- package/dist/components/demos/InputDemo.d.cts +0 -5
- package/dist/components/demos/InputDemo.d.ts +0 -5
- package/dist/components/demos/InputDemo.js +0 -192
- package/dist/components/demos/InputDemo.js.map +0 -1
- package/dist/components/demos/MapComponentDemo.cjs +0 -129
- package/dist/components/demos/MapComponentDemo.cjs.map +0 -1
- package/dist/components/demos/MapComponentDemo.d.cts +0 -5
- package/dist/components/demos/MapComponentDemo.d.ts +0 -5
- package/dist/components/demos/MapComponentDemo.js +0 -107
- package/dist/components/demos/MapComponentDemo.js.map +0 -1
- package/dist/components/demos/PlacesQueryInputDemo.cjs +0 -341
- package/dist/components/demos/PlacesQueryInputDemo.cjs.map +0 -1
- package/dist/components/demos/PlacesQueryInputDemo.d.cts +0 -5
- package/dist/components/demos/PlacesQueryInputDemo.d.ts +0 -5
- package/dist/components/demos/PlacesQueryInputDemo.js +0 -309
- package/dist/components/demos/PlacesQueryInputDemo.js.map +0 -1
- package/dist/components/demos/SelectDemo.cjs +0 -365
- package/dist/components/demos/SelectDemo.cjs.map +0 -1
- package/dist/components/demos/SelectDemo.d.cts +0 -5
- package/dist/components/demos/SelectDemo.d.ts +0 -5
- package/dist/components/demos/SelectDemo.js +0 -337
- package/dist/components/demos/SelectDemo.js.map +0 -1
- package/dist/components/demos/index.cjs +0 -1600
- package/dist/components/demos/index.cjs.map +0 -1
- package/dist/components/demos/index.d.cts +0 -5
- package/dist/components/demos/index.d.ts +0 -5
- package/dist/components/demos/index.js +0 -1574
- package/dist/components/demos/index.js.map +0 -1
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
// src/components/ui/ReadMore.tsx
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import Markdown from "react-markdown";
|
|
4
|
+
|
|
5
|
+
// src/lib/utils.ts
|
|
6
|
+
import { clsx } from "clsx";
|
|
7
|
+
import { twMerge } from "tailwind-merge";
|
|
8
|
+
function cn(...inputs) {
|
|
9
|
+
return twMerge(clsx(inputs));
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// src/components/ui/Button.tsx
|
|
13
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
14
|
+
import { cva } from "cva";
|
|
15
|
+
import { forwardRef } from "react";
|
|
16
|
+
import { jsx } from "react/jsx-runtime";
|
|
17
|
+
var Button = forwardRef(
|
|
18
|
+
({ className, variant, size, asChild = false, ...props }, ref) => {
|
|
19
|
+
const Component = asChild ? Slot : "button";
|
|
20
|
+
return /* @__PURE__ */ jsx(
|
|
21
|
+
Component,
|
|
22
|
+
{
|
|
23
|
+
className: cn(buttonVariants({ variant, size, className })),
|
|
24
|
+
ref,
|
|
25
|
+
...props
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
Button.displayName = "Button";
|
|
31
|
+
var buttonVariants = cva(
|
|
32
|
+
[
|
|
33
|
+
"flex",
|
|
34
|
+
"items-center",
|
|
35
|
+
"justify-center",
|
|
36
|
+
"gap-2",
|
|
37
|
+
"rounded-full",
|
|
38
|
+
"font-bold",
|
|
39
|
+
"outline-2",
|
|
40
|
+
"outline-offset-2",
|
|
41
|
+
"outline-dashed",
|
|
42
|
+
"outline-transparent"
|
|
43
|
+
],
|
|
44
|
+
{
|
|
45
|
+
variants: {
|
|
46
|
+
variant: {
|
|
47
|
+
neutral: [
|
|
48
|
+
"bg-black",
|
|
49
|
+
"text-white",
|
|
50
|
+
"hover:bg-grey-90",
|
|
51
|
+
"active:bg-grey-80",
|
|
52
|
+
"focus:outline-purple-100",
|
|
53
|
+
"disabled:text-grey-40",
|
|
54
|
+
"disabled:bg-grey-10"
|
|
55
|
+
],
|
|
56
|
+
primary: [
|
|
57
|
+
"bg-pickle-100",
|
|
58
|
+
"text-black",
|
|
59
|
+
"hover:bg-pickle-80",
|
|
60
|
+
"active:bg-pickle-60",
|
|
61
|
+
"focus:outline-purple-100",
|
|
62
|
+
"disabled:text-grey-40",
|
|
63
|
+
"disabled:bg-grey-10"
|
|
64
|
+
],
|
|
65
|
+
secondary: [
|
|
66
|
+
"bg-green-80",
|
|
67
|
+
"text-white",
|
|
68
|
+
"hover:bg-green-90",
|
|
69
|
+
"active:bg-green-100",
|
|
70
|
+
"focus:outline-pickle-100",
|
|
71
|
+
"disabled:text-grey-40",
|
|
72
|
+
"disabled:bg-grey-10"
|
|
73
|
+
],
|
|
74
|
+
transparent: [
|
|
75
|
+
"text-white",
|
|
76
|
+
"hover:bg-green-80",
|
|
77
|
+
"active:bg-green-100",
|
|
78
|
+
"focus:outline-pickle-100",
|
|
79
|
+
"disabled:text-grey-40"
|
|
80
|
+
],
|
|
81
|
+
link: [
|
|
82
|
+
"leading-tight",
|
|
83
|
+
"text-black",
|
|
84
|
+
"underline",
|
|
85
|
+
"hover:text-purple-100",
|
|
86
|
+
"focus:text-black",
|
|
87
|
+
"focus:outline-purple-100",
|
|
88
|
+
"active:text-purple-80"
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
size: {
|
|
92
|
+
small: ["h-10", "text-sm", "px-4", "py-2"],
|
|
93
|
+
medium: ["h-12", "text-base", "px-6", "py-3"],
|
|
94
|
+
large: ["h-14", "text-lg", "px-8", "py-4"]
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
defaultVariants: {
|
|
98
|
+
variant: "neutral",
|
|
99
|
+
size: "medium"
|
|
100
|
+
},
|
|
101
|
+
compoundVariants: [
|
|
102
|
+
{
|
|
103
|
+
variant: "link",
|
|
104
|
+
size: "small",
|
|
105
|
+
class: ["h-3", "text-xs", "p-0"]
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
variant: "link",
|
|
109
|
+
size: "medium",
|
|
110
|
+
class: ["h-4", "text-sm", "p-0"]
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
variant: "link",
|
|
114
|
+
size: "large",
|
|
115
|
+
class: ["h-6", "text-base", "p-0"]
|
|
116
|
+
}
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
// src/components/ui/ReadMore.tsx
|
|
122
|
+
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
123
|
+
function ReadMore({ text, ...props }) {
|
|
124
|
+
const [isExpanded, setIsExpanded] = useState(false);
|
|
125
|
+
const [maxWords, setMaxWords] = useState(160);
|
|
126
|
+
useEffect(() => {
|
|
127
|
+
const updateMaxWords = () => {
|
|
128
|
+
const windowWidth = window.innerWidth;
|
|
129
|
+
if (windowWidth <= 768) {
|
|
130
|
+
setMaxWords(50);
|
|
131
|
+
} else {
|
|
132
|
+
setMaxWords(160);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
updateMaxWords();
|
|
136
|
+
window.addEventListener("resize", updateMaxWords);
|
|
137
|
+
return () => window.removeEventListener("resize", updateMaxWords);
|
|
138
|
+
}, []);
|
|
139
|
+
function createReadMoreText(text2, maxWords2, isExpanded2) {
|
|
140
|
+
const words = text2.split(" ");
|
|
141
|
+
const snippet2 = isExpanded2 ? text2 : words.slice(0, maxWords2).join(" ");
|
|
142
|
+
const readMoreText = isExpanded2 ? "" : "...";
|
|
143
|
+
return `${snippet2} ${readMoreText}`;
|
|
144
|
+
}
|
|
145
|
+
const toggleText = () => setIsExpanded(!isExpanded);
|
|
146
|
+
const snippet = createReadMoreText(text, maxWords, isExpanded);
|
|
147
|
+
return /* @__PURE__ */ jsxs("div", { ...props, children: [
|
|
148
|
+
/* @__PURE__ */ jsx2("div", { "data-testid": "read-more-text", className: "prose lg:prose-lg", children: /* @__PURE__ */ jsx2(Markdown, { children: snippet }) }),
|
|
149
|
+
/* @__PURE__ */ jsx2(Button, { className: "mt-2 flex items-center justify-center", variant: "link", onClick: toggleText, children: /* @__PURE__ */ jsxs("p", { className: "text-sm font-bold underline underline-offset-2", children: [
|
|
150
|
+
"Read ",
|
|
151
|
+
isExpanded ? "less" : "more"
|
|
152
|
+
] }) })
|
|
153
|
+
] });
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// src/components/jobPost/JobDescription.tsx
|
|
157
|
+
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
158
|
+
function JobDescription({ description }) {
|
|
159
|
+
if (!description) return null;
|
|
160
|
+
return /* @__PURE__ */ jsxs2("div", { className: "flex w-full flex-col gap-2", children: [
|
|
161
|
+
/* @__PURE__ */ jsx3("h3", { className: "text-xl font-bold", children: "Job Description" }),
|
|
162
|
+
/* @__PURE__ */ jsx3(ReadMore, { text: description })
|
|
163
|
+
] });
|
|
164
|
+
}
|
|
165
|
+
export {
|
|
166
|
+
JobDescription
|
|
167
|
+
};
|
|
168
|
+
//# sourceMappingURL=JobDescription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ui/ReadMore.tsx","../../../src/lib/utils.ts","../../../src/components/ui/Button.tsx","../../../src/components/jobPost/JobDescription.tsx"],"sourcesContent":["'use client'\n\nimport { ComponentProps, useEffect, useState } from 'react'\nimport Markdown from 'react-markdown'\n\nimport { Button } from '@/components/ui/Button'\n\nexport type ReadMoreProps = ComponentProps<'div'> & {\n text: string\n}\n\nexport function ReadMore({ text, ...props }: Readonly<ReadMoreProps>) {\n const [isExpanded, setIsExpanded] = useState(false)\n const [maxWords, setMaxWords] = useState(160)\n\n useEffect(() => {\n const updateMaxWords = () => {\n const windowWidth = window.innerWidth\n if (windowWidth <= 768) {\n setMaxWords(50)\n } else {\n setMaxWords(160)\n }\n }\n\n updateMaxWords()\n window.addEventListener('resize', updateMaxWords)\n\n return () => window.removeEventListener('resize', updateMaxWords)\n }, [])\n\n function createReadMoreText(text: string, maxWords: number, isExpanded: boolean): string {\n const words = text.split(' ')\n\n const snippet = isExpanded ? text : words.slice(0, maxWords).join(' ')\n const readMoreText = isExpanded ? '' : '...'\n return `${snippet} ${readMoreText}`\n }\n\n const toggleText = () => setIsExpanded(!isExpanded)\n\n const snippet = createReadMoreText(text, maxWords, isExpanded)\n\n return (\n <div {...props}>\n <div data-testid=\"read-more-text\" className=\"prose lg:prose-lg\">\n <Markdown>{snippet}</Markdown>\n </div>\n <Button className=\"mt-2 flex items-center justify-center\" variant=\"link\" onClick={toggleText}>\n <p className=\"text-sm font-bold underline underline-offset-2\">\n Read {isExpanded ? 'less' : 'more'}\n </p>\n </Button>\n </div>\n )\n}\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { cn } from '@/lib/utils'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'cva'\nimport React, { forwardRef } from 'react'\n\ninterface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Component = asChild ? Slot : 'button'\n\n return (\n <Component\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = 'Button'\n\nconst buttonVariants = cva(\n [\n 'flex',\n 'items-center',\n 'justify-center',\n 'gap-2',\n 'rounded-full',\n 'font-bold',\n 'outline-2',\n 'outline-offset-2',\n 'outline-dashed',\n 'outline-transparent',\n ],\n {\n variants: {\n variant: {\n neutral: [\n 'bg-black',\n 'text-white',\n 'hover:bg-grey-90',\n 'active:bg-grey-80',\n 'focus:outline-purple-100',\n 'disabled:text-grey-40',\n 'disabled:bg-grey-10',\n ],\n primary: [\n 'bg-pickle-100',\n 'text-black',\n 'hover:bg-pickle-80',\n 'active:bg-pickle-60',\n 'focus:outline-purple-100',\n 'disabled:text-grey-40',\n 'disabled:bg-grey-10',\n ],\n secondary: [\n 'bg-green-80',\n 'text-white',\n 'hover:bg-green-90',\n 'active:bg-green-100',\n 'focus:outline-pickle-100',\n 'disabled:text-grey-40',\n 'disabled:bg-grey-10',\n ],\n transparent: [\n 'text-white',\n 'hover:bg-green-80',\n 'active:bg-green-100',\n 'focus:outline-pickle-100',\n 'disabled:text-grey-40',\n ],\n link: [\n 'leading-tight',\n 'text-black',\n 'underline',\n 'hover:text-purple-100',\n 'focus:text-black',\n 'focus:outline-purple-100',\n 'active:text-purple-80',\n ],\n },\n size: {\n small: ['h-10', 'text-sm', 'px-4', 'py-2'],\n medium: ['h-12', 'text-base', 'px-6', 'py-3'],\n large: ['h-14', 'text-lg', 'px-8', 'py-4'],\n },\n },\n defaultVariants: {\n variant: 'neutral',\n size: 'medium',\n },\n compoundVariants: [\n {\n variant: 'link',\n size: 'small',\n class: ['h-3', 'text-xs', 'p-0'],\n },\n {\n variant: 'link',\n size: 'medium',\n class: ['h-4', 'text-sm', 'p-0'],\n },\n {\n variant: 'link',\n size: 'large',\n class: ['h-6', 'text-base', 'p-0'],\n },\n ],\n }\n)\n","import { ReadMore } from '@/components/ui/ReadMore'\n\nexport type JobDescriptionProps = {\n description?: string\n}\n\nexport function JobDescription({ description }: JobDescriptionProps) {\n if (!description) return null\n\n return (\n <div className=\"flex w-full flex-col gap-2\">\n <h3 className=\"text-xl font-bold\">Job Description</h3>\n <ReadMore text={description} />\n </div>\n )\n}\n"],"mappings":"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","names":["jsx","text","maxWords","isExpanded","snippet","jsx","jsxs"]}
|
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
|
|
31
|
+
// src/components/jobPost/JobHeader.tsx
|
|
32
|
+
var JobHeader_exports = {};
|
|
33
|
+
__export(JobHeader_exports, {
|
|
34
|
+
JobHeader: () => JobHeader
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(JobHeader_exports);
|
|
37
|
+
var import_lucide_react3 = require("lucide-react");
|
|
38
|
+
var import_image = __toESM(require("next/image"), 1);
|
|
39
|
+
|
|
40
|
+
// src/components/buttons/BackButton.tsx
|
|
41
|
+
var import_lucide_react = require("lucide-react");
|
|
42
|
+
var import_navigation2 = require("next/navigation");
|
|
43
|
+
|
|
44
|
+
// src/components/ui/Icon.tsx
|
|
45
|
+
var import_react_slot = require("@radix-ui/react-slot");
|
|
46
|
+
var import_cva = require("cva");
|
|
47
|
+
var import_react = require("react");
|
|
48
|
+
var import_tailwind_merge2 = require("tailwind-merge");
|
|
49
|
+
|
|
50
|
+
// src/lib/utils.ts
|
|
51
|
+
var import_clsx = require("clsx");
|
|
52
|
+
var import_tailwind_merge = require("tailwind-merge");
|
|
53
|
+
function cn(...inputs) {
|
|
54
|
+
return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// src/components/ui/Icon.tsx
|
|
58
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
59
|
+
var Icon = (0, import_react.forwardRef)(
|
|
60
|
+
({ variant, size, active = false, readonly = false, className, ...props }, ref) => {
|
|
61
|
+
const Component = readonly ? import_react_slot.Slot : "button";
|
|
62
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
63
|
+
Component,
|
|
64
|
+
{
|
|
65
|
+
className: cn(
|
|
66
|
+
(0, import_tailwind_merge2.twMerge)(iconVariants({ variant: active ? "active" : variant, size })),
|
|
67
|
+
className
|
|
68
|
+
),
|
|
69
|
+
...props,
|
|
70
|
+
ref
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
Icon.displayName = "Icon";
|
|
76
|
+
var iconVariants = (0, import_cva.cva)(
|
|
77
|
+
[
|
|
78
|
+
"inline-flex",
|
|
79
|
+
"items-center",
|
|
80
|
+
"rounded-full",
|
|
81
|
+
"outline-2",
|
|
82
|
+
"outline-offset-2",
|
|
83
|
+
"outline-dashed",
|
|
84
|
+
"outline-transparent",
|
|
85
|
+
"disabled:text-grey-40",
|
|
86
|
+
"disabled:bg-transparent",
|
|
87
|
+
"disabled:pointer-events-none"
|
|
88
|
+
],
|
|
89
|
+
{
|
|
90
|
+
variants: {
|
|
91
|
+
variant: {
|
|
92
|
+
filled: [
|
|
93
|
+
"border",
|
|
94
|
+
"border-green-80",
|
|
95
|
+
"bg-green-90",
|
|
96
|
+
"text-white",
|
|
97
|
+
"hover:bg-green-80",
|
|
98
|
+
"active:bg-green-80",
|
|
99
|
+
"focus:outline-pickle-100",
|
|
100
|
+
"disabled:bg-green-70"
|
|
101
|
+
],
|
|
102
|
+
transparent: [
|
|
103
|
+
"text-black",
|
|
104
|
+
"hover:bg-grey-5",
|
|
105
|
+
"active:bg-grey-10",
|
|
106
|
+
"focus:outline-purple-100"
|
|
107
|
+
],
|
|
108
|
+
tonal: [
|
|
109
|
+
"border",
|
|
110
|
+
"border-grey-5",
|
|
111
|
+
"hover:border-grey-10",
|
|
112
|
+
"active:border-grey-20",
|
|
113
|
+
"focus:outline-purple-100"
|
|
114
|
+
],
|
|
115
|
+
active: ["text-black", "bg-pickle-100"]
|
|
116
|
+
},
|
|
117
|
+
size: {
|
|
118
|
+
small: ["h-10", "w-10", "p-3"],
|
|
119
|
+
medium: ["h-12", "w-12", "p-4"],
|
|
120
|
+
large: ["h-14", "w-14", "p-4"]
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
defaultVariants: {
|
|
124
|
+
variant: "filled",
|
|
125
|
+
size: "medium"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
// src/hooks/useWindowHistory.ts
|
|
131
|
+
var import_react3 = require("react");
|
|
132
|
+
|
|
133
|
+
// src/contexts/WindowHistoryProvider.tsx
|
|
134
|
+
var import_navigation = require("next/navigation");
|
|
135
|
+
var import_react2 = require("react");
|
|
136
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
137
|
+
var WindowHistoryContext = (0, import_react2.createContext)({});
|
|
138
|
+
|
|
139
|
+
// src/hooks/useWindowHistory.ts
|
|
140
|
+
function useWindowHistory() {
|
|
141
|
+
const windowHistoryContext = (0, import_react3.useContext)(WindowHistoryContext);
|
|
142
|
+
if (Object.keys(windowHistoryContext).length === 0) {
|
|
143
|
+
throw new Error("useWindowHistory was used outside of its WindowHistoryContext");
|
|
144
|
+
}
|
|
145
|
+
return windowHistoryContext;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// src/components/buttons/BackButton.tsx
|
|
149
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
150
|
+
function BackButton({ acceptedRoutes, fallbackHref, className, ...props }) {
|
|
151
|
+
const { history } = useWindowHistory();
|
|
152
|
+
const router = (0, import_navigation2.useRouter)();
|
|
153
|
+
const isAcceptedRoute = (r) => !!acceptedRoutes?.find((route) => new RegExp("^" + route + "$", "i").test(r));
|
|
154
|
+
const goBack = () => {
|
|
155
|
+
const previous = history[history.length - 2];
|
|
156
|
+
history.length > 1 && isAcceptedRoute(previous) ? router.back() : router.push(fallbackHref ?? "/");
|
|
157
|
+
};
|
|
158
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
159
|
+
Icon,
|
|
160
|
+
{
|
|
161
|
+
"aria-label": "back button",
|
|
162
|
+
variant: "transparent",
|
|
163
|
+
size: "small",
|
|
164
|
+
onClick: goBack,
|
|
165
|
+
className,
|
|
166
|
+
...props,
|
|
167
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react.X, {})
|
|
168
|
+
}
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// src/components/ui/Chip.tsx
|
|
173
|
+
var import_cva2 = require("cva");
|
|
174
|
+
var import_tailwind_merge3 = require("tailwind-merge");
|
|
175
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
176
|
+
var Chip = ({ className, variant, size, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: (0, import_tailwind_merge3.twMerge)(chipVariants({ variant, size, className })), ...props });
|
|
177
|
+
var chipVariants = (0, import_cva2.cva)(["flex", "items-center", "rounded-3xl", "border", "w-fit"], {
|
|
178
|
+
variants: {
|
|
179
|
+
variant: {
|
|
180
|
+
neutral: ["text-grey-80", "border-grey-10"],
|
|
181
|
+
primary: ["text-purple-100", "border-purple-20"],
|
|
182
|
+
danger: ["text-pumpkin-100", "border-pumpkin-20"],
|
|
183
|
+
onboarding: ["text-green-100", "bg-green-10", "cursor-pointer"],
|
|
184
|
+
onboardingSelected: ["text-white", "bg-green-90", "cursor-pointer"]
|
|
185
|
+
},
|
|
186
|
+
size: {
|
|
187
|
+
small: ["text-sm", "leading-5", "px-2", "py-1", "gap-1.5"],
|
|
188
|
+
medium: ["text-base", "leading-6", "px-3", "py-2", "gap-2"]
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
defaultVariants: {
|
|
192
|
+
variant: "neutral",
|
|
193
|
+
size: "medium"
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
var Chip_default = Chip;
|
|
197
|
+
|
|
198
|
+
// src/components/primitives/avatar.tsx
|
|
199
|
+
var AvatarPrimitive = __toESM(require("@radix-ui/react-avatar"), 1);
|
|
200
|
+
var React = __toESM(require("react"), 1);
|
|
201
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
202
|
+
var AvatarBase = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
203
|
+
AvatarPrimitive.Root,
|
|
204
|
+
{
|
|
205
|
+
ref,
|
|
206
|
+
className: cn("relative flex shrink-0 overflow-hidden rounded-full", className),
|
|
207
|
+
...props
|
|
208
|
+
}
|
|
209
|
+
));
|
|
210
|
+
AvatarBase.displayName = AvatarPrimitive.Root.displayName;
|
|
211
|
+
var AvatarImage = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
212
|
+
AvatarPrimitive.Image,
|
|
213
|
+
{
|
|
214
|
+
ref,
|
|
215
|
+
className: cn("aspect-square h-full w-full", className),
|
|
216
|
+
"data-testid": "job-card-avatar",
|
|
217
|
+
...props
|
|
218
|
+
}
|
|
219
|
+
));
|
|
220
|
+
AvatarImage.displayName = AvatarPrimitive.Image.displayName;
|
|
221
|
+
var AvatarFallback = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
222
|
+
AvatarPrimitive.Fallback,
|
|
223
|
+
{
|
|
224
|
+
ref,
|
|
225
|
+
className: cn(
|
|
226
|
+
"flex h-full w-full items-center justify-center rounded-full bg-pumpkin-100 py-2 text-sm font-bold capitalize leading-normal text-white md:text-lg",
|
|
227
|
+
className
|
|
228
|
+
),
|
|
229
|
+
...props
|
|
230
|
+
}
|
|
231
|
+
));
|
|
232
|
+
AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
|
|
233
|
+
|
|
234
|
+
// src/components/ui/Avatar.tsx
|
|
235
|
+
var import_cva3 = require("cva");
|
|
236
|
+
var import_link = __toESM(require("next/link"), 1);
|
|
237
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
238
|
+
function Avatar({ size, src, href, name, ...linkProps }) {
|
|
239
|
+
const fallbackShort = name?.slice(0, 2);
|
|
240
|
+
const fallbackWords = name?.split(" ").map((n) => n[0]).join("").slice(0, 2);
|
|
241
|
+
const fallback = fallbackWords && fallbackWords.length > 1 ? fallbackWords : fallbackShort;
|
|
242
|
+
const renderAvatar = () => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(AvatarBase, { className: avatarVariants({ size }), children: [
|
|
243
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(AvatarImage, { src, alt: name }),
|
|
244
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(AvatarFallback, { children: fallback?.toUpperCase() })
|
|
245
|
+
] });
|
|
246
|
+
if (href) {
|
|
247
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_link.default, { href, ...linkProps, children: renderAvatar() });
|
|
248
|
+
}
|
|
249
|
+
return renderAvatar();
|
|
250
|
+
}
|
|
251
|
+
var avatarVariants = (0, import_cva3.cva)("ring ring-white ring-2", {
|
|
252
|
+
variants: {
|
|
253
|
+
size: {
|
|
254
|
+
large: "h-16 w-16",
|
|
255
|
+
medium: "h-10 w-10",
|
|
256
|
+
small: "h-8 w-8"
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
defaultVariants: {
|
|
260
|
+
size: "medium"
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
// src/lib/icons.ts
|
|
265
|
+
var import_lucide_react2 = require("lucide-react");
|
|
266
|
+
var iconMap = {
|
|
267
|
+
house: import_lucide_react2.Home,
|
|
268
|
+
layers: import_lucide_react2.Layers,
|
|
269
|
+
users: import_lucide_react2.Users,
|
|
270
|
+
settings: import_lucide_react2.Settings,
|
|
271
|
+
building: import_lucide_react2.Building,
|
|
272
|
+
bell: import_lucide_react2.Bell,
|
|
273
|
+
wallet: import_lucide_react2.Wallet,
|
|
274
|
+
contact: import_lucide_react2.Contact,
|
|
275
|
+
banknote: import_lucide_react2.Banknote,
|
|
276
|
+
"message-square-dot": import_lucide_react2.MessageSquareDot,
|
|
277
|
+
"life-buoy": import_lucide_react2.LifeBuoy,
|
|
278
|
+
"building-2": import_lucide_react2.Building2,
|
|
279
|
+
"gallery-vertical-end": import_lucide_react2.GalleryVerticalEnd,
|
|
280
|
+
"square-kanban": import_lucide_react2.SquareKanban,
|
|
281
|
+
"briefcase-business": import_lucide_react2.BriefcaseBusiness,
|
|
282
|
+
"circle-user": import_lucide_react2.CircleUser,
|
|
283
|
+
"key-round": import_lucide_react2.KeyRound,
|
|
284
|
+
"clock-2": import_lucide_react2.Clock2,
|
|
285
|
+
"circle-user-round": import_lucide_react2.CircleUserRound,
|
|
286
|
+
"map-pin": import_lucide_react2.MapPin
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
// src/components/jobPost/JobHeader.tsx
|
|
290
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
291
|
+
function JobHeader({
|
|
292
|
+
title,
|
|
293
|
+
subtitles,
|
|
294
|
+
standalone,
|
|
295
|
+
bannerSrc,
|
|
296
|
+
avatarSrc,
|
|
297
|
+
avatarName,
|
|
298
|
+
avatarHref,
|
|
299
|
+
backFallbackHref,
|
|
300
|
+
backAcceptedRoutes,
|
|
301
|
+
actions,
|
|
302
|
+
tags
|
|
303
|
+
}) {
|
|
304
|
+
const renderIcon = (icon) => {
|
|
305
|
+
const Icon2 = iconMap[icon];
|
|
306
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Icon2, { size: 18 });
|
|
307
|
+
};
|
|
308
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
309
|
+
"div",
|
|
310
|
+
{
|
|
311
|
+
"data-testid": "job-header-root",
|
|
312
|
+
className: cn(
|
|
313
|
+
"-mt-8 flex w-full flex-col items-center justify-between gap-6 md:-mt-0",
|
|
314
|
+
!standalone && "rounded-3xl"
|
|
315
|
+
),
|
|
316
|
+
children: [
|
|
317
|
+
!standalone && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("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: [
|
|
318
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
319
|
+
import_image.default,
|
|
320
|
+
{
|
|
321
|
+
className: "h-full w-full rounded-t-3xl object-cover",
|
|
322
|
+
src: bannerSrc,
|
|
323
|
+
alt: "job banner",
|
|
324
|
+
fill: true
|
|
325
|
+
}
|
|
326
|
+
),
|
|
327
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
328
|
+
BackButton,
|
|
329
|
+
{
|
|
330
|
+
acceptedRoutes: backAcceptedRoutes,
|
|
331
|
+
fallbackHref: backFallbackHref,
|
|
332
|
+
className: "absolute right-2 top-2 flex items-center justify-center text-white sm:hidden",
|
|
333
|
+
"data-testid": "job-header-back-button"
|
|
334
|
+
}
|
|
335
|
+
),
|
|
336
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
337
|
+
"div",
|
|
338
|
+
{
|
|
339
|
+
className: "absolute left-4 top-8 md:left-6 md:top-16 lg:top-24",
|
|
340
|
+
"data-testid": "job-header-avatar",
|
|
341
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
342
|
+
Avatar,
|
|
343
|
+
{
|
|
344
|
+
size: "large",
|
|
345
|
+
target: "_blank",
|
|
346
|
+
href: avatarHref,
|
|
347
|
+
name: avatarName,
|
|
348
|
+
src: avatarSrc,
|
|
349
|
+
rel: "noopener noreferrer"
|
|
350
|
+
}
|
|
351
|
+
)
|
|
352
|
+
}
|
|
353
|
+
)
|
|
354
|
+
] }),
|
|
355
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex w-full flex-col items-start justify-start gap-4 px-6", children: [
|
|
356
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex flex-col md:flex-row", children: [
|
|
357
|
+
standalone && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "-mt-4 mr-4 md:mt-0", "data-testid": "job-header-avatar", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
358
|
+
Avatar,
|
|
359
|
+
{
|
|
360
|
+
size: "large",
|
|
361
|
+
target: "_blank",
|
|
362
|
+
href: avatarHref,
|
|
363
|
+
name: avatarName,
|
|
364
|
+
src: avatarSrc,
|
|
365
|
+
rel: "noopener noreferrer"
|
|
366
|
+
}
|
|
367
|
+
) }),
|
|
368
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "prose mt-4 flex w-full items-center text-grey-80 lg:prose-lg", children: subtitles?.map((subtitle, i) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
369
|
+
"div",
|
|
370
|
+
{
|
|
371
|
+
"data-testid": `job-header-subtitle-${i}`,
|
|
372
|
+
className: "flex items-center",
|
|
373
|
+
children: [
|
|
374
|
+
subtitle,
|
|
375
|
+
i < subtitles.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react3.Dot, { className: "mx-1 shrink-0", size: 10 })
|
|
376
|
+
]
|
|
377
|
+
},
|
|
378
|
+
subtitle
|
|
379
|
+
)) })
|
|
380
|
+
] }),
|
|
381
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
382
|
+
"div",
|
|
383
|
+
{
|
|
384
|
+
"data-testid": "job-header-content",
|
|
385
|
+
className: "mt-2 flex w-full flex-row flex-wrap items-center justify-between gap-1",
|
|
386
|
+
children: [
|
|
387
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
388
|
+
"h2",
|
|
389
|
+
{
|
|
390
|
+
"data-testid": "job-header-title",
|
|
391
|
+
className: "break-word max-w-full text-2xl font-bold text-black sm:max-w-2xl md:max-w-lg",
|
|
392
|
+
children: title
|
|
393
|
+
}
|
|
394
|
+
),
|
|
395
|
+
!!actions && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
396
|
+
"div",
|
|
397
|
+
{
|
|
398
|
+
className: "flex w-full justify-end gap-2 md:w-auto",
|
|
399
|
+
"data-testid": "job-header-actions",
|
|
400
|
+
children: actions
|
|
401
|
+
}
|
|
402
|
+
)
|
|
403
|
+
]
|
|
404
|
+
}
|
|
405
|
+
),
|
|
406
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
407
|
+
"div",
|
|
408
|
+
{
|
|
409
|
+
"data-testid": "job-header-tags",
|
|
410
|
+
className: "flex flex-row flex-wrap items-center justify-start gap-2",
|
|
411
|
+
children: tags?.map(({ name, label, icon }) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
412
|
+
Chip_default,
|
|
413
|
+
{
|
|
414
|
+
size: "small",
|
|
415
|
+
variant: "neutral",
|
|
416
|
+
"aria-label": name,
|
|
417
|
+
"data-testid": `job-header-tag-${name}`,
|
|
418
|
+
children: [
|
|
419
|
+
renderIcon(icon),
|
|
420
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { children: label })
|
|
421
|
+
]
|
|
422
|
+
},
|
|
423
|
+
name
|
|
424
|
+
))
|
|
425
|
+
}
|
|
426
|
+
)
|
|
427
|
+
] })
|
|
428
|
+
]
|
|
429
|
+
}
|
|
430
|
+
);
|
|
431
|
+
}
|
|
432
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
433
|
+
0 && (module.exports = {
|
|
434
|
+
JobHeader
|
|
435
|
+
});
|
|
436
|
+
//# sourceMappingURL=JobHeader.cjs.map
|