@next-degree/pickle-shared-js 0.15.1 → 0.15.3

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 (145) hide show
  1. package/dist/{chunk-VBLDMVVW.cjs → chunk-2XIO3WQ2.cjs} +4 -4
  2. package/dist/{chunk-VBLDMVVW.cjs.map → chunk-2XIO3WQ2.cjs.map} +1 -1
  3. package/dist/{chunk-ZZCTMR2F.cjs → chunk-2YUUVN7E.cjs} +3 -3
  4. package/dist/{chunk-ZZCTMR2F.cjs.map → chunk-2YUUVN7E.cjs.map} +1 -1
  5. package/dist/{chunk-QRMNGILI.cjs → chunk-4F2PRKMM.cjs} +4 -4
  6. package/dist/{chunk-QRMNGILI.cjs.map → chunk-4F2PRKMM.cjs.map} +1 -1
  7. package/dist/{chunk-JGZ2TDX4.js → chunk-556GH3CB.js} +6 -6
  8. package/dist/{chunk-JGZ2TDX4.js.map → chunk-556GH3CB.js.map} +1 -1
  9. package/dist/{chunk-JZLJVA4I.js → chunk-5BJLPYZT.js} +3 -3
  10. package/dist/{chunk-JZLJVA4I.js.map → chunk-5BJLPYZT.js.map} +1 -1
  11. package/dist/{chunk-F3FYMCRO.js → chunk-5IFDS3CJ.js} +3 -3
  12. package/dist/{chunk-F3FYMCRO.js.map → chunk-5IFDS3CJ.js.map} +1 -1
  13. package/dist/{chunk-MSOLVPPR.js → chunk-6Z6T5WWS.js} +4 -4
  14. package/dist/{chunk-MSOLVPPR.js.map → chunk-6Z6T5WWS.js.map} +1 -1
  15. package/dist/{chunk-5EUHR4DQ.cjs → chunk-7PVEU6NQ.cjs} +13 -13
  16. package/dist/{chunk-5EUHR4DQ.cjs.map → chunk-7PVEU6NQ.cjs.map} +1 -1
  17. package/dist/{chunk-K76RPF2X.js → chunk-CPZFINPG.js} +3 -3
  18. package/dist/{chunk-K76RPF2X.js.map → chunk-CPZFINPG.js.map} +1 -1
  19. package/dist/{chunk-CU67BLKX.cjs → chunk-E244YSGF.cjs} +39 -47
  20. package/dist/chunk-E244YSGF.cjs.map +1 -0
  21. package/dist/{chunk-F567WG2X.cjs → chunk-G2XXJEDS.cjs} +6 -6
  22. package/dist/{chunk-F567WG2X.cjs.map → chunk-G2XXJEDS.cjs.map} +1 -1
  23. package/dist/{chunk-LV6BHE7Q.cjs → chunk-HDQBXWSS.cjs} +12 -3
  24. package/dist/chunk-HDQBXWSS.cjs.map +1 -0
  25. package/dist/{chunk-R73HWAYA.js → chunk-KKYX5Y5N.js} +3 -3
  26. package/dist/{chunk-R73HWAYA.js.map → chunk-KKYX5Y5N.js.map} +1 -1
  27. package/dist/{chunk-IXCAC2PV.js → chunk-KMHPNIJQ.js} +4 -4
  28. package/dist/{chunk-IXCAC2PV.js.map → chunk-KMHPNIJQ.js.map} +1 -1
  29. package/dist/{chunk-5NQTYPZG.js → chunk-KRG4BXBL.js} +3 -3
  30. package/dist/{chunk-5NQTYPZG.js.map → chunk-KRG4BXBL.js.map} +1 -1
  31. package/dist/{chunk-CQHERJ3J.js → chunk-M4WUWRGI.js} +4 -4
  32. package/dist/chunk-M4WUWRGI.js.map +1 -0
  33. package/dist/{chunk-U6RELZ6H.cjs → chunk-MNDXLLWH.cjs} +10 -10
  34. package/dist/{chunk-U6RELZ6H.cjs.map → chunk-MNDXLLWH.cjs.map} +1 -1
  35. package/dist/{chunk-567FG76G.cjs → chunk-OXDKVZZ5.cjs} +4 -4
  36. package/dist/{chunk-567FG76G.cjs.map → chunk-OXDKVZZ5.cjs.map} +1 -1
  37. package/dist/{chunk-4E3ANVRR.js → chunk-OZJZVEF2.js} +3 -3
  38. package/dist/{chunk-4E3ANVRR.js.map → chunk-OZJZVEF2.js.map} +1 -1
  39. package/dist/{chunk-4IMEF4J5.cjs → chunk-PU52LECH.cjs} +4 -4
  40. package/dist/{chunk-4IMEF4J5.cjs.map → chunk-PU52LECH.cjs.map} +1 -1
  41. package/dist/{chunk-RKLUMDJB.cjs → chunk-SJ2X3D2Z.cjs} +3 -3
  42. package/dist/chunk-SJ2X3D2Z.cjs.map +1 -0
  43. package/dist/{chunk-ZSNEG5J7.js → chunk-SRIUPNYK.js} +12 -3
  44. package/dist/chunk-SRIUPNYK.js.map +1 -0
  45. package/dist/{chunk-AMMLIOH5.cjs → chunk-TOEADI6J.cjs} +4 -4
  46. package/dist/{chunk-AMMLIOH5.cjs.map → chunk-TOEADI6J.cjs.map} +1 -1
  47. package/dist/{chunk-ZILKCCXQ.cjs → chunk-VBRVZZ2I.cjs} +4 -4
  48. package/dist/chunk-VBRVZZ2I.cjs.map +1 -0
  49. package/dist/{chunk-QURNDLRE.js → chunk-VE3GPIUQ.js} +19 -9
  50. package/dist/chunk-VE3GPIUQ.js.map +1 -0
  51. package/dist/{chunk-W4QTU3U6.js → chunk-VLAFOLD6.js} +4 -4
  52. package/dist/{chunk-W4QTU3U6.js.map → chunk-VLAFOLD6.js.map} +1 -1
  53. package/dist/{chunk-W4QQBNJD.js → chunk-VSQKQNTT.js} +31 -39
  54. package/dist/chunk-VSQKQNTT.js.map +1 -0
  55. package/dist/{chunk-ODHIUBLC.js → chunk-VZZZQZBC.js} +3 -3
  56. package/dist/chunk-VZZZQZBC.js.map +1 -0
  57. package/dist/{chunk-XKLOANYB.cjs → chunk-WRULIQZE.cjs} +19 -9
  58. package/dist/chunk-WRULIQZE.cjs.map +1 -0
  59. package/dist/{chunk-KKJS3J3C.cjs → chunk-YOQY4H6Z.cjs} +11 -11
  60. package/dist/{chunk-KKJS3J3C.cjs.map → chunk-YOQY4H6Z.cjs.map} +1 -1
  61. package/dist/components/jobCard/JobLocation.cjs +1 -1
  62. package/dist/components/jobCard/JobLocation.d.cts +1 -1
  63. package/dist/components/jobCard/JobLocation.d.ts +1 -1
  64. package/dist/components/jobCard/JobLocation.js +1 -1
  65. package/dist/components/jobPost/JobDescription.cjs +4 -4
  66. package/dist/components/jobPost/JobDescription.js +3 -3
  67. package/dist/components/jobPost/JobHeader.cjs +4 -4
  68. package/dist/components/jobPost/JobHeader.js +3 -3
  69. package/dist/components/jobPost/JobPost.cjs +19 -19
  70. package/dist/components/jobPost/JobPost.d.cts +1 -1
  71. package/dist/components/jobPost/JobPost.d.ts +1 -1
  72. package/dist/components/jobPost/JobPost.js +18 -18
  73. package/dist/components/primitives/command.cjs +11 -11
  74. package/dist/components/primitives/command.js +2 -2
  75. package/dist/components/primitives/dialog.cjs +11 -11
  76. package/dist/components/primitives/dialog.js +1 -1
  77. package/dist/components/primitives/popover.cjs +4 -4
  78. package/dist/components/primitives/popover.d.cts +3 -1
  79. package/dist/components/primitives/popover.d.ts +3 -1
  80. package/dist/components/primitives/popover.js +1 -1
  81. package/dist/components/ui/Button.cjs +3 -3
  82. package/dist/components/ui/Button.d.cts +1 -1
  83. package/dist/components/ui/Button.d.ts +1 -1
  84. package/dist/components/ui/Button.js +1 -1
  85. package/dist/components/ui/Combobox.cjs +7 -8
  86. package/dist/components/ui/Combobox.d.cts +5 -3
  87. package/dist/components/ui/Combobox.d.ts +5 -3
  88. package/dist/components/ui/Combobox.js +6 -7
  89. package/dist/components/ui/DatePicker.cjs +3 -3
  90. package/dist/components/ui/DatePicker.js +2 -2
  91. package/dist/components/ui/ListItem.cjs +2 -4
  92. package/dist/components/ui/ListItem.js +1 -3
  93. package/dist/components/ui/ModalDialog.cjs +4 -4
  94. package/dist/components/ui/ModalDialog.js +3 -3
  95. package/dist/components/ui/PlacesQueryInput.cjs +5 -5
  96. package/dist/components/ui/PlacesQueryInput.js +4 -4
  97. package/dist/components/ui/ReadMore.cjs +3 -3
  98. package/dist/components/ui/ReadMore.js +2 -2
  99. package/dist/components/ui/buttonShadcn.d.cts +1 -1
  100. package/dist/components/ui/buttonShadcn.d.ts +1 -1
  101. package/dist/{displayText-DM6guUAX.d.cts → displayText-BDPndCI9.d.cts} +1 -1
  102. package/dist/{displayText-qEuo9Wam.d.ts → displayText-EpnIpZ38.d.ts} +1 -1
  103. package/dist/hooks/useDisplayText.cjs +4 -4
  104. package/dist/hooks/useDisplayText.d.cts +2 -2
  105. package/dist/hooks/useDisplayText.d.ts +2 -2
  106. package/dist/hooks/useDisplayText.js +3 -3
  107. package/dist/index.cjs +57 -57
  108. package/dist/index.d.cts +3 -3
  109. package/dist/index.d.ts +3 -3
  110. package/dist/index.js +30 -30
  111. package/dist/{job_posting_service_sanity-BEg9UHdK.d.cts → job_posting_service_sanity-BN7XcVxU.d.cts} +7 -7
  112. package/dist/{job_posting_service_sanity-BEwJ08pV.d.ts → job_posting_service_sanity-BNQsNQs2.d.ts} +7 -7
  113. package/dist/lib/locations.d.cts +2 -2
  114. package/dist/lib/locations.d.ts +2 -2
  115. package/dist/lib/mappings.d.cts +2 -2
  116. package/dist/lib/mappings.d.ts +2 -2
  117. package/dist/services/displayText.cjs +3 -3
  118. package/dist/services/displayText.d.cts +2 -2
  119. package/dist/services/displayText.d.ts +2 -2
  120. package/dist/services/displayText.js +2 -2
  121. package/dist/styles/globals.css +15 -3
  122. package/dist/styles/globals.css.map +1 -1
  123. package/dist/types/data/job_posting_service_latest.d.cts +1 -1
  124. package/dist/types/data/job_posting_service_latest.d.ts +1 -1
  125. package/dist/types/index.d.cts +2 -2
  126. package/dist/types/index.d.ts +2 -2
  127. package/dist/types/latest/custom/job_posting_service_sanity.d.cts +2 -2
  128. package/dist/types/latest/custom/job_posting_service_sanity.d.ts +2 -2
  129. package/dist/types/latest/job_posting_service_latest.d.cts +1 -1
  130. package/dist/types/latest/job_posting_service_latest.d.ts +1 -1
  131. package/package.json +1 -1
  132. package/dist/chunk-CQHERJ3J.js.map +0 -1
  133. package/dist/chunk-CU67BLKX.cjs.map +0 -1
  134. package/dist/chunk-LV6BHE7Q.cjs.map +0 -1
  135. package/dist/chunk-ODHIUBLC.js.map +0 -1
  136. package/dist/chunk-QURNDLRE.js.map +0 -1
  137. package/dist/chunk-RKLUMDJB.cjs.map +0 -1
  138. package/dist/chunk-W4QQBNJD.js.map +0 -1
  139. package/dist/chunk-XKLOANYB.cjs.map +0 -1
  140. package/dist/chunk-ZILKCCXQ.cjs.map +0 -1
  141. package/dist/chunk-ZSNEG5J7.js.map +0 -1
  142. package/dist/{job_posting_service_latest-BXd2nu_U.d.cts → job_posting_service_latest-B6Trs6sX.d.cts} +2 -2
  143. package/dist/{job_posting_service_latest-BXd2nu_U.d.ts → job_posting_service_latest-B6Trs6sX.d.ts} +2 -2
  144. package/dist/{job_posting_service_latest-Dok46B7B.d.cts → job_posting_service_latest-BKz5U2Gp.d.cts} +2 -2
  145. package/dist/{job_posting_service_latest-Dok46B7B.d.ts → job_posting_service_latest-BKz5U2Gp.d.ts} +2 -2
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkVBLDMVVW_cjs = require('./chunk-VBLDMVVW.cjs');
4
- var chunkAMNEAWA7_cjs = require('./chunk-AMNEAWA7.cjs');
3
+ var chunk2XIO3WQ2_cjs = require('./chunk-2XIO3WQ2.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');
@@ -74,10 +74,10 @@ function PlacesQueryInput({
74
74
  window.addEventListener("resize", checkDropdownPosition);
75
75
  return () => window.removeEventListener("resize", checkDropdownPosition);
76
76
  }, []);
77
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkMGWZXPMF_cjs.cn("relative w-full", className), ref: inputRef, onBlur: handleBlur, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkVBLDMVVW_cjs.Command, { children: [
77
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkMGWZXPMF_cjs.cn("relative w-full", className), ref: inputRef, onBlur: handleBlur, children: /* @__PURE__ */ jsxRuntime.jsxs(chunk2XIO3WQ2_cjs.Command, { children: [
78
78
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative w-full", children: [
79
79
  /* @__PURE__ */ jsxRuntime.jsx(
80
- chunkVBLDMVVW_cjs.CommandInput,
80
+ chunk2XIO3WQ2_cjs.CommandInput,
81
81
  {
82
82
  placeholder: "Type an address to search...",
83
83
  value: input,
@@ -97,16 +97,16 @@ function PlacesQueryInput({
97
97
  )
98
98
  ] }),
99
99
  predictions && /* @__PURE__ */ jsxRuntime.jsxs(
100
- chunkVBLDMVVW_cjs.CommandList,
100
+ chunk2XIO3WQ2_cjs.CommandList,
101
101
  {
102
102
  className: chunkMGWZXPMF_cjs.cn(
103
103
  "absolute z-50 w-full rounded-md border bg-white shadow-lg",
104
104
  shouldOpenUpward ? "bottom-full" : "top-full"
105
105
  ),
106
106
  children: [
107
- /* @__PURE__ */ jsxRuntime.jsx(chunkVBLDMVVW_cjs.CommandEmpty, { children: "No results" }),
108
- /* @__PURE__ */ jsxRuntime.jsx(chunkVBLDMVVW_cjs.CommandGroup, { children: predictions.map((prediction) => /* @__PURE__ */ jsxRuntime.jsx(
109
- chunkVBLDMVVW_cjs.CommandItem,
107
+ /* @__PURE__ */ jsxRuntime.jsx(chunk2XIO3WQ2_cjs.CommandEmpty, { children: "No results" }),
108
+ /* @__PURE__ */ jsxRuntime.jsx(chunk2XIO3WQ2_cjs.CommandGroup, { children: predictions.map((prediction) => /* @__PURE__ */ jsxRuntime.jsx(
109
+ chunk2XIO3WQ2_cjs.CommandItem,
110
110
  {
111
111
  onSelect: () => handleSelect(prediction),
112
112
  className: "truncate",
@@ -122,5 +122,5 @@ function PlacesQueryInput({
122
122
  var PlacesQueryInput_default = PlacesQueryInput;
123
123
 
124
124
  exports.PlacesQueryInput_default = PlacesQueryInput_default;
125
- //# sourceMappingURL=chunk-U6RELZ6H.cjs.map
126
- //# sourceMappingURL=chunk-U6RELZ6H.cjs.map
125
+ //# sourceMappingURL=chunk-MNDXLLWH.cjs.map
126
+ //# sourceMappingURL=chunk-MNDXLLWH.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-U6RELZ6H.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\ntype Size = 'small' | 'normal' | 'large' | 'xlarge'\n\ninterface PlacesQueryInputProps {\n apiKey: string\n selected?: Place\n onSelect: (place?: Place) => void\n className?: string\n size?: Size\n}\n\nconst sizeClasses: Record<Size, string> = {\n small: 'h-8 text-xs',\n normal: 'h-9 text-sm',\n large: 'h-10 text-base',\n xlarge: 'h-11 text-base',\n}\n\nfunction PlacesQueryInput({\n apiKey,\n selected,\n onSelect,\n className,\n size = 'normal',\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={cn('truncate pr-8', sizeClasses[size])}\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-MNDXLLWH.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\ntype Size = 'small' | 'normal' | 'large' | 'xlarge'\n\ninterface PlacesQueryInputProps {\n apiKey: string\n selected?: Place\n onSelect: (place?: Place) => void\n className?: string\n size?: Size\n}\n\nconst sizeClasses: Record<Size, string> = {\n small: 'h-8 text-xs',\n normal: 'h-9 text-sm',\n large: 'h-10 text-base',\n xlarge: 'h-11 text-base',\n}\n\nfunction PlacesQueryInput({\n apiKey,\n selected,\n onSelect,\n className,\n size = 'normal',\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={cn('truncate pr-8', sizeClasses[size])}\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,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var chunkZZCTMR2F_cjs = require('./chunk-ZZCTMR2F.cjs');
3
+ var chunk2YUUVN7E_cjs = require('./chunk-2YUUVN7E.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 chunkZZCTMR2F_cjs.DisplayTextService(), []);
9
+ const displayService = react.useMemo(() => new chunk2YUUVN7E_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-567FG76G.cjs.map
39
- //# sourceMappingURL=chunk-567FG76G.cjs.map
38
+ //# sourceMappingURL=chunk-OXDKVZZ5.cjs.map
39
+ //# sourceMappingURL=chunk-OXDKVZZ5.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-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
+ {"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,5 +1,5 @@
1
- import { defaultMappings } from './chunk-TCV6N3EK.js';
2
1
  import { DisplayTextScopeNotFoundError, DisplayTextValueNotFoundError } from './chunk-YB2USB4M.js';
2
+ import { defaultMappings } from './chunk-TCV6N3EK.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-4E3ANVRR.js.map
35
- //# sourceMappingURL=chunk-4E3ANVRR.js.map
34
+ //# sourceMappingURL=chunk-OZJZVEF2.js.map
35
+ //# sourceMappingURL=chunk-OZJZVEF2.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-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
+ {"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,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkLV6BHE7Q_cjs = require('./chunk-LV6BHE7Q.cjs');
3
+ var chunkHDQBXWSS_cjs = require('./chunk-HDQBXWSS.cjs');
4
4
  var react = require('react');
5
5
  var Markdown = require('react-markdown');
6
6
  var jsxRuntime = require('react/jsx-runtime');
@@ -38,7 +38,7 @@ function ReadMore({ text, ...props }) {
38
38
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...props, children: [
39
39
  /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": "read-more-text", className: "prose lg:prose-lg", children: /* @__PURE__ */ jsxRuntime.jsx(Markdown__default.default, { children: snippet }) }),
40
40
  isOverMaxWords && /* @__PURE__ */ jsxRuntime.jsx(
41
- chunkLV6BHE7Q_cjs.Button,
41
+ chunkHDQBXWSS_cjs.Button,
42
42
  {
43
43
  type: "button",
44
44
  className: "mt-2 flex items-center justify-center",
@@ -54,5 +54,5 @@ function ReadMore({ text, ...props }) {
54
54
  }
55
55
 
56
56
  exports.ReadMore = ReadMore;
57
- //# sourceMappingURL=chunk-4IMEF4J5.cjs.map
58
- //# sourceMappingURL=chunk-4IMEF4J5.cjs.map
57
+ //# sourceMappingURL=chunk-PU52LECH.cjs.map
58
+ //# sourceMappingURL=chunk-PU52LECH.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/ReadMore.tsx"],"names":["useState","useEffect","text","maxWords","isExpanded","snippet","jsxs","jsx","Markdown","Button"],"mappings":";;;;;;;;;;;AAWO,SAAS,QAAS,CAAA,EAAE,IAAM,EAAA,GAAG,OAAkC,EAAA;AACpE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,GAAG,CAAA;AAE5C,EAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,KAAM,CAAA,GAAG,EAAE,MAAS,GAAA,QAAA;AAEhD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,iBAAiB,MAAM;AAC3B,MAAA,MAAM,cAAc,MAAO,CAAA,UAAA;AAC3B,MAAA,IAAI,eAAe,GAAK,EAAA;AACtB,QAAA,WAAA,CAAY,EAAE,CAAA;AAAA,OACT,MAAA;AACL,QAAA,WAAA,CAAY,GAAG,CAAA;AAAA;AACjB,KACF;AAEA,IAAe,cAAA,EAAA;AACf,IAAO,MAAA,CAAA,gBAAA,CAAiB,UAAU,cAAc,CAAA;AAEhD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAoB,CAAA,QAAA,EAAU,cAAc,CAAA;AAAA,GAClE,EAAG,EAAE,CAAA;AAEL,EAAS,SAAA,kBAAA,CAAmBC,KAAcC,EAAAA,SAAAA,EAAkBC,WAA6B,EAAA;AACvF,IAAI,IAAA,CAAC,gBAAuBF,OAAAA,KAAAA;AAE5B,IAAM,MAAA,KAAA,GAAQA,KAAK,CAAA,KAAA,CAAM,GAAG,CAAA;AAC5B,IAAMG,MAAAA,QAAAA,GAAUD,cAAaF,KAAO,GAAA,KAAA,CAAM,MAAM,CAAGC,EAAAA,SAAQ,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AACrE,IAAM,MAAA,YAAA,GAAeC,cAAa,EAAK,GAAA,KAAA;AACvC,IAAO,OAAA,CAAA,EAAGC,QAAO,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA;AAAA;AAGnC,EAAA,MAAM,UAAa,GAAA,MAAM,aAAc,CAAA,CAAC,UAAU,CAAA;AAElD,EAAA,MAAM,OAAU,GAAA,kBAAA,CAAmB,IAAM,EAAA,QAAA,EAAU,UAAU,CAAA;AAE7D,EACE,uBAAAC,eAAA,CAAC,KAAK,EAAA,EAAA,GAAG,KACP,EAAA,QAAA,EAAA;AAAA,oBAACC,cAAA,CAAA,KAAA,EAAA,EAAI,eAAY,gBAAiB,EAAA,SAAA,EAAU,qBAC1C,QAAC,kBAAAA,cAAA,CAAAC,yBAAA,EAAA,EAAU,mBAAQ,CACrB,EAAA,CAAA;AAAA,IACC,cACC,oBAAAD,cAAA;AAAA,MAACE,wBAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,QAAA;AAAA,QACL,SAAU,EAAA,uCAAA;AAAA,QACV,OAAQ,EAAA,MAAA;AAAA,QACR,OAAS,EAAA,UAAA;AAAA,QAET,QAAA,kBAAAH,eAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAU,gDAAiD,EAAA,QAAA,EAAA;AAAA,UAAA,OAAA;AAAA,UACtD,aAAa,MAAS,GAAA;AAAA,SAC9B,EAAA;AAAA;AAAA;AACF,GAEJ,EAAA,CAAA;AAEJ","file":"chunk-4IMEF4J5.cjs","sourcesContent":["'use client'\n\nimport { type ComponentProps, useEffect, useState } from 'react'\nimport Markdown from 'react-markdown'\n\nimport { Button } from '@/components/ui/Button'\n\nexport type ReadMoreProps = ComponentProps<'div'> & {\n text: string\n}\n\nexport function ReadMore({ text, ...props }: Readonly<ReadMoreProps>) {\n const [isExpanded, setIsExpanded] = useState(false)\n const [maxWords, setMaxWords] = useState(160)\n\n const isOverMaxWords = text.split(' ').length > maxWords\n\n useEffect(() => {\n const updateMaxWords = () => {\n const windowWidth = window.innerWidth\n if (windowWidth <= 768) {\n setMaxWords(50)\n } else {\n setMaxWords(160)\n }\n }\n\n updateMaxWords()\n window.addEventListener('resize', updateMaxWords)\n\n return () => window.removeEventListener('resize', updateMaxWords)\n }, [])\n\n function createReadMoreText(text: string, maxWords: number, isExpanded: boolean): string {\n if (!isOverMaxWords) return text\n\n const words = text.split(' ')\n const snippet = isExpanded ? text : words.slice(0, maxWords).join(' ')\n const readMoreText = isExpanded ? '' : '...'\n return `${snippet} ${readMoreText}`\n }\n\n const toggleText = () => setIsExpanded(!isExpanded)\n\n const snippet = createReadMoreText(text, maxWords, isExpanded)\n\n return (\n <div {...props}>\n <div data-testid=\"read-more-text\" className=\"prose lg:prose-lg\">\n <Markdown>{snippet}</Markdown>\n </div>\n {isOverMaxWords && (\n <Button\n type=\"button\"\n className=\"mt-2 flex items-center justify-center\"\n variant=\"link\"\n onClick={toggleText}\n >\n <p className=\"text-sm font-bold underline underline-offset-2\">\n Read {isExpanded ? 'less' : 'more'}\n </p>\n </Button>\n )}\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/components/ui/ReadMore.tsx"],"names":["useState","useEffect","text","maxWords","isExpanded","snippet","jsxs","jsx","Markdown","Button"],"mappings":";;;;;;;;;;;AAWO,SAAS,QAAS,CAAA,EAAE,IAAM,EAAA,GAAG,OAAkC,EAAA;AACpE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,GAAG,CAAA;AAE5C,EAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,KAAM,CAAA,GAAG,EAAE,MAAS,GAAA,QAAA;AAEhD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,iBAAiB,MAAM;AAC3B,MAAA,MAAM,cAAc,MAAO,CAAA,UAAA;AAC3B,MAAA,IAAI,eAAe,GAAK,EAAA;AACtB,QAAA,WAAA,CAAY,EAAE,CAAA;AAAA,OACT,MAAA;AACL,QAAA,WAAA,CAAY,GAAG,CAAA;AAAA;AACjB,KACF;AAEA,IAAe,cAAA,EAAA;AACf,IAAO,MAAA,CAAA,gBAAA,CAAiB,UAAU,cAAc,CAAA;AAEhD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAoB,CAAA,QAAA,EAAU,cAAc,CAAA;AAAA,GAClE,EAAG,EAAE,CAAA;AAEL,EAAS,SAAA,kBAAA,CAAmBC,KAAcC,EAAAA,SAAAA,EAAkBC,WAA6B,EAAA;AACvF,IAAI,IAAA,CAAC,gBAAuBF,OAAAA,KAAAA;AAE5B,IAAM,MAAA,KAAA,GAAQA,KAAK,CAAA,KAAA,CAAM,GAAG,CAAA;AAC5B,IAAMG,MAAAA,QAAAA,GAAUD,cAAaF,KAAO,GAAA,KAAA,CAAM,MAAM,CAAGC,EAAAA,SAAQ,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AACrE,IAAM,MAAA,YAAA,GAAeC,cAAa,EAAK,GAAA,KAAA;AACvC,IAAO,OAAA,CAAA,EAAGC,QAAO,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA;AAAA;AAGnC,EAAA,MAAM,UAAa,GAAA,MAAM,aAAc,CAAA,CAAC,UAAU,CAAA;AAElD,EAAA,MAAM,OAAU,GAAA,kBAAA,CAAmB,IAAM,EAAA,QAAA,EAAU,UAAU,CAAA;AAE7D,EACE,uBAAAC,eAAA,CAAC,KAAK,EAAA,EAAA,GAAG,KACP,EAAA,QAAA,EAAA;AAAA,oBAACC,cAAA,CAAA,KAAA,EAAA,EAAI,eAAY,gBAAiB,EAAA,SAAA,EAAU,qBAC1C,QAAC,kBAAAA,cAAA,CAAAC,yBAAA,EAAA,EAAU,mBAAQ,CACrB,EAAA,CAAA;AAAA,IACC,cACC,oBAAAD,cAAA;AAAA,MAACE,wBAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,QAAA;AAAA,QACL,SAAU,EAAA,uCAAA;AAAA,QACV,OAAQ,EAAA,MAAA;AAAA,QACR,OAAS,EAAA,UAAA;AAAA,QAET,QAAA,kBAAAH,eAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAU,gDAAiD,EAAA,QAAA,EAAA;AAAA,UAAA,OAAA;AAAA,UACtD,aAAa,MAAS,GAAA;AAAA,SAC9B,EAAA;AAAA;AAAA;AACF,GAEJ,EAAA,CAAA;AAEJ","file":"chunk-PU52LECH.cjs","sourcesContent":["'use client'\n\nimport { type ComponentProps, useEffect, useState } from 'react'\nimport Markdown from 'react-markdown'\n\nimport { Button } from '@/components/ui/Button'\n\nexport type ReadMoreProps = ComponentProps<'div'> & {\n text: string\n}\n\nexport function ReadMore({ text, ...props }: Readonly<ReadMoreProps>) {\n const [isExpanded, setIsExpanded] = useState(false)\n const [maxWords, setMaxWords] = useState(160)\n\n const isOverMaxWords = text.split(' ').length > maxWords\n\n useEffect(() => {\n const updateMaxWords = () => {\n const windowWidth = window.innerWidth\n if (windowWidth <= 768) {\n setMaxWords(50)\n } else {\n setMaxWords(160)\n }\n }\n\n updateMaxWords()\n window.addEventListener('resize', updateMaxWords)\n\n return () => window.removeEventListener('resize', updateMaxWords)\n }, [])\n\n function createReadMoreText(text: string, maxWords: number, isExpanded: boolean): string {\n if (!isOverMaxWords) return text\n\n const words = text.split(' ')\n const snippet = isExpanded ? text : words.slice(0, maxWords).join(' ')\n const readMoreText = isExpanded ? '' : '...'\n return `${snippet} ${readMoreText}`\n }\n\n const toggleText = () => setIsExpanded(!isExpanded)\n\n const snippet = createReadMoreText(text, maxWords, isExpanded)\n\n return (\n <div {...props}>\n <div data-testid=\"read-more-text\" className=\"prose lg:prose-lg\">\n <Markdown>{snippet}</Markdown>\n </div>\n {isOverMaxWords && (\n <Button\n type=\"button\"\n className=\"mt-2 flex items-center justify-center\"\n variant=\"link\"\n onClick={toggleText}\n >\n <p className=\"text-sm font-bold underline underline-offset-2\">\n Read {isExpanded ? 'less' : 'more'}\n </p>\n </Button>\n )}\n </div>\n )\n}\n"]}
@@ -28,7 +28,7 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
28
 
29
29
  var Popover = PopoverPrimitive__namespace.Root;
30
30
  var PopoverTrigger = PopoverPrimitive__namespace.Trigger;
31
- var PopoverContent = React__namespace.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
31
+ var PopoverContent = React__namespace.forwardRef(({ className, align = "center", sideOffset = 4, container, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { container, children: /* @__PURE__ */ jsxRuntime.jsx(
32
32
  PopoverPrimitive__namespace.Content,
33
33
  {
34
34
  ref,
@@ -46,5 +46,5 @@ PopoverContent.displayName = PopoverPrimitive__namespace.Content.displayName;
46
46
  exports.Popover = Popover;
47
47
  exports.PopoverContent = PopoverContent;
48
48
  exports.PopoverTrigger = PopoverTrigger;
49
- //# sourceMappingURL=chunk-RKLUMDJB.cjs.map
50
- //# sourceMappingURL=chunk-RKLUMDJB.cjs.map
49
+ //# sourceMappingURL=chunk-SJ2X3D2Z.cjs.map
50
+ //# sourceMappingURL=chunk-SJ2X3D2Z.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/popover.tsx"],"names":["PopoverPrimitive","React","jsx","cn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAM,OAA2B,GAAAA,2BAAA,CAAA;AAEjC,IAAM,cAAkC,GAAAA,2BAAA,CAAA;AAMxC,IAAM,iBAAuBC,gBAG3B,CAAA,UAAA,CAAA,CAAC,EAAE,SAAA,EAAW,QAAQ,QAAU,EAAA,UAAA,GAAa,CAAG,EAAA,SAAA,EAAW,GAAG,KAAM,EAAA,EAAG,wBACrDC,cAAA,CAAAF,2BAAA,CAAA,MAAA,EAAjB,EAAwB,SACvB,EAAA,QAAA,kBAAAE,cAAA;AAAA,EAAkBF,2BAAA,CAAA,OAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAW,EAAAG,oBAAA;AAAA,MACT,yZAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA,EACF,CACD;AACD,cAAA,CAAe,cAA+BH,2BAAQ,CAAA,OAAA,CAAA,WAAA","file":"chunk-SJ2X3D2Z.cjs","sourcesContent":["'use client'\n\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\ntype PopoverContentProps = React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n container?: HTMLElement | null\n}\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n PopoverContentProps\n>(({ className, align = 'center', sideOffset = 4, container, ...props }, ref) => (\n <PopoverPrimitive.Portal container={container}>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 rounded-2xl border bg-white p-4 text-black shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverContent, PopoverTrigger }\n"]}
@@ -40,7 +40,6 @@ var buttonVariants = cva(
40
40
  "items-center",
41
41
  "justify-center",
42
42
  "gap-2",
43
- "rounded-full",
44
43
  "font-bold",
45
44
  "outline-2",
46
45
  "outline-offset-2",
@@ -52,6 +51,7 @@ var buttonVariants = cva(
52
51
  variants: {
53
52
  variant: {
54
53
  neutral: [
54
+ "rounded-full",
55
55
  "bg-black",
56
56
  "text-white",
57
57
  "hover:bg-grey-90",
@@ -61,6 +61,7 @@ var buttonVariants = cva(
61
61
  "disabled:bg-grey-10"
62
62
  ],
63
63
  primary: [
64
+ "rounded-full",
64
65
  "bg-pickle-100",
65
66
  "text-black",
66
67
  "hover:bg-pickle-80",
@@ -70,6 +71,7 @@ var buttonVariants = cva(
70
71
  "disabled:bg-grey-10"
71
72
  ],
72
73
  secondary: [
74
+ "rounded-full",
73
75
  "bg-green-80",
74
76
  "text-white",
75
77
  "hover:bg-green-90",
@@ -79,6 +81,7 @@ var buttonVariants = cva(
79
81
  "disabled:bg-grey-10"
80
82
  ],
81
83
  transparent: [
84
+ "rounded-full",
82
85
  "text-white",
83
86
  "hover:bg-green-80",
84
87
  "active:bg-green-100",
@@ -86,6 +89,7 @@ var buttonVariants = cva(
86
89
  "disabled:text-grey-40"
87
90
  ],
88
91
  link: [
92
+ "rounded-none",
89
93
  "leading-tight",
90
94
  "text-black",
91
95
  "underline",
@@ -95,6 +99,7 @@ var buttonVariants = cva(
95
99
  "active:text-purple-80"
96
100
  ],
97
101
  "outline-primary": [
102
+ "rounded-full",
98
103
  "bg-transparent",
99
104
  "border-2",
100
105
  "border-pickle-100",
@@ -110,6 +115,7 @@ var buttonVariants = cva(
110
115
  "disabled:hover:text-grey-40"
111
116
  ],
112
117
  "outline-secondary": [
118
+ "rounded-full",
113
119
  "bg-transparent",
114
120
  "border-2",
115
121
  "border-green-80",
@@ -125,6 +131,7 @@ var buttonVariants = cva(
125
131
  "disabled:hover:text-grey-40"
126
132
  ],
127
133
  "icon-outline": [
134
+ "rounded-full",
128
135
  "bg-transparent",
129
136
  "text-black",
130
137
  "hover:bg-grey-5",
@@ -135,6 +142,7 @@ var buttonVariants = cva(
135
142
  "disabled:hover:text-grey-40"
136
143
  ],
137
144
  "icon-primary": [
145
+ "rounded-full",
138
146
  "bg-pickle-100",
139
147
  "text-black",
140
148
  "hover:bg-pickle-80",
@@ -144,6 +152,7 @@ var buttonVariants = cva(
144
152
  "disabled:bg-grey-10"
145
153
  ],
146
154
  "icon-secondary": [
155
+ "rounded-full",
147
156
  "bg-green-80",
148
157
  "text-white",
149
158
  "hover:bg-green-90",
@@ -259,5 +268,5 @@ var buttonVariants = cva(
259
268
  );
260
269
 
261
270
  export { Button, buttonVariants };
262
- //# sourceMappingURL=chunk-ZSNEG5J7.js.map
263
- //# sourceMappingURL=chunk-ZSNEG5J7.js.map
271
+ //# sourceMappingURL=chunk-SRIUPNYK.js.map
272
+ //# sourceMappingURL=chunk-SRIUPNYK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/Button.tsx"],"names":[],"mappings":"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","file":"chunk-SRIUPNYK.js","sourcesContent":["'use client'\n\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'cva'\nimport { Loader2 } from 'lucide-react'\nimport React, { forwardRef } from 'react'\n\nimport { cn } from '@/lib/utils'\n\n/**\n * Props for the Button component.\n * @interface ButtonProps\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n * @extends {VariantProps<typeof buttonVariants>}\n */\ninterface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {}\n\n/**\n * A versatile button component that supports multiple variants and sizes.\n *\n * @component\n * @example\n * ```tsx\n * // Default button\n * <Button>Click me</Button>\n *\n * // Primary variant with large size\n * <Button variant=\"primary\" size=\"lg\">Large Button</Button>\n *\n * // As a link\n * <Button asChild>\n * <a href=\"/somewhere\">Go somewhere</a>\n * </Button>\n * ```\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n asChild = false,\n type = 'button',\n children,\n isLoading = false,\n ...props\n },\n ref\n ) => {\n const Component = asChild ? Slot : 'button'\n\n return (\n <Component\n className={cn(buttonVariants({ variant, size, className, isLoading, asChild }))}\n type={type}\n ref={ref}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {children}\n {isLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-white/30 backdrop-blur-[0.5px]\">\n <Loader2 className=\"h-5 w-5 animate-spin text-gray-800\" />\n </div>\n )}\n </>\n )}\n </Component>\n )\n }\n)\nButton.displayName = 'Button'\n\n/**\n * Variant definitions for the Button component using class-variance-authority.\n * Provides consistent styling across different button variations.\n */\nexport const buttonVariants = cva(\n [\n 'relative',\n 'flex',\n 'items-center',\n 'justify-center',\n 'gap-2',\n 'font-bold',\n 'outline-2',\n 'outline-offset-2',\n 'outline-dashed',\n 'outline-transparent',\n 'overflow-hidden',\n ],\n {\n variants: {\n variant: {\n neutral: [\n 'rounded-full',\n 'bg-black',\n 'text-white',\n 'hover:bg-grey-90',\n 'active:bg-grey-80',\n 'focus:outline-purple-100',\n 'disabled:text-grey-40',\n 'disabled:bg-grey-10',\n ],\n primary: [\n 'rounded-full',\n 'bg-pickle-100',\n 'text-black',\n 'hover:bg-pickle-80',\n 'active:bg-pickle-60',\n 'focus:outline-purple-100',\n 'disabled:text-grey-40',\n 'disabled:bg-grey-10',\n ],\n secondary: [\n 'rounded-full',\n 'bg-green-80',\n 'text-white',\n 'hover:bg-green-90',\n 'active:bg-green-100',\n 'focus:outline-pickle-100',\n 'disabled:text-grey-40',\n 'disabled:bg-grey-10',\n ],\n transparent: [\n 'rounded-full',\n 'text-white',\n 'hover:bg-green-80',\n 'active:bg-green-100',\n 'focus:outline-pickle-100',\n 'disabled:text-grey-40',\n ],\n link: [\n 'rounded-none',\n 'leading-tight',\n 'text-black',\n 'underline',\n 'hover:text-purple-100',\n 'focus:text-black',\n 'focus:outline-purple-100',\n 'active:text-purple-80',\n ],\n 'outline-primary': [\n 'rounded-full',\n 'bg-transparent',\n 'border-2',\n 'border-pickle-100',\n 'text-pickle-100',\n 'hover:bg-pickle-100',\n 'hover:text-black',\n 'active:bg-pickle-80',\n 'active:text-black',\n 'focus:outline-purple-100',\n 'disabled:text-grey-40',\n 'disabled:border-grey-40',\n 'disabled:hover:bg-transparent',\n 'disabled:hover:text-grey-40',\n ],\n 'outline-secondary': [\n 'rounded-full',\n 'bg-transparent',\n 'border-2',\n 'border-green-80',\n 'text-green-80',\n 'hover:bg-green-80',\n 'hover:text-white',\n 'active:bg-green-90',\n 'active:text-white',\n 'focus:outline-pickle-100',\n 'disabled:text-grey-40',\n 'disabled:border-grey-40',\n 'disabled:hover:bg-transparent',\n 'disabled:hover:text-grey-40',\n ],\n 'icon-outline': [\n 'rounded-full',\n 'bg-transparent',\n 'text-black',\n 'hover:bg-grey-5',\n 'active:bg-grey-10',\n 'focus:outline-purple-100',\n 'disabled:text-grey-40',\n 'disabled:hover:bg-transparent',\n 'disabled:hover:text-grey-40',\n ],\n 'icon-primary': [\n 'rounded-full',\n 'bg-pickle-100',\n 'text-black',\n 'hover:bg-pickle-80',\n 'active:bg-pickle-60',\n 'focus:outline-purple-100',\n 'disabled:text-grey-40',\n 'disabled:bg-grey-10',\n ],\n 'icon-secondary': [\n 'rounded-full',\n 'bg-green-80',\n 'text-white',\n 'hover:bg-green-90',\n 'active:bg-green-100',\n 'focus:outline-pickle-100',\n 'disabled:text-grey-40',\n 'disabled:bg-grey-10',\n ],\n },\n size: {\n 'extra-small': ['h-8', 'text-xs', 'px-3', 'py-1'],\n small: ['h-10', 'text-sm', 'px-4', 'py-2'],\n medium: ['h-12', 'text-base', 'px-6', 'py-3'],\n large: ['h-14', 'text-lg', 'px-8', 'py-4'],\n },\n isLoading: {\n true: ['cursor-not-allowed', 'pointer-events-none'],\n },\n asChild: {\n true: [],\n false: ['cursor-pointer', 'pointer-events-auto'],\n },\n },\n defaultVariants: {\n variant: 'neutral',\n size: 'medium',\n isLoading: false,\n asChild: false,\n },\n compoundVariants: [\n {\n variant: 'link',\n size: 'extra-small',\n class: ['h-3', 'text-xs', 'p-0'],\n },\n {\n variant: 'link',\n size: 'small',\n class: ['h-3', 'text-xs', 'p-0'],\n },\n {\n variant: 'link',\n size: 'medium',\n class: ['h-4', 'text-sm', 'p-0'],\n },\n {\n variant: 'link',\n size: 'large',\n class: ['h-6', 'text-base', 'p-0'],\n },\n {\n variant: 'icon-outline',\n size: 'extra-small',\n class: ['h-8', 'w-8', 'p-1.5', '[&>svg]:w-5', '[&>svg]:h-5'],\n },\n {\n variant: 'icon-outline',\n size: 'small',\n class: ['h-10', 'w-10', 'p-2', '[&>svg]:w-6', '[&>svg]:h-6'],\n },\n {\n variant: 'icon-outline',\n size: 'medium',\n class: ['h-12', 'w-12', 'p-2.5', '[&>svg]:w-7', '[&>svg]:h-7'],\n },\n {\n variant: 'icon-outline',\n size: 'large',\n class: ['h-14', 'w-14', 'p-3', '[&>svg]:w-8', '[&>svg]:h-8'],\n },\n {\n variant: 'icon-primary',\n size: 'extra-small',\n class: ['h-8', 'w-8', 'p-1.5', '[&>svg]:w-5', '[&>svg]:h-5'],\n },\n {\n variant: 'icon-primary',\n size: 'small',\n class: ['h-10', 'w-10', 'p-2', '[&>svg]:w-6', '[&>svg]:h-6'],\n },\n {\n variant: 'icon-primary',\n size: 'medium',\n class: ['h-12', 'w-12', 'p-2.5', '[&>svg]:w-7', '[&>svg]:h-7'],\n },\n {\n variant: 'icon-primary',\n size: 'large',\n class: ['h-14', 'w-14', 'p-3', '[&>svg]:w-8', '[&>svg]:h-8'],\n },\n {\n variant: 'icon-secondary',\n size: 'extra-small',\n class: ['h-8', 'w-8', 'p-1.5', '[&>svg]:w-5', '[&>svg]:h-5'],\n },\n {\n variant: 'icon-secondary',\n size: 'small',\n class: ['h-10', 'w-10', 'p-2', '[&>svg]:w-6', '[&>svg]:h-6'],\n },\n {\n variant: 'icon-secondary',\n size: 'medium',\n class: ['h-12', 'w-12', 'p-2.5', '[&>svg]:w-7', '[&>svg]:h-7'],\n },\n {\n variant: 'icon-secondary',\n size: 'large',\n class: ['h-14', 'w-14', 'p-3', '[&>svg]:w-8', '[&>svg]:h-8'],\n },\n ],\n }\n)\n"]}
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunk6BFFHI2V_cjs = require('./chunk-6BFFHI2V.cjs');
4
3
  var chunkW2UGL7QI_cjs = require('./chunk-W2UGL7QI.cjs');
5
- var chunkSMDQTPJE_cjs = require('./chunk-SMDQTPJE.cjs');
4
+ var chunk6BFFHI2V_cjs = require('./chunk-6BFFHI2V.cjs');
6
5
  var chunkHD3VN7GE_cjs = require('./chunk-HD3VN7GE.cjs');
7
6
  var chunkMGWZXPMF_cjs = require('./chunk-MGWZXPMF.cjs');
7
+ var chunkSMDQTPJE_cjs = require('./chunk-SMDQTPJE.cjs');
8
8
  var lucideReact = require('lucide-react');
9
9
  var Image = require('next/image');
10
10
  var jsxRuntime = require('react/jsx-runtime');
@@ -156,5 +156,5 @@ function JobHeader({
156
156
  }
157
157
 
158
158
  exports.JobHeader = JobHeader;
159
- //# sourceMappingURL=chunk-AMMLIOH5.cjs.map
160
- //# sourceMappingURL=chunk-AMMLIOH5.cjs.map
159
+ //# sourceMappingURL=chunk-TOEADI6J.cjs.map
160
+ //# sourceMappingURL=chunk-TOEADI6J.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/jobPost/JobHeader.tsx"],"names":["iconMap","jsx","jsxs","cn","Image","BackButton","Avatar","Dot","Chip_default"],"mappings":"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","file":"chunk-AMMLIOH5.cjs","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":["iconMap","jsx","jsxs","cn","Image","BackButton","Avatar","Dot","Chip_default"],"mappings":"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","file":"chunk-TOEADI6J.cjs","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"]}
@@ -43,14 +43,14 @@ var DialogOverlay = React__namespace.forwardRef(({ className, ...props }, ref) =
43
43
  ));
44
44
  DialogOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
45
45
  var DialogContent = React__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(DialogPortal, { children: [
46
- /* @__PURE__ */ jsxRuntime.jsx(DialogOverlay, {}),
46
+ /* @__PURE__ */ jsxRuntime.jsx(DialogOverlay, { className: "z-50" }),
47
47
  /* @__PURE__ */ jsxRuntime.jsx(
48
48
  DialogPrimitive__namespace.Content,
49
49
  {
50
50
  ref,
51
51
  className: chunkMGWZXPMF_cjs.cn(
52
52
  // Position centered with sensible defaults (shadcn pattern)
53
- "fixed left-1/2 top-1/2 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 border bg-white shadow-lg duration-200",
53
+ "fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 border bg-white shadow-lg duration-200",
54
54
  // Animations
55
55
  "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
56
56
  "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
@@ -103,5 +103,5 @@ exports.DialogOverlay = DialogOverlay;
103
103
  exports.DialogPortal = DialogPortal;
104
104
  exports.DialogTitle = DialogTitle;
105
105
  exports.DialogTrigger = DialogTrigger;
106
- //# sourceMappingURL=chunk-ZILKCCXQ.cjs.map
107
- //# sourceMappingURL=chunk-ZILKCCXQ.cjs.map
106
+ //# sourceMappingURL=chunk-VBRVZZ2I.cjs.map
107
+ //# sourceMappingURL=chunk-VBRVZZ2I.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/dialog.tsx"],"names":["DialogPrimitive","React","jsx","cn","jsxs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAM,MAAyB,GAAAA,0BAAA,CAAA;AAE/B,IAAM,aAAgC,GAAAA,0BAAA,CAAA;AAEtC,IAAM,YAA+B,GAAAA,0BAAA,CAAA;AAErC,IAAM,WAA8B,GAAAA,0BAAA,CAAA;AAE9B,IAAA,aAAA,GAAsBC,4BAG1B,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAC1B,qBAAAC,cAAA;AAAA,EAAiBF,0BAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAW,EAAAG,oBAAA;AAAA,MACT,mJAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,aAAA,CAAc,cAA8BH,0BAAQ,CAAA,OAAA,CAAA,WAAA;AAE9C,IAAA,aAAA,GAAsBC,gBAG1B,CAAA,UAAA,CAAA,CAAC,EAAE,SAAA,EAAW,QAAU,EAAA,GAAG,KAAM,EAAA,EAAG,GACpC,qBAAAG,eAAA,CAAC,YACC,EAAA,EAAA,QAAA,EAAA;AAAA,kBAACF,cAAA,CAAA,aAAA,EAAA,EAAc,WAAU,MAAO,EAAA,CAAA;AAAA,kBAChCA,cAAA;AAAA,IAAiBF,0BAAA,CAAA,OAAA;AAAA,IAAhB;AAAA,MACC,GAAA;AAAA,MACA,SAAW,EAAAG,oBAAA;AAAA;AAAA,QAET,iIAAA;AAAA;AAAA,QAEA,yHAAA;AAAA,QACA,8DAAA;AAAA,QACA,yKAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA;AACH,CAAA,EACF,CACD;AACD,aAAA,CAAc,cAA8BH,0BAAQ,CAAA,OAAA,CAAA,WAAA;AAEpD,IAAM,YAAe,GAAA,CAAC,EAAE,SAAA,EAAW,GAAG,KAAM,EAAA,qBACzCE,cAAA,CAAA,KAAA,EAAA,EAAI,WAAWC,oBAAG,CAAA,oDAAA,EAAsD,SAAS,CAAA,EAAI,GAAG,KAAO,EAAA;AAElG,YAAA,CAAa,WAAc,GAAA,cAAA;AAE3B,IAAM,eAAe,CAAC,EAAE,SAAW,EAAA,GAAG,OACpC,qBAAAD,cAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAWC,oBAAG,CAAA,+DAAA,EAAiE,SAAS,CAAA;AAAA,IACvF,GAAG;AAAA;AACN;AAEF,YAAA,CAAa,WAAc,GAAA,cAAA;AAErB,IAAA,WAAA,GAAoBF,4BAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAC1B,qBAAAC,cAAA;AAAA,EAAiBF,0BAAA,CAAA,KAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAWG,oBAAG,CAAA,mDAAA,EAAqD,SAAS,CAAA;AAAA,IAC3E,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,cAA8BH,0BAAM,CAAA,KAAA,CAAA,WAAA;AAE1C,IAAA,iBAAA,GAA0BC,4BAG9B,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAC1B,qBAAAC,cAAA;AAAA,EAAiBF,0BAAA,CAAA,WAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAWG,oBAAG,CAAA,gDAAA,EAAkD,SAAS,CAAA;AAAA,IACxE,GAAG;AAAA;AACN,CACD;AACD,iBAAA,CAAkB,cAA8BH,0BAAY,CAAA,WAAA,CAAA,WAAA","file":"chunk-VBRVZZ2I.cjs","sourcesContent":["'use client'\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay className=\"z-50\" />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n // Position centered with sensible defaults (shadcn pattern)\n 'fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 border bg-white shadow-lg duration-200',\n // Animations\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n 'sm:rounded-lg',\n className\n )}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)} {...props} />\n)\nDialogHeader.displayName = 'DialogHeader'\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}\n {...props}\n />\n)\nDialogFooter.displayName = 'DialogFooter'\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-neutral-500 dark:text-neutral-400', className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n"]}
@@ -1,4 +1,3 @@
1
- import { Checkbox } from './chunk-4VYXUFJA.js';
2
1
  import { cn } from './chunk-2FGZQI42.js';
3
2
  import { CheckIcon, icons } from 'lucide-react';
4
3
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -25,22 +24,33 @@ function ListItem({
25
24
  "li",
26
25
  {
27
26
  className: cn(
28
- "group relative flex w-72 cursor-pointer flex-row items-center text-left text-sm",
27
+ "group relative flex w-72 cursor-pointer flex-row items-center gap-2 overflow-hidden text-left text-sm",
29
28
  className
30
29
  ),
31
30
  ...props,
32
31
  "data-state": isSelected ? "checked" : "unchecked",
33
32
  children: [
34
33
  optionIcon && /* @__PURE__ */ jsx("span", { className: "mr-2", children: optionIcon }),
35
- hasCheckbox && /* @__PURE__ */ jsx(Checkbox, { id: value, checked: isSelected, onClick: (e) => e.preventDefault() }),
36
- /* @__PURE__ */ jsxs("div", { children: [
37
- /* @__PURE__ */ jsx("p", { children: title }),
38
- /* @__PURE__ */ jsx("p", { className: "text-xs text-grey-80", children: description })
34
+ hasCheckbox && /* @__PURE__ */ jsx(
35
+ "div",
36
+ {
37
+ role: "presentation",
38
+ className: cn(
39
+ "flex h-4 w-4 shrink-0 items-center justify-center rounded border border-grey-60",
40
+ isSelected && "border-green-100 bg-green-100"
41
+ ),
42
+ onClick: (e) => e.preventDefault(),
43
+ children: isSelected && /* @__PURE__ */ jsx(CheckIcon, { className: "h-3 w-3 text-white", size: 12 })
44
+ }
45
+ ),
46
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1 overflow-hidden", children: [
47
+ /* @__PURE__ */ jsx("p", { className: "truncate", children: title }),
48
+ /* @__PURE__ */ jsx("p", { className: "truncate text-xs text-grey-80", children: description })
39
49
  ] }),
40
50
  /* @__PURE__ */ jsx(
41
51
  CheckIcon,
42
52
  {
43
- className: "absolute inset-y-0 right-0 my-auto hidden w-6 text-green-100 group-data-[state=checked]:block",
53
+ className: "hidden w-6 shrink-0 text-green-100 group-data-[state=checked]:block",
44
54
  size: 16
45
55
  }
46
56
  )
@@ -51,5 +61,5 @@ function ListItem({
51
61
  var ListItem_default = ListItem;
52
62
 
53
63
  export { ListItem_default };
54
- //# sourceMappingURL=chunk-QURNDLRE.js.map
55
- //# sourceMappingURL=chunk-QURNDLRE.js.map
64
+ //# sourceMappingURL=chunk-VE3GPIUQ.js.map
65
+ //# sourceMappingURL=chunk-VE3GPIUQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/ListItem.tsx"],"names":["icon"],"mappings":";;;;AAiBA,SAAS,QAAS,CAAA;AAAA,EAChB,IAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAG;AACL,CAAkB,EAAA;AAChB,EAAM,MAAA,cAAA,GAAiB,CAACA,KAA4B,KAAA;AAClD,IAAA,IAAIA,SAAQ,KAAO,EAAA;AACjB,MAAM,MAAA,aAAA,GAAgB,MAAMA,KAAe,CAAA;AAC3C,MAAO,uBAAA,GAAA,CAAC,aAAc,EAAA,EAAA,IAAA,EAAM,EAAI,EAAA,CAAA;AAAA;AAElC,IAAO,OAAA,IAAA;AAAA,GACT;AAEA,EAAA,MAAM,UAAa,GAAA,IAAA,GAAO,cAAe,CAAA,IAAI,CAAI,GAAA,MAAA;AAEjD,EACE,uBAAA,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAA,EAAA;AAAA,QACT,uGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,YAAA,EAAY,aAAa,SAAY,GAAA,WAAA;AAAA,MAEpC,QAAA,EAAA;AAAA,QAAA,UAAA,oBAAe,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,MAAA,EAAQ,QAAW,EAAA,UAAA,EAAA,CAAA;AAAA,QACjD,WACC,oBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,cAAA;AAAA,YACL,SAAW,EAAA,EAAA;AAAA,cACT,iFAAA;AAAA,cACA,UAAc,IAAA;AAAA,aAChB;AAAA,YACA,OAAS,EAAA,CAAC,CAAM,KAAA,CAAA,CAAE,cAAe,EAAA;AAAA,YAEhC,wCAAe,GAAA,CAAA,SAAA,EAAA,EAAU,SAAU,EAAA,oBAAA,EAAqB,MAAM,EAAI,EAAA;AAAA;AAAA,SACrE;AAAA,wBAEF,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,gCACb,EAAA,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,GAAA,EAAA,EAAE,SAAU,EAAA,UAAA,EAAY,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,0BAC9B,GAAA,CAAA,GAAA,EAAA,EAAE,SAAU,EAAA,+BAAA,EAAiC,QAAY,EAAA,WAAA,EAAA;AAAA,SAC5D,EAAA,CAAA;AAAA,wBAEA,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,SAAU,EAAA,qEAAA;AAAA,YACV,IAAM,EAAA;AAAA;AAAA;AACR;AAAA;AAAA,GACF;AAEJ;AAEA,IAAO,gBAAQ,GAAA","file":"chunk-VE3GPIUQ.js","sourcesContent":["import { CheckIcon } from 'lucide-react'\nimport { icons } from 'lucide-react'\nimport { type ComponentPropsWithoutRef, type ReactNode } from 'react'\n\nimport { cn } from '@/lib/utils'\n\ntype IconKey = keyof typeof icons\n\ninterface ListItemProps extends ComponentPropsWithoutRef<'li'> {\n icon?: string\n hasCheckbox?: boolean\n isSelected?: boolean\n title: string\n value: string\n description?: string\n}\n\nfunction ListItem({\n icon,\n hasCheckbox,\n isSelected,\n className,\n title,\n value,\n description,\n ...props\n}: ListItemProps) {\n const getIconIfValid = (icon: string): ReactNode => {\n if (icon in icons) {\n const IconComponent = icons[icon as IconKey]\n return <IconComponent size={14} />\n }\n return null\n }\n\n const optionIcon = icon ? getIconIfValid(icon) : undefined\n\n return (\n <li\n className={cn(\n 'group relative flex w-72 cursor-pointer flex-row items-center gap-2 overflow-hidden text-left text-sm',\n className\n )}\n {...props}\n data-state={isSelected ? 'checked' : 'unchecked'}\n >\n {optionIcon && <span className=\"mr-2\">{optionIcon}</span>}\n {hasCheckbox && (\n <div\n role=\"presentation\"\n className={cn(\n 'flex h-4 w-4 shrink-0 items-center justify-center rounded border border-grey-60',\n isSelected && 'border-green-100 bg-green-100'\n )}\n onClick={(e) => e.preventDefault()}\n >\n {isSelected && <CheckIcon className=\"h-3 w-3 text-white\" size={12} />}\n </div>\n )}\n <div className=\"min-w-0 flex-1 overflow-hidden\">\n <p className=\"truncate\">{title}</p>\n <p className=\"truncate text-xs text-grey-80\">{description}</p>\n </div>\n\n <CheckIcon\n className=\"hidden w-6 shrink-0 text-green-100 group-data-[state=checked]:block\"\n size={16}\n />\n </li>\n )\n}\n\nexport default ListItem\n"]}
@@ -1,5 +1,5 @@
1
- import { Button } from './chunk-ZSNEG5J7.js';
2
- import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogClose, DialogFooter } from './chunk-CQHERJ3J.js';
1
+ import { Button } from './chunk-SRIUPNYK.js';
2
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogClose, DialogFooter } from './chunk-M4WUWRGI.js';
3
3
  import { cn } from './chunk-2FGZQI42.js';
4
4
  import { X } from 'lucide-react';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -106,5 +106,5 @@ function ModalDialog({
106
106
  }
107
107
 
108
108
  export { ModalDialog };
109
- //# sourceMappingURL=chunk-W4QTU3U6.js.map
110
- //# sourceMappingURL=chunk-W4QTU3U6.js.map
109
+ //# sourceMappingURL=chunk-VLAFOLD6.js.map
110
+ //# sourceMappingURL=chunk-VLAFOLD6.js.map