@ogc-maps/storybook-components 0.4.1 → 0.5.0

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 (36) hide show
  1. package/dist/SearchPanel-DCY01Wa-.js +363 -0
  2. package/dist/components/SearchPanel/AutocompleteInput.d.ts +12 -0
  3. package/dist/components/SearchPanel/AutocompleteInput.d.ts.map +1 -0
  4. package/dist/components/SearchPanel/DateRangeInput.d.ts +11 -0
  5. package/dist/components/SearchPanel/DateRangeInput.d.ts.map +1 -0
  6. package/dist/components/SearchPanel/NumberInput.d.ts +11 -0
  7. package/dist/components/SearchPanel/NumberInput.d.ts.map +1 -0
  8. package/dist/components/SearchPanel/SearchPanel.d.ts +7 -3
  9. package/dist/components/SearchPanel/SearchPanel.d.ts.map +1 -1
  10. package/dist/components/SearchPanel/index.js +1 -1
  11. package/dist/cql2-BaKDic7B.js +288 -0
  12. package/dist/hooks/index.d.ts +3 -2
  13. package/dist/hooks/index.d.ts.map +1 -1
  14. package/dist/hooks/index.js +31 -10
  15. package/dist/hooks/useCsvExport.d.ts +2 -1
  16. package/dist/hooks/useCsvExport.d.ts.map +1 -1
  17. package/dist/index-BLgVA46J.js +2854 -0
  18. package/dist/main.js +74 -49
  19. package/dist/schemas/config.d.ts +836 -64
  20. package/dist/schemas/config.d.ts.map +1 -1
  21. package/dist/schemas/index.js +21 -2822
  22. package/dist/style.css +1 -1
  23. package/dist/types/index.d.ts +17 -3
  24. package/dist/types/index.d.ts.map +1 -1
  25. package/dist/types/index.js +20 -16
  26. package/dist/utils/__tests__/cql2.test.d.ts +2 -0
  27. package/dist/utils/__tests__/cql2.test.d.ts.map +1 -0
  28. package/dist/utils/cql2.d.ts +75 -0
  29. package/dist/utils/cql2.d.ts.map +1 -0
  30. package/dist/utils/index.d.ts +1 -0
  31. package/dist/utils/index.d.ts.map +1 -1
  32. package/dist/utils/ogcApi.d.ts +17 -0
  33. package/dist/utils/ogcApi.d.ts.map +1 -1
  34. package/package.json +4 -2
  35. package/dist/SearchPanel-B5GPX1gF.js +0 -106
  36. package/dist/useCsvExport-C4WAm7kG.js +0 -146
@@ -0,0 +1,363 @@
1
+ import { jsxs as h, jsx as m } from "react/jsx-runtime";
2
+ import { useState as j, useRef as L, useId as D, useMemo as S, useCallback as A, useEffect as I } from "react";
3
+ function V({
4
+ value: e,
5
+ onChange: t,
6
+ suggestions: u,
7
+ onQueryChange: d,
8
+ placeholder: N = "",
9
+ className: l = "",
10
+ id: y
11
+ }) {
12
+ const [f, c] = j(!1), [p, o] = j(-1), g = L(null), i = D(), r = p >= 0 ? `${i}-option-${p}` : void 0, v = S(
13
+ () => u.filter((n) => n.toLowerCase().includes(e.toLowerCase())),
14
+ [u, e]
15
+ ), b = f && v.length > 0, a = A(
16
+ (n) => {
17
+ t(n), d == null || d(n), c(!1), o(-1);
18
+ },
19
+ [t, d]
20
+ ), x = (n) => {
21
+ const s = n.target.value;
22
+ t(s), d == null || d(s), c(!0), o(-1);
23
+ }, w = (n) => {
24
+ b && (n.key === "ArrowDown" ? (n.preventDefault(), o((s) => Math.min(s + 1, v.length - 1))) : n.key === "ArrowUp" ? (n.preventDefault(), o((s) => Math.max(s - 1, 0))) : n.key === "Enter" && p >= 0 ? (n.preventDefault(), a(v[p])) : n.key === "Escape" && (c(!1), o(-1)));
25
+ };
26
+ return I(() => {
27
+ const n = (s) => {
28
+ g.current && !g.current.contains(s.target) && (c(!1), o(-1));
29
+ };
30
+ return document.addEventListener("mousedown", n), () => document.removeEventListener("mousedown", n);
31
+ }, []), /* @__PURE__ */ h("div", { ref: g, className: `mapui:relative ${l}`.trim(), children: [
32
+ /* @__PURE__ */ m(
33
+ "input",
34
+ {
35
+ id: y,
36
+ type: "text",
37
+ value: e,
38
+ placeholder: N,
39
+ role: "combobox",
40
+ "aria-expanded": b,
41
+ "aria-autocomplete": "list",
42
+ "aria-controls": i,
43
+ "aria-activedescendant": r,
44
+ onChange: x,
45
+ onFocus: () => c(!0),
46
+ onKeyDown: w,
47
+ className: "mapui:w-full mapui:rounded mapui:border mapui:border-gray-300 mapui:px-2 mapui:py-1 mapui:text-sm mapui:outline-none focus:mapui:border-blue-500 focus:mapui:ring-1 focus:mapui:ring-blue-500"
48
+ }
49
+ ),
50
+ b && /* @__PURE__ */ m(
51
+ "ul",
52
+ {
53
+ id: i,
54
+ role: "listbox",
55
+ className: "mapui:absolute mapui:z-10 mapui:mt-1 mapui:w-full mapui:rounded mapui:border mapui:border-gray-200 mapui:bg-white mapui:shadow-lg mapui:max-h-48 mapui:overflow-y-auto mapui:p-0 mapui:m-0 mapui:list-none",
56
+ children: v.map((n, s) => /* @__PURE__ */ m(
57
+ "li",
58
+ {
59
+ id: `${i}-option-${s}`,
60
+ role: "option",
61
+ "aria-selected": s === p,
62
+ onMouseDown: (E) => {
63
+ E.preventDefault(), a(n);
64
+ },
65
+ className: `mapui:cursor-pointer mapui:px-2 mapui:py-1 mapui:text-sm ${s === p ? "mapui:bg-blue-100" : "hover:mapui:bg-gray-50"}`,
66
+ children: n
67
+ },
68
+ `${s}-${n}`
69
+ ))
70
+ }
71
+ )
72
+ ] });
73
+ }
74
+ function R({
75
+ startValue: e,
76
+ endValue: t,
77
+ onStartChange: u,
78
+ onEndChange: d,
79
+ className: N = "",
80
+ id: l
81
+ }) {
82
+ const y = D(), f = l ?? y, c = `${f}-start`, p = `${f}-end`, o = "mapui:flex-1 mapui:rounded mapui:border mapui:border-gray-300 mapui:px-2 mapui:py-1 mapui:text-sm mapui:outline-none focus:mapui:border-blue-500 focus:mapui:ring-1 focus:mapui:ring-blue-500";
83
+ return /* @__PURE__ */ h("div", { className: `mapui:flex mapui:flex-col mapui:gap-1 ${N}`.trim(), children: [
84
+ /* @__PURE__ */ h("div", { className: "mapui:flex mapui:items-center mapui:gap-2", children: [
85
+ /* @__PURE__ */ m("label", { htmlFor: c, className: "mapui:text-xs mapui:text-gray-400 mapui:w-8", children: "From" }),
86
+ /* @__PURE__ */ m(
87
+ "input",
88
+ {
89
+ id: c,
90
+ type: "datetime-local",
91
+ value: e,
92
+ onChange: (g) => u(g.target.value),
93
+ "aria-label": "Start date",
94
+ className: o
95
+ }
96
+ )
97
+ ] }),
98
+ /* @__PURE__ */ h("div", { className: "mapui:flex mapui:items-center mapui:gap-2", children: [
99
+ /* @__PURE__ */ m("label", { htmlFor: p, className: "mapui:text-xs mapui:text-gray-400 mapui:w-8", children: "To" }),
100
+ /* @__PURE__ */ m(
101
+ "input",
102
+ {
103
+ id: p,
104
+ type: "datetime-local",
105
+ value: t,
106
+ onChange: (g) => d(g.target.value),
107
+ "aria-label": "End date",
108
+ className: o
109
+ }
110
+ )
111
+ ] })
112
+ ] });
113
+ }
114
+ const k = {
115
+ eq: "=",
116
+ gt: ">",
117
+ lt: "<",
118
+ gte: ">=",
119
+ lte: "<=",
120
+ between: "between"
121
+ }, M = ["eq", "gt", "lt", "gte", "lte", "between"];
122
+ function O(e, t) {
123
+ if (e && typeof e == "object") {
124
+ if ("operator" in e) return e.operator;
125
+ if ("min" in e) return "between";
126
+ }
127
+ return t;
128
+ }
129
+ const $ = "mapui:rounded mapui:border mapui:border-gray-300 mapui:px-2 mapui:py-1 mapui:text-sm mapui:outline-none focus:mapui:border-blue-500 focus:mapui:ring-1 focus:mapui:ring-blue-500", K = "mapui:rounded mapui:border mapui:border-gray-300 mapui:px-2 mapui:py-1 mapui:text-sm mapui:outline-none focus:mapui:border-blue-500 focus:mapui:ring-1 focus:mapui:ring-blue-500 mapui:bg-white";
130
+ function P({ field: e, value: t, onChange: u, className: d = "", id: N }) {
131
+ const [l, y] = j(
132
+ () => O(t, e.operator)
133
+ );
134
+ I(() => {
135
+ y(O(t, e.operator));
136
+ }, [t, e.operator]);
137
+ const f = l === "between", c = e.inputMode === "slider" ? M.filter((a) => a !== "between") : M, p = (a) => {
138
+ if (y(a), a === "between")
139
+ u(void 0);
140
+ else if (f)
141
+ u(void 0);
142
+ else if (t && typeof t == "object" && "value" in t) {
143
+ const x = t.value;
144
+ u({ value: x, operator: a });
145
+ }
146
+ }, o = (a) => {
147
+ u(a === "" ? void 0 : { value: Number(a), operator: l });
148
+ }, g = (a) => {
149
+ const x = t && typeof t == "object" && "max" in t ? t.max : void 0;
150
+ u(a === "" ? x === void 0 ? void 0 : { min: e.min ?? 0, max: x } : { min: Number(a), max: x ?? e.max ?? 0 });
151
+ }, i = (a) => {
152
+ const x = t && typeof t == "object" && "min" in t ? t.min : void 0;
153
+ u(a === "" ? x === void 0 ? void 0 : { min: x, max: e.max ?? 0 } : { min: x ?? e.min ?? 0, max: Number(a) });
154
+ }, r = t && typeof t == "object" && "value" in t ? String(t.value) : "", v = t && typeof t == "object" && "min" in t ? String(t.min) : "", b = t && typeof t == "object" && "max" in t ? String(t.max) : "";
155
+ return /* @__PURE__ */ h("div", { className: `mapui:flex mapui:flex-col mapui:gap-1 ${d}`.trim(), children: [
156
+ /* @__PURE__ */ m(
157
+ "select",
158
+ {
159
+ value: l,
160
+ onChange: (a) => p(a.target.value),
161
+ "aria-label": `${e.label} operator`,
162
+ className: K,
163
+ children: c.map((a) => /* @__PURE__ */ m("option", { value: a, children: k[a] }, a))
164
+ }
165
+ ),
166
+ f ? (
167
+ /* Between: min + max inputs */
168
+ /* @__PURE__ */ h("div", { className: "mapui:flex mapui:gap-2", children: [
169
+ /* @__PURE__ */ m(
170
+ "input",
171
+ {
172
+ type: "number",
173
+ value: v,
174
+ placeholder: e.min !== void 0 ? String(e.min) : "Min",
175
+ min: e.min,
176
+ max: e.max,
177
+ step: e.step,
178
+ onChange: (a) => g(a.target.value),
179
+ "aria-label": `${e.label} minimum`,
180
+ className: `${$} mapui:w-1/2`
181
+ }
182
+ ),
183
+ /* @__PURE__ */ m(
184
+ "input",
185
+ {
186
+ type: "number",
187
+ value: b,
188
+ placeholder: e.max !== void 0 ? String(e.max) : "Max",
189
+ min: e.min,
190
+ max: e.max,
191
+ step: e.step,
192
+ onChange: (a) => i(a.target.value),
193
+ "aria-label": `${e.label} maximum`,
194
+ className: `${$} mapui:w-1/2`
195
+ }
196
+ )
197
+ ] })
198
+ ) : e.inputMode === "slider" ? (
199
+ /* Slider */
200
+ /* @__PURE__ */ h("div", { className: "mapui:flex mapui:items-center mapui:gap-2", children: [
201
+ /* @__PURE__ */ m(
202
+ "input",
203
+ {
204
+ type: "range",
205
+ value: r !== "" ? r : e.min ?? 0,
206
+ min: e.min ?? 0,
207
+ max: e.max ?? 100,
208
+ step: e.step ?? 1,
209
+ onChange: (a) => o(a.target.value),
210
+ "aria-label": e.label,
211
+ className: "mapui:flex-1"
212
+ }
213
+ ),
214
+ /* @__PURE__ */ m("span", { className: "mapui:text-xs mapui:text-gray-600 mapui:min-w-12 mapui:whitespace-nowrap mapui:text-right", children: r !== "" ? r : e.min ?? 0 })
215
+ ] })
216
+ ) : (
217
+ /* Number input */
218
+ /* @__PURE__ */ m(
219
+ "input",
220
+ {
221
+ id: N,
222
+ type: "number",
223
+ value: r,
224
+ placeholder: e.placeholder ?? "",
225
+ min: e.min,
226
+ max: e.max,
227
+ step: e.step,
228
+ onChange: (a) => o(a.target.value),
229
+ className: $
230
+ }
231
+ )
232
+ )
233
+ ] });
234
+ }
235
+ function q(e) {
236
+ return e === void 0 || e === "" || e === null ? !1 : typeof e == "object" && "start" in e && "end" in e ? e.start !== "" || e.end !== "" : !0;
237
+ }
238
+ function _({
239
+ layers: e,
240
+ activeFilters: t,
241
+ onFilterChange: u,
242
+ onClearFilters: d,
243
+ autocompleteSuggestions: N = {},
244
+ onFetchSuggestions: l,
245
+ className: y = "",
246
+ hideTitle: f
247
+ }) {
248
+ const c = S(
249
+ () => e.filter((p) => {
250
+ var o;
251
+ return (o = p.search) == null ? void 0 : o.fields.length;
252
+ }),
253
+ [e]
254
+ );
255
+ return I(() => {
256
+ if (l)
257
+ for (const p of c)
258
+ for (const o of p.search.fields)
259
+ o.type === "select" && o.prefetch && l(p.id, o.property, "", { prefetch: !0 });
260
+ }, [c, l]), c.length === 0 ? /* @__PURE__ */ h("div", { className: `mapui:flex mapui:flex-col mapui:gap-1 ${y}`.trim(), children: [
261
+ !f && /* @__PURE__ */ m("h3", { className: "mapui:m-0 mapui:mb-2 mapui:text-sm mapui:font-semibold mapui:text-gray-700", children: "Search & Filter" }),
262
+ /* @__PURE__ */ m("p", { className: "mapui:m-0 mapui:text-xs mapui:text-gray-500", children: "No searchable layers configured." })
263
+ ] }) : /* @__PURE__ */ h("div", { className: `mapui:flex mapui:flex-col mapui:gap-3 ${y}`.trim(), children: [
264
+ !f && /* @__PURE__ */ m("h3", { className: "mapui:m-0 mapui:mb-2 mapui:text-sm mapui:font-semibold mapui:text-gray-700", children: "Search & Filter" }),
265
+ c.map((p) => {
266
+ const o = t[p.id] ?? {}, g = Object.values(o).some(q);
267
+ return /* @__PURE__ */ h("div", { className: "mapui:flex mapui:flex-col mapui:gap-2 mapui:border-b mapui:border-gray-100 mapui:pb-2 last:mapui:border-0", children: [
268
+ /* @__PURE__ */ h("div", { className: "mapui:flex mapui:items-center mapui:justify-between", children: [
269
+ /* @__PURE__ */ m("span", { className: "mapui:text-xs mapui:font-medium mapui:text-gray-600", children: p.label }),
270
+ g && /* @__PURE__ */ m(
271
+ "button",
272
+ {
273
+ type: "button",
274
+ onClick: () => d(p.id),
275
+ className: "mapui:cursor-pointer mapui:border-none mapui:bg-transparent mapui:p-0 mapui:text-xs mapui:text-blue-600 hover:mapui:text-blue-800",
276
+ children: "Clear"
277
+ }
278
+ )
279
+ ] }),
280
+ p.search.fields.map((i) => {
281
+ const r = o[i.property], v = `${p.id}:${i.property}`, b = `search-${p.id}-${i.property}`;
282
+ return /* @__PURE__ */ h("div", { className: "mapui:flex mapui:flex-col mapui:gap-0.5", children: [
283
+ /* @__PURE__ */ m("label", { htmlFor: b, className: "mapui:text-xs mapui:text-gray-500", children: i.label }),
284
+ i.type === "text" && i.autocomplete ? /* @__PURE__ */ m(
285
+ V,
286
+ {
287
+ id: b,
288
+ value: r ?? "",
289
+ onChange: (a) => u(p.id, i.property, a || void 0),
290
+ suggestions: [.../* @__PURE__ */ new Set([
291
+ ...N[v] ?? [],
292
+ ...i.options ?? []
293
+ ])],
294
+ onQueryChange: (a) => l == null ? void 0 : l(p.id, i.property, a, { prefetch: i.prefetch }),
295
+ placeholder: i.placeholder ?? ""
296
+ }
297
+ ) : i.type === "text" ? /* @__PURE__ */ m(
298
+ "input",
299
+ {
300
+ id: b,
301
+ type: "text",
302
+ value: r ?? "",
303
+ placeholder: i.placeholder ?? "",
304
+ onChange: (a) => u(p.id, i.property, a.target.value || void 0),
305
+ className: "mapui:rounded mapui:border mapui:border-gray-300 mapui:px-2 mapui:py-1 mapui:text-sm mapui:outline-none focus:mapui:border-blue-500 focus:mapui:ring-1 focus:mapui:ring-blue-500"
306
+ }
307
+ ) : i.type === "datetime" && i.range ? /* @__PURE__ */ m(
308
+ R,
309
+ {
310
+ id: b,
311
+ startValue: r && typeof r == "object" && "start" in r ? r.start : "",
312
+ endValue: r && typeof r == "object" && "end" in r ? r.end : "",
313
+ onStartChange: (a) => u(p.id, i.property, {
314
+ start: a,
315
+ end: r && typeof r == "object" && "end" in r ? r.end : ""
316
+ }),
317
+ onEndChange: (a) => u(p.id, i.property, {
318
+ start: r && typeof r == "object" && "start" in r ? r.start : "",
319
+ end: a
320
+ })
321
+ }
322
+ ) : i.type === "datetime" ? /* @__PURE__ */ m(
323
+ "input",
324
+ {
325
+ id: b,
326
+ type: "datetime-local",
327
+ value: r ?? "",
328
+ onChange: (a) => u(p.id, i.property, a.target.value || void 0),
329
+ className: "mapui:rounded mapui:border mapui:border-gray-300 mapui:px-2 mapui:py-1 mapui:text-sm mapui:outline-none focus:mapui:border-blue-500 focus:mapui:ring-1 focus:mapui:ring-blue-500"
330
+ }
331
+ ) : i.type === "number" ? /* @__PURE__ */ m(
332
+ P,
333
+ {
334
+ id: b,
335
+ field: i,
336
+ value: r,
337
+ onChange: (a) => u(p.id, i.property, a)
338
+ }
339
+ ) : i.type === "select" ? (() => {
340
+ const a = i, x = N[v] ?? [], w = a.options ?? [], n = [.../* @__PURE__ */ new Set([...x, ...w])];
341
+ return /* @__PURE__ */ h(
342
+ "select",
343
+ {
344
+ id: b,
345
+ value: r ?? "",
346
+ onChange: (s) => u(p.id, i.property, s.target.value || void 0),
347
+ className: "mapui:rounded mapui:border mapui:border-gray-300 mapui:px-2 mapui:py-1 mapui:text-sm mapui:outline-none focus:mapui:border-blue-500 focus:mapui:ring-1 focus:mapui:ring-blue-500",
348
+ children: [
349
+ /* @__PURE__ */ m("option", { value: "", children: i.placeholder ?? "Select..." }),
350
+ n.map((s) => /* @__PURE__ */ m("option", { value: s, children: s }, s))
351
+ ]
352
+ }
353
+ );
354
+ })() : null
355
+ ] }, i.property);
356
+ })
357
+ ] }, p.id);
358
+ })
359
+ ] });
360
+ }
361
+ export {
362
+ _ as S
363
+ };
@@ -0,0 +1,12 @@
1
+ interface AutocompleteInputProps {
2
+ value: string;
3
+ onChange: (value: string) => void;
4
+ suggestions: string[];
5
+ onQueryChange?: (query: string) => void;
6
+ placeholder?: string;
7
+ className?: string;
8
+ id?: string;
9
+ }
10
+ export declare function AutocompleteInput({ value, onChange, suggestions, onQueryChange, placeholder, className, id, }: AutocompleteInputProps): import("react/jsx-runtime").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=AutocompleteInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutocompleteInput.d.ts","sourceRoot":"","sources":["../../../src/components/SearchPanel/AutocompleteInput.tsx"],"names":[],"mappings":"AAEA,UAAU,sBAAsB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,QAAQ,EACR,WAAW,EACX,aAAa,EACb,WAAgB,EAChB,SAAc,EACd,EAAE,GACH,EAAE,sBAAsB,2CA0GxB"}
@@ -0,0 +1,11 @@
1
+ interface DateRangeInputProps {
2
+ startValue: string;
3
+ endValue: string;
4
+ onStartChange: (value: string) => void;
5
+ onEndChange: (value: string) => void;
6
+ className?: string;
7
+ id?: string;
8
+ }
9
+ export declare function DateRangeInput({ startValue, endValue, onStartChange, onEndChange, className, id, }: DateRangeInputProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=DateRangeInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateRangeInput.d.ts","sourceRoot":"","sources":["../../../src/components/SearchPanel/DateRangeInput.tsx"],"names":[],"mappings":"AAEA,UAAU,mBAAmB;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,QAAQ,EACR,aAAa,EACb,WAAW,EACX,SAAc,EACd,EAAE,GACH,EAAE,mBAAmB,2CAmCrB"}
@@ -0,0 +1,11 @@
1
+ import { NumberSearchField, SearchFilterValue } from '../../types';
2
+ interface NumberInputProps {
3
+ field: NumberSearchField;
4
+ value: SearchFilterValue;
5
+ onChange: (value: SearchFilterValue) => void;
6
+ className?: string;
7
+ id?: string;
8
+ }
9
+ export declare function NumberInput({ field, value, onChange, className, id }: NumberInputProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=NumberInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../../../src/components/SearchPanel/NumberInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExE,UAAU,gBAAgB;IACxB,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AA2BD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAc,EAAE,EAAE,EAAE,EAAE,gBAAgB,2CAgK3F"}
@@ -1,11 +1,15 @@
1
- import { LayerConfig, SearchFilterValues } from '../../types';
1
+ import { LayerConfig, SearchFilterValues, SearchFilterValue } from '../../types';
2
2
  export interface SearchPanelProps {
3
3
  layers: LayerConfig[];
4
4
  activeFilters: Record<string, SearchFilterValues>;
5
- onFilterChange: (layerId: string, property: string, value: string | number | undefined) => void;
5
+ onFilterChange: (layerId: string, property: string, value: SearchFilterValue) => void;
6
6
  onClearFilters: (layerId: string) => void;
7
+ autocompleteSuggestions?: Record<string, string[]>;
8
+ onFetchSuggestions?: (layerId: string, property: string, query: string, options?: {
9
+ prefetch?: boolean;
10
+ }) => void;
7
11
  className?: string;
8
12
  hideTitle?: boolean;
9
13
  }
10
- export declare function SearchPanel({ layers, activeFilters, onFilterChange, onClearFilters, className, hideTitle, }: SearchPanelProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function SearchPanel({ layers, activeFilters, onFilterChange, onClearFilters, autocompleteSuggestions, onFetchSuggestions, className, hideTitle, }: SearchPanelProps): import("react/jsx-runtime").JSX.Element;
11
15
  //# sourceMappingURL=SearchPanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchPanel.d.ts","sourceRoot":"","sources":["../../../src/components/SearchPanel/SearchPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAe,MAAM,aAAa,CAAC;AAEhF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAClD,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAChG,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,aAAa,EACb,cAAc,EACd,cAAc,EACd,SAAc,EACd,SAAS,GACV,EAAE,gBAAgB,2CAkIlB"}
1
+ {"version":3,"file":"SearchPanel.d.ts","sourceRoot":"","sources":["../../../src/components/SearchPanel/SearchPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,EAA2F,MAAM,aAAa,CAAC;AAK/K,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAClD,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACtF,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnD,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAClH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAcD,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,aAAa,EACb,cAAc,EACd,cAAc,EACd,uBAA4B,EAC5B,kBAAkB,EAClB,SAAc,EACd,SAAS,GACV,EAAE,gBAAgB,2CA4KlB"}
@@ -1,4 +1,4 @@
1
- import { S as r } from "../../SearchPanel-B5GPX1gF.js";
1
+ import { S as r } from "../../SearchPanel-DCY01Wa-.js";
2
2
  export {
3
3
  r as SearchPanel
4
4
  };