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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/{chunk-ZZCTMR2F.cjs → chunk-2YUUVN7E.cjs} +3 -3
  2. package/dist/{chunk-ZZCTMR2F.cjs.map → chunk-2YUUVN7E.cjs.map} +1 -1
  3. package/dist/{chunk-IJV66D4K.cjs → chunk-46EFOSND.cjs} +2 -11
  4. package/dist/chunk-46EFOSND.cjs.map +1 -0
  5. package/dist/{chunk-7NP3NX67.cjs → chunk-4BGH2D62.cjs} +10 -10
  6. package/dist/chunk-4BGH2D62.cjs.map +1 -0
  7. package/dist/{chunk-YVKKQOTE.cjs → chunk-4FETL23S.cjs} +17 -14
  8. package/dist/chunk-4FETL23S.cjs.map +1 -0
  9. package/dist/chunk-5GODYRZA.js +138 -0
  10. package/dist/chunk-5GODYRZA.js.map +1 -0
  11. package/dist/{chunk-U27VO642.js → chunk-62HL22CD.js} +12 -5
  12. package/dist/chunk-62HL22CD.js.map +1 -0
  13. package/dist/chunk-6KGXXX6X.cjs +140 -0
  14. package/dist/chunk-6KGXXX6X.cjs.map +1 -0
  15. package/dist/chunk-73JL5O6N.cjs +95 -0
  16. package/dist/chunk-73JL5O6N.cjs.map +1 -0
  17. package/dist/{chunk-6EW2D7K7.cjs → chunk-7TFFAGVB.cjs} +33 -8
  18. package/dist/chunk-7TFFAGVB.cjs.map +1 -0
  19. package/dist/{chunk-SKMP4FO7.cjs → chunk-ASPUIRWU.cjs} +22 -4
  20. package/dist/chunk-ASPUIRWU.cjs.map +1 -0
  21. package/dist/{chunk-KM5XDOAL.js → chunk-AZ4V3ZLU.js} +2 -11
  22. package/dist/chunk-AZ4V3ZLU.js.map +1 -0
  23. package/dist/{chunk-LFWX5GEE.cjs → chunk-CGCGALTZ.cjs} +6 -6
  24. package/dist/{chunk-LFWX5GEE.cjs.map → chunk-CGCGALTZ.cjs.map} +1 -1
  25. package/dist/{chunk-K76RPF2X.js → chunk-CPZFINPG.js} +3 -3
  26. package/dist/{chunk-K76RPF2X.js.map → chunk-CPZFINPG.js.map} +1 -1
  27. package/dist/{chunk-LT35HARQ.cjs → chunk-EYN3RHOF.cjs} +18 -11
  28. package/dist/chunk-EYN3RHOF.cjs.map +1 -0
  29. package/dist/{chunk-3FQTSGHL.cjs → chunk-F567WG2X.cjs} +47 -35
  30. package/dist/chunk-F567WG2X.cjs.map +1 -0
  31. package/dist/{chunk-GHJACW4X.cjs → chunk-FDGHWRRP.cjs} +27 -8
  32. package/dist/chunk-FDGHWRRP.cjs.map +1 -0
  33. package/dist/{chunk-DUVGFEGU.js → chunk-G4KDEQIL.js} +28 -18
  34. package/dist/chunk-G4KDEQIL.js.map +1 -0
  35. package/dist/chunk-IPP5X4TY.js +53 -0
  36. package/dist/chunk-IPP5X4TY.js.map +1 -0
  37. package/dist/{chunk-XGQU7BQK.js → chunk-JZLJVA4I.js} +47 -35
  38. package/dist/chunk-JZLJVA4I.js.map +1 -0
  39. package/dist/{chunk-C3DCFPJC.cjs → chunk-KBAY4F7D.cjs} +23 -16
  40. package/dist/chunk-KBAY4F7D.cjs.map +1 -0
  41. package/dist/{chunk-3XO3AJR4.js → chunk-N2DDL726.js} +6 -6
  42. package/dist/chunk-N2DDL726.js.map +1 -0
  43. package/dist/{chunk-VB32IBQC.cjs → chunk-N7GS4DZD.cjs} +8 -6
  44. package/dist/chunk-N7GS4DZD.cjs.map +1 -0
  45. package/dist/{chunk-567FG76G.cjs → chunk-OXDKVZZ5.cjs} +4 -4
  46. package/dist/{chunk-567FG76G.cjs.map → chunk-OXDKVZZ5.cjs.map} +1 -1
  47. package/dist/{chunk-4E3ANVRR.js → chunk-OZJZVEF2.js} +3 -3
  48. package/dist/{chunk-4E3ANVRR.js.map → chunk-OZJZVEF2.js.map} +1 -1
  49. package/dist/{chunk-Z5PEOX6F.js → chunk-PU4O76IS.js} +12 -9
  50. package/dist/chunk-PU4O76IS.js.map +1 -0
  51. package/dist/chunk-PVW2B7IC.js +73 -0
  52. package/dist/chunk-PVW2B7IC.js.map +1 -0
  53. package/dist/{chunk-NCEXSFMC.js → chunk-QYSTBZXD.js} +3 -3
  54. package/dist/{chunk-NCEXSFMC.js.map → chunk-QYSTBZXD.js.map} +1 -1
  55. package/dist/{chunk-62OBBM7T.js → chunk-SNHRG4TY.js} +23 -16
  56. package/dist/chunk-SNHRG4TY.js.map +1 -0
  57. package/dist/{chunk-DURKKV2E.js → chunk-TXSLKNR3.js} +6 -4
  58. package/dist/chunk-TXSLKNR3.js.map +1 -0
  59. package/dist/{chunk-EV54AFL4.js → chunk-YJICO3OG.js} +27 -8
  60. package/dist/chunk-YJICO3OG.js.map +1 -0
  61. package/dist/chunk-Z77KENZ6.js +52 -0
  62. package/dist/chunk-Z77KENZ6.js.map +1 -0
  63. package/dist/{chunk-UW6NEKBF.cjs → chunk-ZLANEWSF.cjs} +28 -18
  64. package/dist/chunk-ZLANEWSF.cjs.map +1 -0
  65. package/dist/components/jobPost/JobPost.cjs +6 -6
  66. package/dist/components/jobPost/JobPost.js +5 -5
  67. package/dist/components/primitives/command.cjs +10 -10
  68. package/dist/components/primitives/command.js +1 -1
  69. package/dist/components/primitives/radio-group.cjs +3 -3
  70. package/dist/components/primitives/radio-group.d.cts +9 -1
  71. package/dist/components/primitives/radio-group.d.ts +9 -1
  72. package/dist/components/primitives/radio-group.js +1 -1
  73. package/dist/components/ui/Combobox.cjs +4 -4
  74. package/dist/components/ui/Combobox.d.cts +2 -1
  75. package/dist/components/ui/Combobox.d.ts +2 -1
  76. package/dist/components/ui/Combobox.js +3 -3
  77. package/dist/components/ui/Counter.cjs +2 -2
  78. package/dist/components/ui/Counter.d.cts +2 -2
  79. package/dist/components/ui/Counter.d.ts +2 -2
  80. package/dist/components/ui/Counter.js +1 -1
  81. package/dist/components/ui/DatePicker.cjs +2 -2
  82. package/dist/components/ui/DatePicker.d.cts +8 -3
  83. package/dist/components/ui/DatePicker.d.ts +8 -3
  84. package/dist/components/ui/DatePicker.js +1 -1
  85. package/dist/components/ui/Input.cjs +2 -2
  86. package/dist/components/ui/Input.d.cts +2 -1
  87. package/dist/components/ui/Input.d.ts +2 -1
  88. package/dist/components/ui/Input.js +1 -1
  89. package/dist/components/ui/Map/MapComponent.cjs +4 -4
  90. package/dist/components/ui/Map/MapComponent.js +3 -3
  91. package/dist/components/ui/Map/MapContent.cjs +2 -2
  92. package/dist/components/ui/Map/MapContent.js +1 -1
  93. package/dist/components/ui/Map/hooks.cjs +4 -4
  94. package/dist/components/ui/Map/hooks.js +1 -1
  95. package/dist/components/ui/Map/index.cjs +4 -4
  96. package/dist/components/ui/Map/index.js +3 -3
  97. package/dist/components/ui/PlacesQueryInput.cjs +3 -3
  98. package/dist/components/ui/PlacesQueryInput.d.cts +3 -1
  99. package/dist/components/ui/PlacesQueryInput.d.ts +3 -1
  100. package/dist/components/ui/PlacesQueryInput.js +2 -2
  101. package/dist/components/ui/Radio.cjs +3 -3
  102. package/dist/components/ui/Radio.d.cts +4 -1
  103. package/dist/components/ui/Radio.d.ts +4 -1
  104. package/dist/components/ui/Radio.js +2 -2
  105. package/dist/components/ui/Select.cjs +2 -2
  106. package/dist/components/ui/Select.d.cts +8 -1
  107. package/dist/components/ui/Select.d.ts +8 -1
  108. package/dist/components/ui/Select.js +1 -1
  109. package/dist/components/ui/Switch.cjs +2 -2
  110. package/dist/components/ui/Switch.d.cts +7 -1
  111. package/dist/components/ui/Switch.d.ts +7 -1
  112. package/dist/components/ui/Switch.js +1 -1
  113. package/dist/hooks/useDisplayText.cjs +4 -4
  114. package/dist/hooks/useDisplayText.js +3 -3
  115. package/dist/index.cjs +57 -57
  116. package/dist/index.js +25 -25
  117. package/dist/services/displayText.cjs +3 -3
  118. package/dist/services/displayText.js +2 -2
  119. package/dist/styles/globals.css +53 -26
  120. package/dist/styles/globals.css.map +1 -1
  121. package/package.json +1 -1
  122. package/dist/chunk-2I2TWTPC.js +0 -115
  123. package/dist/chunk-2I2TWTPC.js.map +0 -1
  124. package/dist/chunk-3FQTSGHL.cjs.map +0 -1
  125. package/dist/chunk-3XO3AJR4.js.map +0 -1
  126. package/dist/chunk-62OBBM7T.js.map +0 -1
  127. package/dist/chunk-6EW2D7K7.cjs.map +0 -1
  128. package/dist/chunk-7NP3NX67.cjs.map +0 -1
  129. package/dist/chunk-B7NHA4GE.js +0 -33
  130. package/dist/chunk-B7NHA4GE.js.map +0 -1
  131. package/dist/chunk-C3DCFPJC.cjs.map +0 -1
  132. package/dist/chunk-DURKKV2E.js.map +0 -1
  133. package/dist/chunk-DUVGFEGU.js.map +0 -1
  134. package/dist/chunk-EV54AFL4.js.map +0 -1
  135. package/dist/chunk-FSMBDLNU.js +0 -34
  136. package/dist/chunk-FSMBDLNU.js.map +0 -1
  137. package/dist/chunk-GHJACW4X.cjs.map +0 -1
  138. package/dist/chunk-IJV66D4K.cjs.map +0 -1
  139. package/dist/chunk-KM5XDOAL.js.map +0 -1
  140. package/dist/chunk-LT35HARQ.cjs.map +0 -1
  141. package/dist/chunk-ORVF255B.cjs +0 -55
  142. package/dist/chunk-ORVF255B.cjs.map +0 -1
  143. package/dist/chunk-SKMP4FO7.cjs.map +0 -1
  144. package/dist/chunk-U27VO642.js.map +0 -1
  145. package/dist/chunk-U7LTIWUS.js +0 -28
  146. package/dist/chunk-U7LTIWUS.js.map +0 -1
  147. package/dist/chunk-UW6NEKBF.cjs.map +0 -1
  148. package/dist/chunk-VAHZQJTA.cjs +0 -117
  149. package/dist/chunk-VAHZQJTA.cjs.map +0 -1
  150. package/dist/chunk-VB32IBQC.cjs.map +0 -1
  151. package/dist/chunk-XGQU7BQK.js.map +0 -1
  152. package/dist/chunk-YVKKQOTE.cjs.map +0 -1
  153. package/dist/chunk-Z5PEOX6F.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkJZVRCP3M_cjs = require('./chunk-JZVRCP3M.cjs');
4
3
  var chunkXUTLQ573_cjs = require('./chunk-XUTLQ573.cjs');
4
+ var chunkJZVRCP3M_cjs = require('./chunk-JZVRCP3M.cjs');
5
5
 
6
6
  // src/services/displayText.tsx
7
7
  var DisplayTextService = class {
@@ -33,5 +33,5 @@ var DisplayTextService = class {
33
33
  };
34
34
 
35
35
  exports.DisplayTextService = DisplayTextService;
36
- //# sourceMappingURL=chunk-ZZCTMR2F.cjs.map
37
- //# sourceMappingURL=chunk-ZZCTMR2F.cjs.map
36
+ //# sourceMappingURL=chunk-2YUUVN7E.cjs.map
37
+ //# sourceMappingURL=chunk-2YUUVN7E.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/services/displayText.tsx"],"names":["defaultMappings","DisplayTextScopeNotFoundError","displayTexts","DisplayTextValueNotFoundError"],"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,GAAGA,iCAAA;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,IAAIC,gDAA8B,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,MAAMC,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,IAAIC,+CAA8B,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-ZZCTMR2F.cjs","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":["defaultMappings","DisplayTextScopeNotFoundError","displayTexts","DisplayTextValueNotFoundError"],"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,GAAGA,iCAAA;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,IAAIC,gDAA8B,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,MAAMC,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,IAAIC,+CAA8B,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-2YUUVN7E.cjs","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"]}
@@ -95,15 +95,6 @@ function MapContent({
95
95
  `marker-${cluster.properties.pointId}`
96
96
  );
97
97
  }),
98
- coordinates && clusters.length === 0 && coordinates.map((coord, index) => /* @__PURE__ */ jsxRuntime.jsx(
99
- chunkAPHLSON7_cjs.IndividualMarker,
100
- {
101
- coordinate: coord,
102
- onPinClick,
103
- onPinHover
104
- },
105
- `fallback-${index}`
106
- )),
107
98
  focusPoint && radiusMiles && /* @__PURE__ */ jsxRuntime.jsx(
108
99
  chunkPSRWV7UW_cjs.FocusCircle,
109
100
  {
@@ -119,5 +110,5 @@ function MapContent({
119
110
  }
120
111
 
121
112
  exports.MapContent = MapContent;
122
- //# sourceMappingURL=chunk-IJV66D4K.cjs.map
123
- //# sourceMappingURL=chunk-IJV66D4K.cjs.map
113
+ //# sourceMappingURL=chunk-46EFOSND.cjs.map
114
+ //# sourceMappingURL=chunk-46EFOSND.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/Map/MapContent.tsx"],"names":["useMap","useMapsLibrary","useCallback","cn","jsxs","Map","jsx","AdvancedMarker","Pin","PIN_COLORS","ClusterMarker","IndividualMarker","FocusCircle"],"mappings":"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","file":"chunk-46EFOSND.cjs","sourcesContent":["'use client'\n\nimport { AdvancedMarker, Map, Pin, useMap, useMapsLibrary } from '@vis.gl/react-google-maps'\nimport { useCallback } from 'react'\n\nimport { ClusterMarker } from '@/components/ui/Map/ClusterMarker'\nimport { PIN_COLORS } from '@/components/ui/Map/constants'\nimport { FocusCircle } from '@/components/ui/Map/FocusCircle'\nimport { IndividualMarker } from '@/components/ui/Map/IndividualMarker'\nimport type { MapContentProps, PinData } from '@/components/ui/Map/types'\nimport { cn } from '@/lib/utils'\n\nexport function MapContent<T = PinData>({\n mapId,\n mapCenter,\n mapZoom,\n position,\n coordinates,\n clusters,\n supercluster,\n onPinHover,\n onPinClick,\n focusPoint,\n radiusMiles,\n className,\n setBounds,\n setZoomLevel,\n}: MapContentProps<T>) {\n const map = useMap()\n const mapsLibrary = useMapsLibrary('maps')\n\n const zoomToLevel = useCallback(\n (newZoom: number) => {\n if (map) {\n map.setZoom(newZoom)\n }\n },\n [map]\n )\n\n const handleBoundsChanged = (e: {\n detail: { bounds: { south: number; west: number; north: number; east: number } }\n }) => {\n if (e.detail.bounds) {\n const bounds = e.detail.bounds\n setBounds([\n [bounds.south, bounds.west],\n [bounds.north, bounds.east],\n ])\n }\n }\n\n const handleZoomChanged = (e: { detail: { zoom: number } }) => {\n if (e.detail.zoom) {\n setZoomLevel(e.detail.zoom)\n }\n }\n\n const handleCameraChanged = (e: { detail: { zoom: number } }) => {\n if (e.detail.zoom) {\n setZoomLevel(e.detail.zoom)\n }\n }\n\n return (\n <div className={cn('relative h-screen max-w-full', className)}>\n <Map\n defaultZoom={mapZoom}\n defaultCenter={mapCenter}\n mapId={mapId}\n keyboardShortcuts={true}\n disableDefaultUI={true}\n zoomControl={true}\n onBoundsChanged={handleBoundsChanged}\n onZoomChanged={handleZoomChanged}\n onCameraChanged={handleCameraChanged}\n >\n {position && !coordinates && (\n <AdvancedMarker position={position}>\n <Pin {...PIN_COLORS} />\n </AdvancedMarker>\n )}\n\n {coordinates &&\n clusters.map((cluster) => {\n const { cluster: isCluster } = cluster.properties\n\n if (isCluster) {\n return (\n <ClusterMarker\n key={`cluster-${cluster.id}`}\n cluster={cluster}\n coordinates={coordinates}\n onPinClick={onPinClick}\n onPinHover={onPinHover}\n zoomToLevel={zoomToLevel}\n supercluster={supercluster}\n />\n )\n }\n\n const originalPoint = coordinates[cluster.properties.pointId!]\n return (\n <IndividualMarker\n key={`marker-${cluster.properties.pointId}`}\n coordinate={originalPoint}\n onPinClick={onPinClick}\n onPinHover={onPinHover}\n />\n )\n })}\n\n {focusPoint && radiusMiles && (\n <FocusCircle\n focusPoint={focusPoint}\n radiusMiles={radiusMiles}\n map={map}\n mapsLibrary={mapsLibrary}\n />\n )}\n </Map>\n </div>\n )\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkIJV66D4K_cjs = require('./chunk-IJV66D4K.cjs');
4
- var chunkSKMP4FO7_cjs = require('./chunk-SKMP4FO7.cjs');
3
+ var chunk46EFOSND_cjs = require('./chunk-46EFOSND.cjs');
4
+ var chunkASPUIRWU_cjs = require('./chunk-ASPUIRWU.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');
@@ -19,13 +19,13 @@ function MapComponent({
19
19
  className,
20
20
  zoom = 10
21
21
  }) {
22
- const { bounds, setBounds } = chunkSKMP4FO7_cjs.useMapBounds(coordinates);
23
- const { zoomLevel, setZoomLevel } = chunkSKMP4FO7_cjs.useZoomLevel(zoom || chunkNLGWU2KI_cjs.DEFAULT_ZOOM);
24
- const { clusters, supercluster } = chunkSKMP4FO7_cjs.useClusters(coordinates, bounds, zoomLevel);
25
- const mapCenter = coordinates && coordinates.length > 0 ? chunkDU5OQA67_cjs.getCenterForCoordinates(coordinates) : position || chunkNLGWU2KI_cjs.DEFAULT_POSITION;
26
- const mapZoom = coordinates && coordinates.length > 1 ? chunkDU5OQA67_cjs.getZoomForCoordinates(coordinates, zoom) : position ? zoom : chunkNLGWU2KI_cjs.DEFAULT_ZOOM;
22
+ const { bounds, setBounds } = chunkASPUIRWU_cjs.useMapBounds(coordinates);
23
+ const { zoomLevel, setZoomLevel } = chunkASPUIRWU_cjs.useZoomLevel(zoom || chunkNLGWU2KI_cjs.DEFAULT_ZOOM);
24
+ const { clusters, supercluster } = chunkASPUIRWU_cjs.useClusters(coordinates, bounds, zoomLevel);
25
+ const mapCenter = position ? position : coordinates && coordinates.length > 0 ? chunkDU5OQA67_cjs.getCenterForCoordinates(coordinates) : chunkNLGWU2KI_cjs.DEFAULT_POSITION;
26
+ const mapZoom = position ? zoom : coordinates && coordinates.length > 1 ? chunkDU5OQA67_cjs.getZoomForCoordinates(coordinates, zoom) : chunkNLGWU2KI_cjs.DEFAULT_ZOOM;
27
27
  return /* @__PURE__ */ jsxRuntime.jsx(reactGoogleMaps.APIProvider, { apiKey, children: /* @__PURE__ */ jsxRuntime.jsx(
28
- chunkIJV66D4K_cjs.MapContent,
28
+ chunk46EFOSND_cjs.MapContent,
29
29
  {
30
30
  mapId,
31
31
  mapCenter,
@@ -46,5 +46,5 @@ function MapComponent({
46
46
  }
47
47
 
48
48
  exports.MapComponent = MapComponent;
49
- //# sourceMappingURL=chunk-7NP3NX67.cjs.map
50
- //# sourceMappingURL=chunk-7NP3NX67.cjs.map
49
+ //# sourceMappingURL=chunk-4BGH2D62.cjs.map
50
+ //# sourceMappingURL=chunk-4BGH2D62.cjs.map
@@ -0,0 +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,GAAY,WACd,QACA,GAAA,WAAA,IAAe,YAAY,MAAS,GAAA,CAAA,GAClCC,yCAAwB,CAAA,WAAW,CACnC,GAAAC,kCAAA;AAEN,EAAM,MAAA,OAAA,GAAU,QACZ,GAAA,IAAA,GACA,WAAe,IAAA,WAAA,CAAY,SAAS,CAClC,GAAAC,uCAAA,CAAsB,WAAa,EAAA,IAAI,CACvC,GAAAJ,8BAAA;AAEN,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-4BGH2D62.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 = position\n ? position\n : coordinates && coordinates.length > 0\n ? getCenterForCoordinates(coordinates)\n : DEFAULT_POSITION\n\n const mapZoom = position\n ? zoom\n : coordinates && coordinates.length > 1\n ? getZoomForCoordinates(coordinates, 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,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkXKLOANYB_cjs = require('./chunk-XKLOANYB.cjs');
4
- var chunkYNREEZ75_cjs = require('./chunk-YNREEZ75.cjs');
5
4
  var chunkXWQI5MC3_cjs = require('./chunk-XWQI5MC3.cjs');
6
5
  var chunkLTJXX7NG_cjs = require('./chunk-LTJXX7NG.cjs');
7
6
  var chunkRKLUMDJB_cjs = require('./chunk-RKLUMDJB.cjs');
8
7
  var chunkXO6LO5CU_cjs = require('./chunk-XO6LO5CU.cjs');
9
- var chunkC3DCFPJC_cjs = require('./chunk-C3DCFPJC.cjs');
8
+ var chunkYNREEZ75_cjs = require('./chunk-YNREEZ75.cjs');
9
+ var chunkKBAY4F7D_cjs = require('./chunk-KBAY4F7D.cjs');
10
10
  var chunkMGWZXPMF_cjs = require('./chunk-MGWZXPMF.cjs');
11
11
  var cva = require('cva');
12
12
  var lucideReact = require('lucide-react');
@@ -66,7 +66,7 @@ var Combobox = react.forwardRef((props, ref) => {
66
66
  };
67
67
  const handleSelect = (value2) => {
68
68
  const option = options.find((o) => o.value === value2);
69
- if (!option) return;
69
+ if (!option || option.disabled) return;
70
70
  isUserUpdate.current = true;
71
71
  if (multiselect) {
72
72
  setSelected((prev) => updateMultiSelect(prev, option));
@@ -120,7 +120,7 @@ var Combobox = react.forwardRef((props, ref) => {
120
120
  {
121
121
  className: chunkMGWZXPMF_cjs.cn(
122
122
  "w-full truncate leading-normal",
123
- isDefault && isEmpty && "text-grey-40"
123
+ isDefault && isEmpty && "text-grey-50"
124
124
  ),
125
125
  children: handleDisplayValue()
126
126
  }
@@ -148,15 +148,17 @@ var Combobox = react.forwardRef((props, ref) => {
148
148
  collisionPadding: 8,
149
149
  sideOffset: 4,
150
150
  align: "start",
151
- children: /* @__PURE__ */ jsxRuntime.jsxs(chunkC3DCFPJC_cjs.Command, { children: [
152
- !hideSearchBox && /* @__PURE__ */ jsxRuntime.jsx(chunkC3DCFPJC_cjs.CommandInput, { placeholder: "Search..." }),
153
- /* @__PURE__ */ jsxRuntime.jsxs(chunkC3DCFPJC_cjs.CommandList, { children: [
154
- /* @__PURE__ */ jsxRuntime.jsx(chunkC3DCFPJC_cjs.CommandEmpty, { children: "No results" }),
155
- /* @__PURE__ */ jsxRuntime.jsx(chunkC3DCFPJC_cjs.CommandGroup, { children: options.map(({ id: id2, ...option }) => /* @__PURE__ */ jsxRuntime.jsx(
156
- chunkC3DCFPJC_cjs.CommandItem,
151
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkKBAY4F7D_cjs.Command, { children: [
152
+ !hideSearchBox && /* @__PURE__ */ jsxRuntime.jsx(chunkKBAY4F7D_cjs.CommandInput, { placeholder: "Search..." }),
153
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkKBAY4F7D_cjs.CommandList, { children: [
154
+ /* @__PURE__ */ jsxRuntime.jsx(chunkKBAY4F7D_cjs.CommandEmpty, { children: "No results" }),
155
+ /* @__PURE__ */ jsxRuntime.jsx(chunkKBAY4F7D_cjs.CommandGroup, { children: options.map(({ id: id2, disabled, ...option }) => /* @__PURE__ */ jsxRuntime.jsx(
156
+ chunkKBAY4F7D_cjs.CommandItem,
157
157
  {
158
158
  value: option.title,
159
+ disabled,
159
160
  onSelect: () => handleSelect(option.value),
161
+ className: chunkMGWZXPMF_cjs.cn(disabled && "cursor-not-allowed opacity-50"),
160
162
  children: /* @__PURE__ */ jsxRuntime.jsx(
161
163
  chunkXKLOANYB_cjs.ListItem_default,
162
164
  {
@@ -191,7 +193,7 @@ var Combobox = react.forwardRef((props, ref) => {
191
193
  });
192
194
  Combobox.displayName = "Combobox";
193
195
  var triggerVariants = cva.cva(
194
- "group relative cursor-pointer text-green-100 flex flex-row items-center justify-between gap-2 border border-grey-20 focus:outline-green-80 disabled:bg-grey-5",
196
+ "group relative cursor-pointer text-grey-80 flex flex-row items-center justify-between gap-2 border border-grey-20 focus:outline-green-80 disabled:bg-grey-5",
195
197
  {
196
198
  variants: {
197
199
  variant: {
@@ -206,7 +208,8 @@ var triggerVariants = cva.cva(
206
208
  size: {
207
209
  small: ["h-8", "py-1", "px-2", "text-xs"],
208
210
  normal: ["h-9", "py-2", "px-3", "text-sm"],
209
- large: ["h-10", "py-3", "px-4", "text-base"]
211
+ large: ["h-10", "py-2", "px-4", "text-base"],
212
+ xlarge: ["h-11", "py-3", "px-4", "text-base"]
210
213
  }
211
214
  },
212
215
  defaultVariants: {
@@ -217,5 +220,5 @@ var triggerVariants = cva.cva(
217
220
  );
218
221
 
219
222
  exports.Combobox = Combobox;
220
- //# sourceMappingURL=chunk-YVKKQOTE.cjs.map
221
- //# sourceMappingURL=chunk-YVKKQOTE.cjs.map
223
+ //# sourceMappingURL=chunk-4FETL23S.cjs.map
224
+ //# sourceMappingURL=chunk-4FETL23S.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/Combobox.tsx"],"names":["forwardRef","useState","useRef","icons","useEffect","value","cn","jsx","Label_default","jsxs","Popover","PopoverTrigger","Badge","ChevronDownIcon","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","id","CommandItem","ListItem_default","Separator","CircleX","ErrorMessage_default","cva"],"mappings":"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","file":"chunk-4FETL23S.cjs","sourcesContent":["'use client'\n\nimport { cva, type VariantProps } from 'cva'\nimport { ChevronDownIcon, CircleX, icons } from 'lucide-react'\nimport { type ComponentProps, forwardRef, 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 { Popover, PopoverContent, PopoverTrigger } from '@/components/primitives/popover'\nimport { Separator } from '@/components/primitives/separator'\nimport { Badge } from '@/components/ui/Badge'\nimport ErrorMessage from '@/components/ui/ErrorMessage'\nimport Label from '@/components/ui/Label'\nimport ListItem from '@/components/ui/ListItem'\nimport { cn } from '@/lib/utils'\n\ntype Icon = { icon?: keyof typeof icons }\ntype LabelProps = { label?: string; description?: string }\ntype Children = { children?: (props: { close: () => void }) => JSX.Element }\ntype Option = {\n id: string\n value: string\n title: string\n description?: string\n icon?: string\n disabled?: boolean\n}\ntype ClassNames = { label?: string; trigger?: string; items?: string; content?: string }\ntype Shared = { options: Option[]; classNames?: ClassNames; placeholder?: string; error?: string }\ntype MultiSelect = { multiselect: true; value?: string[]; onChange?: (v: string[]) => void }\ntype SingleSelect = { multiselect?: false; value?: string; onChange?: (v: string) => void }\ntype TriggerVariants = VariantProps<typeof triggerVariants>\ntype SelectProps = Omit<ComponentProps<'select'>, 'value' | 'onChange' | 'size' | 'children'>\ntype Props = TriggerVariants & SelectProps & Children & Shared & Icon & LabelProps\ntype MultiSelectProps = Props & MultiSelect\ntype SingleSelectProps = Props & SingleSelect\ntype ComboboxProps = MultiSelectProps | SingleSelectProps\n\nexport const Combobox = forwardRef<HTMLDivElement, ComboboxProps>((props, ref) => {\n const {\n id,\n name,\n value,\n label,\n options,\n required,\n description,\n classNames,\n multiselect,\n placeholder,\n error,\n variant = 'default',\n size,\n icon,\n className,\n onChange: handleChange,\n children: footer,\n } = props\n const [selected, setSelected] = useState<Option[]>([])\n const [open, setOpen] = useState(false)\n const isUserUpdate = useRef(false)\n const IconComponent = icon && icons[icon]\n const hideSearchBox = options?.length <= 5\n const isDefault = variant === 'default'\n const isChip = variant === 'chip'\n const isEmpty = selected.length === 0\n const showChevron = isDefault ? isEmpty : true\n const close = () => setOpen(false)\n\n useEffect(() => {\n if (!isUserUpdate.current) {\n const valueArray = multiselect ? (value ?? []) : value ? [value] : []\n setSelected(\n valueArray.map((v) => options.find((o) => o.value === v)).filter((v) => v !== undefined)\n )\n }\n }, [value, options, multiselect])\n\n useEffect(() => {\n if (isUserUpdate.current) {\n if (multiselect) {\n handleChange?.(selected.map((o) => o.value))\n } else {\n handleChange?.(selected[0]?.value ?? '')\n }\n isUserUpdate.current = false\n }\n }, [selected, multiselect, handleChange])\n\n const updateMultiSelect = (prev: Option[], option: Option) => {\n return prev.some((o) => o.value === option.value)\n ? prev.filter((v) => v !== option)\n : [...prev, option]\n }\n\n const handleSelect = (value: string) => {\n const option = options.find((o) => o.value === value)\n if (!option || option.disabled) return\n\n isUserUpdate.current = true\n if (multiselect) {\n setSelected((prev) => updateMultiSelect(prev, option))\n } else {\n setSelected([option])\n close()\n }\n }\n\n const handleClear = () => {\n isUserUpdate.current = true\n setSelected([])\n }\n\n const handleDisplayValue = () => {\n const defaultLabel = !isEmpty ? selected.map((s) => s.title).join(', ') : placeholder\n return isDefault ? defaultLabel : label\n }\n\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n {isDefault && (\n <Label\n text={label}\n htmlFor={name}\n required={required}\n description={description}\n className={classNames?.label}\n />\n )}\n\n <div className=\"relative flex\">\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n asChild\n disabled={options.length === 0}\n data-testid={`${id ?? name}-combobox-trigger`}\n >\n <div\n ref={ref}\n className={cn(\n triggerVariants({ variant, size }),\n isDefault && !isEmpty && 'pr-10',\n classNames?.trigger\n )}\n aria-expanded={open}\n >\n {isDefault && IconComponent && <IconComponent className=\"h-4 w-4 shrink-0\" />}\n {isChip && !isEmpty && <Badge variant=\"purple\">{selected.length}</Badge>}\n\n <span\n className={cn(\n 'w-full truncate leading-normal',\n isDefault && isEmpty && 'text-grey-50'\n )}\n >\n {handleDisplayValue()}\n </span>\n\n {showChevron && (\n <ChevronDownIcon\n className=\"shrink-0 transform group-data-[state=open]:rotate-180\"\n size=\"16\"\n />\n )}\n </div>\n </PopoverTrigger>\n\n <PopoverContent\n className={cn(\n 'flex w-full max-w-xs flex-col overflow-hidden p-0',\n 'max-h-[--radix-popover-content-available-height]',\n classNames?.content\n )}\n collisionPadding={8}\n sideOffset={4}\n align=\"start\"\n >\n <Command>\n {!hideSearchBox && <CommandInput placeholder=\"Search...\" />}\n\n <CommandList>\n <CommandEmpty>No results</CommandEmpty>\n <CommandGroup>\n {options.map(({ id, disabled, ...option }) => (\n <CommandItem\n key={id}\n value={option.title}\n disabled={disabled}\n onSelect={() => handleSelect(option.value)}\n className={cn(disabled && 'cursor-not-allowed opacity-50')}\n >\n <ListItem\n className={cn(classNames?.items, 'truncate py-1')}\n isSelected={selected.some((s) => s.value === option.value)}\n hasCheckbox={multiselect}\n {...option}\n />\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n\n {!!footer && <Separator />}\n {footer && footer({ close })}\n </Command>\n </PopoverContent>\n </Popover>\n\n {isDefault && !isEmpty && (\n <button\n type=\"button\"\n className=\"absolute inset-y-0 right-1 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\n <ErrorMessage message={error} />\n </div>\n )\n})\nCombobox.displayName = 'Combobox'\n\nconst triggerVariants = cva(\n 'group relative cursor-pointer text-grey-80 flex flex-row items-center justify-between gap-2 border border-grey-20 focus:outline-green-80 disabled:bg-grey-5',\n {\n variants: {\n variant: {\n default: ['w-full', 'rounded-lg'],\n chip: [\n 'font-bold',\n 'rounded-3xl',\n 'data-[state=open]:bg-black',\n 'data-[state=open]:text-white',\n ],\n },\n size: {\n small: ['h-8', 'py-1', 'px-2', 'text-xs'],\n normal: ['h-9', 'py-2', 'px-3', 'text-sm'],\n large: ['h-10', 'py-2', 'px-4', 'text-base'],\n xlarge: ['h-11', 'py-3', 'px-4', 'text-base'],\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'normal',\n },\n }\n)\n"]}
@@ -0,0 +1,138 @@
1
+ import { Label_default } from './chunk-CAGLLWPR.js';
2
+ import { ErrorMessage_default } from './chunk-CWTO3NXW.js';
3
+ import { cn } from './chunk-2FGZQI42.js';
4
+ import { cva } from 'cva';
5
+ import { icons, X } from 'lucide-react';
6
+ import { forwardRef } from 'react';
7
+ import { jsxs, jsx } from 'react/jsx-runtime';
8
+
9
+ var Input = forwardRef(
10
+ ({
11
+ label,
12
+ error,
13
+ description,
14
+ theme,
15
+ size,
16
+ icon,
17
+ onClear,
18
+ value,
19
+ onChange,
20
+ classNames,
21
+ className,
22
+ ...props
23
+ }, ref) => {
24
+ const handleClear = () => {
25
+ onChange?.({ target: { value: "" } });
26
+ onClear?.();
27
+ };
28
+ const IconComponent = icon && icons[icon];
29
+ const placeholder = props.placeholder ?? (icon === "Search" ? "Search..." : "");
30
+ const hasIcon = !!icon;
31
+ const iconColor = theme === "dark" ? "text-white" : "text-grey-80";
32
+ return /* @__PURE__ */ jsxs(
33
+ "div",
34
+ {
35
+ className: cn("group flex w-full flex-col gap-1", className),
36
+ "data-testid": `input-wrapper-${props.id}`,
37
+ children: [
38
+ label && /* @__PURE__ */ jsx(
39
+ Label_default,
40
+ {
41
+ text: label,
42
+ htmlFor: props.name,
43
+ required: props.required,
44
+ description,
45
+ className: classNames?.label
46
+ }
47
+ ),
48
+ /* @__PURE__ */ jsxs("div", { className: "relative flex flex-row items-center", children: [
49
+ IconComponent && /* @__PURE__ */ jsx(
50
+ IconComponent,
51
+ {
52
+ className: `absolute left-3 h-4 w-4 ${iconColor} opacity-50 group-hover:opacity-100`
53
+ }
54
+ ),
55
+ /* @__PURE__ */ jsx(
56
+ "input",
57
+ {
58
+ className: cn(inputVariants({ theme, hasIcon, size })),
59
+ ref,
60
+ placeholder,
61
+ value,
62
+ onChange,
63
+ "data-testid": `input-element-${props.id}`,
64
+ ...props
65
+ }
66
+ ),
67
+ hasIcon && value && /* @__PURE__ */ jsx(
68
+ X,
69
+ {
70
+ className: `absolute right-3 h-4 w-4 cursor-pointer ${iconColor}`,
71
+ onClick: handleClear,
72
+ "data-testid": "clear-button"
73
+ }
74
+ )
75
+ ] }),
76
+ /* @__PURE__ */ jsx(ErrorMessage_default, { message: error })
77
+ ]
78
+ }
79
+ );
80
+ }
81
+ );
82
+ Input.displayName = "Input";
83
+ var inputVariants = cva(
84
+ [
85
+ "border",
86
+ "border-grey-20",
87
+ "placeholder:text-grey-50",
88
+ "focus-visible:ring-ring",
89
+ "inline-flex",
90
+ "w-full",
91
+ "items-center",
92
+ "justify-start",
93
+ "gap-3",
94
+ "rounded-lg",
95
+ "bg-transparent",
96
+ "shadow-sm",
97
+ "transition-colors",
98
+ "focus-visible:outline-none",
99
+ "focus-visible:ring-1",
100
+ "disabled:cursor-not-allowed",
101
+ "disabled:opacity-50",
102
+ "appearance-none",
103
+ "[&::-webkit-search-cancel-button]:appearance-none",
104
+ "[&::-webkit-search-decoration]:appearance-none",
105
+ "[&::-webkit-search-results-button]:appearance-none",
106
+ "[&::-webkit-search-results-decoration]:appearance-none",
107
+ "[&::-ms-clear]:display-none",
108
+ "[&::-ms-reveal]:display-none"
109
+ ],
110
+ {
111
+ variants: {
112
+ theme: {
113
+ light: "text-grey-80",
114
+ dark: "text-white"
115
+ },
116
+ size: {
117
+ small: "h-8 pl-4 pr-3 py-1 text-xs",
118
+ normal: "h-9 pl-4 pr-3 py-2 text-sm",
119
+ large: "h-10 pl-4 pr-3 py-2 text-base",
120
+ xlarge: "h-11 pl-4 pr-3 py-3 text-base"
121
+ },
122
+ hasIcon: {
123
+ false: "pl-3",
124
+ true: "pl-8"
125
+ }
126
+ },
127
+ defaultVariants: {
128
+ theme: "light",
129
+ size: "normal",
130
+ hasIcon: false
131
+ }
132
+ }
133
+ );
134
+ var Input_default = Input;
135
+
136
+ export { Input_default };
137
+ //# sourceMappingURL=chunk-5GODYRZA.js.map
138
+ //# sourceMappingURL=chunk-5GODYRZA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/Input.tsx"],"names":[],"mappings":"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","file":"chunk-5GODYRZA.js","sourcesContent":["import { cva, type VariantProps } from 'cva'\nimport { icons, X } from 'lucide-react'\nimport { type ChangeEvent, forwardRef, type InputHTMLAttributes } from 'react'\n\nimport ErrorMessage from '@/components/ui/ErrorMessage'\nimport Label from '@/components/ui/Label'\nimport { cn } from '@/lib/utils'\n\ninterface Props\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof inputVariants> {\n label?: string\n error?: string\n icon?: keyof typeof icons\n description?: string\n classNames?: { label?: string }\n onClear?: () => void\n}\n\n/**\n * A reusable input component that supports icons, labels, error messages, and clearing functionality.\n *\n * @example\n * // Basic usage\n * <Input\n * id=\"email\"\n * name=\"email\"\n * placeholder=\"Enter your email\"\n * />\n *\n * @example\n * // With label and error\n * <Input\n * id=\"username\"\n * label=\"Username\"\n * error=\"Username is required\"\n * required\n * />\n *\n * @example\n * // Search input with clear functionality\n * <Input\n * icon=\"Search\"\n * value={searchValue}\n * onChange={handleChange}\n * onClear={() => setSearchValue('')}\n * />\n */\nconst Input = forwardRef<HTMLInputElement, Props>(\n (\n {\n label,\n error,\n description,\n theme,\n size,\n icon,\n onClear,\n value,\n onChange,\n classNames,\n className,\n ...props\n },\n ref\n ) => {\n const handleClear = () => {\n onChange?.({ target: { value: '' } } as ChangeEvent<HTMLInputElement>)\n onClear?.()\n }\n\n const IconComponent = icon && icons[icon]\n\n const placeholder = props.placeholder ?? (icon === 'Search' ? 'Search...' : '')\n const hasIcon = !!icon\n\n const iconColor = theme === 'dark' ? 'text-white' : 'text-grey-80'\n\n return (\n <div\n className={cn('group flex w-full flex-col gap-1', className)}\n data-testid={`input-wrapper-${props.id}`}\n >\n {label && (\n <Label\n text={label}\n htmlFor={props.name}\n required={props.required}\n description={description}\n className={classNames?.label}\n />\n )}\n <div className=\"relative flex flex-row items-center\">\n {IconComponent && (\n <IconComponent\n className={`absolute left-3 h-4 w-4 ${iconColor} opacity-50 group-hover:opacity-100`}\n />\n )}\n <input\n className={cn(inputVariants({ theme, hasIcon, size }))}\n ref={ref}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n data-testid={`input-element-${props.id}`}\n {...props}\n />\n {hasIcon && value && (\n <X\n className={`absolute right-3 h-4 w-4 cursor-pointer ${iconColor}`}\n onClick={handleClear}\n data-testid=\"clear-button\"\n />\n )}\n </div>\n\n <ErrorMessage message={error} />\n </div>\n )\n }\n)\nInput.displayName = 'Input'\n\nconst inputVariants = cva(\n [\n 'border',\n 'border-grey-20',\n 'placeholder:text-grey-50',\n 'focus-visible:ring-ring',\n 'inline-flex',\n 'w-full',\n 'items-center',\n 'justify-start',\n 'gap-3',\n 'rounded-lg',\n 'bg-transparent',\n 'shadow-sm',\n 'transition-colors',\n 'focus-visible:outline-none',\n 'focus-visible:ring-1',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n 'appearance-none',\n '[&::-webkit-search-cancel-button]:appearance-none',\n '[&::-webkit-search-decoration]:appearance-none',\n '[&::-webkit-search-results-button]:appearance-none',\n '[&::-webkit-search-results-decoration]:appearance-none',\n '[&::-ms-clear]:display-none',\n '[&::-ms-reveal]:display-none',\n ],\n {\n variants: {\n theme: {\n light: 'text-grey-80',\n dark: 'text-white',\n },\n size: {\n small: 'h-8 pl-4 pr-3 py-1 text-xs',\n normal: 'h-9 pl-4 pr-3 py-2 text-sm',\n large: 'h-10 pl-4 pr-3 py-2 text-base',\n xlarge: 'h-11 pl-4 pr-3 py-3 text-base',\n },\n hasIcon: {\n false: 'pl-3',\n true: 'pl-8',\n },\n },\n defaultVariants: {\n theme: 'light',\n size: 'normal',\n hasIcon: false,\n },\n }\n)\n\nexport default Input\n"]}
@@ -1,15 +1,22 @@
1
- import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from './chunk-62OBBM7T.js';
1
+ import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from './chunk-SNHRG4TY.js';
2
2
  import { cn } from './chunk-2FGZQI42.js';
3
3
  import { autocomplete } from './chunk-U3D4LL6T.js';
4
4
  import { LoaderCircle, CircleX } from 'lucide-react';
5
5
  import { useState, useRef, useCallback, useEffect } from 'react';
6
6
  import { jsx, jsxs } from 'react/jsx-runtime';
7
7
 
8
+ var sizeClasses = {
9
+ small: "h-8 text-xs",
10
+ normal: "h-9 text-sm",
11
+ large: "h-10 text-base",
12
+ xlarge: "h-11 text-base"
13
+ };
8
14
  function PlacesQueryInput({
9
15
  apiKey,
10
16
  selected,
11
17
  onSelect,
12
- className
18
+ className,
19
+ size = "normal"
13
20
  }) {
14
21
  const [predictions, setPredictions] = useState(null);
15
22
  const [input, setInput] = useState(selected?.description ?? "");
@@ -73,7 +80,7 @@ function PlacesQueryInput({
73
80
  placeholder: "Type an address to search...",
74
81
  value: input,
75
82
  onValueChange: handleInputChange,
76
- className: "truncate pr-8"
83
+ className: cn("truncate pr-8", sizeClasses[size])
77
84
  }
78
85
  ),
79
86
  isLoadingPredictions && /* @__PURE__ */ jsx(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" }),
@@ -113,5 +120,5 @@ function PlacesQueryInput({
113
120
  var PlacesQueryInput_default = PlacesQueryInput;
114
121
 
115
122
  export { PlacesQueryInput_default };
116
- //# sourceMappingURL=chunk-U27VO642.js.map
117
- //# sourceMappingURL=chunk-U27VO642.js.map
123
+ //# sourceMappingURL=chunk-62HL22CD.js.map
124
+ //# sourceMappingURL=chunk-62HL22CD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/PlacesQueryInput.tsx"],"names":[],"mappings":"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","file":"chunk-62HL22CD.js","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"]}
@@ -0,0 +1,140 @@
1
+ 'use strict';
2
+
3
+ var chunkXWQI5MC3_cjs = require('./chunk-XWQI5MC3.cjs');
4
+ var chunkLTJXX7NG_cjs = require('./chunk-LTJXX7NG.cjs');
5
+ var chunkMGWZXPMF_cjs = require('./chunk-MGWZXPMF.cjs');
6
+ var cva = require('cva');
7
+ var lucideReact = require('lucide-react');
8
+ var react = require('react');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+
11
+ var Input = react.forwardRef(
12
+ ({
13
+ label,
14
+ error,
15
+ description,
16
+ theme,
17
+ size,
18
+ icon,
19
+ onClear,
20
+ value,
21
+ onChange,
22
+ classNames,
23
+ className,
24
+ ...props
25
+ }, ref) => {
26
+ const handleClear = () => {
27
+ onChange?.({ target: { value: "" } });
28
+ onClear?.();
29
+ };
30
+ const IconComponent = icon && lucideReact.icons[icon];
31
+ const placeholder = props.placeholder ?? (icon === "Search" ? "Search..." : "");
32
+ const hasIcon = !!icon;
33
+ const iconColor = theme === "dark" ? "text-white" : "text-grey-80";
34
+ return /* @__PURE__ */ jsxRuntime.jsxs(
35
+ "div",
36
+ {
37
+ className: chunkMGWZXPMF_cjs.cn("group flex w-full flex-col gap-1", className),
38
+ "data-testid": `input-wrapper-${props.id}`,
39
+ children: [
40
+ label && /* @__PURE__ */ jsxRuntime.jsx(
41
+ chunkXWQI5MC3_cjs.Label_default,
42
+ {
43
+ text: label,
44
+ htmlFor: props.name,
45
+ required: props.required,
46
+ description,
47
+ className: classNames?.label
48
+ }
49
+ ),
50
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-row items-center", children: [
51
+ IconComponent && /* @__PURE__ */ jsxRuntime.jsx(
52
+ IconComponent,
53
+ {
54
+ className: `absolute left-3 h-4 w-4 ${iconColor} opacity-50 group-hover:opacity-100`
55
+ }
56
+ ),
57
+ /* @__PURE__ */ jsxRuntime.jsx(
58
+ "input",
59
+ {
60
+ className: chunkMGWZXPMF_cjs.cn(inputVariants({ theme, hasIcon, size })),
61
+ ref,
62
+ placeholder,
63
+ value,
64
+ onChange,
65
+ "data-testid": `input-element-${props.id}`,
66
+ ...props
67
+ }
68
+ ),
69
+ hasIcon && value && /* @__PURE__ */ jsxRuntime.jsx(
70
+ lucideReact.X,
71
+ {
72
+ className: `absolute right-3 h-4 w-4 cursor-pointer ${iconColor}`,
73
+ onClick: handleClear,
74
+ "data-testid": "clear-button"
75
+ }
76
+ )
77
+ ] }),
78
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLTJXX7NG_cjs.ErrorMessage_default, { message: error })
79
+ ]
80
+ }
81
+ );
82
+ }
83
+ );
84
+ Input.displayName = "Input";
85
+ var inputVariants = cva.cva(
86
+ [
87
+ "border",
88
+ "border-grey-20",
89
+ "placeholder:text-grey-50",
90
+ "focus-visible:ring-ring",
91
+ "inline-flex",
92
+ "w-full",
93
+ "items-center",
94
+ "justify-start",
95
+ "gap-3",
96
+ "rounded-lg",
97
+ "bg-transparent",
98
+ "shadow-sm",
99
+ "transition-colors",
100
+ "focus-visible:outline-none",
101
+ "focus-visible:ring-1",
102
+ "disabled:cursor-not-allowed",
103
+ "disabled:opacity-50",
104
+ "appearance-none",
105
+ "[&::-webkit-search-cancel-button]:appearance-none",
106
+ "[&::-webkit-search-decoration]:appearance-none",
107
+ "[&::-webkit-search-results-button]:appearance-none",
108
+ "[&::-webkit-search-results-decoration]:appearance-none",
109
+ "[&::-ms-clear]:display-none",
110
+ "[&::-ms-reveal]:display-none"
111
+ ],
112
+ {
113
+ variants: {
114
+ theme: {
115
+ light: "text-grey-80",
116
+ dark: "text-white"
117
+ },
118
+ size: {
119
+ small: "h-8 pl-4 pr-3 py-1 text-xs",
120
+ normal: "h-9 pl-4 pr-3 py-2 text-sm",
121
+ large: "h-10 pl-4 pr-3 py-2 text-base",
122
+ xlarge: "h-11 pl-4 pr-3 py-3 text-base"
123
+ },
124
+ hasIcon: {
125
+ false: "pl-3",
126
+ true: "pl-8"
127
+ }
128
+ },
129
+ defaultVariants: {
130
+ theme: "light",
131
+ size: "normal",
132
+ hasIcon: false
133
+ }
134
+ }
135
+ );
136
+ var Input_default = Input;
137
+
138
+ exports.Input_default = Input_default;
139
+ //# sourceMappingURL=chunk-6KGXXX6X.cjs.map
140
+ //# sourceMappingURL=chunk-6KGXXX6X.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/Input.tsx"],"names":["forwardRef","icons","jsxs","cn","jsx","Label_default","X","ErrorMessage_default","cva"],"mappings":"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","file":"chunk-6KGXXX6X.cjs","sourcesContent":["import { cva, type VariantProps } from 'cva'\nimport { icons, X } from 'lucide-react'\nimport { type ChangeEvent, forwardRef, type InputHTMLAttributes } from 'react'\n\nimport ErrorMessage from '@/components/ui/ErrorMessage'\nimport Label from '@/components/ui/Label'\nimport { cn } from '@/lib/utils'\n\ninterface Props\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof inputVariants> {\n label?: string\n error?: string\n icon?: keyof typeof icons\n description?: string\n classNames?: { label?: string }\n onClear?: () => void\n}\n\n/**\n * A reusable input component that supports icons, labels, error messages, and clearing functionality.\n *\n * @example\n * // Basic usage\n * <Input\n * id=\"email\"\n * name=\"email\"\n * placeholder=\"Enter your email\"\n * />\n *\n * @example\n * // With label and error\n * <Input\n * id=\"username\"\n * label=\"Username\"\n * error=\"Username is required\"\n * required\n * />\n *\n * @example\n * // Search input with clear functionality\n * <Input\n * icon=\"Search\"\n * value={searchValue}\n * onChange={handleChange}\n * onClear={() => setSearchValue('')}\n * />\n */\nconst Input = forwardRef<HTMLInputElement, Props>(\n (\n {\n label,\n error,\n description,\n theme,\n size,\n icon,\n onClear,\n value,\n onChange,\n classNames,\n className,\n ...props\n },\n ref\n ) => {\n const handleClear = () => {\n onChange?.({ target: { value: '' } } as ChangeEvent<HTMLInputElement>)\n onClear?.()\n }\n\n const IconComponent = icon && icons[icon]\n\n const placeholder = props.placeholder ?? (icon === 'Search' ? 'Search...' : '')\n const hasIcon = !!icon\n\n const iconColor = theme === 'dark' ? 'text-white' : 'text-grey-80'\n\n return (\n <div\n className={cn('group flex w-full flex-col gap-1', className)}\n data-testid={`input-wrapper-${props.id}`}\n >\n {label && (\n <Label\n text={label}\n htmlFor={props.name}\n required={props.required}\n description={description}\n className={classNames?.label}\n />\n )}\n <div className=\"relative flex flex-row items-center\">\n {IconComponent && (\n <IconComponent\n className={`absolute left-3 h-4 w-4 ${iconColor} opacity-50 group-hover:opacity-100`}\n />\n )}\n <input\n className={cn(inputVariants({ theme, hasIcon, size }))}\n ref={ref}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n data-testid={`input-element-${props.id}`}\n {...props}\n />\n {hasIcon && value && (\n <X\n className={`absolute right-3 h-4 w-4 cursor-pointer ${iconColor}`}\n onClick={handleClear}\n data-testid=\"clear-button\"\n />\n )}\n </div>\n\n <ErrorMessage message={error} />\n </div>\n )\n }\n)\nInput.displayName = 'Input'\n\nconst inputVariants = cva(\n [\n 'border',\n 'border-grey-20',\n 'placeholder:text-grey-50',\n 'focus-visible:ring-ring',\n 'inline-flex',\n 'w-full',\n 'items-center',\n 'justify-start',\n 'gap-3',\n 'rounded-lg',\n 'bg-transparent',\n 'shadow-sm',\n 'transition-colors',\n 'focus-visible:outline-none',\n 'focus-visible:ring-1',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n 'appearance-none',\n '[&::-webkit-search-cancel-button]:appearance-none',\n '[&::-webkit-search-decoration]:appearance-none',\n '[&::-webkit-search-results-button]:appearance-none',\n '[&::-webkit-search-results-decoration]:appearance-none',\n '[&::-ms-clear]:display-none',\n '[&::-ms-reveal]:display-none',\n ],\n {\n variants: {\n theme: {\n light: 'text-grey-80',\n dark: 'text-white',\n },\n size: {\n small: 'h-8 pl-4 pr-3 py-1 text-xs',\n normal: 'h-9 pl-4 pr-3 py-2 text-sm',\n large: 'h-10 pl-4 pr-3 py-2 text-base',\n xlarge: 'h-11 pl-4 pr-3 py-3 text-base',\n },\n hasIcon: {\n false: 'pl-3',\n true: 'pl-8',\n },\n },\n defaultVariants: {\n theme: 'light',\n size: 'normal',\n hasIcon: false,\n },\n }\n)\n\nexport default Input\n"]}