@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.
- package/dist/{chunk-ZZCTMR2F.cjs → chunk-2YUUVN7E.cjs} +3 -3
- package/dist/{chunk-ZZCTMR2F.cjs.map → chunk-2YUUVN7E.cjs.map} +1 -1
- package/dist/{chunk-IJV66D4K.cjs → chunk-46EFOSND.cjs} +2 -11
- package/dist/chunk-46EFOSND.cjs.map +1 -0
- package/dist/{chunk-7NP3NX67.cjs → chunk-4BGH2D62.cjs} +10 -10
- package/dist/chunk-4BGH2D62.cjs.map +1 -0
- package/dist/{chunk-YVKKQOTE.cjs → chunk-4FETL23S.cjs} +17 -14
- package/dist/chunk-4FETL23S.cjs.map +1 -0
- package/dist/chunk-5GODYRZA.js +138 -0
- package/dist/chunk-5GODYRZA.js.map +1 -0
- package/dist/{chunk-U27VO642.js → chunk-62HL22CD.js} +12 -5
- package/dist/chunk-62HL22CD.js.map +1 -0
- package/dist/chunk-6KGXXX6X.cjs +140 -0
- package/dist/chunk-6KGXXX6X.cjs.map +1 -0
- package/dist/chunk-73JL5O6N.cjs +95 -0
- package/dist/chunk-73JL5O6N.cjs.map +1 -0
- package/dist/{chunk-6EW2D7K7.cjs → chunk-7TFFAGVB.cjs} +33 -8
- package/dist/chunk-7TFFAGVB.cjs.map +1 -0
- package/dist/{chunk-SKMP4FO7.cjs → chunk-ASPUIRWU.cjs} +22 -4
- package/dist/chunk-ASPUIRWU.cjs.map +1 -0
- package/dist/{chunk-KM5XDOAL.js → chunk-AZ4V3ZLU.js} +2 -11
- package/dist/chunk-AZ4V3ZLU.js.map +1 -0
- package/dist/{chunk-LFWX5GEE.cjs → chunk-CGCGALTZ.cjs} +6 -6
- package/dist/{chunk-LFWX5GEE.cjs.map → chunk-CGCGALTZ.cjs.map} +1 -1
- package/dist/{chunk-K76RPF2X.js → chunk-CPZFINPG.js} +3 -3
- package/dist/{chunk-K76RPF2X.js.map → chunk-CPZFINPG.js.map} +1 -1
- package/dist/{chunk-LT35HARQ.cjs → chunk-EYN3RHOF.cjs} +18 -11
- package/dist/chunk-EYN3RHOF.cjs.map +1 -0
- package/dist/{chunk-3FQTSGHL.cjs → chunk-F567WG2X.cjs} +47 -35
- package/dist/chunk-F567WG2X.cjs.map +1 -0
- package/dist/{chunk-GHJACW4X.cjs → chunk-FDGHWRRP.cjs} +27 -8
- package/dist/chunk-FDGHWRRP.cjs.map +1 -0
- package/dist/{chunk-DUVGFEGU.js → chunk-G4KDEQIL.js} +28 -18
- package/dist/chunk-G4KDEQIL.js.map +1 -0
- package/dist/chunk-IPP5X4TY.js +53 -0
- package/dist/chunk-IPP5X4TY.js.map +1 -0
- package/dist/{chunk-XGQU7BQK.js → chunk-JZLJVA4I.js} +47 -35
- package/dist/chunk-JZLJVA4I.js.map +1 -0
- package/dist/{chunk-C3DCFPJC.cjs → chunk-KBAY4F7D.cjs} +23 -16
- package/dist/chunk-KBAY4F7D.cjs.map +1 -0
- package/dist/{chunk-3XO3AJR4.js → chunk-N2DDL726.js} +6 -6
- package/dist/chunk-N2DDL726.js.map +1 -0
- package/dist/{chunk-VB32IBQC.cjs → chunk-N7GS4DZD.cjs} +8 -6
- package/dist/chunk-N7GS4DZD.cjs.map +1 -0
- package/dist/{chunk-567FG76G.cjs → chunk-OXDKVZZ5.cjs} +4 -4
- package/dist/{chunk-567FG76G.cjs.map → chunk-OXDKVZZ5.cjs.map} +1 -1
- package/dist/{chunk-4E3ANVRR.js → chunk-OZJZVEF2.js} +3 -3
- package/dist/{chunk-4E3ANVRR.js.map → chunk-OZJZVEF2.js.map} +1 -1
- package/dist/{chunk-Z5PEOX6F.js → chunk-PU4O76IS.js} +12 -9
- package/dist/chunk-PU4O76IS.js.map +1 -0
- package/dist/chunk-PVW2B7IC.js +73 -0
- package/dist/chunk-PVW2B7IC.js.map +1 -0
- package/dist/{chunk-NCEXSFMC.js → chunk-QYSTBZXD.js} +3 -3
- package/dist/{chunk-NCEXSFMC.js.map → chunk-QYSTBZXD.js.map} +1 -1
- package/dist/{chunk-62OBBM7T.js → chunk-SNHRG4TY.js} +23 -16
- package/dist/chunk-SNHRG4TY.js.map +1 -0
- package/dist/{chunk-DURKKV2E.js → chunk-TXSLKNR3.js} +6 -4
- package/dist/chunk-TXSLKNR3.js.map +1 -0
- package/dist/{chunk-EV54AFL4.js → chunk-YJICO3OG.js} +27 -8
- package/dist/chunk-YJICO3OG.js.map +1 -0
- package/dist/chunk-Z77KENZ6.js +52 -0
- package/dist/chunk-Z77KENZ6.js.map +1 -0
- package/dist/{chunk-UW6NEKBF.cjs → chunk-ZLANEWSF.cjs} +28 -18
- package/dist/chunk-ZLANEWSF.cjs.map +1 -0
- package/dist/components/jobPost/JobPost.cjs +6 -6
- package/dist/components/jobPost/JobPost.js +5 -5
- package/dist/components/primitives/command.cjs +10 -10
- package/dist/components/primitives/command.js +1 -1
- package/dist/components/primitives/radio-group.cjs +3 -3
- package/dist/components/primitives/radio-group.d.cts +9 -1
- package/dist/components/primitives/radio-group.d.ts +9 -1
- package/dist/components/primitives/radio-group.js +1 -1
- package/dist/components/ui/Combobox.cjs +4 -4
- package/dist/components/ui/Combobox.d.cts +2 -1
- package/dist/components/ui/Combobox.d.ts +2 -1
- package/dist/components/ui/Combobox.js +3 -3
- package/dist/components/ui/Counter.cjs +2 -2
- package/dist/components/ui/Counter.d.cts +2 -2
- package/dist/components/ui/Counter.d.ts +2 -2
- package/dist/components/ui/Counter.js +1 -1
- package/dist/components/ui/DatePicker.cjs +2 -2
- package/dist/components/ui/DatePicker.d.cts +8 -3
- package/dist/components/ui/DatePicker.d.ts +8 -3
- package/dist/components/ui/DatePicker.js +1 -1
- package/dist/components/ui/Input.cjs +2 -2
- package/dist/components/ui/Input.d.cts +2 -1
- package/dist/components/ui/Input.d.ts +2 -1
- package/dist/components/ui/Input.js +1 -1
- package/dist/components/ui/Map/MapComponent.cjs +4 -4
- package/dist/components/ui/Map/MapComponent.js +3 -3
- package/dist/components/ui/Map/MapContent.cjs +2 -2
- package/dist/components/ui/Map/MapContent.js +1 -1
- package/dist/components/ui/Map/hooks.cjs +4 -4
- package/dist/components/ui/Map/hooks.js +1 -1
- package/dist/components/ui/Map/index.cjs +4 -4
- package/dist/components/ui/Map/index.js +3 -3
- package/dist/components/ui/PlacesQueryInput.cjs +3 -3
- package/dist/components/ui/PlacesQueryInput.d.cts +3 -1
- package/dist/components/ui/PlacesQueryInput.d.ts +3 -1
- package/dist/components/ui/PlacesQueryInput.js +2 -2
- package/dist/components/ui/Radio.cjs +3 -3
- package/dist/components/ui/Radio.d.cts +4 -1
- package/dist/components/ui/Radio.d.ts +4 -1
- package/dist/components/ui/Radio.js +2 -2
- package/dist/components/ui/Select.cjs +2 -2
- package/dist/components/ui/Select.d.cts +8 -1
- package/dist/components/ui/Select.d.ts +8 -1
- package/dist/components/ui/Select.js +1 -1
- package/dist/components/ui/Switch.cjs +2 -2
- package/dist/components/ui/Switch.d.cts +7 -1
- package/dist/components/ui/Switch.d.ts +7 -1
- package/dist/components/ui/Switch.js +1 -1
- package/dist/hooks/useDisplayText.cjs +4 -4
- package/dist/hooks/useDisplayText.js +3 -3
- package/dist/index.cjs +57 -57
- package/dist/index.js +25 -25
- package/dist/services/displayText.cjs +3 -3
- package/dist/services/displayText.js +2 -2
- package/dist/styles/globals.css +53 -26
- package/dist/styles/globals.css.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-2I2TWTPC.js +0 -115
- package/dist/chunk-2I2TWTPC.js.map +0 -1
- package/dist/chunk-3FQTSGHL.cjs.map +0 -1
- package/dist/chunk-3XO3AJR4.js.map +0 -1
- package/dist/chunk-62OBBM7T.js.map +0 -1
- package/dist/chunk-6EW2D7K7.cjs.map +0 -1
- package/dist/chunk-7NP3NX67.cjs.map +0 -1
- package/dist/chunk-B7NHA4GE.js +0 -33
- package/dist/chunk-B7NHA4GE.js.map +0 -1
- package/dist/chunk-C3DCFPJC.cjs.map +0 -1
- package/dist/chunk-DURKKV2E.js.map +0 -1
- package/dist/chunk-DUVGFEGU.js.map +0 -1
- package/dist/chunk-EV54AFL4.js.map +0 -1
- package/dist/chunk-FSMBDLNU.js +0 -34
- package/dist/chunk-FSMBDLNU.js.map +0 -1
- package/dist/chunk-GHJACW4X.cjs.map +0 -1
- package/dist/chunk-IJV66D4K.cjs.map +0 -1
- package/dist/chunk-KM5XDOAL.js.map +0 -1
- package/dist/chunk-LT35HARQ.cjs.map +0 -1
- package/dist/chunk-ORVF255B.cjs +0 -55
- package/dist/chunk-ORVF255B.cjs.map +0 -1
- package/dist/chunk-SKMP4FO7.cjs.map +0 -1
- package/dist/chunk-U27VO642.js.map +0 -1
- package/dist/chunk-U7LTIWUS.js +0 -28
- package/dist/chunk-U7LTIWUS.js.map +0 -1
- package/dist/chunk-UW6NEKBF.cjs.map +0 -1
- package/dist/chunk-VAHZQJTA.cjs +0 -117
- package/dist/chunk-VAHZQJTA.cjs.map +0 -1
- package/dist/chunk-VB32IBQC.cjs.map +0 -1
- package/dist/chunk-XGQU7BQK.js.map +0 -1
- package/dist/chunk-YVKKQOTE.cjs.map +0 -1
- 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-
|
|
37
|
-
//# sourceMappingURL=chunk-
|
|
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-
|
|
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-
|
|
123
|
-
//# sourceMappingURL=chunk-
|
|
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
|
|
4
|
-
var
|
|
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 } =
|
|
23
|
-
const { zoomLevel, setZoomLevel } =
|
|
24
|
-
const { clusters, supercluster } =
|
|
25
|
-
const mapCenter = coordinates && coordinates.length > 0 ? chunkDU5OQA67_cjs.getCenterForCoordinates(coordinates) :
|
|
26
|
-
const mapZoom = coordinates && coordinates.length > 1 ? chunkDU5OQA67_cjs.getZoomForCoordinates(coordinates, 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
|
-
|
|
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-
|
|
50
|
-
//# sourceMappingURL=chunk-
|
|
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
|
|
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-
|
|
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(
|
|
152
|
-
!hideSearchBox && /* @__PURE__ */ jsxRuntime.jsx(
|
|
153
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
154
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
155
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
156
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
221
|
-
//# sourceMappingURL=chunk-
|
|
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-
|
|
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-
|
|
117
|
-
//# sourceMappingURL=chunk-
|
|
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"]}
|