@abcagency/hc-ui-components 1.7.5 → 1.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/components/HireControlMap.js +102 -171
  2. package/dist/components/HireControlMap.js.map +1 -1
  3. package/dist/components/modules/accordions/default.js +1 -1
  4. package/dist/components/modules/buttons/button-group-apply.js +1 -1
  5. package/dist/components/modules/buttons/default.js +1 -1
  6. package/dist/components/modules/cards/default.js +1 -1
  7. package/dist/components/modules/filter/sort.js +1 -1
  8. package/dist/components/modules/grid.js +1 -1
  9. package/dist/components/modules/list/header.js +1 -1
  10. package/dist/components/modules/list/item-expand-card/index.js +1 -1
  11. package/dist/contexts/mapListContext.js +33 -38
  12. package/dist/contexts/mapListContext.js.map +1 -1
  13. package/dist/styles/index.css +1 -1
  14. package/dist/types/util/algoliaSearchUtil.d.ts +1 -1
  15. package/dist/util/algoliaSearchUtil.js +118 -51
  16. package/dist/util/algoliaSearchUtil.js.map +1 -1
  17. package/dist/util/filterUtil.js +1 -1
  18. package/dist/util/twMerge.js +1 -1
  19. package/package.json +2 -1
  20. package/src/apis/hcApi.ts +9 -2
  21. package/src/components/HireControlMap.js +31 -64
  22. package/src/contexts/mapListContext.tsx +34 -37
  23. package/src/index.js +1 -0
  24. package/src/util/algoliaSearchUtil.js +19 -3
  25. package/dist/apis/hcApi.js +0 -91
  26. package/dist/apis/hcApi.js.map +0 -1
  27. package/dist/clientToken.js +0 -10
  28. package/dist/clientToken.js.map +0 -1
  29. package/dist/components/modules/skeleton/map-skeleton.js +0 -50
  30. package/dist/components/modules/skeleton/map-skeleton.js.map +0 -1
  31. package/dist/node_modules/@algolia/client-common/dist/common.js +0 -541
  32. package/dist/node_modules/@algolia/client-common/dist/common.js.map +0 -1
  33. package/dist/node_modules/@algolia/requester-browser-xhr/dist/requester.xhr.js +0 -4
  34. package/dist/node_modules/@algolia/requester-browser-xhr/dist/requester.xhr.js.map +0 -1
  35. package/dist/node_modules/@algolia/requester-node-http/dist/requester.http.js +0 -82
  36. package/dist/node_modules/@algolia/requester-node-http/dist/requester.http.js.map +0 -1
  37. package/dist/node_modules/algoliasearch/dist/lite/builds/browser.js +0 -272
  38. package/dist/node_modules/algoliasearch/dist/lite/builds/browser.js.map +0 -1
  39. package/dist/node_modules/algoliasearch/dist/lite/builds/node.js +0 -269
  40. package/dist/node_modules/algoliasearch/dist/lite/builds/node.js.map +0 -1
  41. package/dist/node_modules/fuse.js/dist/fuse.js +0 -1779
  42. package/dist/node_modules/fuse.js/dist/fuse.js.map +0 -1
  43. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +0 -2580
  44. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
  45. package/dist/services/configService.js +0 -15
  46. package/dist/services/configService.js.map +0 -1
  47. package/dist/services/listingAggregatorService.js +0 -41
  48. package/dist/services/listingAggregatorService.js.map +0 -1
  49. package/dist/services/listingEntityService.js +0 -16
  50. package/dist/services/listingEntityService.js.map +0 -1
  51. package/dist/services/listingService.js +0 -15
  52. package/dist/services/listingService.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"algoliaSearchUtil.js","sources":["../../src/util/algoliaSearchUtil.js"],"sourcesContent":["import { liteClient as algoliasearch } from 'algoliasearch/lite';\n\nlet algoliaClient = null;\nlet algoliaIndexName = null;\n\n/**\n * Initialize Algolia search client\n * @param {string} appId - Algolia Application ID\n * @param {string} apiKey - Algolia Search API Key\n * @param {string} indexName - Algolia Index Name\n */\nexport const initializeAlgoliaSearch = (appId, apiKey, indexName) => {\n\tif (!appId || !apiKey || !indexName) {\n\t\tconsole.warn('Algolia search not initialized: missing configuration');\n\t\treturn false;\n\t}\n\n\ttry {\n\t\talgoliaClient = algoliasearch(appId, apiKey);\n\t\talgoliaIndexName = indexName;\n\t\treturn true;\n\t} catch (error) {\n\t\tconsole.error('Failed to initialize Algolia:', error);\n\t\treturn false;\n\t}\n};\n\n/**\n * Check if Algolia is initialized and available\n */\nexport const isAlgoliaAvailable = () => {\n\treturn algoliaClient !== null && algoliaIndexName !== null;\n};\n\n/**\n * Search using Algolia and return matching listing IDs with their order\n * @param {string} query - Search query\n * @returns {Promise<{referenceNumbers: number[], ids: string[], orderMap: Map}>} Object with arrays of IDs and a map for ordering\n */\nexport const searchAlgolia = async (query) => {\n\tif (!isAlgoliaAvailable()) {\n\t\tthrow new Error('Algolia search is not initialized');\n\t}\n\n\ttry {\n\t\tconst { results } = await algoliaClient.search({\n\t\t\trequests: [\n\t\t\t\t{\n\t\t\t\t\tindexName: algoliaIndexName,\n\t\t\t\t\tquery: query,\n\t\t\t\t\thitsPerPage: 1000 // Adjust based on your needs\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\n\t\t// Extract IDs from the results and maintain order\n\t\tconst hits = results[0]?.hits || [];\n\t\tconsole.log('Algolia search returned', hits.length, 'hits');\n\n\t\tconst referenceNumbers = [];\n\t\tconst ids = [];\n\t\tconst orderMap = new Map(); // Map to store the Algolia result order\n\n\t\thits.forEach((hit, index) => {\n\t\t\tif (hit.referenceNumber) {\n\t\t\t\tconst refNum = parseInt(hit.referenceNumber);\n\t\t\t\treferenceNumbers.push(refNum);\n\t\t\t\torderMap.set(`ref-${refNum}`, index);\n\t\t\t}\n\t\t\tif (hit.id) {\n\t\t\t\tids.push(hit.id);\n\t\t\t\torderMap.set(`id-${hit.id}`, index);\n\t\t\t}\n\t\t});\n\n\t\tconsole.log('Extracted', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids from Algolia');\n\t\treturn { referenceNumbers, ids, orderMap };\n\t} catch (error) {\n\t\tconsole.error('Algolia search failed:', error);\n\t\tthrow error;\n\t}\n};/**\n * Filter listings by Algolia search results and sort by Algolia's result order\n * @param {Array} listings - All listings to filter\n * @param {string} query - Search query\n * @returns {Promise<Array>} Filtered and sorted listings\n */\nexport const filterListingsByAlgoliaSearch = async (listings, query) => {\n\tif (!query || !isAlgoliaAvailable()) {\n\t\treturn listings;\n\t}\n\n\ttry {\n\t\tconst { referenceNumbers, ids, orderMap } = await searchAlgolia(query);\n\n\t\tconsole.log('Filtering', listings.length, 'listings against', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids');\n\t\tconsole.log('Sample listing referenceNumbers:', listings.slice(0, 5).map(l => l.referenceNumber));\n\t\tconsole.log('Sample listing ids:', listings.slice(0, 5).map(l => l.id));\n\t\tconsole.log('Sample Algolia referenceNumbers:', referenceNumbers.slice(0, 5));\n\t\tconsole.log('Sample Algolia ids:', ids.slice(0, 5));\n\n\t\t// Filter listings by matching referenceNumber OR id\n\t\tconst filtered = listings.filter(listing =>\n\t\t\treferenceNumbers.includes(listing.referenceNumber) || ids.includes(listing.id)\n\t\t);\n\n\t\t// Sort filtered listings by Algolia result order\n\t\tfiltered.sort((a, b) => {\n\t\t\t// Get the Algolia order index for each listing\n\t\t\tconst orderA = orderMap.get(`ref-${a.referenceNumber}`) ?? orderMap.get(`id-${a.id}`) ?? Infinity;\n\t\t\tconst orderB = orderMap.get(`ref-${b.referenceNumber}`) ?? orderMap.get(`id-${b.id}`) ?? Infinity;\n\t\t\treturn orderA - orderB;\n\t\t});\n\n\t\tconsole.log('Filtered result:', filtered.length, 'listings matched and sorted by Algolia order');\n\t\treturn filtered;\n\t} catch (error) {\n\t\tconsole.error('Failed to filter by Algolia search, returning all listings:', error);\n\t\treturn listings;\n\t}\n};\n"],"names":["algoliaClient","algoliaIndexName","initializeAlgoliaSearch","appId","apiKey","indexName","console","warn","algoliasearch","error","isAlgoliaAvailable","searchAlgolia","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","query","_results$","_yield$algoliaClient$","results","hits","referenceNumbers","ids","orderMap","wrap","_callee$","_context","prev","next","Error","search","requests","hitsPerPage","sent","log","length","Map","forEach","hit","index","referenceNumber","refNum","parseInt","push","set","concat","id","abrupt","t0","stop","_x","apply","arguments","filterListingsByAlgoliaSearch","_ref2","_callee2","listings","_yield$searchAlgolia","filtered","_callee2$","_context2","slice","map","l","filter","listing","includes","sort","a","b","_ref3","_orderMap$get","_ref4","_orderMap$get2","orderA","get","Infinity","orderB","_x2","_x3"],"mappings":"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"}
1
+ {"version":3,"file":"algoliaSearchUtil.js","sources":["../../src/util/algoliaSearchUtil.js"],"sourcesContent":["let algoliaClient = null;\nlet algoliaIndexName = null;\nlet algoliaSearchModule = null;\n\n/**\n * Lazy load algoliasearch to avoid SSR issues\n */\nconst getAlgoliaSearch = async () => {\n\tif (typeof window === 'undefined') return null;\n\tif (!algoliaSearchModule) {\n\t\tconst { liteClient } = await import('algoliasearch/lite');\n\t\talgoliaSearchModule = liteClient;\n\t}\n\treturn algoliaSearchModule;\n};\n\n/**\n * Initialize Algolia search client\n * @param {string} appId - Algolia Application ID\n * @param {string} apiKey - Algolia Search API Key\n * @param {string} indexName - Algolia Index Name\n */\nexport const initializeAlgoliaSearch = async (appId, apiKey, indexName) => {\n\tif (!appId || !apiKey || !indexName) {\n\t\tconsole.warn('Algolia search not initialized: missing configuration');\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tconst algoliasearch = await getAlgoliaSearch();\n\t\tif (!algoliasearch) {\n\t\t\tconsole.warn('Algolia search not available (SSR context)');\n\t\t\treturn false;\n\t\t}\n\t\talgoliaClient = algoliasearch(appId, apiKey);\n\t\talgoliaIndexName = indexName;\n\t\treturn true;\n\t} catch (error) {\n\t\tconsole.error('Failed to initialize Algolia:', error);\n\t\treturn false;\n\t}\n};\n\n/**\n * Check if Algolia is initialized and available\n */\nexport const isAlgoliaAvailable = () => {\n\treturn algoliaClient !== null && algoliaIndexName !== null;\n};\n\n/**\n * Search using Algolia and return matching listing IDs with their order\n * @param {string} query - Search query\n * @returns {Promise<{referenceNumbers: number[], ids: string[], orderMap: Map}>} Object with arrays of IDs and a map for ordering\n */\nexport const searchAlgolia = async (query) => {\n\tif (!isAlgoliaAvailable()) {\n\t\tthrow new Error('Algolia search is not initialized');\n\t}\n\n\ttry {\n\t\tconst { results } = await algoliaClient.search({\n\t\t\trequests: [\n\t\t\t\t{\n\t\t\t\t\tindexName: algoliaIndexName,\n\t\t\t\t\tquery: query,\n\t\t\t\t\thitsPerPage: 1000 // Adjust based on your needs\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\n\t\t// Extract IDs from the results and maintain order\n\t\tconst hits = results[0]?.hits || [];\n\t\tconsole.log('Algolia search returned', hits.length, 'hits');\n\n\t\tconst referenceNumbers = [];\n\t\tconst ids = [];\n\t\tconst orderMap = new Map(); // Map to store the Algolia result order\n\n\t\thits.forEach((hit, index) => {\n\t\t\tif (hit.referenceNumber) {\n\t\t\t\tconst refNum = parseInt(hit.referenceNumber);\n\t\t\t\treferenceNumbers.push(refNum);\n\t\t\t\torderMap.set(`ref-${refNum}`, index);\n\t\t\t}\n\t\t\tif (hit.id) {\n\t\t\t\tids.push(hit.id);\n\t\t\t\torderMap.set(`id-${hit.id}`, index);\n\t\t\t}\n\t\t});\n\n\t\tconsole.log('Extracted', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids from Algolia');\n\t\treturn { referenceNumbers, ids, orderMap };\n\t} catch (error) {\n\t\tconsole.error('Algolia search failed:', error);\n\t\tthrow error;\n\t}\n};/**\n * Filter listings by Algolia search results and sort by Algolia's result order\n * @param {Array} listings - All listings to filter\n * @param {string} query - Search query\n * @returns {Promise<Array>} Filtered and sorted listings\n */\nexport const filterListingsByAlgoliaSearch = async (listings, query) => {\n\tif (!query || !isAlgoliaAvailable()) {\n\t\treturn listings;\n\t}\n\n\ttry {\n\t\tconst { referenceNumbers, ids, orderMap } = await searchAlgolia(query);\n\n\t\tconsole.log('Filtering', listings.length, 'listings against', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids');\n\t\tconsole.log('Sample listing referenceNumbers:', listings.slice(0, 5).map(l => l.referenceNumber));\n\t\tconsole.log('Sample listing ids:', listings.slice(0, 5).map(l => l.id));\n\t\tconsole.log('Sample Algolia referenceNumbers:', referenceNumbers.slice(0, 5));\n\t\tconsole.log('Sample Algolia ids:', ids.slice(0, 5));\n\n\t\t// Filter listings by matching referenceNumber OR id\n\t\tconst filtered = listings.filter(listing =>\n\t\t\treferenceNumbers.includes(listing.referenceNumber) || ids.includes(listing.id)\n\t\t);\n\n\t\t// Sort filtered listings by Algolia result order\n\t\tfiltered.sort((a, b) => {\n\t\t\t// Get the Algolia order index for each listing\n\t\t\tconst orderA = orderMap.get(`ref-${a.referenceNumber}`) ?? orderMap.get(`id-${a.id}`) ?? Infinity;\n\t\t\tconst orderB = orderMap.get(`ref-${b.referenceNumber}`) ?? orderMap.get(`id-${b.id}`) ?? Infinity;\n\t\t\treturn orderA - orderB;\n\t\t});\n\n\t\tconsole.log('Filtered result:', filtered.length, 'listings matched and sorted by Algolia order');\n\t\treturn filtered;\n\t} catch (error) {\n\t\tconsole.error('Failed to filter by Algolia search, returning all listings:', error);\n\t\treturn listings;\n\t}\n};\n"],"names":["algoliaClient","algoliaIndexName","algoliaSearchModule","getAlgoliaSearch","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_yield$import","liteClient","wrap","_callee$","_context","prev","next","window","abrupt","sent","stop","apply","arguments","initializeAlgoliaSearch","_ref2","_callee2","appId","apiKey","indexName","algoliasearch","_callee2$","_context2","console","warn","t0","error","_x","_x2","_x3","isAlgoliaAvailable","searchAlgolia","_ref3","_callee3","query","_results$","_yield$algoliaClient$","results","hits","referenceNumbers","ids","orderMap","_callee3$","_context3","Error","search","requests","hitsPerPage","log","length","Map","forEach","hit","index","referenceNumber","refNum","parseInt","push","set","concat","id","_x4","filterListingsByAlgoliaSearch","_ref4","_callee4","listings","_yield$searchAlgolia","filtered","_callee4$","_context4","slice","map","l","filter","listing","includes","sort","a","b","_ref5","_orderMap$get","_ref6","_orderMap$get2","orderA","get","Infinity","orderB","_x5","_x6"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { slicedToArray as _slicedToArray, typeof as _typeof, toConsumableArray as _toConsumableArray, objectSpread2 as _objectSpread2, createForOfIteratorHelper as _createForOfIteratorHelper, asyncToGenerator as _asyncToGenerator, regeneratorRuntime as _regeneratorRuntime, defineProperty as _defineProperty } from '../_virtual/_rollupPluginBabelHelpers.js';
2
2
  import { getDistinctItemsByProximity } from './mapUtil.js';
3
3
  import { isAlgoliaAvailable, filterListingsByAlgoliaSearch } from './algoliaSearchUtil.js';
4
- import Fuse from '../node_modules/fuse.js/dist/fuse.js';
4
+ import Fuse from 'fuse.js';
5
5
 
6
6
  var getFilterOptions = function getFilterOptions(listings, filteredListings, field) {
7
7
  var excludeZeroCount = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
@@ -1,4 +1,4 @@
1
- import { extendTailwindMerge } from '../node_modules/tailwind-merge/dist/bundle-mjs.js';
1
+ import { extendTailwindMerge } from 'tailwind-merge';
2
2
 
3
3
  // Create a custom tailwind-merge that understands the hc- prefix
4
4
  var twMerge = extendTailwindMerge({
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@abcagency/hc-ui-components",
3
- "version": "1.7.5",
3
+ "version": "1.7.7",
4
4
  "description": "UI Components for HireControl",
5
+ "type": "module",
5
6
  "main": "dist/index.js",
6
7
  "module": "dist/index.js",
7
8
  "types": "dist/index.d.ts",
package/src/apis/hcApi.ts CHANGED
@@ -13,7 +13,11 @@ const memoryStorage: MemoryStorage = {
13
13
 
14
14
  function setStorage(key: keyof MemoryStorage, value: string): void {
15
15
  try {
16
- sessionStorage.setItem(key, value);
16
+ if (typeof window !== 'undefined' && window.sessionStorage) {
17
+ sessionStorage.setItem(key, value);
18
+ } else {
19
+ memoryStorage[key] = value;
20
+ }
17
21
  } catch (error) {
18
22
  memoryStorage[key] = value;
19
23
  }
@@ -21,7 +25,10 @@ function setStorage(key: keyof MemoryStorage, value: string): void {
21
25
 
22
26
  function getStorage(key: keyof MemoryStorage): string | null {
23
27
  try {
24
- return sessionStorage.getItem(key) || memoryStorage[key];
28
+ if (typeof window !== 'undefined' && window.sessionStorage) {
29
+ return sessionStorage.getItem(key) || memoryStorage[key];
30
+ }
31
+ return memoryStorage[key];
25
32
  } catch (error) {
26
33
  return memoryStorage[key];
27
34
  }
@@ -12,41 +12,12 @@ import { MapListProvider } from '~/contexts/mapListContext';
12
12
  import { TrackEventProvider } from '~/contexts/trackEventContext';
13
13
  import { ThemeProvider } from '~/contexts/themeContext';
14
14
 
15
- import { getMapConfig } from '~/services/configService';
16
- import { setClientAuthKey } from '~/clientToken.js';
17
15
  import { initializeAlgoliaSearch } from '~/util/algoliaSearchUtil';
18
16
 
19
17
  // Libraries for Google Maps
20
18
  const LIBRARIES = ['places'];
21
19
 
22
- // Custom hook to fetch site configuration
23
- function useSiteConfig(clientToken, siteConfiguration = null) {
24
- const [siteConfig, setSiteConfig] = useState(siteConfiguration);
25
- const [isLoading, setIsLoading] = useState(!siteConfiguration); // If config provided, not loading
26
- const [error, setError] = useState(null);
27
-
28
- useEffect(() => {
29
- const fetchSiteConfig = async () => {
30
- try {
31
- setClientAuthKey(clientToken);
32
- const configData = await getMapConfig(clientToken);
33
- setSiteConfig(configData);
34
- } catch (err) {
35
- console.error('Failed to fetch site configuration:', err);
36
- setError(err);
37
- } finally {
38
- setIsLoading(false);
39
- }
40
- };
41
- if(!siteConfig){
42
- fetchSiteConfig();
43
- } else {
44
- setIsLoading(false); // Config already provided
45
- }
46
- }, [clientToken, siteConfig]);
47
-
48
- return { siteConfig, isLoading, error };
49
- }
20
+ // Since all data is now passed in statically, no need to fetch config
50
21
 
51
22
  // Component to handle all context providers
52
23
  const ContextProviders = ({ children, siteConfig, trackEvent, googleMapsApiKey, ...mapListProps }) => { return(
@@ -169,20 +140,19 @@ export const HireControlMap = ({
169
140
  }
170
141
  }
171
142
  }) => {
172
- // Load site configuration (non-blocking)
173
- const { siteConfig, isLoading: isConfigLoading, error } = useSiteConfig(clientToken, siteConfiguration);
174
-
175
- // Initialize Algolia immediately if credentials are provided
176
- const [algoliaInitialized, setAlgoliaInitialized] = useState(() => {
177
- if (algoliaAppId && algoliaApiKey && algoliaIndexName) {
178
- const initialized = initializeAlgoliaSearch(algoliaAppId, algoliaApiKey, algoliaIndexName);
179
- if (initialized) {
180
- console.log('Algolia search initialized successfully');
181
- }
182
- return initialized;
143
+ // Initialize Algolia when credentials are provided (client-side only)
144
+ const [algoliaInitialized, setAlgoliaInitialized] = useState(false);
145
+
146
+ useEffect(() => {
147
+ if (algoliaAppId && algoliaApiKey && algoliaIndexName && typeof window !== 'undefined') {
148
+ initializeAlgoliaSearch(algoliaAppId, algoliaApiKey, algoliaIndexName).then(initialized => {
149
+ setAlgoliaInitialized(initialized);
150
+ if (initialized) {
151
+ console.log('Algolia search initialized successfully');
152
+ }
153
+ });
183
154
  }
184
- return false;
185
- });
155
+ }, [algoliaAppId, algoliaApiKey, algoliaIndexName]);
186
156
 
187
157
  // Load Google Maps (non-blocking - map component will handle this)
188
158
  const { isLoaded: isMapsLoaded, loadError } = useLoadScript({
@@ -202,13 +172,10 @@ export const HireControlMap = ({
202
172
  return <div className="hc-p-4">Error loading Google Maps</div>;
203
173
  }
204
174
 
205
- if (error) {
206
- return <div className="hc-p-4">Error loading configuration</div>;
207
- }
208
-
209
- // Render immediately even if config is loading - use defaults or provided siteConfiguration
210
- if (!siteConfig) {
211
- return null; // Brief flash, config should load very quickly
175
+ // siteConfiguration is now required - all data passed in statically
176
+ if (!siteConfiguration) {
177
+ console.error('Site configuration is required');
178
+ return <div className="hc-p-4">Site configuration is required</div>;
212
179
  }
213
180
 
214
181
  // Prepare props for MapListProvider
@@ -222,7 +189,7 @@ export const HireControlMap = ({
222
189
  easyApplyText,
223
190
  listings,
224
191
  entities,
225
- siteConfig,
192
+ siteConfig: siteConfiguration,
226
193
  getListingEntitiesCallback,
227
194
  setFiltersUrl,
228
195
  hiddenFilters,
@@ -241,17 +208,17 @@ export const HireControlMap = ({
241
208
  };
242
209
 
243
210
  // Calculate effective showMap value
244
- const effectiveShowMap = hideMap ? false : siteConfig.showMap;
211
+ const effectiveShowMap = hideMap ? false : siteConfiguration.showMap;
245
212
 
246
213
  // Prepare marker configuration
247
214
  const markerConfigs = {
248
- fillColor: siteConfig.colors.primary,
249
- strokeColor: siteConfig.colors.primaryDark,
250
- selectedFillColor: siteConfig.colors.secondary,
251
- selectedStrokeColor: siteConfig.colors.secondaryDark,
215
+ fillColor: siteConfiguration.colors.primary,
216
+ strokeColor: siteConfiguration.colors.primaryDark,
217
+ selectedFillColor: siteConfiguration.colors.secondary,
218
+ selectedStrokeColor: siteConfiguration.colors.secondaryDark,
252
219
  placeMarkers: {
253
- colors: siteConfig.pointsOfInterestConfig.placeMarkerColors,
254
- size: siteConfig.pointsOfInterestConfig.placeMarkerSize
220
+ colors: siteConfiguration.pointsOfInterestConfig.placeMarkerColors,
221
+ size: siteConfiguration.pointsOfInterestConfig.placeMarkerSize
255
222
  }
256
223
  };
257
224
 
@@ -259,7 +226,7 @@ export const HireControlMap = ({
259
226
  // Only Google Maps components will wait for isMapsLoaded
260
227
  return (
261
228
  <ContextProviders
262
- siteConfig={siteConfig}
229
+ siteConfig={siteConfiguration}
263
230
  trackEvent={trackEvent}
264
231
  googleMapsApiKey={googleMapsApiKey || process.env.GOOGLE_MAPS_API_KEY}
265
232
  {...mapListProps}
@@ -279,12 +246,12 @@ export const HireControlMap = ({
279
246
  )}
280
247
  <MapList
281
248
  containerStyle={containerStyle}
282
- mapPosition={siteConfig.mapPosition}
249
+ mapPosition={siteConfiguration.mapPosition}
283
250
  showMap={effectiveShowMap}
284
- fieldsShown={siteConfig.fieldsShown}
285
- specialFeatures={siteConfig.specialFeatures}
286
- fieldNames={siteConfig.fieldNames}
287
- placeMappings={siteConfig.pointsOfInterestConfig.placeMappings ?? {}}
251
+ fieldsShown={siteConfiguration.fieldsShown}
252
+ specialFeatures={siteConfiguration.specialFeatures}
253
+ fieldNames={siteConfiguration.fieldNames}
254
+ placeMappings={siteConfiguration.pointsOfInterestConfig.placeMappings ?? {}}
288
255
  markerConfigs={markerConfigs}
289
256
  />
290
257
  </Grid>
@@ -4,9 +4,6 @@ import { generateFilterOptions, applyFilters, filterListingsByLocation } from '~
4
4
  import { getStorageObject, setStorageObject } from '~/util/localStorageUtil';
5
5
  import { updateURLWithFilters, filtersFromURL } from '~/util/urlFilterUtil';
6
6
 
7
- import { getListingEntities } from "~/services/listingEntityService";
8
- import fetchListings from '~/services/listingAggregatorService';
9
-
10
7
  import { Listing } from '~/types/Listings';
11
8
  import { ListingEntity } from '~/types/ListingEntity';
12
9
  import { Recruiter } from '~/types/Recruiter';
@@ -273,12 +270,12 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
273
270
 
274
271
  async function fetchEntities() {
275
272
  try {
276
- let fetchedEntities;
277
- if (getListingEntitiesCallback) {
278
- fetchedEntities = await getListingEntitiesCallback(`${commuteLocation.lat}, ${commuteLocation.lng}`);
279
- } else {
280
- fetchedEntities = await getListingEntities(`${commuteLocation.lat}, ${commuteLocation.lng}`);
273
+ // Only fetch if callback is provided
274
+ if (!getListingEntitiesCallback) {
275
+ return;
281
276
  }
277
+
278
+ const fetchedEntities = await getListingEntitiesCallback(`${commuteLocation.lat}, ${commuteLocation.lng}`);
282
279
  setListingEntities(fetchedEntities);
283
280
  // Update travelTime on listings
284
281
  const newFilteredListings: Listing[] = [...filteredListings];
@@ -306,42 +303,42 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
306
303
  fetchEntities();
307
304
  }, [commuteLocation, allListings, siteConfig.companyId, getListingEntitiesCallback, noEntities]);
308
305
 
306
+ // Set listings from passed-in data
309
307
  useEffect(() => {
310
- const handleFetchListings = async () => {
311
- if (!(getStorageObject(localStorageKey + 'listings', []) || []).length) {
312
- setLoading(true);
308
+ if (!listings || listings.length === 0) {
309
+ setLoading(false);
310
+ return;
313
311
  }
314
312
 
313
+ setLoading(true);
314
+
315
315
  try {
316
- const {
317
- listingsResult,
318
- entitiesByKey,
319
- distinctItems
320
- } = await fetchListings(commuteLocation, entities, listings, getListingEntitiesCallback, noEntities);
316
+ // Apply default filters if provided
317
+ let processedListings = listings;
321
318
  if (defaultFilters) {
322
- const filteredListings = listingsResult.filter(listing => {
323
- if (!listing.fields) return false;
324
-
325
- return Object.keys(defaultFilters).every(filterKey => {
326
- const filterValues = defaultFilters[filterKey as keyof typeof defaultFilters];
327
- const listingValue = listing.fields ? listing.fields[filterKey as keyof typeof listing.fields] : null;
328
- return filterValues.includes(listingValue);
319
+ processedListings = listings.filter(listing => {
320
+ if (!listing.fields) return false;
321
+
322
+ return Object.keys(defaultFilters).every(filterKey => {
323
+ const filterValues = defaultFilters[filterKey as keyof typeof defaultFilters];
324
+ const listingValue = listing.fields ? listing.fields[filterKey as keyof typeof listing.fields] : null;
325
+ return filterValues.includes(listingValue);
326
+ });
329
327
  });
330
- });
331
- setAllListings(filteredListings);
332
- } else {
333
- setAllListings(listingsResult);
334
- }
335
- console.log('handleFetchListings: Set allListings to', listingsResult.length, 'items');
336
- setListingEntities(entitiesByKey);
337
- setMapItems(distinctItems);
338
- } catch (error) {
339
- console.log(error);
340
328
  }
341
- setLoading(false);
342
- };
343
- handleFetchListings();
344
- }, [siteConfig, commuteLocation]);
329
+
330
+ setAllListings(processedListings);
331
+ console.log('Set allListings to', processedListings.length, 'items');
332
+
333
+ // Map items will be set when entities are processed
334
+ // For now, just set empty object - will be populated when entities arrive
335
+ setMapItems({});
336
+ } catch (error) {
337
+ console.error('Error processing listings:', error);
338
+ }
339
+
340
+ setLoading(false);
341
+ }, [listings, defaultFilters]);
345
342
 
346
343
  useEffect(() => {
347
344
  const processListings = async () => {
package/src/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  import HireControlMap from '~/components/HireControlMap';
2
+ import '~/styles/index.css';
2
3
 
3
4
  export { HireControlMap };
@@ -1,7 +1,18 @@
1
- import { liteClient as algoliasearch } from 'algoliasearch/lite';
2
-
3
1
  let algoliaClient = null;
4
2
  let algoliaIndexName = null;
3
+ let algoliaSearchModule = null;
4
+
5
+ /**
6
+ * Lazy load algoliasearch to avoid SSR issues
7
+ */
8
+ const getAlgoliaSearch = async () => {
9
+ if (typeof window === 'undefined') return null;
10
+ if (!algoliaSearchModule) {
11
+ const { liteClient } = await import('algoliasearch/lite');
12
+ algoliaSearchModule = liteClient;
13
+ }
14
+ return algoliaSearchModule;
15
+ };
5
16
 
6
17
  /**
7
18
  * Initialize Algolia search client
@@ -9,13 +20,18 @@ let algoliaIndexName = null;
9
20
  * @param {string} apiKey - Algolia Search API Key
10
21
  * @param {string} indexName - Algolia Index Name
11
22
  */
12
- export const initializeAlgoliaSearch = (appId, apiKey, indexName) => {
23
+ export const initializeAlgoliaSearch = async (appId, apiKey, indexName) => {
13
24
  if (!appId || !apiKey || !indexName) {
14
25
  console.warn('Algolia search not initialized: missing configuration');
15
26
  return false;
16
27
  }
17
28
 
18
29
  try {
30
+ const algoliasearch = await getAlgoliaSearch();
31
+ if (!algoliasearch) {
32
+ console.warn('Algolia search not available (SSR context)');
33
+ return false;
34
+ }
19
35
  algoliaClient = algoliasearch(appId, apiKey);
20
36
  algoliaIndexName = indexName;
21
37
  return true;
@@ -1,91 +0,0 @@
1
- import { getClientAuthKey } from '../clientToken.js';
2
-
3
- const baseURL = "https://qat-api.myhirecontrol.com";
4
- const memoryStorage = {
5
- authToken: null,
6
- tokenExpiration: null
7
- };
8
- function setStorage(key, value) {
9
- try {
10
- sessionStorage.setItem(key, value);
11
- }
12
- catch (error) {
13
- memoryStorage[key] = value;
14
- }
15
- }
16
- function getStorage(key) {
17
- try {
18
- return sessionStorage.getItem(key) || memoryStorage[key];
19
- }
20
- catch (error) {
21
- return memoryStorage[key];
22
- }
23
- }
24
- const login = async () => {
25
- const clientAuthKey = getClientAuthKey();
26
- try {
27
- const response = await fetch(`${baseURL}/auth/login`, {
28
- method: 'POST',
29
- headers: {
30
- 'Content-Type': 'application/json'
31
- },
32
- body: JSON.stringify({
33
- clientAuthKey: clientAuthKey
34
- })
35
- });
36
- if (!response.ok) {
37
- throw new Error('Login failed');
38
- }
39
- const data = await response.json();
40
- if (data.token && data.expiration) {
41
- setStorage('authToken', data.token);
42
- setStorage('tokenExpiration', data.expiration);
43
- return { token: data.token, expiration: data.expiration };
44
- }
45
- else {
46
- throw new Error('Invalid login response');
47
- }
48
- }
49
- catch (error) {
50
- console.error('Login failed:', error);
51
- throw error;
52
- }
53
- };
54
- const fetchWithAuth = async (url, options = {}) => {
55
- let token = getStorage('authToken');
56
- const expirationDateTime = getStorage('tokenExpiration');
57
- const currentTime = new Date();
58
- if (!token || !expirationDateTime || new Date(expirationDateTime) <= currentTime) {
59
- const authResponse = await login();
60
- token = authResponse.token;
61
- }
62
- const headers = new Headers(options.headers || {});
63
- headers.append('Authorization', `Bearer ${token}`);
64
- const finalOptions = {
65
- ...options,
66
- headers
67
- };
68
- const response = await fetch(`${baseURL}${url}`, finalOptions);
69
- if (!response.ok)
70
- throw new Error('Network response was not ok.');
71
- return response;
72
- };
73
- var api = {
74
- get: async (url) => {
75
- const response = await fetchWithAuth(url);
76
- return await response.json();
77
- },
78
- post: async (url, data) => {
79
- const response = await fetchWithAuth(url, {
80
- method: 'POST',
81
- headers: {
82
- 'Content-Type': 'application/json'
83
- },
84
- body: JSON.stringify(data)
85
- });
86
- return await response.json();
87
- }
88
- };
89
-
90
- export { api as default };
91
- //# sourceMappingURL=hcApi.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hcApi.js","sources":["../../src/apis/hcApi.ts"],"sourcesContent":["import { getClientAuthKey } from '~/clientToken';\nconst baseURL = process.env.HC_API_BASE_URL as string;\n\ninterface MemoryStorage {\n\tauthToken: string | null;\n\ttokenExpiration: string | null;\n}\n\nconst memoryStorage: MemoryStorage = {\n\tauthToken: null,\n\ttokenExpiration: null\n};\n\nfunction setStorage(key: keyof MemoryStorage, value: string): void {\n\ttry {\n\t\tsessionStorage.setItem(key, value);\n\t} catch (error) {\n\t\tmemoryStorage[key] = value;\n\t}\n}\n\nfunction getStorage(key: keyof MemoryStorage): string | null {\n\ttry {\n\t\treturn sessionStorage.getItem(key) || memoryStorage[key];\n\t} catch (error) {\n\t\treturn memoryStorage[key];\n\t}\n}\n\ninterface AuthResponse {\n\ttoken: string;\n\texpiration: string;\n}\n\nconst login = async (): Promise<AuthResponse> => {\n\tconst clientAuthKey = getClientAuthKey();\n\n\ttry {\n\t\tconst response = await fetch(`${baseURL}/auth/login`, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json'\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tclientAuthKey: clientAuthKey\n\t\t\t})\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error('Login failed');\n\t\t}\n\n\t\tconst data = await response.json();\n\n\t\tif (data.token && data.expiration) {\n\t\t\tsetStorage('authToken', data.token);\n\t\t\tsetStorage('tokenExpiration', data.expiration);\n\t\t\treturn { token: data.token, expiration: data.expiration };\n\t\t} else {\n\t\t\tthrow new Error('Invalid login response');\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Login failed:', error);\n\t\tthrow error;\n\t}\n};\n\nconst fetchWithAuth = async (url: string, options: RequestInit = {}): Promise<Response> => {\n\tlet token = getStorage('authToken');\n\n\tconst expirationDateTime = getStorage('tokenExpiration');\n\tconst currentTime = new Date();\n\n\tif (!token || !expirationDateTime || new Date(expirationDateTime) <= currentTime) {\n\t\tconst authResponse = await login();\n\t\ttoken = authResponse.token;\n\t}\n\n\tconst headers = new Headers(options.headers || {});\n\theaders.append('Authorization', `Bearer ${token}`);\n\n\tconst finalOptions = {\n\t\t...options,\n\t\theaders\n\t};\n\n\tconst response = await fetch(`${baseURL}${url}`, finalOptions);\n\n\tif (!response.ok) throw new Error('Network response was not ok.');\n\n\treturn response;\n};\n\nexport default {\n\tget: async <T>(url: string): Promise<T> => {\n\t\tconst response = await fetchWithAuth(url);\n\t\treturn await response.json() as T;\n\t},\n\tpost: async <T>(url: string, data: any): Promise<T> => {\n\t\tconst response = await fetchWithAuth(url, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json'\n\t\t\t},\n\t\t\tbody: JSON.stringify(data)\n\t\t});\n\t\treturn await response.json() as T;\n\t}\n};\n"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- var clientAuthKey = null;
2
- var setClientAuthKey = function setClientAuthKey(key) {
3
- clientAuthKey = key;
4
- };
5
- var getClientAuthKey = function getClientAuthKey() {
6
- return clientAuthKey;
7
- };
8
-
9
- export { getClientAuthKey, setClientAuthKey };
10
- //# sourceMappingURL=clientToken.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clientToken.js","sources":["../src/clientToken.js"],"sourcesContent":["let clientAuthKey = null;\n\nexport const setClientAuthKey = key => {\n\tclientAuthKey = key;\n};\n\nexport const getClientAuthKey = () => {\n\treturn clientAuthKey;\n};\n"],"names":["clientAuthKey","setClientAuthKey","key","getClientAuthKey"],"mappings":"AAAA,IAAIA,aAAa,GAAG,IAAI,CAAA;IAEXC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAGC,GAAG,EAAI;AACtCF,EAAAA,aAAa,GAAGE,GAAG,CAAA;AACpB,EAAC;IAEYC,gBAAgB,GAAG,SAAnBA,gBAAgBA,GAAS;AACrC,EAAA,OAAOH,aAAa,CAAA;AACrB;;;;"}
@@ -1,50 +0,0 @@
1
- import React from 'react';
2
- import Grid from '../grid.js';
3
-
4
- /**
5
- * Simple skeleton component that renders the basic structure
6
- * Shows placeholder boxes for filters, list, and map
7
- */
8
- var MapSkeleton = function MapSkeleton(_ref) {
9
- var _ref$hideFilters = _ref.hideFilters,
10
- hideFilters = _ref$hideFilters === void 0 ? false : _ref$hideFilters,
11
- _ref$showMap = _ref.showMap,
12
- showMap = _ref$showMap === void 0 ? true : _ref$showMap,
13
- _ref$containerStyle = _ref.containerStyle,
14
- containerStyle = _ref$containerStyle === void 0 ? {
15
- height: '100vh'
16
- } : _ref$containerStyle,
17
- _ref$mapPosition = _ref.mapPosition,
18
- mapPosition = _ref$mapPosition === void 0 ? 'right' : _ref$mapPosition;
19
- var isMapOnTop = mapPosition === 'top';
20
- return /*#__PURE__*/React.createElement("div", {
21
- className: "hc-bundle",
22
- style: containerStyle
23
- }, /*#__PURE__*/React.createElement(Grid, {
24
- as: "section",
25
- id: "job-search-interface",
26
- columns: hideFilters ? 'hc-grid-cols-1' : 'md:hc-grid-cols-[1fr_2.5fr] lg:hc-grid-cols-[1fr_3.5fr]',
27
- gap: "hc-gap-0",
28
- autoRows: false,
29
- className: 'hc-items-stretch hc-divide-x hc-divide-uiAccent/20'
30
- }, !hideFilters && /*#__PURE__*/React.createElement(Grid.Item, {
31
- className: "hc-bg-gray-50 hc-animate-pulse hc-hidden md:hc-block"
32
- }), /*#__PURE__*/React.createElement(Grid.Item, null, showMap ? /*#__PURE__*/React.createElement("div", {
33
- className: "hc-h-full hc-flex ".concat(isMapOnTop ? 'hc-flex-col' : 'hc-flex-col md:hc-flex-row')
34
- }, /*#__PURE__*/React.createElement("div", {
35
- className: "hc-flex-1 hc-bg-white hc-animate-pulse ".concat(isMapOnTop ? 'hc-order-2' : 'hc-order-2 md:hc-order-1')
36
- }), /*#__PURE__*/React.createElement("div", {
37
- className: "hc-flex-1 hc-bg-gray-100 hc-animate-pulse ".concat(isMapOnTop ? 'hc-order-1' : 'hc-order-1 md:hc-order-2'),
38
- style: {
39
- minHeight: '300px'
40
- }
41
- })) :
42
- /*#__PURE__*/
43
- /* Just List Box */
44
- React.createElement("div", {
45
- className: "hc-h-full hc-bg-white hc-animate-pulse"
46
- }))));
47
- };
48
-
49
- export { MapSkeleton as default };
50
- //# sourceMappingURL=map-skeleton.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"map-skeleton.js","sources":["../../../../src/components/modules/skeleton/map-skeleton.js"],"sourcesContent":["import React from 'react';\nimport Grid from '~/components/modules/grid';\n\n/**\n * Simple skeleton component that renders the basic structure\n * Shows placeholder boxes for filters, list, and map\n */\nconst MapSkeleton = ({ \n\thideFilters = false, \n\tshowMap = true, \n\tcontainerStyle = { height: '100vh' },\n\tmapPosition = 'right'\n}) => {\n\tconst isMapOnTop = mapPosition === 'top';\n\t\n\treturn (\n\t\t<div className=\"hc-bundle\" style={containerStyle}>\n\t\t\t<Grid\n\t\t\t\tas='section'\n\t\t\t\tid='job-search-interface'\n\t\t\t\tcolumns={hideFilters ? 'hc-grid-cols-1' : 'md:hc-grid-cols-[1fr_2.5fr] lg:hc-grid-cols-[1fr_3.5fr]'}\n\t\t\t\tgap='hc-gap-0'\n\t\t\t\tautoRows={false}\n\t\t\t\tclassName={'hc-items-stretch hc-divide-x hc-divide-uiAccent/20'}\n\t\t\t>\n\t\t\t\t{/* Filter Column */}\n\t\t\t\t{!hideFilters && (\n\t\t\t\t\t<Grid.Item className='hc-bg-gray-50 hc-animate-pulse hc-hidden md:hc-block' />\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t{/* Main Content Area */}\n\t\t\t\t<Grid.Item>\n\t\t\t\t\t{showMap ? (\n\t\t\t\t\t\t<div className={`hc-h-full hc-flex ${isMapOnTop ? 'hc-flex-col' : 'hc-flex-col md:hc-flex-row'}`}>\n\t\t\t\t\t\t\t{/* List Box */}\n\t\t\t\t\t\t\t<div className={`hc-flex-1 hc-bg-white hc-animate-pulse ${isMapOnTop ? 'hc-order-2' : 'hc-order-2 md:hc-order-1'}`} />\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/* Map Box */}\n\t\t\t\t\t\t\t<div className={`hc-flex-1 hc-bg-gray-100 hc-animate-pulse ${isMapOnTop ? 'hc-order-1' : 'hc-order-1 md:hc-order-2'}`} style={{ minHeight: '300px' }} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t/* Just List Box */\n\t\t\t\t\t\t<div className=\"hc-h-full hc-bg-white hc-animate-pulse\" />\n\t\t\t\t\t)}\n\t\t\t\t</Grid.Item>\n\t\t\t</Grid>\n\t\t</div>\n\t);\n};\n\nexport default MapSkeleton;\n"],"names":["MapSkeleton","_ref","_ref$hideFilters","hideFilters","_ref$showMap","showMap","_ref$containerStyle","containerStyle","height","_ref$mapPosition","mapPosition","isMapOnTop","React","createElement","className","style","Grid","as","id","columns","gap","autoRows","Item","concat","minHeight"],"mappings":";;;AAGA;AACA;AACA;AACA;AACA,IAAMA,WAAW,GAAG,SAAdA,WAAWA,CAAAC,IAAA,EAKX;AAAA,EAAA,IAAAC,gBAAA,GAAAD,IAAA,CAJLE,WAAW;AAAXA,IAAAA,WAAW,GAAAD,gBAAA,KAAG,KAAA,CAAA,GAAA,KAAK,GAAAA,gBAAA;IAAAE,YAAA,GAAAH,IAAA,CACnBI,OAAO;AAAPA,IAAAA,OAAO,GAAAD,YAAA,KAAG,KAAA,CAAA,GAAA,IAAI,GAAAA,YAAA;IAAAE,mBAAA,GAAAL,IAAA,CACdM,cAAc;IAAdA,cAAc,GAAAD,mBAAA,KAAG,KAAA,CAAA,GAAA;AAAEE,MAAAA,MAAM,EAAE,OAAA;AAAQ,KAAC,GAAAF,mBAAA;IAAAG,gBAAA,GAAAR,IAAA,CACpCS,WAAW;AAAXA,IAAAA,WAAW,GAAAD,gBAAA,KAAG,KAAA,CAAA,GAAA,OAAO,GAAAA,gBAAA,CAAA;AAErB,EAAA,IAAME,UAAU,GAAGD,WAAW,KAAK,KAAK,CAAA;EAExC,oBACCE,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,WAAW;AAACC,IAAAA,KAAK,EAAER,cAAAA;AAAe,GAAA,eAChDK,KAAA,CAAAC,aAAA,CAACG,IAAI,EAAA;AACJC,IAAAA,EAAE,EAAC,SAAS;AACZC,IAAAA,EAAE,EAAC,sBAAsB;AACzBC,IAAAA,OAAO,EAAEhB,WAAW,GAAG,gBAAgB,GAAG,yDAA0D;AACpGiB,IAAAA,GAAG,EAAC,UAAU;AACdC,IAAAA,QAAQ,EAAE,KAAM;AAChBP,IAAAA,SAAS,EAAE,oDAAA;GAGV,EAAA,CAACX,WAAW,iBACZS,KAAA,CAAAC,aAAA,CAACG,IAAI,CAACM,IAAI,EAAA;AAACR,IAAAA,SAAS,EAAC,sDAAA;AAAsD,GAAE,CAC7E,eAGDF,KAAA,CAAAC,aAAA,CAACG,IAAI,CAACM,IAAI,EACRjB,IAAAA,EAAAA,OAAO,gBACPO,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,uBAAAS,MAAA,CAAuBZ,UAAU,GAAG,aAAa,GAAG,4BAA4B,CAAA;GAE7FC,eAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,4CAAAS,MAAA,CAA4CZ,UAAU,GAAG,YAAY,GAAG,0BAA0B,CAAA;AAAG,GAAE,CAAC,eAGtHC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IAAKC,SAAS,EAAA,4CAAA,CAAAS,MAAA,CAA+CZ,UAAU,GAAG,YAAY,GAAG,0BAA0B,CAAG;AAACI,IAAAA,KAAK,EAAE;AAAES,MAAAA,SAAS,EAAE,OAAA;AAAQ,KAAA;AAAE,GAAE,CACnJ,CAAC;AAAA;AAEN;AACAZ,EAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,wCAAA;GAA0C,CAEhD,CACN,CACF,CAAC,CAAA;AAER;;;;"}