@next-degree/pickle-shared-js 0.7.51 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/components/jobPost/JobDescription.cjs +2 -1
  2. package/dist/components/jobPost/JobDescription.cjs.map +1 -1
  3. package/dist/components/jobPost/JobDescription.js +2 -1
  4. package/dist/components/jobPost/JobDescription.js.map +1 -1
  5. package/dist/components/jobPost/JobPost.cjs +2 -1
  6. package/dist/components/jobPost/JobPost.cjs.map +1 -1
  7. package/dist/components/jobPost/JobPost.d.cts +1 -1
  8. package/dist/components/jobPost/JobPost.d.ts +1 -1
  9. package/dist/components/jobPost/JobPost.js +2 -1
  10. package/dist/components/jobPost/JobPost.js.map +1 -1
  11. package/dist/components/primitives/command.d.cts +7 -7
  12. package/dist/components/primitives/command.d.ts +7 -7
  13. package/dist/components/primitives/radio-group.cjs +74 -0
  14. package/dist/components/primitives/radio-group.cjs.map +1 -0
  15. package/dist/components/primitives/radio-group.d.cts +9 -0
  16. package/dist/components/primitives/radio-group.d.ts +9 -0
  17. package/dist/components/primitives/radio-group.js +39 -0
  18. package/dist/components/primitives/radio-group.js.map +1 -0
  19. package/dist/components/ui/Button.cjs +2 -1
  20. package/dist/components/ui/Button.cjs.map +1 -1
  21. package/dist/components/ui/Button.d.cts +1 -1
  22. package/dist/components/ui/Button.d.ts +1 -1
  23. package/dist/components/ui/Button.js +2 -1
  24. package/dist/components/ui/Button.js.map +1 -1
  25. package/dist/components/ui/Checkbox.cjs +38 -13
  26. package/dist/components/ui/Checkbox.cjs.map +1 -1
  27. package/dist/components/ui/Checkbox.d.cts +2 -1
  28. package/dist/components/ui/Checkbox.d.ts +2 -1
  29. package/dist/components/ui/Checkbox.js +31 -11
  30. package/dist/components/ui/Checkbox.js.map +1 -1
  31. package/dist/components/ui/Combobox.cjs +62 -41
  32. package/dist/components/ui/Combobox.cjs.map +1 -1
  33. package/dist/components/ui/Combobox.js +53 -32
  34. package/dist/components/ui/Combobox.js.map +1 -1
  35. package/dist/components/ui/DatePicker.cjs +133 -149
  36. package/dist/components/ui/DatePicker.cjs.map +1 -1
  37. package/dist/components/ui/DatePicker.js +132 -148
  38. package/dist/components/ui/DatePicker.js.map +1 -1
  39. package/dist/components/ui/ListItem.cjs +40 -21
  40. package/dist/components/ui/ListItem.cjs.map +1 -1
  41. package/dist/components/ui/ListItem.js +36 -17
  42. package/dist/components/ui/ListItem.js.map +1 -1
  43. package/dist/components/ui/Radio.cjs +177 -0
  44. package/dist/components/ui/Radio.cjs.map +1 -0
  45. package/dist/components/ui/Radio.d.cts +27 -0
  46. package/dist/components/ui/Radio.d.ts +27 -0
  47. package/dist/components/ui/Radio.js +142 -0
  48. package/dist/components/ui/Radio.js.map +1 -0
  49. package/dist/components/ui/ReadMore.cjs +2 -1
  50. package/dist/components/ui/ReadMore.cjs.map +1 -1
  51. package/dist/components/ui/ReadMore.js +2 -1
  52. package/dist/components/ui/ReadMore.js.map +1 -1
  53. package/dist/components/ui/Select.cjs +48 -24
  54. package/dist/components/ui/Select.cjs.map +1 -1
  55. package/dist/components/ui/Select.js +49 -25
  56. package/dist/components/ui/Select.js.map +1 -1
  57. package/dist/components/ui/Switch.cjs +83 -0
  58. package/dist/components/ui/Switch.cjs.map +1 -0
  59. package/dist/components/ui/Switch.d.cts +10 -0
  60. package/dist/components/ui/Switch.d.ts +10 -0
  61. package/dist/components/ui/Switch.js +48 -0
  62. package/dist/components/ui/Switch.js.map +1 -0
  63. package/dist/components/ui/buttonShadcn.cjs +2 -9
  64. package/dist/components/ui/buttonShadcn.cjs.map +1 -1
  65. package/dist/components/ui/buttonShadcn.d.cts +2 -2
  66. package/dist/components/ui/buttonShadcn.d.ts +2 -2
  67. package/dist/components/ui/buttonShadcn.js +2 -9
  68. package/dist/components/ui/buttonShadcn.js.map +1 -1
  69. package/dist/components/ui/calendar.cjs +7 -17
  70. package/dist/components/ui/calendar.cjs.map +1 -1
  71. package/dist/components/ui/calendar.js +7 -17
  72. package/dist/components/ui/calendar.js.map +1 -1
  73. package/dist/{displayText-CQRZ2fOT.d.cts → displayText-ca_ofoAC.d.cts} +2 -2
  74. package/dist/{displayText-LlsLfkTS.d.ts → displayText-eoAHqSNz.d.ts} +2 -2
  75. package/dist/hooks/useDisplayText.d.cts +3 -3
  76. package/dist/hooks/useDisplayText.d.ts +3 -3
  77. package/dist/index.cjs +574 -259
  78. package/dist/index.cjs.map +1 -1
  79. package/dist/index.d.cts +13 -7
  80. package/dist/index.d.ts +13 -7
  81. package/dist/index.js +536 -224
  82. package/dist/index.js.map +1 -1
  83. package/dist/lib/locations.d.cts +2 -2
  84. package/dist/lib/locations.d.ts +2 -2
  85. package/dist/lib/mappings.d.cts +3 -3
  86. package/dist/lib/mappings.d.ts +3 -3
  87. package/dist/lib/salaryRange.d.cts +1 -1
  88. package/dist/lib/salaryRange.d.ts +1 -1
  89. package/dist/services/displayText.d.cts +3 -3
  90. package/dist/services/displayText.d.ts +3 -3
  91. package/dist/styles/globals.css +78 -0
  92. package/dist/styles/globals.css.map +1 -1
  93. package/dist/types/data/company_service_latest.d.cts +1 -1
  94. package/dist/types/data/company_service_latest.d.ts +1 -1
  95. package/dist/types/data/job_posting_service_latest.d.cts +1 -1
  96. package/dist/types/data/job_posting_service_latest.d.ts +1 -1
  97. package/dist/types/data/shared_pickle_output_latest.d.cts +1 -1
  98. package/dist/types/data/shared_pickle_output_latest.d.ts +1 -1
  99. package/package.json +7 -10
  100. package/dist/{company_service_latest-8IMr2hMZ.d.cts → company_service_latest-CRQFzMep.d.cts} +364 -364
  101. package/dist/{company_service_latest-8IMr2hMZ.d.ts → company_service_latest-CRQFzMep.d.ts} +364 -364
  102. package/dist/{job_posting_service_latest-CKITrYyz.d.cts → job_posting_service_latest-BOVbz68F.d.cts} +314 -314
  103. package/dist/{job_posting_service_latest-CKITrYyz.d.ts → job_posting_service_latest-BOVbz68F.d.ts} +314 -314
  104. package/dist/{shared_pickle_output_latest-Cwf2EMdH.d.cts → shared_pickle_output_latest-DKOmTyYk.d.cts} +18 -18
  105. package/dist/{shared_pickle_output_latest-Cwf2EMdH.d.ts → shared_pickle_output_latest-DKOmTyYk.d.ts} +18 -18
@@ -53,12 +53,13 @@ function cn(...inputs) {
53
53
  // src/components/ui/Button.tsx
54
54
  var import_jsx_runtime = require("react/jsx-runtime");
55
55
  var Button = (0, import_react.forwardRef)(
56
- ({ className, variant, size, asChild = false, ...props }, ref) => {
56
+ ({ className, variant, size, asChild = false, type = "button", ...props }, ref) => {
57
57
  const Component = asChild ? import_react_slot.Slot : "button";
58
58
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
59
59
  Component,
60
60
  {
61
61
  className: cn(buttonVariants({ variant, size, className })),
62
+ type,
62
63
  ref,
63
64
  ...props
64
65
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/jobPost/JobDescription.tsx","../../../src/components/ui/ReadMore.tsx","../../../src/components/ui/Button.tsx","../../../src/lib/utils.ts"],"sourcesContent":["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","'use client'\n\nimport { type 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\n type=\"button\"\n className=\"mt-2 flex items-center justify-center\"\n variant=\"link\"\n onClick={toggleText}\n >\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 { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'cva'\nimport React, { forwardRef } from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/**\n * Props for the Button component.\n * @interface ButtonProps\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n * @extends {VariantProps<typeof buttonVariants>}\n */\ninterface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * When true, the component will render its children directly without wrapping them in a button element.\n * Useful when you want to use the button styles on a different element.\n * @default false\n */\n asChild?: boolean\n}\n\n/**\n * A versatile button component that supports multiple variants and sizes.\n *\n * @component\n * @example\n * ```tsx\n * // Default button\n * <Button>Click me</Button>\n *\n * // Primary variant with large size\n * <Button variant=\"primary\" size=\"lg\">Large Button</Button>\n *\n * // As a link\n * <Button asChild>\n * <a href=\"/somewhere\">Go somewhere</a>\n * </Button>\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\n/**\n * Variant definitions for the Button component using class-variance-authority.\n * Provides consistent styling across different button variations.\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 { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"mappings":"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","names":["import_react","import_jsx_runtime","text","maxWords","isExpanded","snippet","Markdown","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../../src/components/jobPost/JobDescription.tsx","../../../src/components/ui/ReadMore.tsx","../../../src/components/ui/Button.tsx","../../../src/lib/utils.ts"],"sourcesContent":["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","'use client'\n\nimport { type 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\n type=\"button\"\n className=\"mt-2 flex items-center justify-center\"\n variant=\"link\"\n onClick={toggleText}\n >\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 { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'cva'\nimport React, { forwardRef } from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/**\n * Props for the Button component.\n * @interface ButtonProps\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n * @extends {VariantProps<typeof buttonVariants>}\n */\ninterface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * When true, the component will render its children directly without wrapping them in a button element.\n * Useful when you want to use the button styles on a different element.\n * @default false\n */\n asChild?: boolean\n}\n\n/**\n * A versatile button component that supports multiple variants and sizes.\n *\n * @component\n * @example\n * ```tsx\n * // Default button\n * <Button>Click me</Button>\n *\n * // Primary variant with large size\n * <Button variant=\"primary\" size=\"lg\">Large Button</Button>\n *\n * // As a link\n * <Button asChild>\n * <a href=\"/somewhere\">Go somewhere</a>\n * </Button>\n * ```\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, type = 'button', ...props }, ref) => {\n const Component = asChild ? Slot : 'button'\n\n return (\n <Component\n className={cn(buttonVariants({ variant, size, className }))}\n type={type}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = 'Button'\n\n/**\n * Variant definitions for the Button component using class-variance-authority.\n * Provides consistent styling across different button variations.\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 { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,IAAAA,gBAAyD;AACzD,4BAAqB;;;ACHrB,wBAAqB;AACrB,iBAAuC;AACvC,mBAAkC;;;ACFlC,kBAAsC;AACtC,4BAAwB;AAEjB,SAAS,MAAM,QAAsB;AAC1C,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC7B;;;ADyCM;AALC,IAAM,aAAS;AAAA,EACpB,CAAC,EAAE,WAAW,SAAS,MAAM,UAAU,OAAO,OAAO,UAAU,GAAG,MAAM,GAAG,QAAQ;AACjF,UAAM,YAAY,UAAU,yBAAO;AAEnC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,eAAe,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,QAC1D;AAAA,QACA;AAAA,QACC,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AACA,OAAO,cAAc;AAMrB,IAAM,qBAAiB;AAAA,EACrB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ,OAAO,CAAC,QAAQ,WAAW,QAAQ,MAAM;AAAA,QACzC,QAAQ,CAAC,QAAQ,aAAa,QAAQ,MAAM;AAAA,QAC5C,OAAO,CAAC,QAAQ,WAAW,QAAQ,MAAM;AAAA,MAC3C;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,kBAAkB;AAAA,MAChB;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,WAAW,KAAK;AAAA,MACjC;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,WAAW,KAAK;AAAA,MACjC;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,aAAa,KAAK;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AACF;;;ADvGQ,IAAAC,sBAAA;AAnCD,SAAS,SAAS,EAAE,MAAM,GAAG,MAAM,GAA4B;AACpE,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,KAAK;AAClD,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,GAAG;AAE5C,+BAAU,MAAM;AACd,UAAM,iBAAiB,MAAM;AAC3B,YAAM,cAAc,OAAO;AAC3B,UAAI,eAAe,KAAK;AACtB,oBAAY,EAAE;AAAA,MAChB,OAAO;AACL,oBAAY,GAAG;AAAA,MACjB;AAAA,IACF;AAEA,mBAAe;AACf,WAAO,iBAAiB,UAAU,cAAc;AAEhD,WAAO,MAAM,OAAO,oBAAoB,UAAU,cAAc;AAAA,EAClE,GAAG,CAAC,CAAC;AAEL,WAAS,mBAAmBC,OAAcC,WAAkBC,aAA6B;AACvF,UAAM,QAAQF,MAAK,MAAM,GAAG;AAE5B,UAAMG,WAAUD,cAAaF,QAAO,MAAM,MAAM,GAAGC,SAAQ,EAAE,KAAK,GAAG;AACrE,UAAM,eAAeC,cAAa,KAAK;AACvC,WAAO,GAAGC,QAAO,IAAI,YAAY;AAAA,EACnC;AAEA,QAAM,aAAa,MAAM,cAAc,CAAC,UAAU;AAElD,QAAM,UAAU,mBAAmB,MAAM,UAAU,UAAU;AAE7D,SACE,8CAAC,SAAK,GAAG,OACP;AAAA,iDAAC,SAAI,eAAY,kBAAiB,WAAU,qBAC1C,uDAAC,sBAAAC,SAAA,EAAU,mBAAQ,GACrB;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,SAAQ;AAAA,QACR,SAAS;AAAA,QAET,wDAAC,OAAE,WAAU,kDAAiD;AAAA;AAAA,UACtD,aAAa,SAAS;AAAA,WAC9B;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;ADlDI,IAAAC,sBAAA;AAJG,SAAS,eAAe,EAAE,YAAY,GAAwB;AACnE,MAAI,CAAC,YAAa,QAAO;AAEzB,SACE,8CAAC,SAAI,WAAU,8BACb;AAAA,iDAAC,QAAG,WAAU,qBAAoB,6BAAe;AAAA,IACjD,6CAAC,YAAS,MAAM,aAAa;AAAA,KAC/B;AAEJ;","names":["import_react","import_jsx_runtime","text","maxWords","isExpanded","snippet","Markdown","import_jsx_runtime"]}
@@ -17,12 +17,13 @@ function cn(...inputs) {
17
17
  // src/components/ui/Button.tsx
18
18
  import { jsx } from "react/jsx-runtime";
19
19
  var Button = forwardRef(
20
- ({ className, variant, size, asChild = false, ...props }, ref) => {
20
+ ({ className, variant, size, asChild = false, type = "button", ...props }, ref) => {
21
21
  const Component = asChild ? Slot : "button";
22
22
  return /* @__PURE__ */ jsx(
23
23
  Component,
24
24
  {
25
25
  className: cn(buttonVariants({ variant, size, className })),
26
+ type,
26
27
  ref,
27
28
  ...props
28
29
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ui/ReadMore.tsx","../../../src/components/ui/Button.tsx","../../../src/lib/utils.ts","../../../src/components/jobPost/JobDescription.tsx"],"sourcesContent":["'use client'\n\nimport { type 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\n type=\"button\"\n className=\"mt-2 flex items-center justify-center\"\n variant=\"link\"\n onClick={toggleText}\n >\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 { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'cva'\nimport React, { forwardRef } from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/**\n * Props for the Button component.\n * @interface ButtonProps\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n * @extends {VariantProps<typeof buttonVariants>}\n */\ninterface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * When true, the component will render its children directly without wrapping them in a button element.\n * Useful when you want to use the button styles on a different element.\n * @default false\n */\n asChild?: boolean\n}\n\n/**\n * A versatile button component that supports multiple variants and sizes.\n *\n * @component\n * @example\n * ```tsx\n * // Default button\n * <Button>Click me</Button>\n *\n * // Primary variant with large size\n * <Button variant=\"primary\" size=\"lg\">Large Button</Button>\n *\n * // As a link\n * <Button asChild>\n * <a href=\"/somewhere\">Go somewhere</a>\n * </Button>\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\n/**\n * Variant definitions for the Button component using class-variance-authority.\n * Provides consistent styling across different button variations.\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 { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\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"]}
1
+ {"version":3,"sources":["../../../src/components/ui/ReadMore.tsx","../../../src/components/ui/Button.tsx","../../../src/lib/utils.ts","../../../src/components/jobPost/JobDescription.tsx"],"sourcesContent":["'use client'\n\nimport { type 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\n type=\"button\"\n className=\"mt-2 flex items-center justify-center\"\n variant=\"link\"\n onClick={toggleText}\n >\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 { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'cva'\nimport React, { forwardRef } from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/**\n * Props for the Button component.\n * @interface ButtonProps\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n * @extends {VariantProps<typeof buttonVariants>}\n */\ninterface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * When true, the component will render its children directly without wrapping them in a button element.\n * Useful when you want to use the button styles on a different element.\n * @default false\n */\n asChild?: boolean\n}\n\n/**\n * A versatile button component that supports multiple variants and sizes.\n *\n * @component\n * @example\n * ```tsx\n * // Default button\n * <Button>Click me</Button>\n *\n * // Primary variant with large size\n * <Button variant=\"primary\" size=\"lg\">Large Button</Button>\n *\n * // As a link\n * <Button asChild>\n * <a href=\"/somewhere\">Go somewhere</a>\n * </Button>\n * ```\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, type = 'button', ...props }, ref) => {\n const Component = asChild ? Slot : 'button'\n\n return (\n <Component\n className={cn(buttonVariants({ variant, size, className }))}\n type={type}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = 'Button'\n\n/**\n * Variant definitions for the Button component using class-variance-authority.\n * Provides consistent styling across different button variations.\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 { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\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"]}
@@ -229,12 +229,13 @@ var import_cva2 = require("cva");
229
229
  var import_react = require("react");
230
230
  var import_jsx_runtime7 = require("react/jsx-runtime");
231
231
  var Button = (0, import_react.forwardRef)(
232
- ({ className, variant, size, asChild = false, ...props }, ref) => {
232
+ ({ className, variant, size, asChild = false, type = "button", ...props }, ref) => {
233
233
  const Component = asChild ? import_react_slot.Slot : "button";
234
234
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
235
235
  Component,
236
236
  {
237
237
  className: cn(buttonVariants({ variant, size, className })),
238
+ type,
238
239
  ref,
239
240
  ...props
240
241
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/jobPost/JobPost.tsx","../../../src/components/company/CompanyBenefits.tsx","../../../src/components/ui/LinkButton.tsx","../../../src/components/company/CompanyInformation.tsx","../../../src/components/ui/Avatar.tsx","../../../src/components/primitives/avatar.tsx","../../../src/lib/utils.ts","../../../src/components/company/CompanyTake.tsx","../../../src/components/ui/ReadMore.tsx","../../../src/components/ui/Button.tsx","../../../src/components/jobPost/JobDescription.tsx","../../../src/components/jobPost/JobHeader.tsx","../../../src/components/buttons/BackButton.tsx","../../../src/components/ui/Icon.tsx","../../../src/hooks/useWindowHistory.ts","../../../src/contexts/WindowHistoryProvider.tsx","../../../src/components/ui/Chip.tsx","../../../src/lib/icons.ts","../../../src/hooks/useDisplayText.ts","../../../src/lib/mappings.ts","../../../src/types/displayText.errors.tsx","../../../src/services/displayText.tsx","../../../src/lib/locations.ts","../../../src/types/data/shared_pickle_output_latest.ts","../../../src/lib/salaryRange.ts"],"sourcesContent":["'use client'\n\nimport * as DateFns from 'date-fns'\nimport { type ReactNode } from 'react'\n\nimport { CompanyBenefits } from '@/components/company/CompanyBenefits'\nimport { CompanyInformation } from '@/components/company/CompanyInformation'\nimport { CompanyTake } from '@/components/company/CompanyTake'\nimport { JobDescription } from '@/components/jobPost/JobDescription'\nimport { JobHeader } from '@/components/jobPost/JobHeader'\nimport { useDisplayText } from '@/hooks/useDisplayText'\nimport { formattedJobLocation } from '@/lib/locations'\nimport { salaryRange } from '@/lib/salaryRange'\nimport { cn } from '@/lib/utils'\nimport { type JobPostModel } from '@/types/data/job_posting_service_latest'\n\nexport type JobPostProps = {\n job: JobPostModel\n bannerSrc: string\n avatarSrc?: string\n standalone?: boolean\n fallbackHref?: string\n actions?: ReactNode\n}\n\nexport function JobPost({\n job,\n bannerSrc,\n avatarSrc,\n standalone,\n fallbackHref,\n actions,\n}: Readonly<JobPostProps>) {\n const formattedEmploymentType = useDisplayText('employmentType', job.employmentType)\n const formattedEmploymentLevel = useDisplayText('employmentLevel', job.employmentLevel)\n const formattedJobFunction = useDisplayText('jobFunction', job.jobFunction)\n const formattedLocation = formattedJobLocation(job)\n const formattedSalary = salaryRange(job.estimatedSalary)\n const formattedDate = DateFns.formatDistanceToNow(new Date(job.datePosted as string), {\n addSuffix: true,\n })\n\n const tags = [\n !!formattedSalary && {\n icon: 'banknote' as const,\n name: 'salary',\n label: `${formattedSalary} a year`,\n },\n !!formattedEmploymentType && {\n icon: 'briefcase-business' as const,\n name: 'employmentType',\n label: formattedEmploymentType,\n },\n !!formattedEmploymentLevel && {\n icon: 'circle-user' as const,\n name: 'level',\n label: formattedEmploymentLevel,\n },\n !!formattedJobFunction && {\n icon: 'briefcase-business' as const,\n name: 'jobFunction',\n label: formattedJobFunction,\n },\n !!formattedLocation && {\n icon: 'map-pin' as const,\n name: 'location',\n label: formattedLocation,\n },\n ].filter((t) => !!t)\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-10 pb-4',\n !standalone && 'border-1 rounded-3xl border-grey-5'\n )}\n >\n <JobHeader\n title={job.title}\n bannerSrc={bannerSrc}\n avatarName={job.hiringOrganization?.companyName}\n avatarSrc={job.hiringOrganization?.logo?.asset?.url}\n subtitles={[job.hiringOrganization?.companyName ?? '', `Posted ${formattedDate}`]}\n actions={actions}\n standalone={standalone}\n backFallbackHref={fallbackHref}\n tags={tags}\n />\n\n <div className=\"flex flex-col gap-8 px-6\">\n <JobDescription description={job.description} />\n\n <CompanyTake\n avatarSrc={avatarSrc}\n content={job.hiringOrganization?.companyNdg?.companyNdgTake}\n />\n\n <CompanyInformation\n name={job.hiringOrganization?.companyName ?? ''}\n how={job.hiringOrganization?.companyPhilosophy?.companyHow}\n mission={job.hiringOrganization?.companyPhilosophy?.companyMission}\n wow={job.hiringOrganization?.companyNdg?.companyWow}\n website={job.hiringOrganization?.companyWebsite}\n />\n\n <CompanyBenefits\n benefits={job.hiringOrganization?.companyCareers?.companyBenefits\n ?.map((b) => b.title)\n .filter((d) => d !== undefined)}\n />\n </div>\n </div>\n )\n}\n","export type CompanyBenefitsProps = {\n benefits?: string[]\n}\n\nexport function CompanyBenefits({ benefits }: Readonly<CompanyBenefitsProps>) {\n if (!benefits) return null\n\n return (\n <div className=\"flex flex-col gap-2\" data-testid=\"company-benefits\">\n <h2 className=\"break-word max-w-full text-xl font-bold text-black sm:max-w-2xl md:max-w-lg\">\n Company benefits\n </h2>\n <ul className=\"flex flex-col gap-3\">\n {benefits.map((benefit, i) => (\n <li key={`${benefit}-${i}`} className=\"text-base text-grey-80\">\n {benefit}\n </li>\n ))}\n </ul>\n </div>\n )\n}\n","import Link from 'next/link'\nimport React from 'react'\n\nexport interface LinkButtonProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>,\n Omit<React.ComponentProps<typeof Link>, 'href'> {\n disabled?: boolean\n href: string // Ensures href is always required and compatible with both\n useAnchor?: boolean // New prop to decide between <a> and <Link>\n}\n\n/**\n * A custom button component that can render a link using either\n * Next.js's Link component or a regular <a> tag based on a prop.\n *\n * @component\n * @example\n * ```tsx\n * <LinkButton href=\"/about\">About</LinkButton>\n * ```\n *\n * @param {object} props - The component props.\n * @param {boolean} [props.disabled=false] - Determines if the button is disabled.\n * @param {boolean} [props.useAnchor=false] - Whether to render a regular <a> instead of Next.js Link.\n * @param {React.ReactNode} props.children - The content of the button.\n * @param {string} props.href - The URL the button points to.\n * @returns {JSX.Element} The rendered LinkButton component.\n */\nexport const LinkButton = ({\n disabled = false,\n useAnchor = false,\n children,\n href,\n ...props\n}: LinkButtonProps) => {\n const Component = useAnchor ? 'a' : Link\n\n return (\n <Component\n href={href}\n className={`inline-flex items-center justify-center gap-2 rounded-full text-sm font-bold leading-tight text-black underline outline-dashed outline-2 outline-offset-2 outline-transparent hover:text-purple-100 focus:text-black focus:outline-purple-100 active:text-purple-80 ${disabled ? 'pointer-events-none text-grey-40' : ''} `}\n {...(disabled && { 'aria-disabled': true, tabIndex: -1 })}\n {...props}\n >\n {children}\n </Component>\n )\n}\n","import { LinkButton } from '@/components/ui/LinkButton'\n\nexport type CompanyInformationProps = {\n name: string\n how?: string\n mission?: string\n wow?: string\n website?: string\n}\n\nexport function CompanyInformation({\n name,\n how,\n mission,\n wow,\n website,\n}: Readonly<CompanyInformationProps>) {\n return (\n <div className=\"flex flex-col gap-2\">\n <h2\n data-testid=\"company-name\"\n className=\"break-word max-w-full text-xl font-bold text-black sm:max-w-2xl md:max-w-lg\"\n >\n About {name}\n </h2>\n\n {how && (\n <p data-testid=\"company-information\" className=\"text-base text-grey-80\">\n {how}\n </p>\n )}\n\n {mission && (\n <div className=\"flex gap-2\">\n <span>🚀</span>\n <p className=\"text-base text-grey-80\">\n <span className=\"pr-1 font-bold\">Mission</span>\n {mission}\n </p>\n </div>\n )}\n\n {wow && (\n <div className=\"flex gap-2\">\n <span>🌟</span>\n <p className=\"text-base text-grey-80\">\n <span className=\"pr-1 font-bold\">Wow Factor</span>\n {wow}\n </p>\n </div>\n )}\n\n {website && (\n <div className=\"pt-2\">\n <LinkButton\n data-testid=\"company-website-link\"\n href={website}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Website\n </LinkButton>\n </div>\n )}\n </div>\n )\n}\n","import { cva, type VariantProps } from 'cva'\nimport Link from 'next/link'\nimport { type ComponentProps } from 'react'\n\nimport { AvatarBase, AvatarFallback, AvatarImage } from '@/components/primitives/avatar'\n\nexport type AvatarProps = VariantProps<typeof avatarVariants> &\n Omit<ComponentProps<'a'>, 'href'> & {\n src?: string\n href?: string\n name?: string\n }\n\nexport function Avatar({ size, src, href, name, ...linkProps }: AvatarProps) {\n const fallbackShort = name?.slice(0, 2)\n const fallbackWords = name\n ?.split(' ')\n .map((n) => n[0])\n .join('')\n .slice(0, 2)\n\n const fallback = fallbackWords && fallbackWords.length > 1 ? fallbackWords : fallbackShort\n\n const renderAvatar = () => (\n <AvatarBase className={avatarVariants({ size })}>\n <AvatarImage src={src} alt={name} />\n <AvatarFallback>{fallback?.toUpperCase()}</AvatarFallback>\n </AvatarBase>\n )\n\n if (href) {\n return (\n <Link href={href} {...linkProps}>\n {renderAvatar()}\n </Link>\n )\n }\n\n return renderAvatar()\n}\n\nexport const avatarVariants = cva('ring ring-white ring-2', {\n variants: {\n size: {\n large: 'h-16 w-16',\n medium: 'h-10 w-10',\n small: 'h-8 w-8',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n})\n","'use client'\n\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/**\n * Adapted from Radix Primitives Avatar\n * https://ui.shadcn.com/docs/components/avatar\n * Changes made to support custom size prop and to export Avatar wrapper component\n */\n\nexport const AvatarBase = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn('relative flex shrink-0 overflow-hidden rounded-full', className)}\n {...props}\n />\n))\nAvatarBase.displayName = AvatarPrimitive.Root.displayName\n\nexport const AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn('aspect-square h-full w-full', className)}\n data-testid=\"job-card-avatar\"\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nexport const AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n 'flex h-full w-full items-center justify-center rounded-full bg-pumpkin-100 py-2 text-sm font-bold capitalize leading-normal text-white md:text-lg',\n className\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","'use client'\n\nimport { Avatar } from '@/components/ui/Avatar'\n\ninterface Props {\n content?: string\n avatarSrc?: string\n}\n\nexport function CompanyTake({ content, avatarSrc }: Readonly<Props>) {\n if (!content) return null\n\n return (\n <div\n data-testid=\"company-take\"\n className=\"align-center w-full justify-start rounded-2xl bg-green-90 p-6\"\n >\n <p className=\"text-lg font-bold text-white sm:text-xl\">The Real Dill ☘️</p>\n <div className=\"mt-2 flex items-center justify-start\">\n <p className=\"text-sm font-normal text-grey-10\">{content}</p>\n </div>\n <div className=\"mt-8 flex w-full items-center gap-3\">\n <Avatar name=\"Jon Lee\" src={avatarSrc} />\n <div className=\"flex flex-col flex-wrap items-start\">\n <p className=\"text-sm font-bold text-white\">Jon Lee, PT, DPT, OCS, FAAOMPT, MBA</p>\n <p className=\"text-xs font-normal text-grey-30\">Pickle co-founder</p>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { type 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\n type=\"button\"\n className=\"mt-2 flex items-center justify-center\"\n variant=\"link\"\n onClick={toggleText}\n >\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 { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'cva'\nimport React, { forwardRef } from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/**\n * Props for the Button component.\n * @interface ButtonProps\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n * @extends {VariantProps<typeof buttonVariants>}\n */\ninterface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * When true, the component will render its children directly without wrapping them in a button element.\n * Useful when you want to use the button styles on a different element.\n * @default false\n */\n asChild?: boolean\n}\n\n/**\n * A versatile button component that supports multiple variants and sizes.\n *\n * @component\n * @example\n * ```tsx\n * // Default button\n * <Button>Click me</Button>\n *\n * // Primary variant with large size\n * <Button variant=\"primary\" size=\"lg\">Large Button</Button>\n *\n * // As a link\n * <Button asChild>\n * <a href=\"/somewhere\">Go somewhere</a>\n * </Button>\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\n/**\n * Variant definitions for the Button component using class-variance-authority.\n * Provides consistent styling across different button variations.\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","'use client'\n\nimport { Dot } from 'lucide-react'\nimport Image from 'next/image'\nimport { type ReactNode } from 'react'\n\nimport { BackButton } from '@/components/buttons/BackButton'\nimport { Avatar } from '@/components/ui/Avatar'\nimport Chip from '@/components/ui/Chip'\nimport { iconMap } from '@/lib/icons'\nimport { cn } from '@/lib/utils'\n\nexport type JobHeaderTag = {\n name: string\n label: string\n icon: keyof typeof iconMap\n}\n\nexport type JobHeaderProps = {\n title: string\n bannerSrc: string\n subtitles?: string[]\n standalone?: boolean\n avatarSrc?: string\n avatarName?: string\n avatarHref?: string\n backFallbackHref?: string\n backAcceptedRoutes?: string[]\n actions?: ReactNode\n tags?: JobHeaderTag[]\n}\n\nexport function JobHeader({\n title,\n subtitles,\n standalone,\n bannerSrc,\n avatarSrc,\n avatarName,\n avatarHref,\n backFallbackHref,\n backAcceptedRoutes,\n actions,\n tags,\n}: Readonly<JobHeaderProps>) {\n const renderIcon = (icon: JobHeaderTag['icon']) => {\n const Icon = iconMap[icon]\n return <Icon size={18} />\n }\n\n return (\n <div\n data-testid=\"job-header-root\"\n className={cn(\n '-mt-8 flex w-full flex-col items-center justify-between gap-6 md:-mt-0',\n !standalone && 'rounded-3xl'\n )}\n >\n {!standalone && (\n <div className=\"relative flex min-h-16 w-full items-center rounded-t-3xl bg-transparent md:min-h-24 md:flex-row lg:min-h-32\">\n <Image\n className=\"h-full w-full rounded-t-3xl object-cover\"\n src={bannerSrc}\n alt=\"job banner\"\n fill\n />\n <BackButton\n acceptedRoutes={backAcceptedRoutes}\n fallbackHref={backFallbackHref}\n className=\"absolute right-2 top-2 flex items-center justify-center text-white sm:hidden\"\n data-testid=\"job-header-back-button\"\n />\n <div\n className=\"absolute left-4 top-8 md:left-6 md:top-16 lg:top-24\"\n data-testid=\"job-header-avatar\"\n >\n <Avatar\n size=\"large\"\n target=\"_blank\"\n href={avatarHref}\n name={avatarName}\n src={avatarSrc}\n rel=\"noopener noreferrer\"\n />\n </div>\n </div>\n )}\n\n <div className=\"flex w-full flex-col items-start justify-start gap-4 px-6\">\n <div className=\"flex flex-col md:flex-row\">\n {standalone && (\n <div className=\"-mt-4 mr-4 md:mt-0\" data-testid=\"job-header-avatar\">\n <Avatar\n size=\"large\"\n target=\"_blank\"\n href={avatarHref}\n name={avatarName}\n src={avatarSrc}\n rel=\"noopener noreferrer\"\n />\n </div>\n )}\n\n <div className=\"prose mt-4 flex w-full items-center text-grey-80 lg:prose-lg\">\n {subtitles?.map((subtitle, i) => (\n <div\n key={subtitle}\n data-testid={`job-header-subtitle-${i}`}\n className=\"flex items-center\"\n >\n {subtitle}\n {i < subtitles.length - 1 && <Dot className=\"mx-1 shrink-0\" size={10} />}\n </div>\n ))}\n </div>\n </div>\n\n <div\n data-testid=\"job-header-content\"\n className=\"mt-2 flex w-full flex-row flex-wrap items-center justify-between gap-1\"\n >\n <h2\n data-testid=\"job-header-title\"\n className=\"break-word max-w-full text-2xl font-bold text-black sm:max-w-2xl md:max-w-lg\"\n >\n {title}\n </h2>\n\n {!!actions && (\n <div\n className=\"flex w-full justify-end gap-2 md:w-auto\"\n data-testid=\"job-header-actions\"\n >\n {actions}\n </div>\n )}\n </div>\n\n <div\n data-testid=\"job-header-tags\"\n className=\"flex flex-row flex-wrap items-center justify-start gap-2\"\n >\n {tags?.map(({ name, label, icon }) => (\n <Chip\n key={name}\n size=\"small\"\n variant=\"neutral\"\n aria-label={name}\n data-testid={`job-header-tag-${name}`}\n >\n {renderIcon(icon)}\n <span>{label}</span>\n </Chip>\n ))}\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { X } from 'lucide-react'\nimport { useRouter } from 'next/navigation'\n\nimport { Icon } from '@/components/ui/Icon'\nimport { useWindowHistory } from '@/hooks/useWindowHistory'\n\ninterface Props extends React.HTMLAttributes<HTMLButtonElement> {\n acceptedRoutes?: string[]\n fallbackHref?: string\n}\n\nexport function BackButton({ acceptedRoutes, fallbackHref, className, ...props }: Readonly<Props>) {\n const { history } = useWindowHistory()\n const router = useRouter()\n\n const isAcceptedRoute = (r: string) =>\n !!acceptedRoutes?.find((route) => new RegExp('^' + route + '$', 'i').test(r))\n\n const goBack = () => {\n const previous = history[history.length - 2]\n if (history.length > 1 && isAcceptedRoute(previous)) {\n router.back()\n } else {\n router.push(fallbackHref ?? '/')\n }\n }\n\n return (\n <Icon\n aria-label=\"back button\"\n variant=\"transparent\"\n size=\"small\"\n onClick={goBack}\n className={className}\n {...props}\n >\n <X />\n </Icon>\n )\n}\n","import { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'cva'\nimport { forwardRef } from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nimport { cn } from '@/lib/utils'\n\ninterface IconProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof iconVariants> {\n active?: boolean\n readonly?: boolean\n}\n\nexport const Icon = forwardRef<HTMLButtonElement, IconProps>(\n ({ variant, size, active = false, readonly = false, className, ...props }, ref) => {\n const Component = readonly ? Slot : 'button'\n return (\n <Component\n className={cn(\n twMerge(iconVariants({ variant: active ? 'active' : variant, size })),\n className\n )}\n {...props}\n ref={ref}\n />\n )\n }\n)\n\nIcon.displayName = 'Icon'\n\nconst iconVariants = cva(\n [\n 'inline-flex',\n 'items-center',\n 'rounded-full',\n 'outline-2',\n 'outline-offset-2',\n 'outline-dashed',\n 'outline-transparent',\n 'disabled:text-grey-40',\n 'disabled:bg-transparent',\n 'disabled:pointer-events-none',\n ],\n {\n variants: {\n variant: {\n filled: [\n 'border',\n 'border-green-80',\n 'bg-green-90',\n 'text-white',\n 'hover:bg-green-80',\n 'active:bg-green-80',\n 'focus:outline-pickle-100',\n 'disabled:bg-green-70',\n ],\n transparent: [\n 'text-black',\n 'hover:bg-grey-5',\n 'active:bg-grey-10',\n 'focus:outline-purple-100',\n ],\n tonal: [\n 'border',\n 'border-grey-5',\n 'hover:border-grey-10',\n 'active:border-grey-20',\n 'focus:outline-purple-100',\n ],\n active: ['text-black', 'bg-pickle-100'],\n },\n size: {\n small: ['h-10', 'w-10', 'p-3'],\n medium: ['h-12', 'w-12', 'p-4'],\n large: ['h-14', 'w-14', 'p-4'],\n },\n },\n defaultVariants: {\n variant: 'filled',\n size: 'medium',\n },\n }\n)\n","import { useContext } from 'react'\n\nimport {\n WindowHistoryContext,\n type WindowHistoryContextProps,\n} from '@/contexts/WindowHistoryProvider'\n\nexport function useWindowHistory(): WindowHistoryContextProps {\n const windowHistoryContext = useContext(WindowHistoryContext)\n\n return windowHistoryContext\n}\n","'use client'\n\nimport { useSearchParams } from 'next/navigation'\nimport { createContext, type PropsWithChildren, useEffect, useMemo, useState } from 'react'\n\nexport interface WindowHistoryContextProps {\n history: string[]\n}\n\nexport const WindowHistoryContext = createContext({} as WindowHistoryContextProps)\n\nexport function WindowHistoryProvider({ children }: Readonly<PropsWithChildren>) {\n const [history, setHistory] = useState<string[]>([])\n const searchParams = useSearchParams()\n\n useEffect(() => {\n setHistory((prev) =>\n prev.at(-1) === window.location.href ? prev : [...prev, window.location.href]\n )\n }, [searchParams])\n\n const contextValue = useMemo(() => ({ history }), [history])\n\n return (\n <WindowHistoryContext.Provider value={contextValue}>{children}</WindowHistoryContext.Provider>\n )\n}\n","import { cva, type VariantProps } from 'cva'\nimport React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\ninterface ChipProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof chipVariants> {}\n\nconst Chip = ({ className, variant, size, ...props }: ChipProps) => (\n <div className={twMerge(chipVariants({ variant, size, className }))} {...props} />\n)\n\nconst chipVariants = cva(['flex', 'items-center', 'rounded-3xl', 'border', 'w-fit'], {\n variants: {\n variant: {\n neutral: ['text-grey-80', 'border-grey-10'],\n primary: ['text-purple-100', 'border-purple-20'],\n danger: ['text-pumpkin-100', 'border-pumpkin-20'],\n onboarding: ['text-green-100', 'bg-green-10', 'cursor-pointer'],\n onboardingSelected: ['text-white', 'bg-green-90', 'cursor-pointer'],\n },\n size: {\n small: ['text-sm', 'leading-5', 'px-2', 'py-1', 'gap-1.5'],\n medium: ['text-base', 'leading-6', 'px-3', 'py-2', 'gap-2'],\n },\n },\n defaultVariants: {\n variant: 'neutral',\n size: 'medium',\n },\n})\n\nexport default Chip\n","import {\n Banknote,\n Bell,\n BriefcaseBusiness,\n Building,\n Building2,\n CircleUser,\n CircleUserRound,\n Clock2,\n Contact,\n GalleryVerticalEnd,\n Home,\n KeyRound,\n Layers,\n LifeBuoy,\n MapPin,\n MessageSquareDot,\n Settings,\n SquareKanban,\n Users,\n Wallet,\n} from 'lucide-react'\n\nexport const iconMap = {\n house: Home,\n layers: Layers,\n users: Users,\n settings: Settings,\n building: Building,\n bell: Bell,\n wallet: Wallet,\n contact: Contact,\n banknote: Banknote,\n 'message-square-dot': MessageSquareDot,\n 'life-buoy': LifeBuoy,\n 'building-2': Building2,\n 'gallery-vertical-end': GalleryVerticalEnd,\n 'square-kanban': SquareKanban,\n 'briefcase-business': BriefcaseBusiness,\n 'circle-user': CircleUser,\n 'key-round': KeyRound,\n 'clock-2': Clock2,\n 'circle-user-round': CircleUserRound,\n 'map-pin': MapPin,\n} as const\n","import { useEffect, useMemo, useState } from 'react'\n\nimport { DisplayTextService, type ServiceMappings } from '@/services/displayText'\nimport { DisplayTextValueNotFoundError } from '@/types/displayText.errors'\n\nexport const useDisplayText = (\n scope: keyof ServiceMappings,\n value: string | string[] | undefined | null\n) => {\n const [displayText, setDisplayText] = useState('')\n const displayService = useMemo(() => new DisplayTextService(), [])\n\n useEffect(() => {\n if (!displayService || !value) {\n setDisplayText('')\n return\n }\n void (async () => {\n try {\n const result = await displayService.getDisplayText(scope, value)\n if (typeof result === 'string') {\n setDisplayText(result)\n } else {\n console.error('Expected a string result, but got:', result)\n }\n } catch (error) {\n if (error instanceof DisplayTextValueNotFoundError) {\n console.warn('Display text value not found:', value)\n setDisplayText(String(value))\n } else {\n console.error('Unexpected error formatting text:', error)\n setDisplayText(String(value))\n }\n }\n })()\n }, [scope, value, displayService])\n\n return displayText\n}\n","// displayTextMappings.ts\nimport { type DisplayTextConfig } from '@/services/displayText'\nimport {\n type BestFitEnum,\n type ClinicalSettingEnum,\n type ClinicalSpecialtyEnum,\n type EmploymentLevelEnum,\n type EmploymentTypeEnum,\n type JobFunctionEnum,\n type ShiftEnum,\n} from '@/types/data/job_posting_service_latest'\nimport { type CurrencyEnum, type UnitTextEnum } from '@/types/data/shared_pickle_output_latest'\n\n// employment Type Display\nexport const employmentTypeDisplayText: DisplayTextConfig<typeof EmploymentTypeEnum> = {\n FULL_TIME: {\n en: 'Full Time',\n },\n INTERNSHIP: {\n en: 'Internship',\n },\n OTHER: {\n en: 'Other',\n },\n PART_TIME: {\n en: 'Part Time',\n },\n PER_DIEM: {\n en: 'Per-Diem',\n },\n TEMPORARY: {\n en: 'Temporary',\n },\n CONTRACT: {\n en: 'Contract',\n },\n}\n\nexport const unitTextDisplayText: DisplayTextConfig<typeof UnitTextEnum> = {\n DAY: {\n en: 'Day',\n },\n HOUR: {\n en: 'Hour',\n },\n MONTH: {\n en: 'Month',\n },\n PER_ACTIVITY: {\n en: 'Per Activity',\n },\n WEEK: {\n en: 'Week',\n },\n YEAR: {\n en: 'Year',\n },\n}\n\nexport const currencyDisplayText: DisplayTextConfig<typeof CurrencyEnum> = {\n EUR: {\n en: '€',\n },\n GBP: {\n en: '£',\n },\n USD: {\n en: '$',\n },\n}\n\nexport const employmentLevelDisplayText: DisplayTextConfig<typeof EmploymentLevelEnum> = {\n DIRECTOR: {\n en: 'Director',\n },\n ENTRY_LEVEL: {\n en: 'Entry Level',\n },\n EXECUTIVE: {\n en: 'Executive',\n },\n EXPERIENCED: {\n en: 'Experienced',\n },\n INTERN: {\n en: 'Intern',\n },\n MANAGER: {\n en: 'Manager',\n },\n}\n\nexport const jobFunctionDisplayText: DisplayTextConfig<typeof JobFunctionEnum> = {\n CLINICAL_RESEARCH: {\n en: 'Clinical Research',\n },\n CUSTOMER_SUCCESS: {\n en: 'Customer Success',\n },\n DATA_ANALYTICS: {\n en: 'Data Analytics',\n },\n FINANCE_AND_AUDIT: {\n en: 'Finance and Audit',\n },\n MARKETING: {\n en: 'Marketing',\n },\n OPERATIONS: {\n en: 'Operations',\n },\n PEOPLE_HUMAN_RESOURCES: {\n en: 'People Human Resources',\n },\n PRODUCT_AND_TECH: {\n en: 'Product and Tech',\n },\n QUALITY_ASSURANCE_AND_OUTCOMES: {\n en: 'Quality Assurance and Outcomes',\n },\n SALES_AND_BUSINESS_DEVELOPMENT: {\n en: 'Sales and Business Development',\n },\n STRATEGY_AND_CONSULTING: {\n en: 'Strategy and Consulting',\n },\n}\n\nexport const bestFitDisplayText: DisplayTextConfig<typeof BestFitEnum> = {\n DENTIST: {\n en: 'Dentist',\n },\n DIETICIAN: {\n en: 'Dietician',\n },\n DOULA: {\n en: 'Doula',\n },\n MEDICAL_ASSISTANT: {\n en: 'Medical Assistant',\n },\n MIDWIFE: {\n en: 'Midwife',\n },\n NURSE: {\n en: 'Nurse',\n },\n OCCUPATIONAL_THERAPIST: {\n en: 'Occupational Therapist',\n },\n PHARMACIST: {\n en: 'Pharmacist',\n },\n PHYSICAL_THERAPIST: {\n en: 'Physical Therapist',\n },\n PHYSICIAN: {\n en: 'Physician',\n },\n PHYSICIAN_ASSISTANT: {\n en: 'Physician Assistant',\n },\n PSYCHOLOGIST: {\n en: 'Psychologist',\n },\n RADIOLOGIST: {\n en: 'Radiologist',\n },\n SOCIAL_WORKER: {\n en: 'Social Worker',\n },\n SPEECH_LANGUAGE_PATHOLOGIST: {\n en: 'Speech Language Pathologist',\n },\n SURGEON: {\n en: 'Surgeon',\n },\n}\n\nexport const clinicalSpecialtyDisplayText: DisplayTextConfig<typeof ClinicalSpecialtyEnum> = {\n ANESTHESIOLOGY: {\n en: 'Anesthesiology',\n },\n CARDIOLOGY: {\n en: 'Cardiology',\n },\n CARDIOVASCULAR_AND_PULMONARY: {\n en: 'Cardiovascular and Pulmonary',\n },\n CASE_MANAGEMENT: {\n en: 'Case Management',\n },\n CHRONIC_PAIN: {\n en: 'Chronic Pain',\n },\n CLINICAL_ELECTROPHYSIOLOGY: {\n en: 'Clinical Electrophysiology',\n },\n CRITICAL_AND_ACUTE_CARE: {\n en: 'Critical and Acute Care',\n },\n DERMATOLOGY: {\n en: 'Dermatology',\n },\n DIALYSIS: {\n en: 'Dialysis',\n },\n EMERGENCY_MEDICINE: {\n en: 'Emergency Medicine',\n },\n ENDOCRINOLOGY: {\n en: 'Endocrinology',\n },\n ERGONOMICS: {\n en: 'Ergonomics',\n },\n FEEDING_EATING_AND_SWALLOWING: {\n en: 'Feeding, Eating, and Swallowing',\n },\n GASTROENTEROLOGY: {\n en: 'Gastroenterology',\n },\n GERIATRICS: {\n en: 'Geriatrics',\n },\n HAND_THERAPY: {\n en: 'Hand Therapy',\n },\n HEMATOLOGY: {\n en: 'Hematology',\n },\n HOLISTIC_MEDICINE: {\n en: 'Holistic Medicine',\n },\n INFORMATICS: {\n en: 'Informatics',\n },\n INTERNAL_MEDICINE: {\n en: 'Internal Medicine',\n },\n LABOR_AND_DELIVERY: {\n en: 'Labor and Delivery',\n },\n MANUAL_THERAPY: {\n en: 'Manual Therapy',\n },\n MED_SURG: {\n en: 'Medical-Surgical',\n },\n MENTAL_HEALTH: {\n en: 'Mental Health',\n },\n NEPHROLOGY: {\n en: 'Nephrology',\n },\n NEUROLOGY: {\n en: 'Neurology',\n },\n ONCOLOGY: {\n en: 'Oncology',\n },\n ORTHOPEDICS: {\n en: 'Orthopedics',\n },\n OTOLARYNGOLOGY: {\n en: 'Otolaryngology',\n },\n PEDIATRICS: {\n en: 'Pediatrics',\n },\n PHYSICAL_AND_REHABILITATION_MEDICINE: {\n en: 'Physical and Rehabilitation Medicine',\n },\n PLASTIC_SURGERY: {\n en: 'Plastic Surgery',\n },\n PRIMARY_CARE: {\n en: 'Primary Care',\n },\n PSYCHIATRY: {\n en: 'Psychiatry',\n },\n PULMONOLOGY: {\n en: 'Pulmonology',\n },\n RADIOLOGY: {\n en: 'Radiology',\n },\n SENSORY: {\n en: 'Sensory',\n },\n SPORTS: {\n en: 'Sports',\n },\n SURGERY: {\n en: 'Surgery',\n },\n TRANSPLANT_SURGERY: {\n en: 'Transplant Surgery',\n },\n TRAUMA_MEDICINE: {\n en: 'Trauma Medicine',\n },\n URGENT_CARE: {\n en: 'Urgent Care',\n },\n UROLOGY: {\n en: 'Urology',\n },\n VISION: {\n en: 'Vision',\n },\n WOMENS_HEALTH: {\n en: \"Women's Health\",\n },\n WOUND_AND_BURN_CARE: {\n en: 'Wound and Burn Care',\n },\n WOUND_MANAGEMENT: {\n en: 'Wound Management',\n },\n}\n\nexport const shiftDisplayText: DisplayTextConfig<typeof ShiftEnum> = {\n TEN_HOUR: {\n en: '10 Hour',\n },\n TWELVE_HOUR: {\n en: '12 Hour',\n },\n EIGHT_HOUR: {\n en: '8 Hour',\n },\n DAY: {\n en: 'Day',\n },\n EVENING: {\n en: 'Evening',\n },\n FLEXIBLE: {\n en: 'Flexible',\n },\n MID_SHIFT: {\n en: 'Mid Shift',\n },\n MONDAY_TO_FRIDAY: {\n en: 'Monday to Friday',\n },\n NIGHT: {\n en: 'Night',\n },\n ON_CALL: {\n en: 'On Call',\n },\n WEEKENDS: {\n en: 'Weekends',\n },\n}\n\nexport const clinicalSettingDisplayText: DisplayTextConfig<typeof ClinicalSettingEnum> = {\n ACUTE_CARE: {\n en: 'Acute Care',\n },\n AMBULATORY_SURGERY_CENTER: {\n en: 'Ambulatory Surgery Center',\n },\n CLINIC: {\n en: 'Clinic',\n },\n HOME_HEALTH: {\n en: 'Home Health',\n },\n HOSPITAL: {\n en: 'Hospital',\n },\n INPATIENT: {\n en: 'Inpatient',\n },\n LONG_TERM_CARE: {\n en: 'Long Term Care',\n },\n MED_SPA: {\n en: 'Med Spa',\n },\n NURSING_HOME: {\n en: 'Nursing Home',\n },\n OFFICE: {\n en: 'Office',\n },\n OUTPATIENT: {\n en: 'Outpatient',\n },\n PRIVATE_PRACTICE: {\n en: 'Private Practice',\n },\n REHAB_CENTER: {\n en: 'Rehab Center',\n },\n SCHOOL: {\n en: 'School',\n },\n SKILLED_NURSING_FACILITY: {\n en: 'Skilled Nursing Facility',\n },\n}\n\nexport const defaultMappings = {\n employmentType: employmentTypeDisplayText,\n unitText: unitTextDisplayText,\n currency: currencyDisplayText,\n employmentLevel: employmentLevelDisplayText,\n jobFunction: jobFunctionDisplayText,\n bestFit: bestFitDisplayText,\n clinicalSpecialty: clinicalSpecialtyDisplayText,\n clinicalSetting: clinicalSettingDisplayText,\n shift: shiftDisplayText,\n} as const\n","export class DisplayTextScopeNotFoundError extends Error {\n constructor(scope: string) {\n super(`No display text mapping found for scope: ${scope}`)\n this.name = 'DisplayTextScopeNotFoundError'\n }\n}\n\nexport class DisplayTextValueNotFoundError extends Error {\n constructor(value: string, scope: string) {\n super(`No display text found for value: '${value}' in scope: '${scope}'`)\n this.name = 'DisplayTextValueNotFoundError'\n }\n}\n","import { type z } from 'zod'\n\nimport { defaultMappings } from '@/lib/mappings'\nimport {\n DisplayTextScopeNotFoundError,\n DisplayTextValueNotFoundError,\n} from '@/types/displayText.errors'\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst SUPPORTED_LANGUAGES = ['en'] as const\ntype SupportedLanguage = (typeof SUPPORTED_LANGUAGES)[number]\n\n// Define the display text configuration type for Zod enums\nexport type ServiceMappings = typeof defaultMappings\n\ntype ZodEnumValue<T> = T extends z.ZodEnum<[string, ...string[]]> ? z.infer<T> : never\n\nexport type DisplayTextConfig<T = string> = {\n [K in T extends z.ZodEnum<[string, ...string[]]> ? ZodEnumValue<T> : string]: {\n [L in SupportedLanguage]: string\n }\n} & Record<string, { [L in SupportedLanguage]: string }>\n\n// Define the expected interface for the service\nexport interface IDisplayTextService {\n getDisplayText: (\n scope: keyof ServiceMappings,\n value: string | string[],\n language?: SupportedLanguage\n ) => Promise<string>\n}\n\n// define the service\nexport class DisplayTextService implements IDisplayTextService {\n private readonly defaultLanguage: SupportedLanguage = 'en'\n private readonly mappings: ServiceMappings\n\n constructor(customMappings?: Partial<ServiceMappings>) {\n this.mappings = {\n ...defaultMappings, // Use all pre-defined mappings as defaults\n ...customMappings, // Override with any custom mappings if provided\n }\n }\n\n async getDisplayText(\n scope: keyof ServiceMappings,\n value: string | string[],\n language: SupportedLanguage = this.defaultLanguage\n ): Promise<string> {\n const scopeMapping = this.mappings[scope]\n\n if (!scopeMapping) {\n throw new DisplayTextScopeNotFoundError(scope)\n }\n\n if (Array.isArray(value)) {\n const displayTextPromises = value.map((v) => this.getDisplayText(scope, v, language))\n const displayTexts = await Promise.all(displayTextPromises)\n return displayTexts.filter((v) => !!v).join(', ')\n }\n\n const displayTexts = scopeMapping[value]\n\n if (!displayTexts) {\n throw new DisplayTextValueNotFoundError(value, scope)\n }\n\n return displayTexts[language] || displayTexts[this.defaultLanguage] || value\n }\n}\n","import { type JobPostModel } from '@/types/data/job_posting_service_latest'\nimport { type PostalAddressModel } from '@/types/data/shared_pickle_output_latest'\n\nexport function formattedAddress(address: PostalAddressModel): string | null {\n const { addressLocality, addressRegion, addressCountry } = address\n if (addressLocality && addressRegion) return `${addressLocality}, ${addressRegion}`\n if (addressRegion && addressCountry) return `${addressRegion}, ${addressCountry}`\n if (addressRegion) return addressRegion\n if (addressCountry) return addressCountry\n return null\n}\n\nexport function formattedJobLocation(job: JobPostModel) {\n const address = job.jobLocation && formattedAddress(job.jobLocation)\n const remote = job.isRemote ? 'Remote' : ''\n\n return [address, remote].filter(Boolean).join(' | ')\n}\n","/*\nID:c2c9f095-256f-44df-ada7-73753d8f4f92\nDomain: shared\nData Product: shared_pickle_output\nVersion: 1.0.2\nThis data contract defines a set of shared outputs from the Pickle model(s).\n*/\n\nimport { z } from 'zod';\n\n\n// Enums\n\nexport const TypeEnum = z.enum(['IMAGE']);\nexport const DetailLevelEnum = z.enum(['COUNTRY', 'GEO', 'LOCALITY', 'POSTAL_CODE', 'REGION']);\nexport const UnitTextEnum = z.enum(['DAY', 'HOUR', 'MONTH', 'PER_ACTIVITY', 'WEEK', 'YEAR']);\nexport const CurrencyEnum = z.enum(['EUR', 'GBP', 'USD']);\n\n\nexport const postalAddressSchema = z.object({\n version: z.literal('1.0.0').default('1.0.0'),\n type: z.string().describe(\"Document type used for schema\"),\n addressCountry: z.string().describe(\"The physical country as defined in ISO 3166 Alpha-2\"),\n addressRegion: z.optional(z.string()).describe(\"The region in which the locality is, and which is in the country.\"),\n 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.\"),\n streetAddress: z.optional(z.string()).describe(\"The street name of the address within the locality.\"),\n streetNumber: z.optional(z.string()).describe(\"The house of building number within the street.\"),\n postalCode: z.optional(z.string()).describe(\"The postal code\"),\n description: z.optional(z.string()).describe(\"A descriptive string containing the full address.\"),\n});\n\nexport type PostalAddressModel = z.infer<typeof postalAddressSchema>;\n\nexport const placeSchema = z.object({\n version: z.literal('1.0.0').default('1.0.0'),\n detailLevel: z.optional(DetailLevelEnum),\n latitude: z.optional(z.number()).describe(\"The latitude of a location.\"),\n longitude: z.optional(z.number()).describe(\"The longitude of a location.\"),\n address: z.optional(postalAddressSchema).describe(\"The physical place of the location\"),\n});\n\nexport type PlaceModel = z.infer<typeof placeSchema>;\n\nexport const quantitativeValueSchema = z.object({\n version: z.literal('1.0.0').default('1.0.0'),\n type: z.string().describe(\"Document type used for schema\"),\n 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.\"),\n minValue: z.optional(z.number()).describe(\"The single minium value in a range for a quantitative_value, requires a maximum value.\"),\n maxValue: z.optional(z.number()).describe(\"The maximum value in a range for a quantitative_value, requires a minimum value.\"),\n unitText: UnitTextEnum,\n});\n\nexport type QuantitativeValueModel = z.infer<typeof quantitativeValueSchema>;\n\nexport const monetaryAmountSchema = z.object({\n version: z.literal('1.0.0').default('1.0.0'),\n type: z.string().describe(\"Document type used for schema\"),\n 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.\"),\n minValue: z.optional(z.number()).describe(\"The annualized single minium value in a range for a quantitative_value. Deprecated use value.minValue\"),\n maxValue: z.optional(z.number()).describe(\"The annualized maximum value in a range for a quantitative_value. Deprecated use value.maxValue\"),\n value: z.optional(quantitativeValueSchema).describe(\"The quantitative_value for a given salary\"),\n currency: z.optional(CurrencyEnum),\n});\n\nexport type MonetaryAmountModel = z.infer<typeof monetaryAmountSchema>;\n\nexport const imageAssetSchema = z.object({\n version: z.literal('1.0.0').default('1.0.0'),\n altText: z.optional(z.string()).describe(\"The alt text for the image\"),\n assetId: z.optional(z.string()).describe(\"The asset ID for the image\"),\n description: z.optional(z.string()).describe(\"The description for the image\"),\n extension: z.optional(z.string()).describe(\"The extension for the image\"),\n label: z.optional(z.string()).describe(\"The label for the image\"),\n mimeType: z.optional(z.string()).describe(\"The mime type for the image\"),\n originalFilename: z.optional(z.string()).describe(\"The original filename for the image\"),\n path: z.optional(z.string()).describe(\"The path for the image\"),\n sha1Hash: z.optional(z.string()).describe(\"The SHA1 hash for the image\"),\n size: z.optional(z.number()).describe(\"The size for the image\"),\n title: z.optional(z.string()).describe(\"The title for the image\"),\n uploadId: z.optional(z.string()).describe(\"The upload ID for the image\"),\n url: z.optional(z.string()).describe(\"The URL for the image\"),\n});\n\nexport type ImageAssetModel = z.infer<typeof imageAssetSchema>;\n\nexport const imageSchema = z.object({\n version: z.literal('1.0.0').default('1.0.0'),\n type: z.string().describe(\"Document type used for schema\"),\n asset: z.optional(imageAssetSchema).describe(\"The asset for the image\"),\n});\n\nexport type ImageModel = z.infer<typeof imageSchema>;","import { CurrencyEnum, type MonetaryAmountModel } from '@/types/data/shared_pickle_output_latest'\n\nexport function salaryRange(salary?: MonetaryAmountModel) {\n if (!salary) return null\n\n const min = salary.minValue\n const max = salary.maxValue\n const single = salary.singleValue\n const signs = {\n [CurrencyEnum.Values.USD]: '$',\n [CurrencyEnum.Values.GBP]: '£',\n [CurrencyEnum.Values.EUR]: '€',\n }\n const sign = signs[salary.currency ?? CurrencyEnum.Values.USD]\n\n // if min and max are null and single is null return null\n if (min == null && max == null && single == null) return null\n // if single value return a formatted single value\n if (single != null) return sign + single.toLocaleString()\n // if min and max are the same return a formatted single value\n if (min === max) return sign + min?.toLocaleString()\n // if min and max are different return a formatted range\n if (min != null && max != null)\n return sign + min?.toLocaleString() + ' - ' + sign + max?.toLocaleString()\n return null\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,cAAyB;;;ACMrB;AAJG,SAAS,gBAAgB,EAAE,SAAS,GAAmC;AAC5E,MAAI,CAAC,SAAU,QAAO;AAEtB,SACE,6CAAC,SAAI,WAAU,uBAAsB,eAAY,oBAC/C;AAAA,gDAAC,QAAG,WAAU,+EAA8E,8BAE5F;AAAA,IACA,4CAAC,QAAG,WAAU,uBACX,mBAAS,IAAI,CAAC,SAAS,MACtB,4CAAC,QAA2B,WAAU,0BACnC,qBADM,GAAG,OAAO,IAAI,CAAC,EAExB,CACD,GACH;AAAA,KACF;AAEJ;;;ACrBA,kBAAiB;AAsCb,IAAAA,sBAAA;AAVG,IAAM,aAAa,CAAC;AAAA,EACzB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAuB;AACrB,QAAM,YAAY,YAAY,MAAM,YAAAC;AAEpC,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,uQAAuQ,WAAW,qCAAqC,EAAE;AAAA,MACnU,GAAI,YAAY,EAAE,iBAAiB,MAAM,UAAU,GAAG;AAAA,MACtD,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;AC5BM,IAAAC,sBAAA;AATC,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsC;AACpC,SACE,8CAAC,SAAI,WAAU,uBACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,eAAY;AAAA,QACZ,WAAU;AAAA,QACX;AAAA;AAAA,UACQ;AAAA;AAAA;AAAA,IACT;AAAA,IAEC,OACC,6CAAC,OAAE,eAAY,uBAAsB,WAAU,0BAC5C,eACH;AAAA,IAGD,WACC,8CAAC,SAAI,WAAU,cACb;AAAA,mDAAC,UAAK,uBAAE;AAAA,MACR,8CAAC,OAAE,WAAU,0BACX;AAAA,qDAAC,UAAK,WAAU,kBAAiB,qBAAO;AAAA,QACvC;AAAA,SACH;AAAA,OACF;AAAA,IAGD,OACC,8CAAC,SAAI,WAAU,cACb;AAAA,mDAAC,UAAK,uBAAE;AAAA,MACR,8CAAC,OAAE,WAAU,0BACX;AAAA,qDAAC,UAAK,WAAU,kBAAiB,wBAAU;AAAA,QAC1C;AAAA,SACH;AAAA,OACF;AAAA,IAGD,WACC,6CAAC,SAAI,WAAU,QACb;AAAA,MAAC;AAAA;AAAA,QACC,eAAY;AAAA,QACZ,MAAM;AAAA,QACN,QAAO;AAAA,QACP,KAAI;AAAA,QACL;AAAA;AAAA,IAED,GACF;AAAA,KAEJ;AAEJ;;;AClEA,iBAAuC;AACvC,IAAAC,eAAiB;;;ACCjB,sBAAiC;AACjC,YAAuB;;;ACHvB,kBAAsC;AACtC,4BAAwB;AAEjB,SAAS,MAAM,QAAsB;AAC1C,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC7B;;;ADYE,IAAAC,sBAAA;AAJK,IAAM,aAAmB,iBAG9B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,uDAAuD,SAAS;AAAA,IAC7E,GAAG;AAAA;AACN,CACD;AACD,WAAW,cAA8B,qBAAK;AAEvC,IAAM,cAAoB,iBAG/B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,+BAA+B,SAAS;AAAA,IACtD,eAAY;AAAA,IACX,GAAG;AAAA;AACN,CACD;AACD,YAAY,cAA8B,sBAAM;AAEzC,IAAM,iBAAuB,iBAGlC,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,eAAe,cAA8B,yBAAS;;;AD3BlD,IAAAC,sBAAA;AAXG,SAAS,OAAO,EAAE,MAAM,KAAK,MAAM,MAAM,GAAG,UAAU,GAAgB;AAC3E,QAAM,gBAAgB,MAAM,MAAM,GAAG,CAAC;AACtC,QAAM,gBAAgB,MAClB,MAAM,GAAG,EACV,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EACf,KAAK,EAAE,EACP,MAAM,GAAG,CAAC;AAEb,QAAM,WAAW,iBAAiB,cAAc,SAAS,IAAI,gBAAgB;AAE7E,QAAM,eAAe,MACnB,8CAAC,cAAW,WAAW,eAAe,EAAE,KAAK,CAAC,GAC5C;AAAA,iDAAC,eAAY,KAAU,KAAK,MAAM;AAAA,IAClC,6CAAC,kBAAgB,oBAAU,YAAY,GAAE;AAAA,KAC3C;AAGF,MAAI,MAAM;AACR,WACE,6CAAC,aAAAC,SAAA,EAAK,MAAa,GAAG,WACnB,uBAAa,GAChB;AAAA,EAEJ;AAEA,SAAO,aAAa;AACtB;AAEO,IAAM,qBAAiB,gBAAI,0BAA0B;AAAA,EAC1D,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAC;;;AGnCK,IAAAC,sBAAA;AARC,SAAS,YAAY,EAAE,SAAS,UAAU,GAAoB;AACnE,MAAI,CAAC,QAAS,QAAO;AAErB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAU;AAAA,MAEV;AAAA,qDAAC,OAAE,WAAU,2CAA0C,wCAAgB;AAAA,QACvE,6CAAC,SAAI,WAAU,wCACb,uDAAC,OAAE,WAAU,oCAAoC,mBAAQ,GAC3D;AAAA,QACA,8CAAC,SAAI,WAAU,uCACb;AAAA,uDAAC,UAAO,MAAK,WAAU,KAAK,WAAW;AAAA,UACvC,8CAAC,SAAI,WAAU,uCACb;AAAA,yDAAC,OAAE,WAAU,gCAA+B,iDAAmC;AAAA,YAC/E,6CAAC,OAAE,WAAU,oCAAmC,+BAAiB;AAAA,aACnE;AAAA,WACF;AAAA;AAAA;AAAA,EACF;AAEJ;;;AC5BA,IAAAC,gBAAyD;AACzD,4BAAqB;;;ACHrB,wBAAqB;AACrB,IAAAC,cAAuC;AACvC,mBAAkC;AA4C5B,IAAAC,sBAAA;AALC,IAAM,aAAS;AAAA,EACpB,CAAC,EAAE,WAAW,SAAS,MAAM,UAAU,OAAO,GAAG,MAAM,GAAG,QAAQ;AAChE,UAAM,YAAY,UAAU,yBAAO;AAEnC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,eAAe,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,QAC1D;AAAA,QACC,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AACA,OAAO,cAAc;AAMrB,IAAM,qBAAiB;AAAA,EACrB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ,OAAO,CAAC,QAAQ,WAAW,QAAQ,MAAM;AAAA,QACzC,QAAQ,CAAC,QAAQ,aAAa,QAAQ,MAAM;AAAA,QAC5C,OAAO,CAAC,QAAQ,WAAW,QAAQ,MAAM;AAAA,MAC3C;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,IACA,kBAAkB;AAAA,MAChB;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,WAAW,KAAK;AAAA,MACjC;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,WAAW,KAAK;AAAA,MACjC;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,aAAa,KAAK;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AACF;;;ADtGQ,IAAAC,sBAAA;AAnCD,SAAS,SAAS,EAAE,MAAM,GAAG,MAAM,GAA4B;AACpE,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,KAAK;AAClD,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,GAAG;AAE5C,+BAAU,MAAM;AACd,UAAM,iBAAiB,MAAM;AAC3B,YAAM,cAAc,OAAO;AAC3B,UAAI,eAAe,KAAK;AACtB,oBAAY,EAAE;AAAA,MAChB,OAAO;AACL,oBAAY,GAAG;AAAA,MACjB;AAAA,IACF;AAEA,mBAAe;AACf,WAAO,iBAAiB,UAAU,cAAc;AAEhD,WAAO,MAAM,OAAO,oBAAoB,UAAU,cAAc;AAAA,EAClE,GAAG,CAAC,CAAC;AAEL,WAAS,mBAAmBC,OAAcC,WAAkBC,aAA6B;AACvF,UAAM,QAAQF,MAAK,MAAM,GAAG;AAE5B,UAAMG,WAAUD,cAAaF,QAAO,MAAM,MAAM,GAAGC,SAAQ,EAAE,KAAK,GAAG;AACrE,UAAM,eAAeC,cAAa,KAAK;AACvC,WAAO,GAAGC,QAAO,IAAI,YAAY;AAAA,EACnC;AAEA,QAAM,aAAa,MAAM,cAAc,CAAC,UAAU;AAElD,QAAM,UAAU,mBAAmB,MAAM,UAAU,UAAU;AAE7D,SACE,8CAAC,SAAK,GAAG,OACP;AAAA,iDAAC,SAAI,eAAY,kBAAiB,WAAU,qBAC1C,uDAAC,sBAAAC,SAAA,EAAU,mBAAQ,GACrB;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,SAAQ;AAAA,QACR,SAAS;AAAA,QAET,wDAAC,OAAE,WAAU,kDAAiD;AAAA;AAAA,UACtD,aAAa,SAAS;AAAA,WAC9B;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;AElDI,IAAAC,sBAAA;AAJG,SAAS,eAAe,EAAE,YAAY,GAAwB;AACnE,MAAI,CAAC,YAAa,QAAO;AAEzB,SACE,8CAAC,SAAI,WAAU,8BACb;AAAA,iDAAC,QAAG,WAAU,qBAAoB,6BAAe;AAAA,IACjD,6CAAC,YAAS,MAAM,aAAa;AAAA,KAC/B;AAEJ;;;ACbA,IAAAC,uBAAoB;AACpB,mBAAkB;;;ACDlB,0BAAkB;AAClB,IAAAC,qBAA0B;;;ACH1B,IAAAC,qBAAqB;AACrB,IAAAC,cAAuC;AACvC,IAAAC,gBAA2B;AAC3B,IAAAC,yBAAwB;AAelB,IAAAC,uBAAA;AAJC,IAAM,WAAO;AAAA,EAClB,CAAC,EAAE,SAAS,MAAM,SAAS,OAAO,WAAW,OAAO,WAAW,GAAG,MAAM,GAAG,QAAQ;AACjF,UAAM,YAAY,WAAW,0BAAO;AACpC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,cACT,gCAAQ,aAAa,EAAE,SAAS,SAAS,WAAW,SAAS,KAAK,CAAC,CAAC;AAAA,UACpE;AAAA,QACF;AAAA,QACC,GAAG;AAAA,QACJ;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;AAEnB,IAAM,mBAAe;AAAA,EACnB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,QAAQ,CAAC,cAAc,eAAe;AAAA,MACxC;AAAA,MACA,MAAM;AAAA,QACJ,OAAO,CAAC,QAAQ,QAAQ,KAAK;AAAA,QAC7B,QAAQ,CAAC,QAAQ,QAAQ,KAAK;AAAA,QAC9B,OAAO,CAAC,QAAQ,QAAQ,KAAK;AAAA,MAC/B;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;;;ACpFA,IAAAC,gBAA2B;;;ACE3B,wBAAgC;AAChC,IAAAC,gBAAoF;AAqBhF,IAAAC,uBAAA;AAfG,IAAM,2BAAuB,6BAAc,CAAC,CAA8B;;;ADF1E,SAAS,mBAA8C;AAC5D,QAAM,2BAAuB,0BAAW,oBAAoB;AAE5D,SAAO;AACT;;;AF2BM,IAAAC,uBAAA;AAzBC,SAAS,WAAW,EAAE,gBAAgB,cAAc,WAAW,GAAG,MAAM,GAAoB;AACjG,QAAM,EAAE,QAAQ,IAAI,iBAAiB;AACrC,QAAM,aAAS,8BAAU;AAEzB,QAAM,kBAAkB,CAAC,MACvB,CAAC,CAAC,gBAAgB,KAAK,CAAC,UAAU,IAAI,OAAO,MAAM,QAAQ,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;AAE9E,QAAM,SAAS,MAAM;AACnB,UAAM,WAAW,QAAQ,QAAQ,SAAS,CAAC;AAC3C,QAAI,QAAQ,SAAS,KAAK,gBAAgB,QAAQ,GAAG;AACnD,aAAO,KAAK;AAAA,IACd,OAAO;AACL,aAAO,KAAK,gBAAgB,GAAG;AAAA,IACjC;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAW;AAAA,MACX,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACC,GAAG;AAAA,MAEJ,wDAAC,yBAAE;AAAA;AAAA,EACL;AAEJ;;;AIzCA,IAAAC,cAAuC;AAEvC,IAAAC,yBAAwB;AAOtB,IAAAC,uBAAA;AADF,IAAM,OAAO,CAAC,EAAE,WAAW,SAAS,MAAM,GAAG,MAAM,MACjD,8CAAC,SAAI,eAAW,gCAAQ,aAAa,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC,GAAI,GAAG,OAAO;AAGlF,IAAM,mBAAe,iBAAI,CAAC,QAAQ,gBAAgB,eAAe,UAAU,OAAO,GAAG;AAAA,EACnF,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS,CAAC,gBAAgB,gBAAgB;AAAA,MAC1C,SAAS,CAAC,mBAAmB,kBAAkB;AAAA,MAC/C,QAAQ,CAAC,oBAAoB,mBAAmB;AAAA,MAChD,YAAY,CAAC,kBAAkB,eAAe,gBAAgB;AAAA,MAC9D,oBAAoB,CAAC,cAAc,eAAe,gBAAgB;AAAA,IACpE;AAAA,IACA,MAAM;AAAA,MACJ,OAAO,CAAC,WAAW,aAAa,QAAQ,QAAQ,SAAS;AAAA,MACzD,QAAQ,CAAC,aAAa,aAAa,QAAQ,QAAQ,OAAO;AAAA,IAC5D;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AACF,CAAC;AAED,IAAO,eAAQ;;;AChCf,IAAAC,uBAqBO;AAEA,IAAM,UAAU;AAAA,EACrB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AAAA,EACV,sBAAsB;AAAA,EACtB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,wBAAwB;AAAA,EACxB,iBAAiB;AAAA,EACjB,sBAAsB;AAAA,EACtB,eAAe;AAAA,EACf,aAAa;AAAA,EACb,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,WAAW;AACb;;;ANGW,IAAAC,uBAAA;AAfJ,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA6B;AAC3B,QAAM,aAAa,CAAC,SAA+B;AACjD,UAAMC,QAAO,QAAQ,IAAI;AACzB,WAAO,8CAACA,OAAA,EAAK,MAAM,IAAI;AAAA,EACzB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA,CAAC,cAAc;AAAA,MACjB;AAAA,MAEC;AAAA,SAAC,cACA,+CAAC,SAAI,WAAU,+GACb;AAAA;AAAA,YAAC,aAAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,KAAK;AAAA,cACL,KAAI;AAAA,cACJ,MAAI;AAAA;AAAA,UACN;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,gBAAgB;AAAA,cAChB,cAAc;AAAA,cACd,WAAU;AAAA,cACV,eAAY;AAAA;AAAA,UACd;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,eAAY;AAAA,cAEZ;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,QAAO;AAAA,kBACP,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN,KAAK;AAAA,kBACL,KAAI;AAAA;AAAA,cACN;AAAA;AAAA,UACF;AAAA,WACF;AAAA,QAGF,+CAAC,SAAI,WAAU,6DACb;AAAA,yDAAC,SAAI,WAAU,6BACZ;AAAA,0BACC,8CAAC,SAAI,WAAU,sBAAqB,eAAY,qBAC9C;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,QAAO;AAAA,gBACP,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,KAAK;AAAA,gBACL,KAAI;AAAA;AAAA,YACN,GACF;AAAA,YAGF,8CAAC,SAAI,WAAU,gEACZ,qBAAW,IAAI,CAAC,UAAU,MACzB;AAAA,cAAC;AAAA;AAAA,gBAEC,eAAa,uBAAuB,CAAC;AAAA,gBACrC,WAAU;AAAA,gBAET;AAAA;AAAA,kBACA,IAAI,UAAU,SAAS,KAAK,8CAAC,4BAAI,WAAU,iBAAgB,MAAM,IAAI;AAAA;AAAA;AAAA,cALjE;AAAA,YAMP,CACD,GACH;AAAA,aACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,eAAY;AAAA,cACZ,WAAU;AAAA,cAEV;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,eAAY;AAAA,oBACZ,WAAU;AAAA,oBAET;AAAA;AAAA,gBACH;AAAA,gBAEC,CAAC,CAAC,WACD;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,eAAY;AAAA,oBAEX;AAAA;AAAA,gBACH;AAAA;AAAA;AAAA,UAEJ;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,eAAY;AAAA,cACZ,WAAU;AAAA,cAET,gBAAM,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,MAC9B;AAAA,gBAAC;AAAA;AAAA,kBAEC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,cAAY;AAAA,kBACZ,eAAa,kBAAkB,IAAI;AAAA,kBAElC;AAAA,+BAAW,IAAI;AAAA,oBAChB,8CAAC,UAAM,iBAAM;AAAA;AAAA;AAAA,gBAPR;AAAA,cAQP,CACD;AAAA;AAAA,UACH;AAAA,WACF;AAAA;AAAA;AAAA,EACF;AAEJ;;;AO9JA,IAAAC,gBAA6C;;;ACctC,IAAM,4BAA0E;AAAA,EACrF,WAAW;AAAA,IACT,IAAI;AAAA,EACN;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,EACN;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,EACN;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,EACN;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,EACN;AACF;AAEO,IAAM,sBAA8D;AAAA,EACzE,KAAK;AAAA,IACH,IAAI;AAAA,EACN;AAAA,EACA,MAAM;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,EACN;AAAA,EACA,cAAc;AAAA,IACZ,IAAI;AAAA,EACN;AAAA,EACA,MAAM;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,MAAM;AAAA,IACJ,IAAI;AAAA,EACN;AACF;AAEO,IAAM,sBAA8D;AAAA,EACzE,KAAK;AAAA,IACH,IAAI;AAAA,EACN;AAAA,EACA,KAAK;AAAA,IACH,IAAI;AAAA,EACN;AAAA,EACA,KAAK;AAAA,IACH,IAAI;AAAA,EACN;AACF;AAEO,IAAM,6BAA4E;AAAA,EACvF,UAAU;AAAA,IACR,IAAI;AAAA,EACN;AAAA,EACA,aAAa;AAAA,IACX,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,EACN;AAAA,EACA,aAAa;AAAA,IACX,IAAI;AAAA,EACN;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,EACN;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,EACN;AACF;AAEO,IAAM,yBAAoE;AAAA,EAC/E,mBAAmB;AAAA,IACjB,IAAI;AAAA,EACN;AAAA,EACA,kBAAkB;AAAA,IAChB,IAAI;AAAA,EACN;AAAA,EACA,gBAAgB;AAAA,IACd,IAAI;AAAA,EACN;AAAA,EACA,mBAAmB;AAAA,IACjB,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,EACN;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,EACN;AAAA,EACA,wBAAwB;AAAA,IACtB,IAAI;AAAA,EACN;AAAA,EACA,kBAAkB;AAAA,IAChB,IAAI;AAAA,EACN;AAAA,EACA,gCAAgC;AAAA,IAC9B,IAAI;AAAA,EACN;AAAA,EACA,gCAAgC;AAAA,IAC9B,IAAI;AAAA,EACN;AAAA,EACA,yBAAyB;AAAA,IACvB,IAAI;AAAA,EACN;AACF;AAEO,IAAM,qBAA4D;AAAA,EACvE,SAAS;AAAA,IACP,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,EACN;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,EACN;AAAA,EACA,mBAAmB;AAAA,IACjB,IAAI;AAAA,EACN;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,EACN;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,EACN;AAAA,EACA,wBAAwB;AAAA,IACtB,IAAI;AAAA,EACN;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,EACN;AAAA,EACA,oBAAoB;AAAA,IAClB,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,EACN;AAAA,EACA,qBAAqB;AAAA,IACnB,IAAI;AAAA,EACN;AAAA,EACA,cAAc;AAAA,IACZ,IAAI;AAAA,EACN;AAAA,EACA,aAAa;AAAA,IACX,IAAI;AAAA,EACN;AAAA,EACA,eAAe;AAAA,IACb,IAAI;AAAA,EACN;AAAA,EACA,6BAA6B;AAAA,IAC3B,IAAI;AAAA,EACN;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,EACN;AACF;AAEO,IAAM,+BAAgF;AAAA,EAC3F,gBAAgB;AAAA,IACd,IAAI;AAAA,EACN;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,EACN;AAAA,EACA,8BAA8B;AAAA,IAC5B,IAAI;AAAA,EACN;AAAA,EACA,iBAAiB;AAAA,IACf,IAAI;AAAA,EACN;AAAA,EACA,cAAc;AAAA,IACZ,IAAI;AAAA,EACN;AAAA,EACA,4BAA4B;AAAA,IAC1B,IAAI;AAAA,EACN;AAAA,EACA,yBAAyB;AAAA,IACvB,IAAI;AAAA,EACN;AAAA,EACA,aAAa;AAAA,IACX,IAAI;AAAA,EACN;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,EACN;AAAA,EACA,oBAAoB;AAAA,IAClB,IAAI;AAAA,EACN;AAAA,EACA,eAAe;AAAA,IACb,IAAI;AAAA,EACN;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,EACN;AAAA,EACA,+BAA+B;AAAA,IAC7B,IAAI;AAAA,EACN;AAAA,EACA,kBAAkB;AAAA,IAChB,IAAI;AAAA,EACN;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,EACN;AAAA,EACA,cAAc;AAAA,IACZ,IAAI;AAAA,EACN;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,EACN;AAAA,EACA,mBAAmB;AAAA,IACjB,IAAI;AAAA,EACN;AAAA,EACA,aAAa;AAAA,IACX,IAAI;AAAA,EACN;AAAA,EACA,mBAAmB;AAAA,IACjB,IAAI;AAAA,EACN;AAAA,EACA,oBAAoB;AAAA,IAClB,IAAI;AAAA,EACN;AAAA,EACA,gBAAgB;AAAA,IACd,IAAI;AAAA,EACN;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,EACN;AAAA,EACA,eAAe;AAAA,IACb,IAAI;AAAA,EACN;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,EACN;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,EACN;AAAA,EACA,aAAa;AAAA,IACX,IAAI;AAAA,EACN;AAAA,EACA,gBAAgB;AAAA,IACd,IAAI;AAAA,EACN;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,EACN;AAAA,EACA,sCAAsC;AAAA,IACpC,IAAI;AAAA,EACN;AAAA,EACA,iBAAiB;AAAA,IACf,IAAI;AAAA,EACN;AAAA,EACA,cAAc;AAAA,IACZ,IAAI;AAAA,EACN;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,EACN;AAAA,EACA,aAAa;AAAA,IACX,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,EACN;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,EACN;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,EACN;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,EACN;AAAA,EACA,oBAAoB;AAAA,IAClB,IAAI;AAAA,EACN;AAAA,EACA,iBAAiB;AAAA,IACf,IAAI;AAAA,EACN;AAAA,EACA,aAAa;AAAA,IACX,IAAI;AAAA,EACN;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,EACN;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,EACN;AAAA,EACA,eAAe;AAAA,IACb,IAAI;AAAA,EACN;AAAA,EACA,qBAAqB;AAAA,IACnB,IAAI;AAAA,EACN;AAAA,EACA,kBAAkB;AAAA,IAChB,IAAI;AAAA,EACN;AACF;AAEO,IAAM,mBAAwD;AAAA,EACnE,UAAU;AAAA,IACR,IAAI;AAAA,EACN;AAAA,EACA,aAAa;AAAA,IACX,IAAI;AAAA,EACN;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,EACN;AAAA,EACA,KAAK;AAAA,IACH,IAAI;AAAA,EACN;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,EACN;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,EACN;AAAA,EACA,kBAAkB;AAAA,IAChB,IAAI;AAAA,EACN;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,EACN;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,EACN;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,EACN;AACF;AAEO,IAAM,6BAA4E;AAAA,EACvF,YAAY;AAAA,IACV,IAAI;AAAA,EACN;AAAA,EACA,2BAA2B;AAAA,IACzB,IAAI;AAAA,EACN;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,EACN;AAAA,EACA,aAAa;AAAA,IACX,IAAI;AAAA,EACN;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,EACN;AAAA,EACA,gBAAgB;AAAA,IACd,IAAI;AAAA,EACN;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,EACN;AAAA,EACA,cAAc;AAAA,IACZ,IAAI;AAAA,EACN;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,EACN;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,EACN;AAAA,EACA,kBAAkB;AAAA,IAChB,IAAI;AAAA,EACN;AAAA,EACA,cAAc;AAAA,IACZ,IAAI;AAAA,EACN;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,EACN;AAAA,EACA,0BAA0B;AAAA,IACxB,IAAI;AAAA,EACN;AACF;AAEO,IAAM,kBAAkB;AAAA,EAC7B,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,OAAO;AACT;;;ACjaO,IAAM,gCAAN,cAA4C,MAAM;AAAA,EACvD,YAAY,OAAe;AACzB,UAAM,4CAA4C,KAAK,EAAE;AACzD,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gCAAN,cAA4C,MAAM;AAAA,EACvD,YAAY,OAAe,OAAe;AACxC,UAAM,qCAAqC,KAAK,gBAAgB,KAAK,GAAG;AACxE,SAAK,OAAO;AAAA,EACd;AACF;;;ACqBO,IAAM,qBAAN,MAAwD;AAAA,EAI7D,YAAY,gBAA2C;AAHvD,SAAiB,kBAAqC;AAIpD,SAAK,WAAW;AAAA,MACd,GAAG;AAAA;AAAA,MACH,GAAG;AAAA;AAAA,IACL;AAAA,EACF;AAAA,EAEA,MAAM,eACJ,OACA,OACA,WAA8B,KAAK,iBAClB;AACjB,UAAM,eAAe,KAAK,SAAS,KAAK;AAExC,QAAI,CAAC,cAAc;AACjB,YAAM,IAAI,8BAA8B,KAAK;AAAA,IAC/C;AAEA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAM,sBAAsB,MAAM,IAAI,CAAC,MAAM,KAAK,eAAe,OAAO,GAAG,QAAQ,CAAC;AACpF,YAAMC,gBAAe,MAAM,QAAQ,IAAI,mBAAmB;AAC1D,aAAOA,cAAa,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,IAClD;AAEA,UAAM,eAAe,aAAa,KAAK;AAEvC,QAAI,CAAC,cAAc;AACjB,YAAM,IAAI,8BAA8B,OAAO,KAAK;AAAA,IACtD;AAEA,WAAO,aAAa,QAAQ,KAAK,aAAa,KAAK,eAAe,KAAK;AAAA,EACzE;AACF;;;AHhEO,IAAM,iBAAiB,CAC5B,OACA,UACG;AACH,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAS,EAAE;AACjD,QAAM,qBAAiB,uBAAQ,MAAM,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAEjE,+BAAU,MAAM;AACd,QAAI,CAAC,kBAAkB,CAAC,OAAO;AAC7B,qBAAe,EAAE;AACjB;AAAA,IACF;AACA,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,SAAS,MAAM,eAAe,eAAe,OAAO,KAAK;AAC/D,YAAI,OAAO,WAAW,UAAU;AAC9B,yBAAe,MAAM;AAAA,QACvB,OAAO;AACL,kBAAQ,MAAM,sCAAsC,MAAM;AAAA,QAC5D;AAAA,MACF,SAAS,OAAO;AACd,YAAI,iBAAiB,+BAA+B;AAClD,kBAAQ,KAAK,iCAAiC,KAAK;AACnD,yBAAe,OAAO,KAAK,CAAC;AAAA,QAC9B,OAAO;AACL,kBAAQ,MAAM,qCAAqC,KAAK;AACxD,yBAAe,OAAO,KAAK,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA,IACF,GAAG;AAAA,EACL,GAAG,CAAC,OAAO,OAAO,cAAc,CAAC;AAEjC,SAAO;AACT;;;AInCO,SAAS,iBAAiB,SAA4C;AAC3E,QAAM,EAAE,iBAAiB,eAAe,eAAe,IAAI;AAC3D,MAAI,mBAAmB,cAAe,QAAO,GAAG,eAAe,KAAK,aAAa;AACjF,MAAI,iBAAiB,eAAgB,QAAO,GAAG,aAAa,KAAK,cAAc;AAC/E,MAAI,cAAe,QAAO;AAC1B,MAAI,eAAgB,QAAO;AAC3B,SAAO;AACT;AAEO,SAAS,qBAAqB,KAAmB;AACtD,QAAM,UAAU,IAAI,eAAe,iBAAiB,IAAI,WAAW;AACnE,QAAM,SAAS,IAAI,WAAW,WAAW;AAEzC,SAAO,CAAC,SAAS,MAAM,EAAE,OAAO,OAAO,EAAE,KAAK,KAAK;AACrD;;;ACTA,iBAAkB;AAKX,IAAM,WAAW,aAAE,KAAK,CAAC,OAAO,CAAC;AACjC,IAAM,kBAAkB,aAAE,KAAK,CAAC,WAAW,OAAO,YAAY,eAAe,QAAQ,CAAC;AACtF,IAAM,eAAe,aAAE,KAAK,CAAC,OAAO,QAAQ,SAAS,gBAAgB,QAAQ,MAAM,CAAC;AACpF,IAAM,eAAe,aAAE,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC;AAGjD,IAAM,sBAAsB,aAAE,OAAO;AAAA,EACxC,SAAS,aAAE,QAAQ,OAAO,EAAE,QAAQ,OAAO;AAAA,EAC3C,MAAM,aAAE,OAAO,EAAE,SAAS,+BAA+B;AAAA,EACzD,gBAAgB,aAAE,OAAO,EAAE,SAAS,qDAAqD;AAAA,EACzF,eAAe,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,mEAAmE;AAAA,EAClH,iBAAiB,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,wGAAwG;AAAA,EACzJ,eAAe,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,qDAAqD;AAAA,EACpG,cAAc,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,iDAAiD;AAAA,EAC/F,YAAY,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,iBAAiB;AAAA,EAC7D,aAAa,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,mDAAmD;AACpG,CAAC;AAIM,IAAM,cAAc,aAAE,OAAO;AAAA,EAChC,SAAS,aAAE,QAAQ,OAAO,EAAE,QAAQ,OAAO;AAAA,EAC3C,aAAa,aAAE,SAAS,eAAe;AAAA,EACvC,UAAU,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,6BAA6B;AAAA,EACvE,WAAW,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,8BAA8B;AAAA,EACzE,SAAS,aAAE,SAAS,mBAAmB,EAAE,SAAS,oCAAoC;AAC1F,CAAC;AAIM,IAAM,0BAA0B,aAAE,OAAO;AAAA,EAC5C,SAAS,aAAE,QAAQ,OAAO,EAAE,QAAQ,OAAO;AAAA,EAC3C,MAAM,aAAE,OAAO,EAAE,SAAS,+BAA+B;AAAA,EACzD,OAAO,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,kIAAkI;AAAA,EACzK,UAAU,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,wFAAwF;AAAA,EAClI,UAAU,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,kFAAkF;AAAA,EAC5H,UAAU;AACd,CAAC;AAIM,IAAM,uBAAuB,aAAE,OAAO;AAAA,EACzC,SAAS,aAAE,QAAQ,OAAO,EAAE,QAAQ,OAAO;AAAA,EAC3C,MAAM,aAAE,OAAO,EAAE,SAAS,+BAA+B;AAAA,EACzD,aAAa,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,+IAA+I;AAAA,EAC5L,UAAU,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,uGAAuG;AAAA,EACjJ,UAAU,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,iGAAiG;AAAA,EAC3I,OAAO,aAAE,SAAS,uBAAuB,EAAE,SAAS,2CAA2C;AAAA,EAC/F,UAAU,aAAE,SAAS,YAAY;AACrC,CAAC;AAIM,IAAM,mBAAmB,aAAE,OAAO;AAAA,EACrC,SAAS,aAAE,QAAQ,OAAO,EAAE,QAAQ,OAAO;AAAA,EAC3C,SAAS,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,4BAA4B;AAAA,EACrE,SAAS,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,4BAA4B;AAAA,EACrE,aAAa,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,+BAA+B;AAAA,EAC5E,WAAW,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,6BAA6B;AAAA,EACxE,OAAO,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,yBAAyB;AAAA,EAChE,UAAU,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,6BAA6B;AAAA,EACvE,kBAAkB,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,qCAAqC;AAAA,EACvF,MAAM,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,wBAAwB;AAAA,EAC9D,UAAU,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,6BAA6B;AAAA,EACvE,MAAM,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,wBAAwB;AAAA,EAC9D,OAAO,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,yBAAyB;AAAA,EAChE,UAAU,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,6BAA6B;AAAA,EACvE,KAAK,aAAE,SAAS,aAAE,OAAO,CAAC,EAAE,SAAS,uBAAuB;AAChE,CAAC;AAIM,IAAM,cAAc,aAAE,OAAO;AAAA,EAChC,SAAS,aAAE,QAAQ,OAAO,EAAE,QAAQ,OAAO;AAAA,EAC3C,MAAM,aAAE,OAAO,EAAE,SAAS,+BAA+B;AAAA,EACzD,OAAO,aAAE,SAAS,gBAAgB,EAAE,SAAS,yBAAyB;AAC1E,CAAC;;;ACvFM,SAAS,YAAY,QAA8B;AACxD,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,MAAM,OAAO;AACnB,QAAM,MAAM,OAAO;AACnB,QAAM,SAAS,OAAO;AACtB,QAAM,QAAQ;AAAA,IACZ,CAAC,aAAa,OAAO,GAAG,GAAG;AAAA,IAC3B,CAAC,aAAa,OAAO,GAAG,GAAG;AAAA,IAC3B,CAAC,aAAa,OAAO,GAAG,GAAG;AAAA,EAC7B;AACA,QAAM,OAAO,MAAM,OAAO,YAAY,aAAa,OAAO,GAAG;AAG7D,MAAI,OAAO,QAAQ,OAAO,QAAQ,UAAU,KAAM,QAAO;AAEzD,MAAI,UAAU,KAAM,QAAO,OAAO,OAAO,eAAe;AAExD,MAAI,QAAQ,IAAK,QAAO,OAAO,KAAK,eAAe;AAEnD,MAAI,OAAO,QAAQ,OAAO;AACxB,WAAO,OAAO,KAAK,eAAe,IAAI,QAAQ,OAAO,KAAK,eAAe;AAC3E,SAAO;AACT;;;AxBoDM,IAAAC,uBAAA;AApDC,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2B;AACzB,QAAM,0BAA0B,eAAe,kBAAkB,IAAI,cAAc;AACnF,QAAM,2BAA2B,eAAe,mBAAmB,IAAI,eAAe;AACtF,QAAM,uBAAuB,eAAe,eAAe,IAAI,WAAW;AAC1E,QAAM,oBAAoB,qBAAqB,GAAG;AAClD,QAAM,kBAAkB,YAAY,IAAI,eAAe;AACvD,QAAM,gBAAwB,4BAAoB,IAAI,KAAK,IAAI,UAAoB,GAAG;AAAA,IACpF,WAAW;AAAA,EACb,CAAC;AAED,QAAM,OAAO;AAAA,IACX,CAAC,CAAC,mBAAmB;AAAA,MACnB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO,GAAG,eAAe;AAAA,IAC3B;AAAA,IACA,CAAC,CAAC,2BAA2B;AAAA,MAC3B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,CAAC,CAAC,4BAA4B;AAAA,MAC5B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,CAAC,CAAC,wBAAwB;AAAA,MACxB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,CAAC,CAAC,qBAAqB;AAAA,MACrB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,EACF,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAEnB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,CAAC,cAAc;AAAA,MACjB;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,IAAI;AAAA,YACX;AAAA,YACA,YAAY,IAAI,oBAAoB;AAAA,YACpC,WAAW,IAAI,oBAAoB,MAAM,OAAO;AAAA,YAChD,WAAW,CAAC,IAAI,oBAAoB,eAAe,IAAI,UAAU,aAAa,EAAE;AAAA,YAChF;AAAA,YACA;AAAA,YACA,kBAAkB;AAAA,YAClB;AAAA;AAAA,QACF;AAAA,QAEA,+CAAC,SAAI,WAAU,4BACb;AAAA,wDAAC,kBAAe,aAAa,IAAI,aAAa;AAAA,UAE9C;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,SAAS,IAAI,oBAAoB,YAAY;AAAA;AAAA,UAC/C;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,IAAI,oBAAoB,eAAe;AAAA,cAC7C,KAAK,IAAI,oBAAoB,mBAAmB;AAAA,cAChD,SAAS,IAAI,oBAAoB,mBAAmB;AAAA,cACpD,KAAK,IAAI,oBAAoB,YAAY;AAAA,cACzC,SAAS,IAAI,oBAAoB;AAAA;AAAA,UACnC;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,UAAU,IAAI,oBAAoB,gBAAgB,iBAC9C,IAAI,CAAC,MAAM,EAAE,KAAK,EACnB,OAAO,CAAC,MAAM,MAAM,MAAS;AAAA;AAAA,UAClC;AAAA,WACF;AAAA;AAAA;AAAA,EACF;AAEJ;","names":["import_jsx_runtime","Link","import_jsx_runtime","import_link","import_jsx_runtime","import_jsx_runtime","Link","import_jsx_runtime","import_react","import_cva","import_jsx_runtime","import_jsx_runtime","text","maxWords","isExpanded","snippet","Markdown","import_jsx_runtime","import_lucide_react","import_navigation","import_react_slot","import_cva","import_react","import_tailwind_merge","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_cva","import_tailwind_merge","import_jsx_runtime","import_lucide_react","import_jsx_runtime","Icon","Image","import_react","displayTexts","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../../src/components/jobPost/JobPost.tsx","../../../src/components/company/CompanyBenefits.tsx","../../../src/components/ui/LinkButton.tsx","../../../src/components/company/CompanyInformation.tsx","../../../src/components/ui/Avatar.tsx","../../../src/components/primitives/avatar.tsx","../../../src/lib/utils.ts","../../../src/components/company/CompanyTake.tsx","../../../src/components/ui/ReadMore.tsx","../../../src/components/ui/Button.tsx","../../../src/components/jobPost/JobDescription.tsx","../../../src/components/jobPost/JobHeader.tsx","../../../src/components/buttons/BackButton.tsx","../../../src/components/ui/Icon.tsx","../../../src/hooks/useWindowHistory.ts","../../../src/contexts/WindowHistoryProvider.tsx","../../../src/components/ui/Chip.tsx","../../../src/lib/icons.ts","../../../src/hooks/useDisplayText.ts","../../../src/lib/mappings.ts","../../../src/types/displayText.errors.tsx","../../../src/services/displayText.tsx","../../../src/lib/locations.ts","../../../src/types/data/shared_pickle_output_latest.ts","../../../src/lib/salaryRange.ts"],"sourcesContent":["'use client'\n\nimport * as DateFns from 'date-fns'\nimport { type ReactNode } from 'react'\n\nimport { CompanyBenefits } from '@/components/company/CompanyBenefits'\nimport { CompanyInformation } from '@/components/company/CompanyInformation'\nimport { CompanyTake } from '@/components/company/CompanyTake'\nimport { JobDescription } from '@/components/jobPost/JobDescription'\nimport { JobHeader } from '@/components/jobPost/JobHeader'\nimport { useDisplayText } from '@/hooks/useDisplayText'\nimport { formattedJobLocation } from '@/lib/locations'\nimport { salaryRange } from '@/lib/salaryRange'\nimport { cn } from '@/lib/utils'\nimport { type JobPostModel } from '@/types/data/job_posting_service_latest'\n\nexport type JobPostProps = {\n job: JobPostModel\n bannerSrc: string\n avatarSrc?: string\n standalone?: boolean\n fallbackHref?: string\n actions?: ReactNode\n}\n\nexport function JobPost({\n job,\n bannerSrc,\n avatarSrc,\n standalone,\n fallbackHref,\n actions,\n}: Readonly<JobPostProps>) {\n const formattedEmploymentType = useDisplayText('employmentType', job.employmentType)\n const formattedEmploymentLevel = useDisplayText('employmentLevel', job.employmentLevel)\n const formattedJobFunction = useDisplayText('jobFunction', job.jobFunction)\n const formattedLocation = formattedJobLocation(job)\n const formattedSalary = salaryRange(job.estimatedSalary)\n const formattedDate = DateFns.formatDistanceToNow(new Date(job.datePosted as string), {\n addSuffix: true,\n })\n\n const tags = [\n !!formattedSalary && {\n icon: 'banknote' as const,\n name: 'salary',\n label: `${formattedSalary} a year`,\n },\n !!formattedEmploymentType && {\n icon: 'briefcase-business' as const,\n name: 'employmentType',\n label: formattedEmploymentType,\n },\n !!formattedEmploymentLevel && {\n icon: 'circle-user' as const,\n name: 'level',\n label: formattedEmploymentLevel,\n },\n !!formattedJobFunction && {\n icon: 'briefcase-business' as const,\n name: 'jobFunction',\n label: formattedJobFunction,\n },\n !!formattedLocation && {\n icon: 'map-pin' as const,\n name: 'location',\n label: formattedLocation,\n },\n ].filter((t) => !!t)\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-10 pb-4',\n !standalone && 'border-1 rounded-3xl border-grey-5'\n )}\n >\n <JobHeader\n title={job.title}\n bannerSrc={bannerSrc}\n avatarName={job.hiringOrganization?.companyName}\n avatarSrc={job.hiringOrganization?.logo?.asset?.url}\n subtitles={[job.hiringOrganization?.companyName ?? '', `Posted ${formattedDate}`]}\n actions={actions}\n standalone={standalone}\n backFallbackHref={fallbackHref}\n tags={tags}\n />\n\n <div className=\"flex flex-col gap-8 px-6\">\n <JobDescription description={job.description} />\n\n <CompanyTake\n avatarSrc={avatarSrc}\n content={job.hiringOrganization?.companyNdg?.companyNdgTake}\n />\n\n <CompanyInformation\n name={job.hiringOrganization?.companyName ?? ''}\n how={job.hiringOrganization?.companyPhilosophy?.companyHow}\n mission={job.hiringOrganization?.companyPhilosophy?.companyMission}\n wow={job.hiringOrganization?.companyNdg?.companyWow}\n website={job.hiringOrganization?.companyWebsite}\n />\n\n <CompanyBenefits\n benefits={job.hiringOrganization?.companyCareers?.companyBenefits\n ?.map((b) => b.title)\n .filter((d) => d !== undefined)}\n />\n </div>\n </div>\n )\n}\n","export type CompanyBenefitsProps = {\n benefits?: string[]\n}\n\nexport function CompanyBenefits({ benefits }: Readonly<CompanyBenefitsProps>) {\n if (!benefits) return null\n\n return (\n <div className=\"flex flex-col gap-2\" data-testid=\"company-benefits\">\n <h2 className=\"break-word max-w-full text-xl font-bold text-black sm:max-w-2xl md:max-w-lg\">\n Company benefits\n </h2>\n <ul className=\"flex flex-col gap-3\">\n {benefits.map((benefit, i) => (\n <li key={`${benefit}-${i}`} className=\"text-base text-grey-80\">\n {benefit}\n </li>\n ))}\n </ul>\n </div>\n )\n}\n","import Link from 'next/link'\nimport React from 'react'\n\nexport interface LinkButtonProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>,\n Omit<React.ComponentProps<typeof Link>, 'href'> {\n disabled?: boolean\n href: string // Ensures href is always required and compatible with both\n useAnchor?: boolean // New prop to decide between <a> and <Link>\n}\n\n/**\n * A custom button component that can render a link using either\n * Next.js's Link component or a regular <a> tag based on a prop.\n *\n * @component\n * @example\n * ```tsx\n * <LinkButton href=\"/about\">About</LinkButton>\n * ```\n *\n * @param {object} props - The component props.\n * @param {boolean} [props.disabled=false] - Determines if the button is disabled.\n * @param {boolean} [props.useAnchor=false] - Whether to render a regular <a> instead of Next.js Link.\n * @param {React.ReactNode} props.children - The content of the button.\n * @param {string} props.href - The URL the button points to.\n * @returns {JSX.Element} The rendered LinkButton component.\n */\nexport const LinkButton = ({\n disabled = false,\n useAnchor = false,\n children,\n href,\n ...props\n}: LinkButtonProps) => {\n const Component = useAnchor ? 'a' : Link\n\n return (\n <Component\n href={href}\n className={`inline-flex items-center justify-center gap-2 rounded-full text-sm font-bold leading-tight text-black underline outline-dashed outline-2 outline-offset-2 outline-transparent hover:text-purple-100 focus:text-black focus:outline-purple-100 active:text-purple-80 ${disabled ? 'pointer-events-none text-grey-40' : ''} `}\n {...(disabled && { 'aria-disabled': true, tabIndex: -1 })}\n {...props}\n >\n {children}\n </Component>\n )\n}\n","import { LinkButton } from '@/components/ui/LinkButton'\n\nexport type CompanyInformationProps = {\n name: string\n how?: string\n mission?: string\n wow?: string\n website?: string\n}\n\nexport function CompanyInformation({\n name,\n how,\n mission,\n wow,\n website,\n}: Readonly<CompanyInformationProps>) {\n return (\n <div className=\"flex flex-col gap-2\">\n <h2\n data-testid=\"company-name\"\n className=\"break-word max-w-full text-xl font-bold text-black sm:max-w-2xl md:max-w-lg\"\n >\n About {name}\n </h2>\n\n {how && (\n <p data-testid=\"company-information\" className=\"text-base text-grey-80\">\n {how}\n </p>\n )}\n\n {mission && (\n <div className=\"flex gap-2\">\n <span>🚀</span>\n <p className=\"text-base text-grey-80\">\n <span className=\"pr-1 font-bold\">Mission</span>\n {mission}\n </p>\n </div>\n )}\n\n {wow && (\n <div className=\"flex gap-2\">\n <span>🌟</span>\n <p className=\"text-base text-grey-80\">\n <span className=\"pr-1 font-bold\">Wow Factor</span>\n {wow}\n </p>\n </div>\n )}\n\n {website && (\n <div className=\"pt-2\">\n <LinkButton\n data-testid=\"company-website-link\"\n href={website}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Website\n </LinkButton>\n </div>\n )}\n </div>\n )\n}\n","import { cva, type VariantProps } from 'cva'\nimport Link from 'next/link'\nimport { type ComponentProps } from 'react'\n\nimport { AvatarBase, AvatarFallback, AvatarImage } from '@/components/primitives/avatar'\n\nexport type AvatarProps = VariantProps<typeof avatarVariants> &\n Omit<ComponentProps<'a'>, 'href'> & {\n src?: string\n href?: string\n name?: string\n }\n\nexport function Avatar({ size, src, href, name, ...linkProps }: AvatarProps) {\n const fallbackShort = name?.slice(0, 2)\n const fallbackWords = name\n ?.split(' ')\n .map((n) => n[0])\n .join('')\n .slice(0, 2)\n\n const fallback = fallbackWords && fallbackWords.length > 1 ? fallbackWords : fallbackShort\n\n const renderAvatar = () => (\n <AvatarBase className={avatarVariants({ size })}>\n <AvatarImage src={src} alt={name} />\n <AvatarFallback>{fallback?.toUpperCase()}</AvatarFallback>\n </AvatarBase>\n )\n\n if (href) {\n return (\n <Link href={href} {...linkProps}>\n {renderAvatar()}\n </Link>\n )\n }\n\n return renderAvatar()\n}\n\nexport const avatarVariants = cva('ring ring-white ring-2', {\n variants: {\n size: {\n large: 'h-16 w-16',\n medium: 'h-10 w-10',\n small: 'h-8 w-8',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n})\n","'use client'\n\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/**\n * Adapted from Radix Primitives Avatar\n * https://ui.shadcn.com/docs/components/avatar\n * Changes made to support custom size prop and to export Avatar wrapper component\n */\n\nexport const AvatarBase = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn('relative flex shrink-0 overflow-hidden rounded-full', className)}\n {...props}\n />\n))\nAvatarBase.displayName = AvatarPrimitive.Root.displayName\n\nexport const AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn('aspect-square h-full w-full', className)}\n data-testid=\"job-card-avatar\"\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nexport const AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n 'flex h-full w-full items-center justify-center rounded-full bg-pumpkin-100 py-2 text-sm font-bold capitalize leading-normal text-white md:text-lg',\n className\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","'use client'\n\nimport { Avatar } from '@/components/ui/Avatar'\n\ninterface Props {\n content?: string\n avatarSrc?: string\n}\n\nexport function CompanyTake({ content, avatarSrc }: Readonly<Props>) {\n if (!content) return null\n\n return (\n <div\n data-testid=\"company-take\"\n className=\"align-center w-full justify-start rounded-2xl bg-green-90 p-6\"\n >\n <p className=\"text-lg font-bold text-white sm:text-xl\">The Real Dill ☘️</p>\n <div className=\"mt-2 flex items-center justify-start\">\n <p className=\"text-sm font-normal text-grey-10\">{content}</p>\n </div>\n <div className=\"mt-8 flex w-full items-center gap-3\">\n <Avatar name=\"Jon Lee\" src={avatarSrc} />\n <div className=\"flex flex-col flex-wrap items-start\">\n <p className=\"text-sm font-bold text-white\">Jon Lee, PT, DPT, OCS, FAAOMPT, MBA</p>\n <p className=\"text-xs font-normal text-grey-30\">Pickle co-founder</p>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { type 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\n type=\"button\"\n className=\"mt-2 flex items-center justify-center\"\n variant=\"link\"\n onClick={toggleText}\n >\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 { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'cva'\nimport React, { forwardRef } from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/**\n * Props for the Button component.\n * @interface ButtonProps\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n * @extends {VariantProps<typeof buttonVariants>}\n */\ninterface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * When true, the component will render its children directly without wrapping them in a button element.\n * Useful when you want to use the button styles on a different element.\n * @default false\n */\n asChild?: boolean\n}\n\n/**\n * A versatile button component that supports multiple variants and sizes.\n *\n * @component\n * @example\n * ```tsx\n * // Default button\n * <Button>Click me</Button>\n *\n * // Primary variant with large size\n * <Button variant=\"primary\" size=\"lg\">Large Button</Button>\n *\n * // As a link\n * <Button asChild>\n * <a href=\"/somewhere\">Go somewhere</a>\n * </Button>\n * ```\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, type = 'button', ...props }, ref) => {\n const Component = asChild ? Slot : 'button'\n\n return (\n <Component\n className={cn(buttonVariants({ variant, size, className }))}\n type={type}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = 'Button'\n\n/**\n * Variant definitions for the Button component using class-variance-authority.\n * Provides consistent styling across different button variations.\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","'use client'\n\nimport { Dot } from 'lucide-react'\nimport Image from 'next/image'\nimport { type ReactNode } from 'react'\n\nimport { BackButton } from '@/components/buttons/BackButton'\nimport { Avatar } from '@/components/ui/Avatar'\nimport Chip from '@/components/ui/Chip'\nimport { iconMap } from '@/lib/icons'\nimport { cn } from '@/lib/utils'\n\nexport type JobHeaderTag = {\n name: string\n label: string\n icon: keyof typeof iconMap\n}\n\nexport type JobHeaderProps = {\n title: string\n bannerSrc: string\n subtitles?: string[]\n standalone?: boolean\n avatarSrc?: string\n avatarName?: string\n avatarHref?: string\n backFallbackHref?: string\n backAcceptedRoutes?: string[]\n actions?: ReactNode\n tags?: JobHeaderTag[]\n}\n\nexport function JobHeader({\n title,\n subtitles,\n standalone,\n bannerSrc,\n avatarSrc,\n avatarName,\n avatarHref,\n backFallbackHref,\n backAcceptedRoutes,\n actions,\n tags,\n}: Readonly<JobHeaderProps>) {\n const renderIcon = (icon: JobHeaderTag['icon']) => {\n const Icon = iconMap[icon]\n return <Icon size={18} />\n }\n\n return (\n <div\n data-testid=\"job-header-root\"\n className={cn(\n '-mt-8 flex w-full flex-col items-center justify-between gap-6 md:-mt-0',\n !standalone && 'rounded-3xl'\n )}\n >\n {!standalone && (\n <div className=\"relative flex min-h-16 w-full items-center rounded-t-3xl bg-transparent md:min-h-24 md:flex-row lg:min-h-32\">\n <Image\n className=\"h-full w-full rounded-t-3xl object-cover\"\n src={bannerSrc}\n alt=\"job banner\"\n fill\n />\n <BackButton\n acceptedRoutes={backAcceptedRoutes}\n fallbackHref={backFallbackHref}\n className=\"absolute right-2 top-2 flex items-center justify-center text-white sm:hidden\"\n data-testid=\"job-header-back-button\"\n />\n <div\n className=\"absolute left-4 top-8 md:left-6 md:top-16 lg:top-24\"\n data-testid=\"job-header-avatar\"\n >\n <Avatar\n size=\"large\"\n target=\"_blank\"\n href={avatarHref}\n name={avatarName}\n src={avatarSrc}\n rel=\"noopener noreferrer\"\n />\n </div>\n </div>\n )}\n\n <div className=\"flex w-full flex-col items-start justify-start gap-4 px-6\">\n <div className=\"flex flex-col md:flex-row\">\n {standalone && (\n <div className=\"-mt-4 mr-4 md:mt-0\" data-testid=\"job-header-avatar\">\n <Avatar\n size=\"large\"\n target=\"_blank\"\n href={avatarHref}\n name={avatarName}\n src={avatarSrc}\n rel=\"noopener noreferrer\"\n />\n </div>\n )}\n\n <div className=\"prose mt-4 flex w-full items-center text-grey-80 lg:prose-lg\">\n {subtitles?.map((subtitle, i) => (\n <div\n key={subtitle}\n data-testid={`job-header-subtitle-${i}`}\n className=\"flex items-center\"\n >\n {subtitle}\n {i < subtitles.length - 1 && <Dot className=\"mx-1 shrink-0\" size={10} />}\n </div>\n ))}\n </div>\n </div>\n\n <div\n data-testid=\"job-header-content\"\n className=\"mt-2 flex w-full flex-row flex-wrap items-center justify-between gap-1\"\n >\n <h2\n data-testid=\"job-header-title\"\n className=\"break-word max-w-full text-2xl font-bold text-black sm:max-w-2xl md:max-w-lg\"\n >\n {title}\n </h2>\n\n {!!actions && (\n <div\n className=\"flex w-full justify-end gap-2 md:w-auto\"\n data-testid=\"job-header-actions\"\n >\n {actions}\n </div>\n )}\n </div>\n\n <div\n data-testid=\"job-header-tags\"\n className=\"flex flex-row flex-wrap items-center justify-start gap-2\"\n >\n {tags?.map(({ name, label, icon }) => (\n <Chip\n key={name}\n size=\"small\"\n variant=\"neutral\"\n aria-label={name}\n data-testid={`job-header-tag-${name}`}\n >\n {renderIcon(icon)}\n <span>{label}</span>\n </Chip>\n ))}\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { X } from 'lucide-react'\nimport { useRouter } from 'next/navigation'\n\nimport { Icon } from '@/components/ui/Icon'\nimport { useWindowHistory } from '@/hooks/useWindowHistory'\n\ninterface Props extends React.HTMLAttributes<HTMLButtonElement> {\n acceptedRoutes?: string[]\n fallbackHref?: string\n}\n\nexport function BackButton({ acceptedRoutes, fallbackHref, className, ...props }: Readonly<Props>) {\n const { history } = useWindowHistory()\n const router = useRouter()\n\n const isAcceptedRoute = (r: string) =>\n !!acceptedRoutes?.find((route) => new RegExp('^' + route + '$', 'i').test(r))\n\n const goBack = () => {\n const previous = history[history.length - 2]\n if (history.length > 1 && isAcceptedRoute(previous)) {\n router.back()\n } else {\n router.push(fallbackHref ?? '/')\n }\n }\n\n return (\n <Icon\n aria-label=\"back button\"\n variant=\"transparent\"\n size=\"small\"\n onClick={goBack}\n className={className}\n {...props}\n >\n <X />\n </Icon>\n )\n}\n","import { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'cva'\nimport { forwardRef } from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nimport { cn } from '@/lib/utils'\n\ninterface IconProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof iconVariants> {\n active?: boolean\n readonly?: boolean\n}\n\nexport const Icon = forwardRef<HTMLButtonElement, IconProps>(\n ({ variant, size, active = false, readonly = false, className, ...props }, ref) => {\n const Component = readonly ? Slot : 'button'\n return (\n <Component\n className={cn(\n twMerge(iconVariants({ variant: active ? 'active' : variant, size })),\n className\n )}\n {...props}\n ref={ref}\n />\n )\n }\n)\n\nIcon.displayName = 'Icon'\n\nconst iconVariants = cva(\n [\n 'inline-flex',\n 'items-center',\n 'rounded-full',\n 'outline-2',\n 'outline-offset-2',\n 'outline-dashed',\n 'outline-transparent',\n 'disabled:text-grey-40',\n 'disabled:bg-transparent',\n 'disabled:pointer-events-none',\n ],\n {\n variants: {\n variant: {\n filled: [\n 'border',\n 'border-green-80',\n 'bg-green-90',\n 'text-white',\n 'hover:bg-green-80',\n 'active:bg-green-80',\n 'focus:outline-pickle-100',\n 'disabled:bg-green-70',\n ],\n transparent: [\n 'text-black',\n 'hover:bg-grey-5',\n 'active:bg-grey-10',\n 'focus:outline-purple-100',\n ],\n tonal: [\n 'border',\n 'border-grey-5',\n 'hover:border-grey-10',\n 'active:border-grey-20',\n 'focus:outline-purple-100',\n ],\n active: ['text-black', 'bg-pickle-100'],\n },\n size: {\n small: ['h-10', 'w-10', 'p-3'],\n medium: ['h-12', 'w-12', 'p-4'],\n large: ['h-14', 'w-14', 'p-4'],\n },\n },\n defaultVariants: {\n variant: 'filled',\n size: 'medium',\n },\n }\n)\n","import { useContext } from 'react'\n\nimport {\n WindowHistoryContext,\n type WindowHistoryContextProps,\n} from '@/contexts/WindowHistoryProvider'\n\nexport function useWindowHistory(): WindowHistoryContextProps {\n const windowHistoryContext = useContext(WindowHistoryContext)\n\n return windowHistoryContext\n}\n","'use client'\n\nimport { useSearchParams } from 'next/navigation'\nimport { createContext, type PropsWithChildren, useEffect, useMemo, useState } from 'react'\n\nexport interface WindowHistoryContextProps {\n history: string[]\n}\n\nexport const WindowHistoryContext = createContext({} as WindowHistoryContextProps)\n\nexport function WindowHistoryProvider({ children }: Readonly<PropsWithChildren>) {\n const [history, setHistory] = useState<string[]>([])\n const searchParams = useSearchParams()\n\n useEffect(() => {\n setHistory((prev) =>\n prev.at(-1) === window.location.href ? prev : [...prev, window.location.href]\n )\n }, [searchParams])\n\n const contextValue = useMemo(() => ({ history }), [history])\n\n return (\n <WindowHistoryContext.Provider value={contextValue}>{children}</WindowHistoryContext.Provider>\n )\n}\n","import { cva, type VariantProps } from 'cva'\nimport React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\ninterface ChipProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof chipVariants> {}\n\nconst Chip = ({ className, variant, size, ...props }: ChipProps) => (\n <div className={twMerge(chipVariants({ variant, size, className }))} {...props} />\n)\n\nconst chipVariants = cva(['flex', 'items-center', 'rounded-3xl', 'border', 'w-fit'], {\n variants: {\n variant: {\n neutral: ['text-grey-80', 'border-grey-10'],\n primary: ['text-purple-100', 'border-purple-20'],\n danger: ['text-pumpkin-100', 'border-pumpkin-20'],\n onboarding: ['text-green-100', 'bg-green-10', 'cursor-pointer'],\n onboardingSelected: ['text-white', 'bg-green-90', 'cursor-pointer'],\n },\n size: {\n small: ['text-sm', 'leading-5', 'px-2', 'py-1', 'gap-1.5'],\n medium: ['text-base', 'leading-6', 'px-3', 'py-2', 'gap-2'],\n },\n },\n defaultVariants: {\n variant: 'neutral',\n size: 'medium',\n },\n})\n\nexport default Chip\n","import {\n Banknote,\n Bell,\n BriefcaseBusiness,\n Building,\n Building2,\n CircleUser,\n CircleUserRound,\n Clock2,\n Contact,\n GalleryVerticalEnd,\n Home,\n KeyRound,\n Layers,\n LifeBuoy,\n MapPin,\n MessageSquareDot,\n Settings,\n SquareKanban,\n Users,\n Wallet,\n} from 'lucide-react'\n\nexport const iconMap = {\n house: Home,\n layers: Layers,\n users: Users,\n settings: Settings,\n building: Building,\n bell: Bell,\n wallet: Wallet,\n contact: Contact,\n banknote: Banknote,\n 'message-square-dot': MessageSquareDot,\n 'life-buoy': LifeBuoy,\n 'building-2': Building2,\n 'gallery-vertical-end': GalleryVerticalEnd,\n 'square-kanban': SquareKanban,\n 'briefcase-business': BriefcaseBusiness,\n 'circle-user': CircleUser,\n 'key-round': KeyRound,\n 'clock-2': Clock2,\n 'circle-user-round': CircleUserRound,\n 'map-pin': MapPin,\n} as const\n","import { useEffect, useMemo, useState } from 'react'\n\nimport { DisplayTextService, type ServiceMappings } from '@/services/displayText'\nimport { DisplayTextValueNotFoundError } from '@/types/displayText.errors'\n\nexport const useDisplayText = (\n scope: keyof ServiceMappings,\n value: string | string[] | undefined | null\n) => {\n const [displayText, setDisplayText] = useState('')\n const displayService = useMemo(() => new DisplayTextService(), [])\n\n useEffect(() => {\n if (!displayService || !value) {\n setDisplayText('')\n return\n }\n void (async () => {\n try {\n const result = await displayService.getDisplayText(scope, value)\n if (typeof result === 'string') {\n setDisplayText(result)\n } else {\n console.error('Expected a string result, but got:', result)\n }\n } catch (error) {\n if (error instanceof DisplayTextValueNotFoundError) {\n console.warn('Display text value not found:', value)\n setDisplayText(String(value))\n } else {\n console.error('Unexpected error formatting text:', error)\n setDisplayText(String(value))\n }\n }\n })()\n }, [scope, value, displayService])\n\n return displayText\n}\n","// displayTextMappings.ts\nimport { type DisplayTextConfig } from '@/services/displayText'\nimport {\n type BestFitEnum,\n type ClinicalSettingEnum,\n type ClinicalSpecialtyEnum,\n type EmploymentLevelEnum,\n type EmploymentTypeEnum,\n type JobFunctionEnum,\n type ShiftEnum,\n} from '@/types/data/job_posting_service_latest'\nimport { type CurrencyEnum, type UnitTextEnum } from '@/types/data/shared_pickle_output_latest'\n\n// employment Type Display\nexport const employmentTypeDisplayText: DisplayTextConfig<typeof EmploymentTypeEnum> = {\n FULL_TIME: {\n en: 'Full Time',\n },\n INTERNSHIP: {\n en: 'Internship',\n },\n OTHER: {\n en: 'Other',\n },\n PART_TIME: {\n en: 'Part Time',\n },\n PER_DIEM: {\n en: 'Per-Diem',\n },\n TEMPORARY: {\n en: 'Temporary',\n },\n CONTRACT: {\n en: 'Contract',\n },\n}\n\nexport const unitTextDisplayText: DisplayTextConfig<typeof UnitTextEnum> = {\n DAY: {\n en: 'Day',\n },\n HOUR: {\n en: 'Hour',\n },\n MONTH: {\n en: 'Month',\n },\n PER_ACTIVITY: {\n en: 'Per Activity',\n },\n WEEK: {\n en: 'Week',\n },\n YEAR: {\n en: 'Year',\n },\n}\n\nexport const currencyDisplayText: DisplayTextConfig<typeof CurrencyEnum> = {\n EUR: {\n en: '€',\n },\n GBP: {\n en: '£',\n },\n USD: {\n en: '$',\n },\n}\n\nexport const employmentLevelDisplayText: DisplayTextConfig<typeof EmploymentLevelEnum> = {\n DIRECTOR: {\n en: 'Director',\n },\n ENTRY_LEVEL: {\n en: 'Entry Level',\n },\n EXECUTIVE: {\n en: 'Executive',\n },\n EXPERIENCED: {\n en: 'Experienced',\n },\n INTERN: {\n en: 'Intern',\n },\n MANAGER: {\n en: 'Manager',\n },\n}\n\nexport const jobFunctionDisplayText: DisplayTextConfig<typeof JobFunctionEnum> = {\n CLINICAL_RESEARCH: {\n en: 'Clinical Research',\n },\n CUSTOMER_SUCCESS: {\n en: 'Customer Success',\n },\n DATA_ANALYTICS: {\n en: 'Data Analytics',\n },\n FINANCE_AND_AUDIT: {\n en: 'Finance and Audit',\n },\n MARKETING: {\n en: 'Marketing',\n },\n OPERATIONS: {\n en: 'Operations',\n },\n PEOPLE_HUMAN_RESOURCES: {\n en: 'People Human Resources',\n },\n PRODUCT_AND_TECH: {\n en: 'Product and Tech',\n },\n QUALITY_ASSURANCE_AND_OUTCOMES: {\n en: 'Quality Assurance and Outcomes',\n },\n SALES_AND_BUSINESS_DEVELOPMENT: {\n en: 'Sales and Business Development',\n },\n STRATEGY_AND_CONSULTING: {\n en: 'Strategy and Consulting',\n },\n}\n\nexport const bestFitDisplayText: DisplayTextConfig<typeof BestFitEnum> = {\n DENTIST: {\n en: 'Dentist',\n },\n DIETICIAN: {\n en: 'Dietician',\n },\n DOULA: {\n en: 'Doula',\n },\n MEDICAL_ASSISTANT: {\n en: 'Medical Assistant',\n },\n MIDWIFE: {\n en: 'Midwife',\n },\n NURSE: {\n en: 'Nurse',\n },\n OCCUPATIONAL_THERAPIST: {\n en: 'Occupational Therapist',\n },\n PHARMACIST: {\n en: 'Pharmacist',\n },\n PHYSICAL_THERAPIST: {\n en: 'Physical Therapist',\n },\n PHYSICIAN: {\n en: 'Physician',\n },\n PHYSICIAN_ASSISTANT: {\n en: 'Physician Assistant',\n },\n PSYCHOLOGIST: {\n en: 'Psychologist',\n },\n RADIOLOGIST: {\n en: 'Radiologist',\n },\n SOCIAL_WORKER: {\n en: 'Social Worker',\n },\n SPEECH_LANGUAGE_PATHOLOGIST: {\n en: 'Speech Language Pathologist',\n },\n SURGEON: {\n en: 'Surgeon',\n },\n}\n\nexport const clinicalSpecialtyDisplayText: DisplayTextConfig<typeof ClinicalSpecialtyEnum> = {\n ANESTHESIOLOGY: {\n en: 'Anesthesiology',\n },\n CARDIOLOGY: {\n en: 'Cardiology',\n },\n CARDIOVASCULAR_AND_PULMONARY: {\n en: 'Cardiovascular and Pulmonary',\n },\n CASE_MANAGEMENT: {\n en: 'Case Management',\n },\n CHRONIC_PAIN: {\n en: 'Chronic Pain',\n },\n CLINICAL_ELECTROPHYSIOLOGY: {\n en: 'Clinical Electrophysiology',\n },\n CRITICAL_AND_ACUTE_CARE: {\n en: 'Critical and Acute Care',\n },\n DERMATOLOGY: {\n en: 'Dermatology',\n },\n DIALYSIS: {\n en: 'Dialysis',\n },\n EMERGENCY_MEDICINE: {\n en: 'Emergency Medicine',\n },\n ENDOCRINOLOGY: {\n en: 'Endocrinology',\n },\n ERGONOMICS: {\n en: 'Ergonomics',\n },\n FEEDING_EATING_AND_SWALLOWING: {\n en: 'Feeding, Eating, and Swallowing',\n },\n GASTROENTEROLOGY: {\n en: 'Gastroenterology',\n },\n GERIATRICS: {\n en: 'Geriatrics',\n },\n HAND_THERAPY: {\n en: 'Hand Therapy',\n },\n HEMATOLOGY: {\n en: 'Hematology',\n },\n HOLISTIC_MEDICINE: {\n en: 'Holistic Medicine',\n },\n INFORMATICS: {\n en: 'Informatics',\n },\n INTERNAL_MEDICINE: {\n en: 'Internal Medicine',\n },\n LABOR_AND_DELIVERY: {\n en: 'Labor and Delivery',\n },\n MANUAL_THERAPY: {\n en: 'Manual Therapy',\n },\n MED_SURG: {\n en: 'Medical-Surgical',\n },\n MENTAL_HEALTH: {\n en: 'Mental Health',\n },\n NEPHROLOGY: {\n en: 'Nephrology',\n },\n NEUROLOGY: {\n en: 'Neurology',\n },\n ONCOLOGY: {\n en: 'Oncology',\n },\n ORTHOPEDICS: {\n en: 'Orthopedics',\n },\n OTOLARYNGOLOGY: {\n en: 'Otolaryngology',\n },\n PEDIATRICS: {\n en: 'Pediatrics',\n },\n PHYSICAL_AND_REHABILITATION_MEDICINE: {\n en: 'Physical and Rehabilitation Medicine',\n },\n PLASTIC_SURGERY: {\n en: 'Plastic Surgery',\n },\n PRIMARY_CARE: {\n en: 'Primary Care',\n },\n PSYCHIATRY: {\n en: 'Psychiatry',\n },\n PULMONOLOGY: {\n en: 'Pulmonology',\n },\n RADIOLOGY: {\n en: 'Radiology',\n },\n SENSORY: {\n en: 'Sensory',\n },\n SPORTS: {\n en: 'Sports',\n },\n SURGERY: {\n en: 'Surgery',\n },\n TRANSPLANT_SURGERY: {\n en: 'Transplant Surgery',\n },\n TRAUMA_MEDICINE: {\n en: 'Trauma Medicine',\n },\n URGENT_CARE: {\n en: 'Urgent Care',\n },\n UROLOGY: {\n en: 'Urology',\n },\n VISION: {\n en: 'Vision',\n },\n WOMENS_HEALTH: {\n en: \"Women's Health\",\n },\n WOUND_AND_BURN_CARE: {\n en: 'Wound and Burn Care',\n },\n WOUND_MANAGEMENT: {\n en: 'Wound Management',\n },\n}\n\nexport const shiftDisplayText: DisplayTextConfig<typeof ShiftEnum> = {\n TEN_HOUR: {\n en: '10 Hour',\n },\n TWELVE_HOUR: {\n en: '12 Hour',\n },\n EIGHT_HOUR: {\n en: '8 Hour',\n },\n DAY: {\n en: 'Day',\n },\n EVENING: {\n en: 'Evening',\n },\n FLEXIBLE: {\n en: 'Flexible',\n },\n MID_SHIFT: {\n en: 'Mid Shift',\n },\n MONDAY_TO_FRIDAY: {\n en: 'Monday to Friday',\n },\n NIGHT: {\n en: 'Night',\n },\n ON_CALL: {\n en: 'On Call',\n },\n WEEKENDS: {\n en: 'Weekends',\n },\n}\n\nexport const clinicalSettingDisplayText: DisplayTextConfig<typeof ClinicalSettingEnum> = {\n ACUTE_CARE: {\n en: 'Acute Care',\n },\n AMBULATORY_SURGERY_CENTER: {\n en: 'Ambulatory Surgery Center',\n },\n CLINIC: {\n en: 'Clinic',\n },\n HOME_HEALTH: {\n en: 'Home Health',\n },\n HOSPITAL: {\n en: 'Hospital',\n },\n INPATIENT: {\n en: 'Inpatient',\n },\n LONG_TERM_CARE: {\n en: 'Long Term Care',\n },\n MED_SPA: {\n en: 'Med Spa',\n },\n NURSING_HOME: {\n en: 'Nursing Home',\n },\n OFFICE: {\n en: 'Office',\n },\n OUTPATIENT: {\n en: 'Outpatient',\n },\n PRIVATE_PRACTICE: {\n en: 'Private Practice',\n },\n REHAB_CENTER: {\n en: 'Rehab Center',\n },\n SCHOOL: {\n en: 'School',\n },\n SKILLED_NURSING_FACILITY: {\n en: 'Skilled Nursing Facility',\n },\n}\n\nexport const defaultMappings = {\n employmentType: employmentTypeDisplayText,\n unitText: unitTextDisplayText,\n currency: currencyDisplayText,\n employmentLevel: employmentLevelDisplayText,\n jobFunction: jobFunctionDisplayText,\n bestFit: bestFitDisplayText,\n clinicalSpecialty: clinicalSpecialtyDisplayText,\n clinicalSetting: clinicalSettingDisplayText,\n shift: shiftDisplayText,\n} as const\n","export class DisplayTextScopeNotFoundError extends Error {\n constructor(scope: string) {\n super(`No display text mapping found for scope: ${scope}`)\n this.name = 'DisplayTextScopeNotFoundError'\n }\n}\n\nexport class DisplayTextValueNotFoundError extends Error {\n constructor(value: string, scope: string) {\n super(`No display text found for value: '${value}' in scope: '${scope}'`)\n this.name = 'DisplayTextValueNotFoundError'\n }\n}\n","import { type z } from 'zod'\n\nimport { defaultMappings } from '@/lib/mappings'\nimport {\n DisplayTextScopeNotFoundError,\n DisplayTextValueNotFoundError,\n} from '@/types/displayText.errors'\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst SUPPORTED_LANGUAGES = ['en'] as const\ntype SupportedLanguage = (typeof SUPPORTED_LANGUAGES)[number]\n\n// Define the display text configuration type for Zod enums\nexport type ServiceMappings = typeof defaultMappings\n\ntype ZodEnumValue<T> = T extends z.ZodEnum<[string, ...string[]]> ? z.infer<T> : never\n\nexport type DisplayTextConfig<T = string> = {\n [K in T extends z.ZodEnum<[string, ...string[]]> ? ZodEnumValue<T> : string]: {\n [L in SupportedLanguage]: string\n }\n} & Record<string, { [L in SupportedLanguage]: string }>\n\n// Define the expected interface for the service\nexport interface IDisplayTextService {\n getDisplayText: (\n scope: keyof ServiceMappings,\n value: string | string[],\n language?: SupportedLanguage\n ) => Promise<string>\n}\n\n// define the service\nexport class DisplayTextService implements IDisplayTextService {\n private readonly defaultLanguage: SupportedLanguage = 'en'\n private readonly mappings: ServiceMappings\n\n constructor(customMappings?: Partial<ServiceMappings>) {\n this.mappings = {\n ...defaultMappings, // Use all pre-defined mappings as defaults\n ...customMappings, // Override with any custom mappings if provided\n }\n }\n\n async getDisplayText(\n scope: keyof ServiceMappings,\n value: string | string[],\n language: SupportedLanguage = this.defaultLanguage\n ): Promise<string> {\n const scopeMapping = this.mappings[scope]\n\n if (!scopeMapping) {\n throw new DisplayTextScopeNotFoundError(scope)\n }\n\n if (Array.isArray(value)) {\n const displayTextPromises = value.map((v) => this.getDisplayText(scope, v, language))\n const displayTexts = await Promise.all(displayTextPromises)\n return displayTexts.filter((v) => !!v).join(', ')\n }\n\n const displayTexts = scopeMapping[value]\n\n if (!displayTexts) {\n throw new DisplayTextValueNotFoundError(value, scope)\n }\n\n return displayTexts[language] || displayTexts[this.defaultLanguage] || value\n }\n}\n","import { type JobPostModel } from '@/types/data/job_posting_service_latest'\nimport { type PostalAddressModel } from '@/types/data/shared_pickle_output_latest'\n\nexport function formattedAddress(address: PostalAddressModel): string | null {\n const { addressLocality, addressRegion, addressCountry } = address\n if (addressLocality && addressRegion) return `${addressLocality}, ${addressRegion}`\n if (addressRegion && addressCountry) return `${addressRegion}, ${addressCountry}`\n if (addressRegion) return addressRegion\n if (addressCountry) return addressCountry\n return null\n}\n\nexport function formattedJobLocation(job: JobPostModel) {\n const address = job.jobLocation && formattedAddress(job.jobLocation)\n const remote = job.isRemote ? 'Remote' : ''\n\n return [address, remote].filter(Boolean).join(' | ')\n}\n","/*\nID:c2c9f095-256f-44df-ada7-73753d8f4f92\nDomain: shared\nData Product: shared_pickle_output\nVersion: 1.0.2\nThis data contract defines a set of shared outputs from the Pickle model(s).\n*/\n\nimport { z } from 'zod';\n\n\n// Enums\n\nexport const TypeEnum = z.enum(['IMAGE']);\nexport const DetailLevelEnum = z.enum(['COUNTRY', 'GEO', 'LOCALITY', 'POSTAL_CODE', 'REGION']);\nexport const UnitTextEnum = z.enum(['DAY', 'HOUR', 'MONTH', 'PER_ACTIVITY', 'WEEK', 'YEAR']);\nexport const CurrencyEnum = z.enum(['EUR', 'GBP', 'USD']);\n\n\nexport const postalAddressSchema = z.object({\n version: z.literal('1.0.0').default('1.0.0'),\n type: z.string().describe(\"Document type used for schema\"),\n addressCountry: z.string().describe(\"The physical country as defined in ISO 3166 Alpha-2\"),\n addressRegion: z.optional(z.string()).describe(\"The region in which the locality is, and which is in the country.\"),\n 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.\"),\n streetAddress: z.optional(z.string()).describe(\"The street name of the address within the locality.\"),\n streetNumber: z.optional(z.string()).describe(\"The house of building number within the street.\"),\n postalCode: z.optional(z.string()).describe(\"The postal code\"),\n description: z.optional(z.string()).describe(\"A descriptive string containing the full address.\"),\n});\n\nexport type PostalAddressModel = z.infer<typeof postalAddressSchema>;\n\nexport const placeSchema = z.object({\n version: z.literal('1.0.0').default('1.0.0'),\n detailLevel: z.optional(DetailLevelEnum),\n latitude: z.optional(z.number()).describe(\"The latitude of a location.\"),\n longitude: z.optional(z.number()).describe(\"The longitude of a location.\"),\n address: z.optional(postalAddressSchema).describe(\"The physical place of the location\"),\n});\n\nexport type PlaceModel = z.infer<typeof placeSchema>;\n\nexport const quantitativeValueSchema = z.object({\n version: z.literal('1.0.0').default('1.0.0'),\n type: z.string().describe(\"Document type used for schema\"),\n 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.\"),\n minValue: z.optional(z.number()).describe(\"The single minium value in a range for a quantitative_value, requires a maximum value.\"),\n maxValue: z.optional(z.number()).describe(\"The maximum value in a range for a quantitative_value, requires a minimum value.\"),\n unitText: UnitTextEnum,\n});\n\nexport type QuantitativeValueModel = z.infer<typeof quantitativeValueSchema>;\n\nexport const monetaryAmountSchema = z.object({\n version: z.literal('1.0.0').default('1.0.0'),\n type: z.string().describe(\"Document type used for schema\"),\n 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.\"),\n minValue: z.optional(z.number()).describe(\"The annualized single minium value in a range for a quantitative_value. Deprecated use value.minValue\"),\n maxValue: z.optional(z.number()).describe(\"The annualized maximum value in a range for a quantitative_value. Deprecated use value.maxValue\"),\n value: z.optional(quantitativeValueSchema).describe(\"The quantitative_value for a given salary\"),\n currency: z.optional(CurrencyEnum),\n});\n\nexport type MonetaryAmountModel = z.infer<typeof monetaryAmountSchema>;\n\nexport const imageAssetSchema = z.object({\n version: z.literal('1.0.0').default('1.0.0'),\n altText: z.optional(z.string()).describe(\"The alt text for the image\"),\n assetId: z.optional(z.string()).describe(\"The asset ID for the image\"),\n description: z.optional(z.string()).describe(\"The description for the image\"),\n extension: z.optional(z.string()).describe(\"The extension for the image\"),\n label: z.optional(z.string()).describe(\"The label for the image\"),\n mimeType: z.optional(z.string()).describe(\"The mime type for the image\"),\n originalFilename: z.optional(z.string()).describe(\"The original filename for the image\"),\n path: z.optional(z.string()).describe(\"The path for the image\"),\n sha1Hash: z.optional(z.string()).describe(\"The SHA1 hash for the image\"),\n size: z.optional(z.number()).describe(\"The size for the image\"),\n title: z.optional(z.string()).describe(\"The title for the image\"),\n uploadId: z.optional(z.string()).describe(\"The upload ID for the image\"),\n url: z.optional(z.string()).describe(\"The URL for the image\"),\n});\n\nexport type ImageAssetModel = z.infer<typeof imageAssetSchema>;\n\nexport const imageSchema = z.object({\n version: z.literal('1.0.0').default('1.0.0'),\n type: z.string().describe(\"Document type used for schema\"),\n asset: z.optional(imageAssetSchema).describe(\"The asset for the image\"),\n});\n\nexport type ImageModel = z.infer<typeof imageSchema>;","import { CurrencyEnum, type MonetaryAmountModel } from '@/types/data/shared_pickle_output_latest'\n\nexport function salaryRange(salary?: MonetaryAmountModel) {\n if (!salary) return null\n\n const min = salary.minValue\n const max = salary.maxValue\n const single = salary.singleValue\n const signs = {\n [CurrencyEnum.Values.USD]: '$',\n [CurrencyEnum.Values.GBP]: '£',\n [CurrencyEnum.Values.EUR]: '€',\n }\n const sign = signs[salary.currency ?? CurrencyEnum.Values.USD]\n\n // if min and max are null and single is null return null\n if (min == null && max == null && single == null) return null\n // if single value return a formatted single value\n if (single != null) return sign + single.toLocaleString()\n // if min and max are the same return a formatted single value\n if (min === max) return sign + min?.toLocaleString()\n // if min and max are different return a formatted range\n if (min != null && max != null)\n return sign + min?.toLocaleString() + ' - ' + sign + max?.toLocaleString()\n return null\n}\n"],"mappings":"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","names":["import_jsx_runtime","Link","import_jsx_runtime","import_link","import_jsx_runtime","import_jsx_runtime","Link","import_jsx_runtime","import_react","import_cva","import_jsx_runtime","import_jsx_runtime","text","maxWords","isExpanded","snippet","Markdown","import_jsx_runtime","import_lucide_react","import_navigation","import_react_slot","import_cva","import_react","import_tailwind_merge","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_cva","import_tailwind_merge","import_jsx_runtime","import_lucide_react","import_jsx_runtime","Icon","Image","import_react","displayTexts","import_jsx_runtime"]}
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { J as JobPostModel } from '../../job_posting_service_latest-CKITrYyz.cjs';
3
+ import { J as JobPostModel } from '../../job_posting_service_latest-BOVbz68F.cjs';
4
4
  import 'zod';
5
5
 
6
6
  type JobPostProps = {
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { J as JobPostModel } from '../../job_posting_service_latest-CKITrYyz.js';
3
+ import { J as JobPostModel } from '../../job_posting_service_latest-BOVbz68F.js';
4
4
  import 'zod';
5
5
 
6
6
  type JobPostProps = {
@@ -196,12 +196,13 @@ import { cva as cva2 } from "cva";
196
196
  import { forwardRef as forwardRef2 } from "react";
197
197
  import { jsx as jsx7 } from "react/jsx-runtime";
198
198
  var Button = forwardRef2(
199
- ({ className, variant, size, asChild = false, ...props }, ref) => {
199
+ ({ className, variant, size, asChild = false, type = "button", ...props }, ref) => {
200
200
  const Component = asChild ? Slot : "button";
201
201
  return /* @__PURE__ */ jsx7(
202
202
  Component,
203
203
  {
204
204
  className: cn(buttonVariants({ variant, size, className })),
205
+ type,
205
206
  ref,
206
207
  ...props
207
208
  }