@next-degree/pickle-shared-js 0.13.6 → 0.13.7

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 (73) hide show
  1. package/dist/{chunk-KQLHT5UE.js → chunk-3XO3AJR4.js} +3 -3
  2. package/dist/{chunk-KQLHT5UE.js.map → chunk-3XO3AJR4.js.map} +1 -1
  3. package/dist/{chunk-OZJZVEF2.js → chunk-4E3ANVRR.js} +3 -3
  4. package/dist/{chunk-OZJZVEF2.js.map → chunk-4E3ANVRR.js.map} +1 -1
  5. package/dist/{chunk-OXDKVZZ5.cjs → chunk-567FG76G.cjs} +4 -4
  6. package/dist/{chunk-OXDKVZZ5.cjs.map → chunk-567FG76G.cjs.map} +1 -1
  7. package/dist/{chunk-KJ5X2ZKA.js → chunk-5REFGTWO.js} +3 -3
  8. package/dist/{chunk-KJ5X2ZKA.js.map → chunk-5REFGTWO.js.map} +1 -1
  9. package/dist/{chunk-WOD47B4V.js → chunk-6Z6T5WWS.js} +4 -4
  10. package/dist/{chunk-WOD47B4V.js.map → chunk-6Z6T5WWS.js.map} +1 -1
  11. package/dist/{chunk-54CL72AL.cjs → chunk-7NP3NX67.cjs} +3 -3
  12. package/dist/{chunk-54CL72AL.cjs.map → chunk-7NP3NX67.cjs.map} +1 -1
  13. package/dist/{chunk-GKL5KEO4.js → chunk-EV54AFL4.js} +10 -4
  14. package/dist/chunk-EV54AFL4.js.map +1 -0
  15. package/dist/{chunk-FAMHC5MQ.cjs → chunk-GHJACW4X.cjs} +10 -4
  16. package/dist/chunk-GHJACW4X.cjs.map +1 -0
  17. package/dist/{chunk-CPZFINPG.js → chunk-K76RPF2X.js} +3 -3
  18. package/dist/{chunk-CPZFINPG.js.map → chunk-K76RPF2X.js.map} +1 -1
  19. package/dist/{chunk-MLV2TE6H.cjs → chunk-LFWX5GEE.cjs} +11 -11
  20. package/dist/{chunk-MLV2TE6H.cjs.map → chunk-LFWX5GEE.cjs.map} +1 -1
  21. package/dist/{chunk-NEIGOAE6.cjs → chunk-LT35HARQ.cjs} +3 -3
  22. package/dist/{chunk-NEIGOAE6.cjs.map → chunk-LT35HARQ.cjs.map} +1 -1
  23. package/dist/{chunk-B472HOM3.js → chunk-NCEXSFMC.js} +7 -7
  24. package/dist/{chunk-B472HOM3.js.map → chunk-NCEXSFMC.js.map} +1 -1
  25. package/dist/{chunk-RO6NJGYB.cjs → chunk-SPAVM3EE.cjs} +3 -3
  26. package/dist/{chunk-RO6NJGYB.cjs.map → chunk-SPAVM3EE.cjs.map} +1 -1
  27. package/dist/{chunk-6CSDTWDX.cjs → chunk-TOEADI6J.cjs} +4 -4
  28. package/dist/{chunk-6CSDTWDX.cjs.map → chunk-TOEADI6J.cjs.map} +1 -1
  29. package/dist/{chunk-CEA4U6AR.js → chunk-U27VO642.js} +3 -3
  30. package/dist/{chunk-CEA4U6AR.js.map → chunk-U27VO642.js.map} +1 -1
  31. package/dist/{chunk-XC3HIJM3.cjs → chunk-YVKKQOTE.cjs} +3 -3
  32. package/dist/{chunk-XC3HIJM3.cjs.map → chunk-YVKKQOTE.cjs.map} +1 -1
  33. package/dist/{chunk-ZCBOREOG.js → chunk-Z5PEOX6F.js} +3 -3
  34. package/dist/{chunk-ZCBOREOG.js.map → chunk-Z5PEOX6F.js.map} +1 -1
  35. package/dist/{chunk-2YUUVN7E.cjs → chunk-ZZCTMR2F.cjs} +3 -3
  36. package/dist/{chunk-2YUUVN7E.cjs.map → chunk-ZZCTMR2F.cjs.map} +1 -1
  37. package/dist/components/buttons/BackButton.cjs +1 -1
  38. package/dist/components/buttons/BackButton.js +1 -1
  39. package/dist/components/jobCard/JobLocation.cjs +1 -1
  40. package/dist/components/jobCard/JobLocation.js +1 -1
  41. package/dist/components/jobPost/JobHeader.cjs +5 -5
  42. package/dist/components/jobPost/JobHeader.js +4 -4
  43. package/dist/components/jobPost/JobPost.cjs +20 -20
  44. package/dist/components/jobPost/JobPost.js +19 -19
  45. package/dist/components/ui/Combobox.cjs +3 -3
  46. package/dist/components/ui/Combobox.js +2 -2
  47. package/dist/components/ui/Map/MapComponent.cjs +5 -5
  48. package/dist/components/ui/Map/MapComponent.js +4 -4
  49. package/dist/components/ui/Map/MapContent.cjs +1 -1
  50. package/dist/components/ui/Map/MapContent.js +1 -1
  51. package/dist/components/ui/Map/index.cjs +5 -5
  52. package/dist/components/ui/Map/index.js +4 -4
  53. package/dist/components/ui/PlacesQueryInput.cjs +3 -3
  54. package/dist/components/ui/PlacesQueryInput.js +2 -2
  55. package/dist/components/ui/Select.cjs +2 -2
  56. package/dist/components/ui/Select.d.cts +1 -0
  57. package/dist/components/ui/Select.d.ts +1 -0
  58. package/dist/components/ui/Select.js +1 -1
  59. package/dist/hooks/useDisplayText.cjs +4 -4
  60. package/dist/hooks/useDisplayText.js +3 -3
  61. package/dist/index.cjs +91 -91
  62. package/dist/index.js +37 -37
  63. package/dist/lib/salaryRange.cjs +2 -2
  64. package/dist/lib/salaryRange.js +2 -2
  65. package/dist/services/displayText.cjs +3 -3
  66. package/dist/services/displayText.js +2 -2
  67. package/dist/types/index.cjs +7 -7
  68. package/dist/types/index.js +2 -2
  69. package/dist/types/latest/custom/job_posting_service_sanity.cjs +12 -12
  70. package/dist/types/latest/custom/job_posting_service_sanity.js +2 -2
  71. package/package.json +1 -1
  72. package/dist/chunk-FAMHC5MQ.cjs.map +0 -1
  73. package/dist/chunk-GKL5KEO4.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import { useMapBounds, useZoomLevel, useClusters } from './chunk-FSMBDLNU.js';
2
1
  import { MapContent } from './chunk-KM5XDOAL.js';
2
+ import { useMapBounds, useZoomLevel, useClusters } from './chunk-FSMBDLNU.js';
3
3
  import { getCenterForCoordinates, getZoomForCoordinates } from './chunk-5H35ZVLR.js';
4
4
  import { DEFAULT_ZOOM, DEFAULT_POSITION } from './chunk-LQQ244AY.js';
5
5
  import { APIProvider } from '@vis.gl/react-google-maps';
@@ -44,5 +44,5 @@ function MapComponent({
44
44
  }
45
45
 
46
46
  export { MapComponent };
47
- //# sourceMappingURL=chunk-KQLHT5UE.js.map
48
- //# sourceMappingURL=chunk-KQLHT5UE.js.map
47
+ //# sourceMappingURL=chunk-3XO3AJR4.js.map
48
+ //# sourceMappingURL=chunk-3XO3AJR4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/Map/MapComponent.tsx"],"names":[],"mappings":";;;;;;;AAUO,SAAS,YAA0B,CAAA;AAAA,EACxC,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAO,GAAA;AACT,CAAmC,EAAA;AACjC,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAU,EAAA,GAAI,aAAa,WAAW,CAAA;AACtD,EAAA,MAAM,EAAE,SAAW,EAAA,YAAA,EAAiB,GAAA,YAAA,CAAa,QAAQ,YAAY,CAAA;AACrE,EAAA,MAAM,EAAE,QAAU,EAAA,YAAA,KAAiB,WAAY,CAAA,WAAA,EAAa,QAAQ,SAAS,CAAA;AAE7E,EAAM,MAAA,SAAA,GACJ,eAAe,WAAY,CAAA,MAAA,GAAS,IAChC,uBAAwB,CAAA,WAAW,IACnC,QAAY,IAAA,gBAAA;AAElB,EAAM,MAAA,OAAA,GACJ,WAAe,IAAA,WAAA,CAAY,MAAS,GAAA,CAAA,GAChC,sBAAsB,WAAa,EAAA,IAAI,CACvC,GAAA,QAAA,GACE,IACA,GAAA,YAAA;AAER,EACE,uBAAA,GAAA,CAAC,eAAY,MACX,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ","file":"chunk-KQLHT5UE.js","sourcesContent":["'use client'\n\nimport { APIProvider } from '@vis.gl/react-google-maps'\n\nimport { DEFAULT_POSITION, DEFAULT_ZOOM } from '@/components/ui/Map/constants'\nimport { useClusters, useMapBounds, useZoomLevel } from '@/components/ui/Map/hooks'\nimport { MapContent } from '@/components/ui/Map/MapContent'\nimport type { MapComponentProps, PinData } from '@/components/ui/Map/types'\nimport { getCenterForCoordinates, getZoomForCoordinates } from '@/components/ui/Map/utils'\n\nexport function MapComponent<T = PinData>({\n apiKey,\n mapId,\n position,\n coordinates,\n onPinHover,\n onPinClick,\n focusPoint,\n radiusMiles,\n className,\n zoom = 10,\n}: Readonly<MapComponentProps<T>>) {\n const { bounds, setBounds } = useMapBounds(coordinates)\n const { zoomLevel, setZoomLevel } = useZoomLevel(zoom || DEFAULT_ZOOM)\n const { clusters, supercluster } = useClusters(coordinates, bounds, zoomLevel)\n\n const mapCenter =\n coordinates && coordinates.length > 0\n ? getCenterForCoordinates(coordinates)\n : position || DEFAULT_POSITION\n\n const mapZoom =\n coordinates && coordinates.length > 1\n ? getZoomForCoordinates(coordinates, zoom)\n : position\n ? zoom\n : DEFAULT_ZOOM\n\n return (\n <APIProvider apiKey={apiKey}>\n <MapContent\n mapId={mapId}\n mapCenter={mapCenter}\n mapZoom={mapZoom}\n position={position}\n coordinates={coordinates}\n clusters={clusters}\n supercluster={supercluster}\n onPinHover={onPinHover}\n onPinClick={onPinClick}\n focusPoint={focusPoint}\n radiusMiles={radiusMiles}\n className={className}\n setBounds={setBounds}\n setZoomLevel={setZoomLevel}\n />\n </APIProvider>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/components/ui/Map/MapComponent.tsx"],"names":[],"mappings":";;;;;;;AAUO,SAAS,YAA0B,CAAA;AAAA,EACxC,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAO,GAAA;AACT,CAAmC,EAAA;AACjC,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAU,EAAA,GAAI,aAAa,WAAW,CAAA;AACtD,EAAA,MAAM,EAAE,SAAW,EAAA,YAAA,EAAiB,GAAA,YAAA,CAAa,QAAQ,YAAY,CAAA;AACrE,EAAA,MAAM,EAAE,QAAU,EAAA,YAAA,KAAiB,WAAY,CAAA,WAAA,EAAa,QAAQ,SAAS,CAAA;AAE7E,EAAM,MAAA,SAAA,GACJ,eAAe,WAAY,CAAA,MAAA,GAAS,IAChC,uBAAwB,CAAA,WAAW,IACnC,QAAY,IAAA,gBAAA;AAElB,EAAM,MAAA,OAAA,GACJ,WAAe,IAAA,WAAA,CAAY,MAAS,GAAA,CAAA,GAChC,sBAAsB,WAAa,EAAA,IAAI,CACvC,GAAA,QAAA,GACE,IACA,GAAA,YAAA;AAER,EACE,uBAAA,GAAA,CAAC,eAAY,MACX,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ","file":"chunk-3XO3AJR4.js","sourcesContent":["'use client'\n\nimport { APIProvider } from '@vis.gl/react-google-maps'\n\nimport { DEFAULT_POSITION, DEFAULT_ZOOM } from '@/components/ui/Map/constants'\nimport { useClusters, useMapBounds, useZoomLevel } from '@/components/ui/Map/hooks'\nimport { MapContent } from '@/components/ui/Map/MapContent'\nimport type { MapComponentProps, PinData } from '@/components/ui/Map/types'\nimport { getCenterForCoordinates, getZoomForCoordinates } from '@/components/ui/Map/utils'\n\nexport function MapComponent<T = PinData>({\n apiKey,\n mapId,\n position,\n coordinates,\n onPinHover,\n onPinClick,\n focusPoint,\n radiusMiles,\n className,\n zoom = 10,\n}: Readonly<MapComponentProps<T>>) {\n const { bounds, setBounds } = useMapBounds(coordinates)\n const { zoomLevel, setZoomLevel } = useZoomLevel(zoom || DEFAULT_ZOOM)\n const { clusters, supercluster } = useClusters(coordinates, bounds, zoomLevel)\n\n const mapCenter =\n coordinates && coordinates.length > 0\n ? getCenterForCoordinates(coordinates)\n : position || DEFAULT_POSITION\n\n const mapZoom =\n coordinates && coordinates.length > 1\n ? getZoomForCoordinates(coordinates, zoom)\n : position\n ? zoom\n : DEFAULT_ZOOM\n\n return (\n <APIProvider apiKey={apiKey}>\n <MapContent\n mapId={mapId}\n mapCenter={mapCenter}\n mapZoom={mapZoom}\n position={position}\n coordinates={coordinates}\n clusters={clusters}\n supercluster={supercluster}\n onPinHover={onPinHover}\n onPinClick={onPinClick}\n focusPoint={focusPoint}\n radiusMiles={radiusMiles}\n className={className}\n setBounds={setBounds}\n setZoomLevel={setZoomLevel}\n />\n </APIProvider>\n )\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { DisplayTextScopeNotFoundError, DisplayTextValueNotFoundError } from './chunk-YB2USB4M.js';
2
1
  import { defaultMappings } from './chunk-TCV6N3EK.js';
2
+ import { DisplayTextScopeNotFoundError, DisplayTextValueNotFoundError } from './chunk-YB2USB4M.js';
3
3
 
4
4
  // src/services/displayText.tsx
5
5
  var DisplayTextService = class {
@@ -31,5 +31,5 @@ var DisplayTextService = class {
31
31
  };
32
32
 
33
33
  export { DisplayTextService };
34
- //# sourceMappingURL=chunk-OZJZVEF2.js.map
35
- //# sourceMappingURL=chunk-OZJZVEF2.js.map
34
+ //# sourceMappingURL=chunk-4E3ANVRR.js.map
35
+ //# sourceMappingURL=chunk-4E3ANVRR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/services/displayText.tsx"],"names":["displayTexts"],"mappings":";;;;AAiCO,IAAM,qBAAN,MAAwD;AAAA,EAI7D,YAAY,cAA2C,EAAA;AAHvD,IAAA,IAAA,CAAiB,eAAqC,GAAA,IAAA;AAIpD,IAAA,IAAA,CAAK,QAAW,GAAA;AAAA,MACd,GAAG,eAAA;AAAA;AAAA,MACH,GAAG;AAAA;AAAA,KACL;AAAA;AACF,EAEA,MAAM,cACJ,CAAA,KAAA,EACA,KACA,EAAA,QAAA,GAA8B,KAAK,eAClB,EAAA;AACjB,IAAM,MAAA,YAAA,GAAe,IAAK,CAAA,QAAA,CAAS,KAAK,CAAA;AAExC,IAAA,IAAI,CAAC,YAAc,EAAA;AACjB,MAAM,MAAA,IAAI,8BAA8B,KAAK,CAAA;AAAA;AAG/C,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AACxB,MAAM,MAAA,mBAAA,GAAsB,KAAM,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,KAAK,cAAe,CAAA,KAAA,EAAO,CAAG,EAAA,QAAQ,CAAC,CAAA;AACpF,MAAA,MAAMA,aAAe,GAAA,MAAM,OAAQ,CAAA,GAAA,CAAI,mBAAmB,CAAA;AAC1D,MAAOA,OAAAA,aAAAA,CAAa,OAAO,CAAC,CAAA,KAAM,CAAC,CAAC,CAAC,CAAE,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA;AAGlD,IAAM,MAAA,YAAA,GAAe,aAAa,KAAK,CAAA;AAEvC,IAAA,IAAI,CAAC,YAAc,EAAA;AACjB,MAAM,MAAA,IAAI,6BAA8B,CAAA,KAAA,EAAO,KAAK,CAAA;AAAA;AAGtD,IAAA,OAAO,aAAa,QAAQ,CAAA,IAAK,YAAa,CAAA,IAAA,CAAK,eAAe,CAAK,IAAA,KAAA;AAAA;AAE3E","file":"chunk-OZJZVEF2.js","sourcesContent":["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"]}
1
+ {"version":3,"sources":["../src/services/displayText.tsx"],"names":["displayTexts"],"mappings":";;;;AAiCO,IAAM,qBAAN,MAAwD;AAAA,EAI7D,YAAY,cAA2C,EAAA;AAHvD,IAAA,IAAA,CAAiB,eAAqC,GAAA,IAAA;AAIpD,IAAA,IAAA,CAAK,QAAW,GAAA;AAAA,MACd,GAAG,eAAA;AAAA;AAAA,MACH,GAAG;AAAA;AAAA,KACL;AAAA;AACF,EAEA,MAAM,cACJ,CAAA,KAAA,EACA,KACA,EAAA,QAAA,GAA8B,KAAK,eAClB,EAAA;AACjB,IAAM,MAAA,YAAA,GAAe,IAAK,CAAA,QAAA,CAAS,KAAK,CAAA;AAExC,IAAA,IAAI,CAAC,YAAc,EAAA;AACjB,MAAM,MAAA,IAAI,8BAA8B,KAAK,CAAA;AAAA;AAG/C,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AACxB,MAAM,MAAA,mBAAA,GAAsB,KAAM,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,KAAK,cAAe,CAAA,KAAA,EAAO,CAAG,EAAA,QAAQ,CAAC,CAAA;AACpF,MAAA,MAAMA,aAAe,GAAA,MAAM,OAAQ,CAAA,GAAA,CAAI,mBAAmB,CAAA;AAC1D,MAAOA,OAAAA,aAAAA,CAAa,OAAO,CAAC,CAAA,KAAM,CAAC,CAAC,CAAC,CAAE,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA;AAGlD,IAAM,MAAA,YAAA,GAAe,aAAa,KAAK,CAAA;AAEvC,IAAA,IAAI,CAAC,YAAc,EAAA;AACjB,MAAM,MAAA,IAAI,6BAA8B,CAAA,KAAA,EAAO,KAAK,CAAA;AAAA;AAGtD,IAAA,OAAO,aAAa,QAAQ,CAAA,IAAK,YAAa,CAAA,IAAA,CAAK,eAAe,CAAK,IAAA,KAAA;AAAA;AAE3E","file":"chunk-4E3ANVRR.js","sourcesContent":["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"]}
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var chunk2YUUVN7E_cjs = require('./chunk-2YUUVN7E.cjs');
3
+ var chunkZZCTMR2F_cjs = require('./chunk-ZZCTMR2F.cjs');
4
4
  var chunkXUTLQ573_cjs = require('./chunk-XUTLQ573.cjs');
5
5
  var react = require('react');
6
6
 
7
7
  var useDisplayText = (scope, value) => {
8
8
  const [displayText, setDisplayText] = react.useState("");
9
- const displayService = react.useMemo(() => new chunk2YUUVN7E_cjs.DisplayTextService(), []);
9
+ const displayService = react.useMemo(() => new chunkZZCTMR2F_cjs.DisplayTextService(), []);
10
10
  react.useEffect(() => {
11
11
  if (!displayService || !value) {
12
12
  setDisplayText("");
@@ -35,5 +35,5 @@ var useDisplayText = (scope, value) => {
35
35
  };
36
36
 
37
37
  exports.useDisplayText = useDisplayText;
38
- //# sourceMappingURL=chunk-OXDKVZZ5.cjs.map
39
- //# sourceMappingURL=chunk-OXDKVZZ5.cjs.map
38
+ //# sourceMappingURL=chunk-567FG76G.cjs.map
39
+ //# sourceMappingURL=chunk-567FG76G.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useDisplayText.ts"],"names":["useState","useMemo","DisplayTextService","useEffect","DisplayTextValueNotFoundError"],"mappings":";;;;;;AAKa,IAAA,cAAA,GAAiB,CAC5B,KAAA,EACA,KACG,KAAA;AACH,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,EAAE,CAAA;AACjD,EAAA,MAAM,iBAAiBC,aAAQ,CAAA,MAAM,IAAIC,oCAAmB,EAAA,EAAG,EAAE,CAAA;AAEjE,EAAAC,eAAA,CAAU,MAAM;AACd,IAAI,IAAA,CAAC,cAAkB,IAAA,CAAC,KAAO,EAAA;AAC7B,MAAA,cAAA,CAAe,EAAE,CAAA;AACjB,MAAA;AAAA;AAEF,IAAA,KAAA,CAAM,YAAY;AAChB,MAAI,IAAA;AACF,QAAA,MAAM,MAAS,GAAA,MAAM,cAAe,CAAA,cAAA,CAAe,OAAO,KAAK,CAAA;AAC/D,QAAI,IAAA,OAAO,WAAW,QAAU,EAAA;AAC9B,UAAA,cAAA,CAAe,MAAM,CAAA;AAAA,SAChB,MAAA;AACL,UAAQ,OAAA,CAAA,KAAA,CAAM,sCAAsC,MAAM,CAAA;AAAA;AAC5D,eACO,KAAO,EAAA;AACd,QAAA,IAAI,iBAAiBC,+CAA+B,EAAA;AAClD,UAAQ,OAAA,CAAA,IAAA,CAAK,iCAAiC,KAAK,CAAA;AACnD,UAAe,cAAA,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,SACvB,MAAA;AACL,UAAQ,OAAA,CAAA,KAAA,CAAM,qCAAqC,KAAK,CAAA;AACxD,UAAe,cAAA,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA;AAC9B;AACF,KACC,GAAA;AAAA,GACF,EAAA,CAAC,KAAO,EAAA,KAAA,EAAO,cAAc,CAAC,CAAA;AAEjC,EAAO,OAAA,WAAA;AACT","file":"chunk-OXDKVZZ5.cjs","sourcesContent":["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"]}
1
+ {"version":3,"sources":["../src/hooks/useDisplayText.ts"],"names":["useState","useMemo","DisplayTextService","useEffect","DisplayTextValueNotFoundError"],"mappings":";;;;;;AAKa,IAAA,cAAA,GAAiB,CAC5B,KAAA,EACA,KACG,KAAA;AACH,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,EAAE,CAAA;AACjD,EAAA,MAAM,iBAAiBC,aAAQ,CAAA,MAAM,IAAIC,oCAAmB,EAAA,EAAG,EAAE,CAAA;AAEjE,EAAAC,eAAA,CAAU,MAAM;AACd,IAAI,IAAA,CAAC,cAAkB,IAAA,CAAC,KAAO,EAAA;AAC7B,MAAA,cAAA,CAAe,EAAE,CAAA;AACjB,MAAA;AAAA;AAEF,IAAA,KAAA,CAAM,YAAY;AAChB,MAAI,IAAA;AACF,QAAA,MAAM,MAAS,GAAA,MAAM,cAAe,CAAA,cAAA,CAAe,OAAO,KAAK,CAAA;AAC/D,QAAI,IAAA,OAAO,WAAW,QAAU,EAAA;AAC9B,UAAA,cAAA,CAAe,MAAM,CAAA;AAAA,SAChB,MAAA;AACL,UAAQ,OAAA,CAAA,KAAA,CAAM,sCAAsC,MAAM,CAAA;AAAA;AAC5D,eACO,KAAO,EAAA;AACd,QAAA,IAAI,iBAAiBC,+CAA+B,EAAA;AAClD,UAAQ,OAAA,CAAA,IAAA,CAAK,iCAAiC,KAAK,CAAA;AACnD,UAAe,cAAA,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,SACvB,MAAA;AACL,UAAQ,OAAA,CAAA,KAAA,CAAM,qCAAqC,KAAK,CAAA;AACxD,UAAe,cAAA,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA;AAC9B;AACF,KACC,GAAA;AAAA,GACF,EAAA,CAAC,KAAO,EAAA,KAAA,EAAO,cAAc,CAAC,CAAA;AAEjC,EAAO,OAAA,WAAA;AACT","file":"chunk-567FG76G.cjs","sourcesContent":["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"]}
@@ -1,5 +1,5 @@
1
- import { jobPostSchema, ShiftEnum, PublishStatusEnum, JobFunctionEnum, EmploymentTypeEnum, EmploymentLevelEnum, ClinicalSpecialtyEnum, ClinicalSettingEnum, ClinicalLicenseEnum, BestFitEnum } from './chunk-47H3M7TP.js';
2
1
  import { sanityReferenceSchema } from './chunk-W6BMYVY5.js';
2
+ import { jobPostSchema, ShiftEnum, PublishStatusEnum, JobFunctionEnum, EmploymentTypeEnum, EmploymentLevelEnum, ClinicalSpecialtyEnum, ClinicalSettingEnum, ClinicalLicenseEnum, BestFitEnum } from './chunk-47H3M7TP.js';
3
3
  import { companySchema } from './chunk-FOJTLQJO.js';
4
4
  import { quantitativeValueSchema, postalAddressSchema, monetaryAmountSchema, UnitTextEnum, DetailLevelEnum, CurrencyEnum } from './chunk-Z33TWZHI.js';
5
5
  import { __export } from './chunk-PZ5AY32C.js';
@@ -83,5 +83,5 @@ var jobPostSchema2 = jobPostSchema.extend({
83
83
  })).transform(({ _type, _id, _rev, _createdAt, _updatedAt, ...rest }) => rest);
84
84
 
85
85
  export { JobPostTypeEnum, MonetaryAmountTypeEnum, jobPostSchema2 as jobPostSchema, job_posting_service_sanity_exports, monetaryAmountSchema2 as monetaryAmountSchema, postalAddressSchema2 as postalAddressSchema, quantitativeValueSchema2 as quantitativeValueSchema };
86
- //# sourceMappingURL=chunk-KJ5X2ZKA.js.map
87
- //# sourceMappingURL=chunk-KJ5X2ZKA.js.map
86
+ //# sourceMappingURL=chunk-5REFGTWO.js.map
87
+ //# sourceMappingURL=chunk-5REFGTWO.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/latest/custom/job_posting_service_sanity.ts"],"names":["jobPostSchema","monetaryAmountSchema","postalAddressSchema","quantitativeValueSchema"],"mappings":"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","file":"chunk-KJ5X2ZKA.js","sourcesContent":["import { companySchema } from '../company_service_latest';\nimport {\n jobPostSchema as contractJobPostSchema,\n } from '../job_posting_service_latest';\n\nimport {\n monetaryAmountSchema as contractMonetaryAmountSchema,\n postalAddressSchema as contractPostalAddressSchema,\n quantitativeValueSchema as contractQuantitativeValueSchema\n} from '../shared_pickle_output_latest';\n\nimport { sanityReferenceSchema } from './custom_sanity_models';\n\nimport { z } from 'zod';\n\n// New Enums\nexport const JobPostTypeEnum = z.enum(['jobPost']);\nexport const MonetaryAmountTypeEnum = z.enum(['monetaryAmount']);\n\nexport const postalAddressSchema = contractPostalAddressSchema.extend({\n _type: z.string().describe(\"Document type used within sanity\").default('address')\n}).omit({ type: true })\n.strict()\n.transform(data => ({\n ...data,\n type: data._type,\n}))\n.transform(({ _type, ...rest }) => rest);\n\nexport const quantitativeValueSchema = contractQuantitativeValueSchema.extend({\n _type: z.string().describe(\"Document type used within sanity\").default('quantitativeValue')\n }).omit({ type: true })\n .strict()\n .transform(data => ({\n ...data,\n type: data._type,\n }))\n .transform(({ _type, ...rest }) => rest);\n\n // 4. MonetaryAmount - Extend and override\n export const monetaryAmountSchema = contractMonetaryAmountSchema.extend({\n _type: z.string().describe(\"Document type used within sanity\").default('monetaryAmount'),\n value: quantitativeValueSchema.optional().describe(\"The quantitative_value for a given salary\")\n }).omit({ type: true })\n .strict()\n .transform(data => ({\n ...data,\n type: data._type,\n }))\n .transform(({ _type, ...rest }) => rest);\n\n // 5. JobPost - Extend and override\n export const jobPostSchema = contractJobPostSchema.extend({\n // Override base fields with Sanity-specific fields\n _id: z.string()\n .describe(\"The NDG specific id for a job posting in form of ndg-<company_slug>-<unique-job-id>. Serves as unique identifier. Cannot be changed.\")\n .regex(/^ndg-.*-.*$/),\n _rev: z.string().optional().describe(\"Revision number\"),\n _type: z.string().describe(\"Document type used within sanity\").default('jobPost'),\n _createdAt: z.string().datetime().describe(\"Time document was created. Autoset by Sanity\"),\n _updatedAt: z.string().datetime().describe(\"Time document was created. Autoset by Sanity\"),\n\n // Override fields with new schemas\n estimatedSalary: monetaryAmountSchema.optional()\n .describe(\"Determines the estimated salary for a given job posting\"),\n jobLocation: postalAddressSchema.optional()\n .describe(\"Determines the primary physical location where the job is to be performed. For remote roles, use applicantLocationRequirements\"),\n\n // Add Sanity-specific fields\n ndgMetadata: z.record(z.any()).optional(),\n ndgID: z.string().optional(),\n hiringOrganization: z.optional(z.union([sanityReferenceSchema, companySchema])),\n raw: z.record(z.any()).optional(),\n isLoaded: z.boolean().default(false),\n isVerified: z.boolean().default(false),\n needsReview: z.boolean().default(false),\n schema_version: z.string().optional(),\n origin: z.string().optional(),\n temp: z.record(z.any()).optional(),\n applicationType: z.string().optional(),\n\n // Override clientId to use Sanity naming convention\n clientID: z.string()\n }).omit({type: true, id:true, createdAt: true, updatedAt: true, clientId:true}).transform(data => ({\n ...data,\n type: data._type,\n id: data._id,\n createdAt: data._createdAt,\n updatedAt: data._updatedAt,\n rev: data._rev\n }))\n .transform(({ _type,_id, _rev, _createdAt, _updatedAt, ...rest }) => rest);;\n\n // Exports\n export type SanityReference = z.infer<typeof sanityReferenceSchema>;\n export type PostalAddress = z.infer<typeof postalAddressSchema>;\n export type QuantitativeValue = z.infer<typeof quantitativeValueSchema>;\n export type MonetaryAmount = z.infer<typeof monetaryAmountSchema>;\n export type JobPost = z.infer<typeof jobPostSchema>;\n\n\n export {\n EmploymentTypeEnum,\n EmploymentLevelEnum,\n JobFunctionEnum,\n PublishStatusEnum,\n BestFitEnum,\n ClinicalLicenseEnum,\n ShiftEnum,\n ClinicalSettingEnum,\n ClinicalSpecialtyEnum,\n } from '../job_posting_service_latest';\n\n export {\n DetailLevelEnum,\n UnitTextEnum,\n CurrencyEnum,\n } from '../shared_pickle_output_latest';\n\n export{\n sanityReferenceSchema\n } from './custom_sanity_models';\n"]}
1
+ {"version":3,"sources":["../src/types/latest/custom/job_posting_service_sanity.ts"],"names":["jobPostSchema","monetaryAmountSchema","postalAddressSchema","quantitativeValueSchema"],"mappings":"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","file":"chunk-5REFGTWO.js","sourcesContent":["import { companySchema } from '../company_service_latest';\nimport {\n jobPostSchema as contractJobPostSchema,\n } from '../job_posting_service_latest';\n\nimport {\n monetaryAmountSchema as contractMonetaryAmountSchema,\n postalAddressSchema as contractPostalAddressSchema,\n quantitativeValueSchema as contractQuantitativeValueSchema\n} from '../shared_pickle_output_latest';\n\nimport { sanityReferenceSchema } from './custom_sanity_models';\n\nimport { z } from 'zod';\n\n// New Enums\nexport const JobPostTypeEnum = z.enum(['jobPost']);\nexport const MonetaryAmountTypeEnum = z.enum(['monetaryAmount']);\n\nexport const postalAddressSchema = contractPostalAddressSchema.extend({\n _type: z.string().describe(\"Document type used within sanity\").default('address')\n}).omit({ type: true })\n.strict()\n.transform(data => ({\n ...data,\n type: data._type,\n}))\n.transform(({ _type, ...rest }) => rest);\n\nexport const quantitativeValueSchema = contractQuantitativeValueSchema.extend({\n _type: z.string().describe(\"Document type used within sanity\").default('quantitativeValue')\n }).omit({ type: true })\n .strict()\n .transform(data => ({\n ...data,\n type: data._type,\n }))\n .transform(({ _type, ...rest }) => rest);\n\n // 4. MonetaryAmount - Extend and override\n export const monetaryAmountSchema = contractMonetaryAmountSchema.extend({\n _type: z.string().describe(\"Document type used within sanity\").default('monetaryAmount'),\n value: quantitativeValueSchema.optional().describe(\"The quantitative_value for a given salary\")\n }).omit({ type: true })\n .strict()\n .transform(data => ({\n ...data,\n type: data._type,\n }))\n .transform(({ _type, ...rest }) => rest);\n\n // 5. JobPost - Extend and override\n export const jobPostSchema = contractJobPostSchema.extend({\n // Override base fields with Sanity-specific fields\n _id: z.string()\n .describe(\"The NDG specific id for a job posting in form of ndg-<company_slug>-<unique-job-id>. Serves as unique identifier. Cannot be changed.\")\n .regex(/^ndg-.*-.*$/),\n _rev: z.string().optional().describe(\"Revision number\"),\n _type: z.string().describe(\"Document type used within sanity\").default('jobPost'),\n _createdAt: z.string().datetime().describe(\"Time document was created. Autoset by Sanity\"),\n _updatedAt: z.string().datetime().describe(\"Time document was created. Autoset by Sanity\"),\n\n // Override fields with new schemas\n estimatedSalary: monetaryAmountSchema.optional()\n .describe(\"Determines the estimated salary for a given job posting\"),\n jobLocation: postalAddressSchema.optional()\n .describe(\"Determines the primary physical location where the job is to be performed. For remote roles, use applicantLocationRequirements\"),\n\n // Add Sanity-specific fields\n ndgMetadata: z.record(z.any()).optional(),\n ndgID: z.string().optional(),\n hiringOrganization: z.optional(z.union([sanityReferenceSchema, companySchema])),\n raw: z.record(z.any()).optional(),\n isLoaded: z.boolean().default(false),\n isVerified: z.boolean().default(false),\n needsReview: z.boolean().default(false),\n schema_version: z.string().optional(),\n origin: z.string().optional(),\n temp: z.record(z.any()).optional(),\n applicationType: z.string().optional(),\n\n // Override clientId to use Sanity naming convention\n clientID: z.string()\n }).omit({type: true, id:true, createdAt: true, updatedAt: true, clientId:true}).transform(data => ({\n ...data,\n type: data._type,\n id: data._id,\n createdAt: data._createdAt,\n updatedAt: data._updatedAt,\n rev: data._rev\n }))\n .transform(({ _type,_id, _rev, _createdAt, _updatedAt, ...rest }) => rest);;\n\n // Exports\n export type SanityReference = z.infer<typeof sanityReferenceSchema>;\n export type PostalAddress = z.infer<typeof postalAddressSchema>;\n export type QuantitativeValue = z.infer<typeof quantitativeValueSchema>;\n export type MonetaryAmount = z.infer<typeof monetaryAmountSchema>;\n export type JobPost = z.infer<typeof jobPostSchema>;\n\n\n export {\n EmploymentTypeEnum,\n EmploymentLevelEnum,\n JobFunctionEnum,\n PublishStatusEnum,\n BestFitEnum,\n ClinicalLicenseEnum,\n ShiftEnum,\n ClinicalSettingEnum,\n ClinicalSpecialtyEnum,\n } from '../job_posting_service_latest';\n\n export {\n DetailLevelEnum,\n UnitTextEnum,\n CurrencyEnum,\n } from '../shared_pickle_output_latest';\n\n export{\n sanityReferenceSchema\n } from './custom_sanity_models';\n"]}
@@ -1,8 +1,8 @@
1
+ import { Avatar } from './chunk-2TEFWPFS.js';
1
2
  import { Chip_default } from './chunk-LQ4DG6ST.js';
2
3
  import { BackButton } from './chunk-IJQTUD3D.js';
3
- import { Avatar } from './chunk-2TEFWPFS.js';
4
- import { iconMap } from './chunk-PONUWUJ7.js';
5
4
  import { cn } from './chunk-2FGZQI42.js';
5
+ import { iconMap } from './chunk-PONUWUJ7.js';
6
6
  import { Dot } from 'lucide-react';
7
7
  import Image from 'next/image';
8
8
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -150,5 +150,5 @@ function JobHeader({
150
150
  }
151
151
 
152
152
  export { JobHeader };
153
- //# sourceMappingURL=chunk-WOD47B4V.js.map
154
- //# sourceMappingURL=chunk-WOD47B4V.js.map
153
+ //# sourceMappingURL=chunk-6Z6T5WWS.js.map
154
+ //# sourceMappingURL=chunk-6Z6T5WWS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/jobPost/JobHeader.tsx"],"names":[],"mappings":"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","file":"chunk-WOD47B4V.js","sourcesContent":["'use client'\n\nimport { Dot } from 'lucide-react'\nimport Image from 'next/image'\nimport { type ReactNode } from 'react'\n\nimport { BackButton } from '@/components/buttons/BackButton'\nimport { Avatar } from '@/components/ui/Avatar'\nimport Chip from '@/components/ui/Chip'\nimport { iconMap } from '@/lib/icons'\nimport { cn } from '@/lib/utils'\n\nexport type JobHeaderTag = {\n name: string\n label: string\n icon: keyof typeof iconMap\n}\n\nexport type JobHeaderProps = {\n title: string\n bannerSrc: string\n subtitles?: string[]\n standalone?: boolean\n avatarSrc?: string\n avatarName?: string\n avatarHref?: string\n backFallbackHref?: string\n backAcceptedRoutes?: string[]\n actions?: ReactNode\n tags?: JobHeaderTag[]\n}\n\nexport function JobHeader({\n title,\n subtitles,\n standalone,\n bannerSrc,\n avatarSrc,\n avatarName,\n avatarHref,\n backFallbackHref,\n backAcceptedRoutes,\n actions,\n tags,\n}: Readonly<JobHeaderProps>) {\n const renderIcon = (icon: JobHeaderTag['icon']) => {\n const Icon = iconMap[icon]\n return <Icon size={18} />\n }\n\n return (\n <div\n data-testid=\"job-header-root\"\n className={cn(\n '-mt-8 flex w-full flex-col items-center justify-between gap-6 md:-mt-0',\n !standalone && 'rounded-3xl'\n )}\n >\n {!standalone && (\n <div className=\"relative flex min-h-16 w-full items-center rounded-t-3xl bg-transparent md:min-h-24 md:flex-row lg:min-h-32\">\n <Image\n className=\"h-full w-full rounded-t-3xl object-cover\"\n src={bannerSrc}\n alt=\"job banner\"\n fill\n />\n <BackButton\n acceptedRoutes={backAcceptedRoutes}\n fallbackHref={backFallbackHref}\n className=\"absolute right-2 top-2 flex items-center justify-center text-white sm:hidden\"\n data-testid=\"job-header-back-button\"\n />\n <div\n className=\"absolute left-4 top-8 md:left-6 md:top-16 lg:top-24\"\n data-testid=\"job-header-avatar\"\n >\n <Avatar\n size=\"large\"\n target=\"_blank\"\n href={avatarHref}\n name={avatarName}\n src={avatarSrc}\n rel=\"noopener noreferrer\"\n />\n </div>\n </div>\n )}\n\n <div className=\"flex w-full flex-col items-start justify-start gap-4 px-6\">\n <div className=\"flex flex-col md:flex-row\">\n {standalone && (\n <div className=\"-mt-4 mr-4 md:mt-0\" data-testid=\"job-header-avatar\">\n <Avatar\n size=\"large\"\n target=\"_blank\"\n href={avatarHref}\n name={avatarName}\n src={avatarSrc}\n rel=\"noopener noreferrer\"\n />\n </div>\n )}\n\n <div className=\"prose mt-4 flex w-full items-center text-grey-80 lg:prose-lg\">\n {subtitles?.map((subtitle, i) => (\n <div\n key={subtitle}\n data-testid={`job-header-subtitle-${i}`}\n className=\"flex items-center\"\n >\n {subtitle}\n {i < subtitles.length - 1 && <Dot className=\"mx-1 shrink-0\" size={10} />}\n </div>\n ))}\n </div>\n </div>\n\n <div\n data-testid=\"job-header-content\"\n className=\"mt-2 flex w-full flex-row flex-wrap items-center justify-between gap-1\"\n >\n <h2\n data-testid=\"job-header-title\"\n className=\"break-word max-w-full text-2xl font-bold text-black sm:max-w-2xl md:max-w-lg\"\n >\n {title}\n </h2>\n\n {!!actions && (\n <div\n className=\"flex w-full justify-end gap-2 md:w-auto\"\n data-testid=\"job-header-actions\"\n >\n {actions}\n </div>\n )}\n </div>\n\n <div\n data-testid=\"job-header-tags\"\n className=\"flex flex-row flex-wrap items-center justify-start gap-2\"\n >\n {tags?.map(({ name, label, icon }) => (\n <Chip\n key={`${name}-${label}`}\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"]}
1
+ {"version":3,"sources":["../src/components/jobPost/JobHeader.tsx"],"names":[],"mappings":"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","file":"chunk-6Z6T5WWS.js","sourcesContent":["'use client'\n\nimport { Dot } from 'lucide-react'\nimport Image from 'next/image'\nimport { type ReactNode } from 'react'\n\nimport { BackButton } from '@/components/buttons/BackButton'\nimport { Avatar } from '@/components/ui/Avatar'\nimport Chip from '@/components/ui/Chip'\nimport { iconMap } from '@/lib/icons'\nimport { cn } from '@/lib/utils'\n\nexport type JobHeaderTag = {\n name: string\n label: string\n icon: keyof typeof iconMap\n}\n\nexport type JobHeaderProps = {\n title: string\n bannerSrc: string\n subtitles?: string[]\n standalone?: boolean\n avatarSrc?: string\n avatarName?: string\n avatarHref?: string\n backFallbackHref?: string\n backAcceptedRoutes?: string[]\n actions?: ReactNode\n tags?: JobHeaderTag[]\n}\n\nexport function JobHeader({\n title,\n subtitles,\n standalone,\n bannerSrc,\n avatarSrc,\n avatarName,\n avatarHref,\n backFallbackHref,\n backAcceptedRoutes,\n actions,\n tags,\n}: Readonly<JobHeaderProps>) {\n const renderIcon = (icon: JobHeaderTag['icon']) => {\n const Icon = iconMap[icon]\n return <Icon size={18} />\n }\n\n return (\n <div\n data-testid=\"job-header-root\"\n className={cn(\n '-mt-8 flex w-full flex-col items-center justify-between gap-6 md:-mt-0',\n !standalone && 'rounded-3xl'\n )}\n >\n {!standalone && (\n <div className=\"relative flex min-h-16 w-full items-center rounded-t-3xl bg-transparent md:min-h-24 md:flex-row lg:min-h-32\">\n <Image\n className=\"h-full w-full rounded-t-3xl object-cover\"\n src={bannerSrc}\n alt=\"job banner\"\n fill\n />\n <BackButton\n acceptedRoutes={backAcceptedRoutes}\n fallbackHref={backFallbackHref}\n className=\"absolute right-2 top-2 flex items-center justify-center text-white sm:hidden\"\n data-testid=\"job-header-back-button\"\n />\n <div\n className=\"absolute left-4 top-8 md:left-6 md:top-16 lg:top-24\"\n data-testid=\"job-header-avatar\"\n >\n <Avatar\n size=\"large\"\n target=\"_blank\"\n href={avatarHref}\n name={avatarName}\n src={avatarSrc}\n rel=\"noopener noreferrer\"\n />\n </div>\n </div>\n )}\n\n <div className=\"flex w-full flex-col items-start justify-start gap-4 px-6\">\n <div className=\"flex flex-col md:flex-row\">\n {standalone && (\n <div className=\"-mt-4 mr-4 md:mt-0\" data-testid=\"job-header-avatar\">\n <Avatar\n size=\"large\"\n target=\"_blank\"\n href={avatarHref}\n name={avatarName}\n src={avatarSrc}\n rel=\"noopener noreferrer\"\n />\n </div>\n )}\n\n <div className=\"prose mt-4 flex w-full items-center text-grey-80 lg:prose-lg\">\n {subtitles?.map((subtitle, i) => (\n <div\n key={subtitle}\n data-testid={`job-header-subtitle-${i}`}\n className=\"flex items-center\"\n >\n {subtitle}\n {i < subtitles.length - 1 && <Dot className=\"mx-1 shrink-0\" size={10} />}\n </div>\n ))}\n </div>\n </div>\n\n <div\n data-testid=\"job-header-content\"\n className=\"mt-2 flex w-full flex-row flex-wrap items-center justify-between gap-1\"\n >\n <h2\n data-testid=\"job-header-title\"\n className=\"break-word max-w-full text-2xl font-bold text-black sm:max-w-2xl md:max-w-lg\"\n >\n {title}\n </h2>\n\n {!!actions && (\n <div\n className=\"flex w-full justify-end gap-2 md:w-auto\"\n data-testid=\"job-header-actions\"\n >\n {actions}\n </div>\n )}\n </div>\n\n <div\n data-testid=\"job-header-tags\"\n className=\"flex flex-row flex-wrap items-center justify-start gap-2\"\n >\n {tags?.map(({ name, label, icon }) => (\n <Chip\n key={`${name}-${label}`}\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"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkSKMP4FO7_cjs = require('./chunk-SKMP4FO7.cjs');
4
3
  var chunkIJV66D4K_cjs = require('./chunk-IJV66D4K.cjs');
4
+ var chunkSKMP4FO7_cjs = require('./chunk-SKMP4FO7.cjs');
5
5
  var chunkDU5OQA67_cjs = require('./chunk-DU5OQA67.cjs');
6
6
  var chunkNLGWU2KI_cjs = require('./chunk-NLGWU2KI.cjs');
7
7
  var reactGoogleMaps = require('@vis.gl/react-google-maps');
@@ -46,5 +46,5 @@ function MapComponent({
46
46
  }
47
47
 
48
48
  exports.MapComponent = MapComponent;
49
- //# sourceMappingURL=chunk-54CL72AL.cjs.map
50
- //# sourceMappingURL=chunk-54CL72AL.cjs.map
49
+ //# sourceMappingURL=chunk-7NP3NX67.cjs.map
50
+ //# sourceMappingURL=chunk-7NP3NX67.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/Map/MapComponent.tsx"],"names":["useMapBounds","useZoomLevel","DEFAULT_ZOOM","useClusters","getCenterForCoordinates","DEFAULT_POSITION","getZoomForCoordinates","jsx","APIProvider","MapContent"],"mappings":";;;;;;;;;AAUO,SAAS,YAA0B,CAAA;AAAA,EACxC,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAO,GAAA;AACT,CAAmC,EAAA;AACjC,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAU,EAAA,GAAIA,+BAAa,WAAW,CAAA;AACtD,EAAA,MAAM,EAAE,SAAW,EAAA,YAAA,EAAiB,GAAAC,8BAAA,CAAa,QAAQC,8BAAY,CAAA;AACrE,EAAA,MAAM,EAAE,QAAU,EAAA,YAAA,KAAiBC,6BAAY,CAAA,WAAA,EAAa,QAAQ,SAAS,CAAA;AAE7E,EAAM,MAAA,SAAA,GACJ,eAAe,WAAY,CAAA,MAAA,GAAS,IAChCC,yCAAwB,CAAA,WAAW,IACnC,QAAY,IAAAC,kCAAA;AAElB,EAAM,MAAA,OAAA,GACJ,WAAe,IAAA,WAAA,CAAY,MAAS,GAAA,CAAA,GAChCC,wCAAsB,WAAa,EAAA,IAAI,CACvC,GAAA,QAAA,GACE,IACA,GAAAJ,8BAAA;AAER,EACE,uBAAAK,cAAA,CAACC,+BAAY,MACX,EAAA,QAAA,kBAAAD,cAAA;AAAA,IAACE,4BAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ","file":"chunk-54CL72AL.cjs","sourcesContent":["'use client'\n\nimport { APIProvider } from '@vis.gl/react-google-maps'\n\nimport { DEFAULT_POSITION, DEFAULT_ZOOM } from '@/components/ui/Map/constants'\nimport { useClusters, useMapBounds, useZoomLevel } from '@/components/ui/Map/hooks'\nimport { MapContent } from '@/components/ui/Map/MapContent'\nimport type { MapComponentProps, PinData } from '@/components/ui/Map/types'\nimport { getCenterForCoordinates, getZoomForCoordinates } from '@/components/ui/Map/utils'\n\nexport function MapComponent<T = PinData>({\n apiKey,\n mapId,\n position,\n coordinates,\n onPinHover,\n onPinClick,\n focusPoint,\n radiusMiles,\n className,\n zoom = 10,\n}: Readonly<MapComponentProps<T>>) {\n const { bounds, setBounds } = useMapBounds(coordinates)\n const { zoomLevel, setZoomLevel } = useZoomLevel(zoom || DEFAULT_ZOOM)\n const { clusters, supercluster } = useClusters(coordinates, bounds, zoomLevel)\n\n const mapCenter =\n coordinates && coordinates.length > 0\n ? getCenterForCoordinates(coordinates)\n : position || DEFAULT_POSITION\n\n const mapZoom =\n coordinates && coordinates.length > 1\n ? getZoomForCoordinates(coordinates, zoom)\n : position\n ? zoom\n : DEFAULT_ZOOM\n\n return (\n <APIProvider apiKey={apiKey}>\n <MapContent\n mapId={mapId}\n mapCenter={mapCenter}\n mapZoom={mapZoom}\n position={position}\n coordinates={coordinates}\n clusters={clusters}\n supercluster={supercluster}\n onPinHover={onPinHover}\n onPinClick={onPinClick}\n focusPoint={focusPoint}\n radiusMiles={radiusMiles}\n className={className}\n setBounds={setBounds}\n setZoomLevel={setZoomLevel}\n />\n </APIProvider>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/components/ui/Map/MapComponent.tsx"],"names":["useMapBounds","useZoomLevel","DEFAULT_ZOOM","useClusters","getCenterForCoordinates","DEFAULT_POSITION","getZoomForCoordinates","jsx","APIProvider","MapContent"],"mappings":";;;;;;;;;AAUO,SAAS,YAA0B,CAAA;AAAA,EACxC,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAO,GAAA;AACT,CAAmC,EAAA;AACjC,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAU,EAAA,GAAIA,+BAAa,WAAW,CAAA;AACtD,EAAA,MAAM,EAAE,SAAW,EAAA,YAAA,EAAiB,GAAAC,8BAAA,CAAa,QAAQC,8BAAY,CAAA;AACrE,EAAA,MAAM,EAAE,QAAU,EAAA,YAAA,KAAiBC,6BAAY,CAAA,WAAA,EAAa,QAAQ,SAAS,CAAA;AAE7E,EAAM,MAAA,SAAA,GACJ,eAAe,WAAY,CAAA,MAAA,GAAS,IAChCC,yCAAwB,CAAA,WAAW,IACnC,QAAY,IAAAC,kCAAA;AAElB,EAAM,MAAA,OAAA,GACJ,WAAe,IAAA,WAAA,CAAY,MAAS,GAAA,CAAA,GAChCC,wCAAsB,WAAa,EAAA,IAAI,CACvC,GAAA,QAAA,GACE,IACA,GAAAJ,8BAAA;AAER,EACE,uBAAAK,cAAA,CAACC,+BAAY,MACX,EAAA,QAAA,kBAAAD,cAAA;AAAA,IAACE,4BAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ","file":"chunk-7NP3NX67.cjs","sourcesContent":["'use client'\n\nimport { APIProvider } from '@vis.gl/react-google-maps'\n\nimport { DEFAULT_POSITION, DEFAULT_ZOOM } from '@/components/ui/Map/constants'\nimport { useClusters, useMapBounds, useZoomLevel } from '@/components/ui/Map/hooks'\nimport { MapContent } from '@/components/ui/Map/MapContent'\nimport type { MapComponentProps, PinData } from '@/components/ui/Map/types'\nimport { getCenterForCoordinates, getZoomForCoordinates } from '@/components/ui/Map/utils'\n\nexport function MapComponent<T = PinData>({\n apiKey,\n mapId,\n position,\n coordinates,\n onPinHover,\n onPinClick,\n focusPoint,\n radiusMiles,\n className,\n zoom = 10,\n}: Readonly<MapComponentProps<T>>) {\n const { bounds, setBounds } = useMapBounds(coordinates)\n const { zoomLevel, setZoomLevel } = useZoomLevel(zoom || DEFAULT_ZOOM)\n const { clusters, supercluster } = useClusters(coordinates, bounds, zoomLevel)\n\n const mapCenter =\n coordinates && coordinates.length > 0\n ? getCenterForCoordinates(coordinates)\n : position || DEFAULT_POSITION\n\n const mapZoom =\n coordinates && coordinates.length > 1\n ? getZoomForCoordinates(coordinates, zoom)\n : position\n ? zoom\n : DEFAULT_ZOOM\n\n return (\n <APIProvider apiKey={apiKey}>\n <MapContent\n mapId={mapId}\n mapCenter={mapCenter}\n mapZoom={mapZoom}\n position={position}\n coordinates={coordinates}\n clusters={clusters}\n supercluster={supercluster}\n onPinHover={onPinHover}\n onPinClick={onPinClick}\n focusPoint={focusPoint}\n radiusMiles={radiusMiles}\n className={className}\n setBounds={setBounds}\n setZoomLevel={setZoomLevel}\n />\n </APIProvider>\n )\n}\n"]}
@@ -23,7 +23,7 @@ var Select = forwardRef(
23
23
  useAnchor = true,
24
24
  ...props
25
25
  }, ref) => {
26
- const { value, defaultValue, dir, className, onChange, ...rest } = props;
26
+ const { value, defaultValue, dir, className, onChange, onOpenChange, ...rest } = props;
27
27
  const [selected, setSelected] = useState([]);
28
28
  const [open, setOpen] = useState(false);
29
29
  const containerRef = useRef(null);
@@ -33,7 +33,13 @@ var Select = forwardRef(
33
33
  }, [value]);
34
34
  const toggleOpen = () => setOpen((prev) => !prev);
35
35
  const closeOnEscape = (event) => event.key === "Escape" && setOpen(false);
36
- const handleOnOpenChange = (isOpen) => (!multiselect || isOpen) && setOpen(isOpen);
36
+ const handleOnOpenChange = (isOpen) => {
37
+ const shouldUpdate = !multiselect || isOpen;
38
+ if (shouldUpdate) {
39
+ setOpen(isOpen);
40
+ onOpenChange?.(isOpen);
41
+ }
42
+ };
37
43
  const setValueOnEnter = (event, value2) => event.key === "Enter" && handleChange(value2);
38
44
  const getLabel = () => selected.map((o) => options?.find((option) => option.value === o)?.title).join(", ");
39
45
  const chipLabels = selected?.map((s) => options?.find(({ value: value2 }) => value2 === s)).filter(Boolean);
@@ -195,5 +201,5 @@ Select.displayName = "Select";
195
201
  var Select_default = Select;
196
202
 
197
203
  export { Select_default };
198
- //# sourceMappingURL=chunk-GKL5KEO4.js.map
199
- //# sourceMappingURL=chunk-GKL5KEO4.js.map
204
+ //# sourceMappingURL=chunk-EV54AFL4.js.map
205
+ //# sourceMappingURL=chunk-EV54AFL4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/Select.tsx"],"names":["value","id","description"],"mappings":"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","file":"chunk-EV54AFL4.js","sourcesContent":["'use client'\n\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { CheckIcon, ChevronDownIcon, X } from 'lucide-react'\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type KeyboardEvent,\n useEffect,\n useRef,\n useState,\n} from 'react'\n\nimport { Separator } from '@/components/primitives/separator'\nimport Chip from '@/components/ui/Chip'\nimport ErrorMessage from '@/components/ui/ErrorMessage'\nimport Label from '@/components/ui/Label'\nimport { cn } from '@/lib/utils'\n\ntype SelectContentProps = React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\ntype RadixAlignType = SelectContentProps['align']\n\ninterface Props extends Omit<ComponentPropsWithoutRef<'select'>, 'value' | 'onChange'> {\n label?: string\n value?: string | string[]\n options?: { id: string | number; value: string; title: string; description?: string }[]\n placeholder?: string\n multiselect?: boolean\n description?: string\n error?: string\n classNames?: {\n label?: string\n trigger?: string\n content?: string\n item?: string\n checkmark?: string\n }\n dropdownAlign?: RadixAlignType\n useAnchor?: boolean\n onChange?: (value: string | string[]) => void\n onOpenChange?: (open: boolean) => void\n}\n\nconst Select = forwardRef<HTMLButtonElement, Props>(\n (\n {\n label,\n options,\n placeholder,\n multiselect,\n description,\n classNames,\n dropdownAlign = 'start',\n error,\n id,\n children: footer,\n useAnchor = true,\n ...props\n },\n ref\n ) => {\n const { value, defaultValue, dir, className, onChange, onOpenChange, ...rest } = props\n const [selected, setSelected] = useState<string[]>([])\n const [open, setOpen] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!value) return setSelected([])\n setSelected(Array.isArray(value) ? value : [value])\n }, [value])\n\n const toggleOpen = () => setOpen((prev) => !prev)\n const closeOnEscape = (event: KeyboardEvent) => event.key === 'Escape' && setOpen(false)\n const handleOnOpenChange = (isOpen: boolean) => {\n const shouldUpdate = !multiselect || isOpen\n if (shouldUpdate) {\n setOpen(isOpen)\n onOpenChange?.(isOpen)\n }\n }\n const setValueOnEnter = (event: KeyboardEvent, value: string) =>\n event.key === 'Enter' && handleChange(value)\n const getLabel = () =>\n selected.map((o) => options?.find((option) => option.value === o)?.title).join(', ')\n\n const chipLabels = selected\n ?.map((s) => options?.find(({ value }) => value === s))\n .filter(Boolean)\n\n function handleChange(newValue: string) {\n if (newValue === '' && !multiselect) return // Prevent clearing single select\n let newSelected: string[] = []\n setSelected((prev) => {\n newSelected = prev.includes(newValue)\n ? prev.filter((item) => item !== newValue)\n : [...prev, newValue]\n return multiselect ? newSelected : [newValue]\n })\n onChange?.(multiselect ? newSelected : newValue)\n }\n\n return (\n <div\n className={cn('flex w-full flex-col gap-1', className)}\n ref={containerRef}\n data-testid={`${(label ?? id)?.toLowerCase()}-select-element`}\n >\n <Label\n text={label}\n htmlFor={props.name}\n required={props.required}\n description={description}\n className={classNames?.label}\n />\n\n <SelectPrimitive.Root\n open={open}\n value={selected.join(',')}\n onOpenChange={handleOnOpenChange}\n onValueChange={multiselect ? undefined : handleChange}\n defaultValue={typeof defaultValue === 'string' ? defaultValue : undefined}\n dir={dir === 'rtl' ? 'rtl' : 'ltr'}\n {...rest}\n >\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'group flex h-11 w-full flex-row items-center justify-between gap-3 rounded-lg border px-4 py-3 text-sm font-normal focus:outline-purple-100 disabled:bg-grey-5 data-[placeholder]:text-grey-50 data-[placeholder]:disabled:text-grey-40',\n classNames?.trigger\n )}\n >\n <span className=\"truncate\">\n <SelectPrimitive.Value\n placeholder={placeholder ?? 'Select an option'}\n aria-label={getLabel()}\n >\n {getLabel()}\n </SelectPrimitive.Value>\n </span>\n\n <ChevronDownIcon\n className=\"transform text-black group-data-[state=open]:rotate-180\"\n size=\"16\"\n />\n </SelectPrimitive.Trigger>\n\n <SelectPrimitive.Portal container={useAnchor ? containerRef.current : undefined}>\n <SelectPrimitive.Content\n hideWhenDetached\n className={cn(\n 'z-10 max-h-[var(--radix-select-content-available-height)] overflow-hidden rounded-md bg-white py-2 shadow-lg',\n 'w-[var(--radix-select-trigger-width)] min-w-[var(--radix-select-trigger-width)]',\n classNames?.content\n )}\n position=\"popper\"\n align={dropdownAlign}\n sideOffset={4}\n onPointerDownOutside={toggleOpen}\n onKeyDown={closeOnEscape}\n >\n <SelectPrimitive.Viewport>\n {multiselect && !!chipLabels?.length && (\n <>\n <SelectPrimitive.Group\n className=\"mb-2 flex flex-row flex-wrap gap-1 px-2\"\n data-testid=\"selected-labels\"\n >\n {chipLabels?.map(\n (chip) =>\n chip && (\n <Chip key={chip.title} size=\"small\" variant=\"primary\">\n <span>{chip.title}</span>\n <X\n size={18}\n data-testid={`chip-remove-${chip.value}`}\n className=\"cursor-pointer\"\n onClick={() => handleChange(chip.value)}\n />\n </Chip>\n )\n )}\n </SelectPrimitive.Group>\n <Separator />\n </>\n )}\n {options?.map(({ id, title, value, description }) => (\n <SelectPrimitive.Item\n key={id}\n value={value}\n className={cn(\n 'group relative cursor-pointer px-4 py-2 text-left text-sm hover:bg-purple-50 focus:bg-purple-50 focus:outline-none data-[state=checked]:bg-purple-50 data-[state=checked]:pr-10 data-[state=checked]:text-purple-100',\n classNames?.item\n )}\n data-state={selected.includes(value) ? 'checked' : 'unchecked'}\n onKeyDown={(e) => setValueOnEnter(e, value)}\n onClick={() => handleChange(value)}\n >\n <CheckIcon\n className={cn(\n 'absolute inset-y-0 right-3 my-auto hidden w-6 text-purple-100 group-data-[state=checked]:block',\n classNames?.checkmark\n )}\n size={16}\n />\n <SelectPrimitive.ItemText>{title}</SelectPrimitive.ItemText>\n {description && (\n <span className=\"block text-sm text-grey-70\">{description}</span>\n )}\n </SelectPrimitive.Item>\n ))}\n\n {!!footer && (\n <>\n <Separator />\n <SelectPrimitive.Group\n className=\"mt-2 flex flex-row flex-wrap gap-1 px-2\"\n data-testid=\"selected-labels\"\n >\n {footer}\n </SelectPrimitive.Group>\n </>\n )}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n\n <ErrorMessage message={error} />\n </div>\n )\n }\n)\n\nSelect.displayName = 'Select'\n\nexport default Select\n"]}
@@ -45,7 +45,7 @@ var Select = react.forwardRef(
45
45
  useAnchor = true,
46
46
  ...props
47
47
  }, ref) => {
48
- const { value, defaultValue, dir, className, onChange, ...rest } = props;
48
+ const { value, defaultValue, dir, className, onChange, onOpenChange, ...rest } = props;
49
49
  const [selected, setSelected] = react.useState([]);
50
50
  const [open, setOpen] = react.useState(false);
51
51
  const containerRef = react.useRef(null);
@@ -55,7 +55,13 @@ var Select = react.forwardRef(
55
55
  }, [value]);
56
56
  const toggleOpen = () => setOpen((prev) => !prev);
57
57
  const closeOnEscape = (event) => event.key === "Escape" && setOpen(false);
58
- const handleOnOpenChange = (isOpen) => (!multiselect || isOpen) && setOpen(isOpen);
58
+ const handleOnOpenChange = (isOpen) => {
59
+ const shouldUpdate = !multiselect || isOpen;
60
+ if (shouldUpdate) {
61
+ setOpen(isOpen);
62
+ onOpenChange?.(isOpen);
63
+ }
64
+ };
59
65
  const setValueOnEnter = (event, value2) => event.key === "Enter" && handleChange(value2);
60
66
  const getLabel = () => selected.map((o) => options?.find((option) => option.value === o)?.title).join(", ");
61
67
  const chipLabels = selected?.map((s) => options?.find(({ value: value2 }) => value2 === s)).filter(Boolean);
@@ -217,5 +223,5 @@ Select.displayName = "Select";
217
223
  var Select_default = Select;
218
224
 
219
225
  exports.Select_default = Select_default;
220
- //# sourceMappingURL=chunk-FAMHC5MQ.cjs.map
221
- //# sourceMappingURL=chunk-FAMHC5MQ.cjs.map
226
+ //# sourceMappingURL=chunk-GHJACW4X.cjs.map
227
+ //# sourceMappingURL=chunk-GHJACW4X.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/Select.tsx"],"names":["forwardRef","useState","useRef","useEffect","value","jsxs","cn","jsx","Label_default","SelectPrimitive","ChevronDownIcon","Fragment","Chip_default","X","Separator","id","description","CheckIcon","ErrorMessage_default"],"mappings":"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","file":"chunk-GHJACW4X.cjs","sourcesContent":["'use client'\n\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { CheckIcon, ChevronDownIcon, X } from 'lucide-react'\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type KeyboardEvent,\n useEffect,\n useRef,\n useState,\n} from 'react'\n\nimport { Separator } from '@/components/primitives/separator'\nimport Chip from '@/components/ui/Chip'\nimport ErrorMessage from '@/components/ui/ErrorMessage'\nimport Label from '@/components/ui/Label'\nimport { cn } from '@/lib/utils'\n\ntype SelectContentProps = React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\ntype RadixAlignType = SelectContentProps['align']\n\ninterface Props extends Omit<ComponentPropsWithoutRef<'select'>, 'value' | 'onChange'> {\n label?: string\n value?: string | string[]\n options?: { id: string | number; value: string; title: string; description?: string }[]\n placeholder?: string\n multiselect?: boolean\n description?: string\n error?: string\n classNames?: {\n label?: string\n trigger?: string\n content?: string\n item?: string\n checkmark?: string\n }\n dropdownAlign?: RadixAlignType\n useAnchor?: boolean\n onChange?: (value: string | string[]) => void\n onOpenChange?: (open: boolean) => void\n}\n\nconst Select = forwardRef<HTMLButtonElement, Props>(\n (\n {\n label,\n options,\n placeholder,\n multiselect,\n description,\n classNames,\n dropdownAlign = 'start',\n error,\n id,\n children: footer,\n useAnchor = true,\n ...props\n },\n ref\n ) => {\n const { value, defaultValue, dir, className, onChange, onOpenChange, ...rest } = props\n const [selected, setSelected] = useState<string[]>([])\n const [open, setOpen] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!value) return setSelected([])\n setSelected(Array.isArray(value) ? value : [value])\n }, [value])\n\n const toggleOpen = () => setOpen((prev) => !prev)\n const closeOnEscape = (event: KeyboardEvent) => event.key === 'Escape' && setOpen(false)\n const handleOnOpenChange = (isOpen: boolean) => {\n const shouldUpdate = !multiselect || isOpen\n if (shouldUpdate) {\n setOpen(isOpen)\n onOpenChange?.(isOpen)\n }\n }\n const setValueOnEnter = (event: KeyboardEvent, value: string) =>\n event.key === 'Enter' && handleChange(value)\n const getLabel = () =>\n selected.map((o) => options?.find((option) => option.value === o)?.title).join(', ')\n\n const chipLabels = selected\n ?.map((s) => options?.find(({ value }) => value === s))\n .filter(Boolean)\n\n function handleChange(newValue: string) {\n if (newValue === '' && !multiselect) return // Prevent clearing single select\n let newSelected: string[] = []\n setSelected((prev) => {\n newSelected = prev.includes(newValue)\n ? prev.filter((item) => item !== newValue)\n : [...prev, newValue]\n return multiselect ? newSelected : [newValue]\n })\n onChange?.(multiselect ? newSelected : newValue)\n }\n\n return (\n <div\n className={cn('flex w-full flex-col gap-1', className)}\n ref={containerRef}\n data-testid={`${(label ?? id)?.toLowerCase()}-select-element`}\n >\n <Label\n text={label}\n htmlFor={props.name}\n required={props.required}\n description={description}\n className={classNames?.label}\n />\n\n <SelectPrimitive.Root\n open={open}\n value={selected.join(',')}\n onOpenChange={handleOnOpenChange}\n onValueChange={multiselect ? undefined : handleChange}\n defaultValue={typeof defaultValue === 'string' ? defaultValue : undefined}\n dir={dir === 'rtl' ? 'rtl' : 'ltr'}\n {...rest}\n >\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'group flex h-11 w-full flex-row items-center justify-between gap-3 rounded-lg border px-4 py-3 text-sm font-normal focus:outline-purple-100 disabled:bg-grey-5 data-[placeholder]:text-grey-50 data-[placeholder]:disabled:text-grey-40',\n classNames?.trigger\n )}\n >\n <span className=\"truncate\">\n <SelectPrimitive.Value\n placeholder={placeholder ?? 'Select an option'}\n aria-label={getLabel()}\n >\n {getLabel()}\n </SelectPrimitive.Value>\n </span>\n\n <ChevronDownIcon\n className=\"transform text-black group-data-[state=open]:rotate-180\"\n size=\"16\"\n />\n </SelectPrimitive.Trigger>\n\n <SelectPrimitive.Portal container={useAnchor ? containerRef.current : undefined}>\n <SelectPrimitive.Content\n hideWhenDetached\n className={cn(\n 'z-10 max-h-[var(--radix-select-content-available-height)] overflow-hidden rounded-md bg-white py-2 shadow-lg',\n 'w-[var(--radix-select-trigger-width)] min-w-[var(--radix-select-trigger-width)]',\n classNames?.content\n )}\n position=\"popper\"\n align={dropdownAlign}\n sideOffset={4}\n onPointerDownOutside={toggleOpen}\n onKeyDown={closeOnEscape}\n >\n <SelectPrimitive.Viewport>\n {multiselect && !!chipLabels?.length && (\n <>\n <SelectPrimitive.Group\n className=\"mb-2 flex flex-row flex-wrap gap-1 px-2\"\n data-testid=\"selected-labels\"\n >\n {chipLabels?.map(\n (chip) =>\n chip && (\n <Chip key={chip.title} size=\"small\" variant=\"primary\">\n <span>{chip.title}</span>\n <X\n size={18}\n data-testid={`chip-remove-${chip.value}`}\n className=\"cursor-pointer\"\n onClick={() => handleChange(chip.value)}\n />\n </Chip>\n )\n )}\n </SelectPrimitive.Group>\n <Separator />\n </>\n )}\n {options?.map(({ id, title, value, description }) => (\n <SelectPrimitive.Item\n key={id}\n value={value}\n className={cn(\n 'group relative cursor-pointer px-4 py-2 text-left text-sm hover:bg-purple-50 focus:bg-purple-50 focus:outline-none data-[state=checked]:bg-purple-50 data-[state=checked]:pr-10 data-[state=checked]:text-purple-100',\n classNames?.item\n )}\n data-state={selected.includes(value) ? 'checked' : 'unchecked'}\n onKeyDown={(e) => setValueOnEnter(e, value)}\n onClick={() => handleChange(value)}\n >\n <CheckIcon\n className={cn(\n 'absolute inset-y-0 right-3 my-auto hidden w-6 text-purple-100 group-data-[state=checked]:block',\n classNames?.checkmark\n )}\n size={16}\n />\n <SelectPrimitive.ItemText>{title}</SelectPrimitive.ItemText>\n {description && (\n <span className=\"block text-sm text-grey-70\">{description}</span>\n )}\n </SelectPrimitive.Item>\n ))}\n\n {!!footer && (\n <>\n <Separator />\n <SelectPrimitive.Group\n className=\"mt-2 flex flex-row flex-wrap gap-1 px-2\"\n data-testid=\"selected-labels\"\n >\n {footer}\n </SelectPrimitive.Group>\n </>\n )}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n\n <ErrorMessage message={error} />\n </div>\n )\n }\n)\n\nSelect.displayName = 'Select'\n\nexport default Select\n"]}
@@ -1,4 +1,4 @@
1
- import { DisplayTextService } from './chunk-OZJZVEF2.js';
1
+ import { DisplayTextService } from './chunk-4E3ANVRR.js';
2
2
  import { DisplayTextValueNotFoundError } from './chunk-YB2USB4M.js';
3
3
  import { useState, useMemo, useEffect } from 'react';
4
4
 
@@ -33,5 +33,5 @@ var useDisplayText = (scope, value) => {
33
33
  };
34
34
 
35
35
  export { useDisplayText };
36
- //# sourceMappingURL=chunk-CPZFINPG.js.map
37
- //# sourceMappingURL=chunk-CPZFINPG.js.map
36
+ //# sourceMappingURL=chunk-K76RPF2X.js.map
37
+ //# sourceMappingURL=chunk-K76RPF2X.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useDisplayText.ts"],"names":[],"mappings":";;;;AAKa,IAAA,cAAA,GAAiB,CAC5B,KAAA,EACA,KACG,KAAA;AACH,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,iBAAiB,OAAQ,CAAA,MAAM,IAAI,kBAAmB,EAAA,EAAG,EAAE,CAAA;AAEjE,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,CAAC,cAAkB,IAAA,CAAC,KAAO,EAAA;AAC7B,MAAA,cAAA,CAAe,EAAE,CAAA;AACjB,MAAA;AAAA;AAEF,IAAA,KAAA,CAAM,YAAY;AAChB,MAAI,IAAA;AACF,QAAA,MAAM,MAAS,GAAA,MAAM,cAAe,CAAA,cAAA,CAAe,OAAO,KAAK,CAAA;AAC/D,QAAI,IAAA,OAAO,WAAW,QAAU,EAAA;AAC9B,UAAA,cAAA,CAAe,MAAM,CAAA;AAAA,SAChB,MAAA;AACL,UAAQ,OAAA,CAAA,KAAA,CAAM,sCAAsC,MAAM,CAAA;AAAA;AAC5D,eACO,KAAO,EAAA;AACd,QAAA,IAAI,iBAAiB,6BAA+B,EAAA;AAClD,UAAQ,OAAA,CAAA,IAAA,CAAK,iCAAiC,KAAK,CAAA;AACnD,UAAe,cAAA,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,SACvB,MAAA;AACL,UAAQ,OAAA,CAAA,KAAA,CAAM,qCAAqC,KAAK,CAAA;AACxD,UAAe,cAAA,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA;AAC9B;AACF,KACC,GAAA;AAAA,GACF,EAAA,CAAC,KAAO,EAAA,KAAA,EAAO,cAAc,CAAC,CAAA;AAEjC,EAAO,OAAA,WAAA;AACT","file":"chunk-CPZFINPG.js","sourcesContent":["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"]}
1
+ {"version":3,"sources":["../src/hooks/useDisplayText.ts"],"names":[],"mappings":";;;;AAKa,IAAA,cAAA,GAAiB,CAC5B,KAAA,EACA,KACG,KAAA;AACH,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,iBAAiB,OAAQ,CAAA,MAAM,IAAI,kBAAmB,EAAA,EAAG,EAAE,CAAA;AAEjE,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,CAAC,cAAkB,IAAA,CAAC,KAAO,EAAA;AAC7B,MAAA,cAAA,CAAe,EAAE,CAAA;AACjB,MAAA;AAAA;AAEF,IAAA,KAAA,CAAM,YAAY;AAChB,MAAI,IAAA;AACF,QAAA,MAAM,MAAS,GAAA,MAAM,cAAe,CAAA,cAAA,CAAe,OAAO,KAAK,CAAA;AAC/D,QAAI,IAAA,OAAO,WAAW,QAAU,EAAA;AAC9B,UAAA,cAAA,CAAe,MAAM,CAAA;AAAA,SAChB,MAAA;AACL,UAAQ,OAAA,CAAA,KAAA,CAAM,sCAAsC,MAAM,CAAA;AAAA;AAC5D,eACO,KAAO,EAAA;AACd,QAAA,IAAI,iBAAiB,6BAA+B,EAAA;AAClD,UAAQ,OAAA,CAAA,IAAA,CAAK,iCAAiC,KAAK,CAAA;AACnD,UAAe,cAAA,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,SACvB,MAAA;AACL,UAAQ,OAAA,CAAA,KAAA,CAAM,qCAAqC,KAAK,CAAA;AACxD,UAAe,cAAA,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA;AAC9B;AACF,KACC,GAAA;AAAA,GACF,EAAA,CAAC,KAAO,EAAA,KAAA,EAAO,cAAc,CAAC,CAAA;AAEjC,EAAO,OAAA,WAAA;AACT","file":"chunk-K76RPF2X.js","sourcesContent":["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"]}
@@ -1,14 +1,14 @@
1
1
  'use strict';
2
2
 
3
- var chunkQRMNGILI_cjs = require('./chunk-QRMNGILI.cjs');
4
- var chunk6CSDTWDX_cjs = require('./chunk-6CSDTWDX.cjs');
5
- var chunkOXDKVZZ5_cjs = require('./chunk-OXDKVZZ5.cjs');
6
- var chunk4LUPQO4R_cjs = require('./chunk-4LUPQO4R.cjs');
7
3
  var chunkDWB5TTR6_cjs = require('./chunk-DWB5TTR6.cjs');
8
4
  var chunk46HHHYSV_cjs = require('./chunk-46HHHYSV.cjs');
9
- var chunkXAPQTBJR_cjs = require('./chunk-XAPQTBJR.cjs');
5
+ var chunkQRMNGILI_cjs = require('./chunk-QRMNGILI.cjs');
6
+ var chunkTOEADI6J_cjs = require('./chunk-TOEADI6J.cjs');
10
7
  var chunkGQNVPLSG_cjs = require('./chunk-GQNVPLSG.cjs');
11
8
  var chunkMGWZXPMF_cjs = require('./chunk-MGWZXPMF.cjs');
9
+ var chunk4LUPQO4R_cjs = require('./chunk-4LUPQO4R.cjs');
10
+ var chunk567FG76G_cjs = require('./chunk-567FG76G.cjs');
11
+ var chunkXAPQTBJR_cjs = require('./chunk-XAPQTBJR.cjs');
12
12
  var DateFns = require('date-fns');
13
13
  var jsxRuntime = require('react/jsx-runtime');
14
14
 
@@ -42,9 +42,9 @@ function JobPost({
42
42
  backAcceptedRoutes,
43
43
  actions
44
44
  }) {
45
- const formattedEmploymentType = chunkOXDKVZZ5_cjs.useDisplayText("employmentType", job.employmentType);
46
- const formattedEmploymentLevel = chunkOXDKVZZ5_cjs.useDisplayText("employmentLevel", job.employmentLevel);
47
- const formattedJobFunction = chunkOXDKVZZ5_cjs.useDisplayText("jobFunction", job.jobFunction);
45
+ const formattedEmploymentType = chunk567FG76G_cjs.useDisplayText("employmentType", job.employmentType);
46
+ const formattedEmploymentLevel = chunk567FG76G_cjs.useDisplayText("employmentLevel", job.employmentLevel);
47
+ const formattedJobFunction = chunk567FG76G_cjs.useDisplayText("jobFunction", job.jobFunction);
48
48
  const formattedLocations = chunkXAPQTBJR_cjs.getAddressList(job);
49
49
  const formattedSalary = chunkGQNVPLSG_cjs.salaryRange(job.estimatedSalary);
50
50
  const formattedDate = DateFns__namespace.formatDistanceToNow(new Date(job.datePosted), {
@@ -86,7 +86,7 @@ function JobPost({
86
86
  ),
87
87
  children: [
88
88
  /* @__PURE__ */ jsxRuntime.jsx(
89
- chunk6CSDTWDX_cjs.JobHeader,
89
+ chunkTOEADI6J_cjs.JobHeader,
90
90
  {
91
91
  title: job.title,
92
92
  bannerSrc,
@@ -133,5 +133,5 @@ function JobPost({
133
133
  }
134
134
 
135
135
  exports.JobPost = JobPost;
136
- //# sourceMappingURL=chunk-MLV2TE6H.cjs.map
137
- //# sourceMappingURL=chunk-MLV2TE6H.cjs.map
136
+ //# sourceMappingURL=chunk-LFWX5GEE.cjs.map
137
+ //# sourceMappingURL=chunk-LFWX5GEE.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/jobPost/JobPost.tsx"],"names":["useDisplayText","getAddressList","salaryRange","DateFns","jsxs","cn","jsx","JobHeader","JobDescription","CompanyTake","CompanyInformation","CompanyBenefits"],"mappings":"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","file":"chunk-MLV2TE6H.cjs","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 { getAddressList } 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 avatarHref?: string\n fallbackHref?: string\n backAcceptedRoutes?: string[]\n actions?: ReactNode\n}\n\nexport function JobPost({\n job,\n bannerSrc,\n avatarSrc,\n standalone,\n avatarHref,\n fallbackHref,\n backAcceptedRoutes,\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 formattedLocations = getAddressList(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,\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 ...formattedLocations.map((label) => ({\n icon: 'map-pin' as const,\n name: 'location',\n label,\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 avatarHref={avatarHref}\n backFallbackHref={fallbackHref}\n backAcceptedRoutes={backAcceptedRoutes}\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"]}
1
+ {"version":3,"sources":["../src/components/jobPost/JobPost.tsx"],"names":["useDisplayText","getAddressList","salaryRange","DateFns","jsxs","cn","jsx","JobHeader","JobDescription","CompanyTake","CompanyInformation","CompanyBenefits"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BO,SAAS,OAAQ,CAAA;AAAA,EACtB,GAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAA2B,EAAA;AACzB,EAAA,MAAM,uBAA0B,GAAAA,gCAAA,CAAe,gBAAkB,EAAA,GAAA,CAAI,cAAc,CAAA;AACnF,EAAA,MAAM,wBAA2B,GAAAA,gCAAA,CAAe,iBAAmB,EAAA,GAAA,CAAI,eAAe,CAAA;AACtF,EAAA,MAAM,oBAAuB,GAAAA,gCAAA,CAAe,aAAe,EAAA,GAAA,CAAI,WAAW,CAAA;AAC1E,EAAM,MAAA,kBAAA,GAAqBC,iCAAe,GAAG,CAAA;AAC7C,EAAM,MAAA,eAAA,GAAkBC,6BAAY,CAAA,GAAA,CAAI,eAAe,CAAA;AACvD,EAAA,MAAM,gBAAwBC,kBAAoB,CAAA,mBAAA,CAAA,IAAI,IAAK,CAAA,GAAA,CAAI,UAAoB,CAAG,EAAA;AAAA,IACpF,SAAW,EAAA;AAAA,GACZ,CAAA;AAED,EAAA,MAAM,IAAO,GAAA;AAAA,IACX,CAAC,CAAC,eAAmB,IAAA;AAAA,MACnB,IAAM,EAAA,UAAA;AAAA,MACN,IAAM,EAAA,QAAA;AAAA,MACN,KAAO,EAAA;AAAA,KACT;AAAA,IACA,CAAC,CAAC,uBAA2B,IAAA;AAAA,MAC3B,IAAM,EAAA,oBAAA;AAAA,MACN,IAAM,EAAA,gBAAA;AAAA,MACN,KAAO,EAAA;AAAA,KACT;AAAA,IACA,CAAC,CAAC,wBAA4B,IAAA;AAAA,MAC5B,IAAM,EAAA,aAAA;AAAA,MACN,IAAM,EAAA,OAAA;AAAA,MACN,KAAO,EAAA;AAAA,KACT;AAAA,IACA,CAAC,CAAC,oBAAwB,IAAA;AAAA,MACxB,IAAM,EAAA,oBAAA;AAAA,MACN,IAAM,EAAA,aAAA;AAAA,MACN,KAAO,EAAA;AAAA,KACT;AAAA,IACA,GAAG,kBAAA,CAAmB,GAAI,CAAA,CAAC,KAAW,MAAA;AAAA,MACpC,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,UAAA;AAAA,MACN;AAAA,KACA,CAAA;AAAA,IACF,MAAO,CAAA,CAAC,CAAM,KAAA,CAAC,CAAC,CAAC,CAAA;AAEnB,EACE,uBAAAC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAAC,oBAAA;AAAA,QACT,2BAAA;AAAA,QACA,CAAC,UAAc,IAAA;AAAA,OACjB;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAACC,2BAAA;AAAA,UAAA;AAAA,YACC,OAAO,GAAI,CAAA,KAAA;AAAA,YACX,SAAA;AAAA,YACA,UAAA,EAAY,IAAI,kBAAoB,EAAA,WAAA;AAAA,YACpC,SAAW,EAAA,GAAA,CAAI,kBAAoB,EAAA,IAAA,EAAM,KAAO,EAAA,GAAA;AAAA,YAChD,SAAA,EAAW,CAAC,GAAI,CAAA,kBAAA,EAAoB,eAAe,EAAI,EAAA,CAAA,OAAA,EAAU,aAAa,CAAE,CAAA,CAAA;AAAA,YAChF,OAAA;AAAA,YACA,UAAA;AAAA,YACA,UAAA;AAAA,YACA,gBAAkB,EAAA,YAAA;AAAA,YAClB,kBAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,wBAEAH,eAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,0BACb,EAAA,QAAA,EAAA;AAAA,0BAACE,cAAA,CAAAE,gCAAA,EAAA,EAAe,WAAa,EAAA,GAAA,CAAI,WAAa,EAAA,CAAA;AAAA,0BAE9CF,cAAA;AAAA,YAACG,6BAAA;AAAA,YAAA;AAAA,cACC,SAAA;AAAA,cACA,OAAA,EAAS,GAAI,CAAA,kBAAA,EAAoB,UAAY,EAAA;AAAA;AAAA,WAC/C;AAAA,0BAEAH,cAAA;AAAA,YAACI,oCAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,GAAI,CAAA,kBAAA,EAAoB,WAAe,IAAA,EAAA;AAAA,cAC7C,GAAA,EAAK,GAAI,CAAA,kBAAA,EAAoB,iBAAmB,EAAA,UAAA;AAAA,cAChD,OAAA,EAAS,GAAI,CAAA,kBAAA,EAAoB,iBAAmB,EAAA,cAAA;AAAA,cACpD,GAAA,EAAK,GAAI,CAAA,kBAAA,EAAoB,UAAY,EAAA,UAAA;AAAA,cACzC,OAAA,EAAS,IAAI,kBAAoB,EAAA;AAAA;AAAA,WACnC;AAAA,0BAEAJ,cAAA;AAAA,YAACK,iCAAA;AAAA,YAAA;AAAA,cACC,QAAU,EAAA,GAAA,CAAI,kBAAoB,EAAA,cAAA,EAAgB,iBAC9C,GAAI,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,KAAK,CACnB,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,MAAS;AAAA;AAAA;AAClC,SACF,EAAA;AAAA;AAAA;AAAA,GACF;AAEJ","file":"chunk-LFWX5GEE.cjs","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 { getAddressList } 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 avatarHref?: string\n fallbackHref?: string\n backAcceptedRoutes?: string[]\n actions?: ReactNode\n}\n\nexport function JobPost({\n job,\n bannerSrc,\n avatarSrc,\n standalone,\n avatarHref,\n fallbackHref,\n backAcceptedRoutes,\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 formattedLocations = getAddressList(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,\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 ...formattedLocations.map((label) => ({\n icon: 'map-pin' as const,\n name: 'location',\n label,\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 avatarHref={avatarHref}\n backFallbackHref={fallbackHref}\n backAcceptedRoutes={backAcceptedRoutes}\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"]}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkC3DCFPJC_cjs = require('./chunk-C3DCFPJC.cjs');
4
- var chunkAMNEAWA7_cjs = require('./chunk-AMNEAWA7.cjs');
5
4
  var chunkMGWZXPMF_cjs = require('./chunk-MGWZXPMF.cjs');
5
+ var chunkAMNEAWA7_cjs = require('./chunk-AMNEAWA7.cjs');
6
6
  var lucideReact = require('lucide-react');
7
7
  var react = require('react');
8
8
  var jsxRuntime = require('react/jsx-runtime');
@@ -115,5 +115,5 @@ function PlacesQueryInput({
115
115
  var PlacesQueryInput_default = PlacesQueryInput;
116
116
 
117
117
  exports.PlacesQueryInput_default = PlacesQueryInput_default;
118
- //# sourceMappingURL=chunk-NEIGOAE6.cjs.map
119
- //# sourceMappingURL=chunk-NEIGOAE6.cjs.map
118
+ //# sourceMappingURL=chunk-LT35HARQ.cjs.map
119
+ //# sourceMappingURL=chunk-LT35HARQ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/PlacesQueryInput.tsx"],"names":["useState","useRef","useCallback","autocomplete","useEffect","jsx","cn","jsxs","Command","CommandInput","LoaderCircle","CircleX","CommandList","CommandEmpty","CommandGroup","CommandItem"],"mappings":"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","file":"chunk-NEIGOAE6.cjs","sourcesContent":["'use client'\n\nimport { type PlaceAutocompleteResult } from '@googlemaps/google-maps-services-js'\nimport { CircleX, LoaderCircle } from 'lucide-react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/components/primitives/command'\nimport { autocomplete } from '@/lib/google'\nimport { cn } from '@/lib/utils'\n\n/**\n * The idea is of this type is to have a more specific type for the Place object,\n * without the repos that use it having to import the PlaceAutocompleteResult type.\n * 'place_id' can be used to query the Google Places API directly for more information about the place.\n */\nexport type Place = Pick<PlaceAutocompleteResult, 'description' | 'place_id'>\n\ninterface PlacesQueryInputProps {\n apiKey: string\n selected?: Place\n onSelect: (place?: Place) => void\n className?: string\n}\n\nfunction PlacesQueryInput({\n apiKey,\n selected,\n onSelect,\n className,\n}: Readonly<PlacesQueryInputProps>) {\n const [predictions, setPredictions] = useState<PlaceAutocompleteResult[] | null>(null)\n const [input, setInput] = useState(selected?.description ?? '')\n const [isLoadingPredictions, setIsLoadingPredictions] = useState(false)\n const [shouldOpenUpward, setShouldOpenUpward] = useState(false)\n const timeoutRef = useRef<NodeJS.Timeout | null>(null)\n const inputRef = useRef<HTMLDivElement | null>(null)\n\n const debouncedAutocomplete = useCallback((value: string) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n timeoutRef.current = setTimeout(async () => {\n try {\n if (value.length > 2) {\n setIsLoadingPredictions(true)\n const fetchedPredictions = await autocomplete(value, apiKey)\n setIsLoadingPredictions(false)\n setPredictions(fetchedPredictions ?? [])\n } else {\n setPredictions(null)\n }\n } catch (error) {\n setIsLoadingPredictions(false)\n setPredictions([])\n console.error('Autocomplete error:', error)\n }\n }, 300)\n }, [])\n\n const handleInputChange = (value: string) => {\n setInput(value)\n debouncedAutocomplete(value)\n }\n\n const handleSelect = (prediction: PlaceAutocompleteResult) => {\n onSelect(prediction)\n setPredictions(null)\n setInput(prediction.description)\n }\n\n const handleClear = () => {\n onSelect()\n setPredictions(null)\n setInput('')\n }\n\n /** Close the dropdown when the input loses focus, with the timeout to allow the user to click on a prediction.\n * */\n const handleBlur = () => setTimeout(() => setPredictions(null), 200)\n\n useEffect(() => {\n const checkDropdownPosition = () => {\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect()\n const windowHeight = window.innerHeight\n setShouldOpenUpward(rect.bottom + 200 > windowHeight)\n }\n }\n\n checkDropdownPosition()\n window.addEventListener('resize', checkDropdownPosition)\n return () => window.removeEventListener('resize', checkDropdownPosition)\n }, [])\n\n return (\n <div className={cn('relative w-full', className)} ref={inputRef} onBlur={handleBlur}>\n <Command>\n <div className=\"relative w-full\">\n <CommandInput\n placeholder=\"Type an address to search...\"\n value={input}\n onValueChange={handleInputChange}\n className=\"truncate pr-8\"\n />\n {isLoadingPredictions && (\n <LoaderCircle className=\"absolute inset-y-0 right-2 my-auto flex h-8 w-8 animate-spin items-center justify-center rounded-full text-green-100\" />\n )}\n {input && (\n <button\n type=\"button\"\n className=\"absolute inset-y-0 right-2 my-auto flex h-8 w-8 cursor-pointer items-center justify-center rounded-full hover:bg-pickle-20\"\n onClick={handleClear}\n >\n <CircleX className=\"h-4 w-4 text-green-100\" />\n </button>\n )}\n </div>\n {predictions && (\n <CommandList\n className={cn(\n 'absolute z-50 w-full rounded-md border bg-white shadow-lg',\n shouldOpenUpward ? 'bottom-full' : 'top-full'\n )}\n >\n <CommandEmpty>No results</CommandEmpty>\n <CommandGroup>\n {predictions.map((prediction) => (\n <CommandItem\n key={prediction.place_id}\n onSelect={() => handleSelect(prediction)}\n className=\"truncate\"\n >\n {prediction.description}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n )}\n </Command>\n </div>\n )\n}\n\nexport default PlacesQueryInput\n"]}
1
+ {"version":3,"sources":["../src/components/ui/PlacesQueryInput.tsx"],"names":["useState","useRef","useCallback","autocomplete","useEffect","jsx","cn","jsxs","Command","CommandInput","LoaderCircle","CircleX","CommandList","CommandEmpty","CommandGroup","CommandItem"],"mappings":"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","file":"chunk-LT35HARQ.cjs","sourcesContent":["'use client'\n\nimport { type PlaceAutocompleteResult } from '@googlemaps/google-maps-services-js'\nimport { CircleX, LoaderCircle } from 'lucide-react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/components/primitives/command'\nimport { autocomplete } from '@/lib/google'\nimport { cn } from '@/lib/utils'\n\n/**\n * The idea is of this type is to have a more specific type for the Place object,\n * without the repos that use it having to import the PlaceAutocompleteResult type.\n * 'place_id' can be used to query the Google Places API directly for more information about the place.\n */\nexport type Place = Pick<PlaceAutocompleteResult, 'description' | 'place_id'>\n\ninterface PlacesQueryInputProps {\n apiKey: string\n selected?: Place\n onSelect: (place?: Place) => void\n className?: string\n}\n\nfunction PlacesQueryInput({\n apiKey,\n selected,\n onSelect,\n className,\n}: Readonly<PlacesQueryInputProps>) {\n const [predictions, setPredictions] = useState<PlaceAutocompleteResult[] | null>(null)\n const [input, setInput] = useState(selected?.description ?? '')\n const [isLoadingPredictions, setIsLoadingPredictions] = useState(false)\n const [shouldOpenUpward, setShouldOpenUpward] = useState(false)\n const timeoutRef = useRef<NodeJS.Timeout | null>(null)\n const inputRef = useRef<HTMLDivElement | null>(null)\n\n const debouncedAutocomplete = useCallback((value: string) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n timeoutRef.current = setTimeout(async () => {\n try {\n if (value.length > 2) {\n setIsLoadingPredictions(true)\n const fetchedPredictions = await autocomplete(value, apiKey)\n setIsLoadingPredictions(false)\n setPredictions(fetchedPredictions ?? [])\n } else {\n setPredictions(null)\n }\n } catch (error) {\n setIsLoadingPredictions(false)\n setPredictions([])\n console.error('Autocomplete error:', error)\n }\n }, 300)\n }, [])\n\n const handleInputChange = (value: string) => {\n setInput(value)\n debouncedAutocomplete(value)\n }\n\n const handleSelect = (prediction: PlaceAutocompleteResult) => {\n onSelect(prediction)\n setPredictions(null)\n setInput(prediction.description)\n }\n\n const handleClear = () => {\n onSelect()\n setPredictions(null)\n setInput('')\n }\n\n /** Close the dropdown when the input loses focus, with the timeout to allow the user to click on a prediction.\n * */\n const handleBlur = () => setTimeout(() => setPredictions(null), 200)\n\n useEffect(() => {\n const checkDropdownPosition = () => {\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect()\n const windowHeight = window.innerHeight\n setShouldOpenUpward(rect.bottom + 200 > windowHeight)\n }\n }\n\n checkDropdownPosition()\n window.addEventListener('resize', checkDropdownPosition)\n return () => window.removeEventListener('resize', checkDropdownPosition)\n }, [])\n\n return (\n <div className={cn('relative w-full', className)} ref={inputRef} onBlur={handleBlur}>\n <Command>\n <div className=\"relative w-full\">\n <CommandInput\n placeholder=\"Type an address to search...\"\n value={input}\n onValueChange={handleInputChange}\n className=\"truncate pr-8\"\n />\n {isLoadingPredictions && (\n <LoaderCircle className=\"absolute inset-y-0 right-2 my-auto flex h-8 w-8 animate-spin items-center justify-center rounded-full text-green-100\" />\n )}\n {input && (\n <button\n type=\"button\"\n className=\"absolute inset-y-0 right-2 my-auto flex h-8 w-8 cursor-pointer items-center justify-center rounded-full hover:bg-pickle-20\"\n onClick={handleClear}\n >\n <CircleX className=\"h-4 w-4 text-green-100\" />\n </button>\n )}\n </div>\n {predictions && (\n <CommandList\n className={cn(\n 'absolute z-50 w-full rounded-md border bg-white shadow-lg',\n shouldOpenUpward ? 'bottom-full' : 'top-full'\n )}\n >\n <CommandEmpty>No results</CommandEmpty>\n <CommandGroup>\n {predictions.map((prediction) => (\n <CommandItem\n key={prediction.place_id}\n onSelect={() => handleSelect(prediction)}\n className=\"truncate\"\n >\n {prediction.description}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n )}\n </Command>\n </div>\n )\n}\n\nexport default PlacesQueryInput\n"]}