@ogc-maps/storybook-components 0.2.3 → 0.4.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 (43) hide show
  1. package/README.md +1 -1
  2. package/dist/{CollapsibleControl-Dz11KBrL.js → CollapsibleControl-VFUTWb_5.js} +7 -7
  3. package/dist/ExportButton-D2xn4G74.js +77 -0
  4. package/dist/FeatureDetailPanel-DpcaTS9I.js +50 -0
  5. package/dist/FeatureTooltip-CM0ZTudi.js +45 -0
  6. package/dist/PropertyList-BH_DTkcU.js +32 -0
  7. package/dist/components/CollapsibleControl/index.js +1 -1
  8. package/dist/components/ExportButton/ExportButton.d.ts +14 -0
  9. package/dist/components/ExportButton/ExportButton.d.ts.map +1 -0
  10. package/dist/components/ExportButton/index.d.ts +3 -0
  11. package/dist/components/ExportButton/index.d.ts.map +1 -0
  12. package/dist/components/ExportButton/index.js +4 -0
  13. package/dist/components/FeatureDetailPanel/FeatureDetailPanel.d.ts +11 -0
  14. package/dist/components/FeatureDetailPanel/FeatureDetailPanel.d.ts.map +1 -0
  15. package/dist/components/FeatureDetailPanel/index.d.ts +3 -0
  16. package/dist/components/FeatureDetailPanel/index.d.ts.map +1 -0
  17. package/dist/components/FeatureDetailPanel/index.js +4 -0
  18. package/dist/components/FeatureTooltip/FeatureTooltip.d.ts +9 -0
  19. package/dist/components/FeatureTooltip/FeatureTooltip.d.ts.map +1 -0
  20. package/dist/components/FeatureTooltip/index.d.ts +3 -0
  21. package/dist/components/FeatureTooltip/index.d.ts.map +1 -0
  22. package/dist/components/FeatureTooltip/index.js +4 -0
  23. package/dist/components/_shared/PropertyList.d.ts +12 -0
  24. package/dist/components/_shared/PropertyList.d.ts.map +1 -0
  25. package/dist/components/index.d.ts +6 -0
  26. package/dist/components/index.d.ts.map +1 -1
  27. package/dist/hooks/index.d.ts +1 -0
  28. package/dist/hooks/index.d.ts.map +1 -1
  29. package/dist/hooks/index.js +8 -7
  30. package/dist/hooks/useCsvExport.d.ts +13 -0
  31. package/dist/hooks/useCsvExport.d.ts.map +1 -0
  32. package/dist/main.js +49 -40
  33. package/dist/schemas/config.d.ts +33 -0
  34. package/dist/schemas/config.d.ts.map +1 -1
  35. package/dist/schemas/index.js +77 -74
  36. package/dist/style.css +1 -1
  37. package/dist/useCsvExport-wr7hy0P-.js +101 -0
  38. package/dist/utils/csvExport.d.ts +9 -0
  39. package/dist/utils/csvExport.d.ts.map +1 -0
  40. package/dist/utils/index.d.ts +1 -0
  41. package/dist/utils/index.d.ts.map +1 -1
  42. package/package.json +13 -1
  43. package/dist/useOgcFeatures-CmJxErv4.js +0 -44
package/README.md CHANGED
@@ -54,7 +54,7 @@ Default styles use the `mapui:` Tailwind prefix so they won't clash with your ap
54
54
 
55
55
  - [Getting Started](../../docs/GETTING-STARTED.md) — Installation, minimal config, first render
56
56
  - [Configuration](../../docs/CONFIGURATION.md) — Full `MapConfig` schema reference
57
- - [Components](../../docs/COMPONENTS.md) — All 6 component APIs with props tables and examples
57
+ - [Components](../../docs/COMPONENTS.md) — All 9 component APIs with props tables and examples
58
58
  - [Hooks & Utilities](../../docs/HOOKS.md) — OGC API hooks and utility functions
59
59
  - [Publishing](../../docs/PUBLISHING.md) — Versioning and release guide
60
60
 
@@ -1,18 +1,18 @@
1
1
  import { jsxs as e, jsx as a } from "react/jsx-runtime";
2
2
  import { useState as h } from "react";
3
- import { LuX as f } from "react-icons/lu";
3
+ import { LuX as g } from "react-icons/lu";
4
4
  function x({
5
5
  icon: t,
6
6
  label: i,
7
7
  defaultCollapsed: l = !0,
8
- collapsed: p,
9
- onToggle: u,
8
+ collapsed: u,
9
+ onToggle: p,
10
10
  children: o,
11
11
  className: n = ""
12
12
  }) {
13
- const [c, d] = h(l), m = p !== void 0 ? p : c, s = () => {
13
+ const [c, d] = h(l), m = u !== void 0 ? u : c, s = () => {
14
14
  const r = !m;
15
- u ? u(r) : d(r);
15
+ p ? p(r) : d(r);
16
16
  };
17
17
  return /* @__PURE__ */ e("div", { className: `mapui:relative mapui:w-10 mapui:h-10 ${n}`, children: [
18
18
  /* @__PURE__ */ a(
@@ -22,7 +22,7 @@ function x({
22
22
  onClick: s,
23
23
  title: i,
24
24
  "aria-label": i,
25
- className: `mapui:flex mapui:items-center mapui:justify-center mapui:w-10 mapui:h-10 mapui:bg-white mapui:rounded mapui:shadow-md hover:mapui:bg-gray-50 mapui:transition-colors ${m ? "" : "mapui:opacity-0 mapui:pointer-events-none"}`,
25
+ className: `mapui:flex mapui:items-center mapui:justify-center mapui:w-10 mapui:h-10 mapui:bg-white mapui:rounded mapui:shadow-md hover:mapui:bg-gray-50 mapui:transition-colors ${m ? "" : "mapui:bg-gray-100"}`,
26
26
  children: /* @__PURE__ */ a(t, { size: 20, className: "mapui:text-gray-700" })
27
27
  }
28
28
  ),
@@ -40,7 +40,7 @@ function x({
40
40
  title: `Collapse ${i}`,
41
41
  "aria-label": `Collapse ${i}`,
42
42
  className: "mapui:flex mapui:items-center mapui:justify-center mapui:w-6 mapui:h-6 mapui:rounded hover:mapui:bg-gray-100 mapui:transition-colors",
43
- children: /* @__PURE__ */ a(f, { size: 16, className: "mapui:text-gray-600" })
43
+ children: /* @__PURE__ */ a(g, { size: 16, className: "mapui:text-gray-600" })
44
44
  }
45
45
  )
46
46
  ] }),
@@ -0,0 +1,77 @@
1
+ import { jsx as p, jsxs as f } from "react/jsx-runtime";
2
+ import { useState as m, useRef as y, useEffect as E } from "react";
3
+ function H({
4
+ layers: i,
5
+ onExport: s,
6
+ loading: o = !1,
7
+ disabled: g = !1,
8
+ className: l = ""
9
+ }) {
10
+ const [n, u] = m(!1), [h, x] = m(!1), [w, v] = m(void 0), t = y(null);
11
+ E(() => {
12
+ if (!n) return;
13
+ if (t.current) {
14
+ const r = t.current.getBoundingClientRect(), d = r.bottom > window.innerHeight / 2;
15
+ x(d);
16
+ const b = 12;
17
+ v(d ? r.top - b : window.innerHeight - r.bottom - b);
18
+ }
19
+ function e(r) {
20
+ t.current && !t.current.contains(r.target) && u(!1);
21
+ }
22
+ return document.addEventListener("click", e), () => document.removeEventListener("click", e);
23
+ }, [n]);
24
+ const a = g || o || i.length === 0, c = [
25
+ "mapui:inline-flex mapui:items-center mapui:gap-1.5 mapui:rounded mapui:border mapui:border-gray-300",
26
+ "mapui:bg-white mapui:px-3 mapui:py-1.5 mapui:text-sm mapui:text-gray-700 mapui:transition-colors",
27
+ a ? "mapui:cursor-not-allowed mapui:opacity-50" : "mapui:cursor-pointer hover:mapui:bg-gray-50 hover:mapui:border-gray-400"
28
+ ].join(" ");
29
+ return i.length === 1 ? /* @__PURE__ */ p(
30
+ "button",
31
+ {
32
+ className: `${c} ${l}`.trim(),
33
+ disabled: a,
34
+ onClick: () => !a && s(i[0]),
35
+ children: o ? "Exporting..." : `Export ${i[0].label}`
36
+ }
37
+ ) : /* @__PURE__ */ f("div", { ref: t, className: `mapui:relative mapui:inline-block ${l}`.trim(), children: [
38
+ /* @__PURE__ */ f(
39
+ "button",
40
+ {
41
+ className: c,
42
+ disabled: a,
43
+ onClick: () => !a && u((e) => !e),
44
+ "aria-haspopup": "listbox",
45
+ "aria-expanded": n,
46
+ children: [
47
+ o ? "Exporting..." : "Export",
48
+ !o && /* @__PURE__ */ p("span", { "aria-hidden": "true", className: "mapui:text-gray-400", children: "▾" })
49
+ ]
50
+ }
51
+ ),
52
+ n && /* @__PURE__ */ p(
53
+ "ul",
54
+ {
55
+ role: "listbox",
56
+ className: `mapui:absolute mapui:left-0 mapui:z-10 mapui:min-w-[160px] mapui:overflow-y-auto mapui:rounded mapui:border mapui:border-gray-200 mapui:bg-white mapui:py-1 mapui:shadow-lg ${h ? "mapui:bottom-full mapui:mb-1" : "mapui:top-full mapui:mt-1"}`,
57
+ style: { maxHeight: w },
58
+ children: i.map((e) => /* @__PURE__ */ p(
59
+ "li",
60
+ {
61
+ role: "option",
62
+ "aria-selected": !1,
63
+ className: "mapui:cursor-pointer mapui:px-3 mapui:py-1.5 mapui:text-sm mapui:text-gray-700 hover:mapui:bg-gray-100",
64
+ onClick: () => {
65
+ s(e), u(!1);
66
+ },
67
+ children: e.label
68
+ },
69
+ e.id
70
+ ))
71
+ }
72
+ )
73
+ ] });
74
+ }
75
+ export {
76
+ H as E
77
+ };
@@ -0,0 +1,50 @@
1
+ import { jsxs as p, jsx as a } from "react/jsx-runtime";
2
+ import { P as s } from "./PropertyList-BH_DTkcU.js";
3
+ function x({
4
+ isOpen: r,
5
+ onClose: m,
6
+ properties: i,
7
+ title: t = "Feature Properties",
8
+ fields: l,
9
+ variant: e = "panel",
10
+ className: o = ""
11
+ }) {
12
+ if (!r) return null;
13
+ const u = /* @__PURE__ */ p(
14
+ "div",
15
+ {
16
+ className: [
17
+ "mapui:flex mapui:flex-col mapui:rounded mapui:border mapui:border-gray-200 mapui:bg-white mapui:shadow-md",
18
+ e === "modal" ? "mapui:max-h-[80vh] mapui:w-full mapui:max-w-lg" : "mapui:max-h-[calc(100vh-4rem)] mapui:w-72",
19
+ o
20
+ ].filter(Boolean).join(" ").trim(),
21
+ onClick: e === "modal" ? (n) => n.stopPropagation() : void 0,
22
+ children: [
23
+ /* @__PURE__ */ p("div", { className: "mapui:flex mapui:shrink-0 mapui:items-center mapui:justify-between mapui:border-b mapui:border-gray-200 mapui:px-4 mapui:py-3", children: [
24
+ /* @__PURE__ */ a("h3", { className: "mapui:m-0 mapui:text-sm mapui:font-semibold mapui:text-gray-700", children: t }),
25
+ /* @__PURE__ */ a(
26
+ "button",
27
+ {
28
+ onClick: m,
29
+ className: "mapui:flex mapui:h-6 mapui:w-6 mapui:cursor-pointer mapui:items-center mapui:justify-center mapui:rounded mapui:border-0 mapui:bg-transparent mapui:text-lg mapui:leading-none mapui:text-gray-400 mapui:transition-colors hover:mapui:bg-gray-100 hover:mapui:text-gray-700",
30
+ "aria-label": "Close",
31
+ children: "×"
32
+ }
33
+ )
34
+ ] }),
35
+ /* @__PURE__ */ a("div", { className: "mapui:overflow-y-auto mapui:px-4 mapui:py-3", children: i && Object.keys(i).length > 0 ? /* @__PURE__ */ a(s, { properties: i, fields: l, density: "default" }) : /* @__PURE__ */ a("p", { className: "mapui:m-0 mapui:text-sm mapui:text-gray-400", children: "No properties available." }) })
36
+ ]
37
+ }
38
+ );
39
+ return e === "modal" ? /* @__PURE__ */ a(
40
+ "div",
41
+ {
42
+ className: "mapui:fixed mapui:inset-0 mapui:z-50 mapui:flex mapui:items-center mapui:justify-center mapui:bg-black/40 mapui:p-4",
43
+ onClick: m,
44
+ children: u
45
+ }
46
+ ) : u;
47
+ }
48
+ export {
49
+ x as F
50
+ };
@@ -0,0 +1,45 @@
1
+ import { jsx as a, jsxs as e } from "react/jsx-runtime";
2
+ import { P as s } from "./PropertyList-BH_DTkcU.js";
3
+ function x({
4
+ title: p,
5
+ properties: m,
6
+ fields: t,
7
+ maxItems: i = 4,
8
+ className: u = ""
9
+ }) {
10
+ if (!m)
11
+ return /* @__PURE__ */ a(
12
+ "div",
13
+ {
14
+ className: `mapui:rounded mapui:border mapui:border-gray-200 mapui:bg-white mapui:px-3 mapui:py-2 mapui:shadow-md ${u}`.trim(),
15
+ children: /* @__PURE__ */ a("p", { className: "mapui:m-0 mapui:text-xs mapui:text-gray-400", children: "No data" })
16
+ }
17
+ );
18
+ const r = t ?? Object.keys(m), o = r.length > i, d = r.length - i;
19
+ return /* @__PURE__ */ e(
20
+ "div",
21
+ {
22
+ className: `mapui:min-w-[140px] mapui:max-w-[240px] mapui:rounded mapui:border mapui:border-gray-200 mapui:bg-white mapui:px-3 mapui:py-2 mapui:shadow-md ${u}`.trim(),
23
+ children: [
24
+ p && /* @__PURE__ */ a("p", { className: "mapui:mb-1.5 mapui:mt-0 mapui:text-xs mapui:font-semibold mapui:text-gray-700", children: p }),
25
+ /* @__PURE__ */ a(
26
+ s,
27
+ {
28
+ properties: m,
29
+ fields: t,
30
+ maxItems: i,
31
+ density: "compact"
32
+ }
33
+ ),
34
+ o && /* @__PURE__ */ e("p", { className: "mapui:mb-0 mapui:mt-1 mapui:text-xs mapui:text-gray-400", children: [
35
+ "+",
36
+ d,
37
+ " more"
38
+ ] })
39
+ ]
40
+ }
41
+ );
42
+ }
43
+ export {
44
+ x as F
45
+ };
@@ -0,0 +1,32 @@
1
+ import { jsx as m, jsxs as r } from "react/jsx-runtime";
2
+ function t(i) {
3
+ return i == null ? "--" : typeof i == "boolean" ? i ? "Yes" : "No" : Array.isArray(i) ? i.map(t).join(", ") : typeof i == "object" ? JSON.stringify(i) : String(i);
4
+ }
5
+ function o({
6
+ properties: i,
7
+ fields: u,
8
+ maxItems: p,
9
+ density: c = "default",
10
+ className: e = ""
11
+ }) {
12
+ const n = u ?? Object.keys(i), s = p != null ? n.slice(0, p) : n;
13
+ return c === "compact" ? /* @__PURE__ */ m("dl", { className: `mapui:m-0 mapui:text-xs ${e}`.trim(), children: s.map((a) => /* @__PURE__ */ r("div", { className: "mapui:flex mapui:gap-1 mapui:py-0.5", children: [
14
+ /* @__PURE__ */ r("dt", { className: "mapui:shrink-0 mapui:font-medium mapui:text-gray-500", children: [
15
+ a,
16
+ ":"
17
+ ] }),
18
+ /* @__PURE__ */ m("dd", { className: "mapui:m-0 mapui:truncate mapui:text-gray-800", children: t(i[a]) })
19
+ ] }, a)) }) : /* @__PURE__ */ m(
20
+ "dl",
21
+ {
22
+ className: `mapui:m-0 mapui:grid mapui:grid-cols-2 mapui:gap-x-4 mapui:gap-y-2 mapui:text-sm ${e}`.trim(),
23
+ children: s.map((a) => /* @__PURE__ */ r("div", { className: "mapui:contents", children: [
24
+ /* @__PURE__ */ m("dt", { className: "mapui:break-words mapui:font-medium mapui:text-gray-500", children: a }),
25
+ /* @__PURE__ */ m("dd", { className: "mapui:m-0 mapui:break-words mapui:text-gray-800", children: t(i[a]) })
26
+ ] }, a))
27
+ }
28
+ );
29
+ }
30
+ export {
31
+ o as P
32
+ };
@@ -1,4 +1,4 @@
1
- import { C as r } from "../../CollapsibleControl-Dz11KBrL.js";
1
+ import { C as r } from "../../CollapsibleControl-VFUTWb_5.js";
2
2
  export {
3
3
  r as CollapsibleControl
4
4
  };
@@ -0,0 +1,14 @@
1
+ export interface ExportableLayer {
2
+ id: string;
3
+ label: string;
4
+ collection: string;
5
+ }
6
+ export interface ExportButtonProps {
7
+ layers: ExportableLayer[];
8
+ onExport: (layer: ExportableLayer) => void;
9
+ loading?: boolean;
10
+ disabled?: boolean;
11
+ className?: string;
12
+ }
13
+ export declare function ExportButton({ layers, onExport, loading, disabled, className, }: ExportButtonProps): import("react/jsx-runtime").JSX.Element;
14
+ //# sourceMappingURL=ExportButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportButton.d.ts","sourceRoot":"","sources":["../../../src/components/ExportButton/ExportButton.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,QAAQ,EACR,OAAe,EACf,QAAgB,EAChB,SAAc,GACf,EAAE,iBAAiB,2CAsFnB"}
@@ -0,0 +1,3 @@
1
+ export { ExportButton } from './ExportButton';
2
+ export type { ExportButtonProps, ExportableLayer } from './ExportButton';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ExportButton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { E as r } from "../../ExportButton-D2xn4G74.js";
2
+ export {
3
+ r as ExportButton
4
+ };
@@ -0,0 +1,11 @@
1
+ export interface FeatureDetailPanelProps {
2
+ isOpen: boolean;
3
+ onClose: () => void;
4
+ properties: Record<string, unknown> | null;
5
+ title?: string;
6
+ fields?: string[];
7
+ variant?: 'panel' | 'modal';
8
+ className?: string;
9
+ }
10
+ export declare function FeatureDetailPanel({ isOpen, onClose, properties, title, fields, variant, className, }: FeatureDetailPanelProps): import("react/jsx-runtime").JSX.Element | null;
11
+ //# sourceMappingURL=FeatureDetailPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureDetailPanel.d.ts","sourceRoot":"","sources":["../../../src/components/FeatureDetailPanel/FeatureDetailPanel.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,OAAO,EACP,UAAU,EACV,KAA4B,EAC5B,MAAM,EACN,OAAiB,EACjB,SAAc,GACf,EAAE,uBAAuB,kDAmDzB"}
@@ -0,0 +1,3 @@
1
+ export { FeatureDetailPanel } from './FeatureDetailPanel';
2
+ export type { FeatureDetailPanelProps } from './FeatureDetailPanel';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FeatureDetailPanel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { F as r } from "../../FeatureDetailPanel-DpcaTS9I.js";
2
+ export {
3
+ r as FeatureDetailPanel
4
+ };
@@ -0,0 +1,9 @@
1
+ export interface FeatureTooltipProps {
2
+ title?: string;
3
+ properties: Record<string, unknown> | null;
4
+ fields?: string[];
5
+ maxItems?: number;
6
+ className?: string;
7
+ }
8
+ export declare function FeatureTooltip({ title, properties, fields, maxItems, className, }: FeatureTooltipProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=FeatureTooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureTooltip.d.ts","sourceRoot":"","sources":["../../../src/components/FeatureTooltip/FeatureTooltip.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,UAAU,EACV,MAAM,EACN,QAAY,EACZ,SAAc,GACf,EAAE,mBAAmB,2CAmCrB"}
@@ -0,0 +1,3 @@
1
+ export { FeatureTooltip } from './FeatureTooltip';
2
+ export type { FeatureTooltipProps } from './FeatureTooltip';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FeatureTooltip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { F as r } from "../../FeatureTooltip-CM0ZTudi.js";
2
+ export {
3
+ r as FeatureTooltip
4
+ };
@@ -0,0 +1,12 @@
1
+ export type PropertyListDensity = 'compact' | 'default';
2
+ interface PropertyListProps {
3
+ properties: Record<string, unknown>;
4
+ fields?: string[];
5
+ maxItems?: number;
6
+ density?: PropertyListDensity;
7
+ className?: string;
8
+ }
9
+ export declare function formatPropertyValue(value: unknown): string;
10
+ export declare function PropertyList({ properties, fields, maxItems, density, className, }: PropertyListProps): import("react/jsx-runtime").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=PropertyList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertyList.d.ts","sourceRoot":"","sources":["../../../src/components/_shared/PropertyList.tsx"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,CAAC;AAExD,UAAU,iBAAiB;IACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAM1D;AAED,wBAAgB,YAAY,CAAC,EAC3B,UAAU,EACV,MAAM,EACN,QAAQ,EACR,OAAmB,EACnB,SAAc,GACf,EAAE,iBAAiB,2CAiCnB"}
@@ -4,6 +4,12 @@ export { CollapsibleControl } from './CollapsibleControl';
4
4
  export type { CollapsibleControlProps } from './CollapsibleControl';
5
5
  export { CoordinateDisplay, formatDecimal, formatDMS, } from './CoordinateDisplay';
6
6
  export type { CoordinateDisplayProps, CoordinateFormatOption, } from './CoordinateDisplay';
7
+ export { ExportButton } from './ExportButton';
8
+ export type { ExportButtonProps, ExportableLayer } from './ExportButton';
9
+ export { FeatureDetailPanel } from './FeatureDetailPanel';
10
+ export type { FeatureDetailPanelProps } from './FeatureDetailPanel';
11
+ export { FeatureTooltip } from './FeatureTooltip';
12
+ export type { FeatureTooltipProps } from './FeatureTooltip';
7
13
  export { LayerPanel } from './LayerPanel';
8
14
  export type { LayerPanelProps } from './LayerPanel';
9
15
  export { Legend } from './Legend';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { SearchField } from '../types';
2
2
  export { useOgcCollections, type UseOgcCollectionsResult } from './useOgcCollections';
3
3
  export { useOgcFeatures, type UseOgcFeaturesResult } from './useOgcFeatures';
4
+ export { useCsvExport, type UseCsvExportOptions, type UseCsvExportResult } from './useCsvExport';
4
5
  export type { OgcApiSource, LayerConfig, MapConfig, UIConfig, ViewConfig, StyleConfig, FilterConfig, LegendConfig, SearchConfig, SearchField, } from '../types';
5
6
  export type SearchFieldType = SearchField['type'];
6
7
  export { fetchCollections, fetchFeatures, fetchQueryables, getFilteredVectorTileUrl, getTileJsonUrl, getVectorTileUrl, type OgcCollection, type OgcCollectionsResponse, type GeoJsonFeature, type OgcFeatureCollection, type OgcQueryables, type QueryableProperty, type FetchFeaturesOptions, } from '../utils/ogcApi';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,YAAY,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,cAAc,EACd,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEjG,YAAY,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,cAAc,EACd,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,iBAAiB,CAAC"}
@@ -1,12 +1,13 @@
1
- import { u as t, a } from "../useOgcFeatures-CmJxErv4.js";
2
- import { f as l, a as o, b as c, g as f, c as g, d as i } from "../ogcApi-BuXSs9i0.js";
1
+ import { u as t, a, b as r } from "../useCsvExport-wr7hy0P-.js";
2
+ import { f as o, a as c, b as u, g as f, c as g, d as i } from "../ogcApi-BuXSs9i0.js";
3
3
  export {
4
- l as fetchCollections,
5
- o as fetchFeatures,
6
- c as fetchQueryables,
4
+ o as fetchCollections,
5
+ c as fetchFeatures,
6
+ u as fetchQueryables,
7
7
  f as getFilteredVectorTileUrl,
8
8
  g as getTileJsonUrl,
9
9
  i as getVectorTileUrl,
10
- t as useOgcCollections,
11
- a as useOgcFeatures
10
+ t as useCsvExport,
11
+ a as useOgcCollections,
12
+ r as useOgcFeatures
12
13
  };
@@ -0,0 +1,13 @@
1
+ import { CsvExportOptions } from '../utils/csvExport';
2
+ export interface UseCsvExportOptions {
3
+ baseUrl: string;
4
+ limit?: number;
5
+ csvOptions?: CsvExportOptions;
6
+ }
7
+ export interface UseCsvExportResult {
8
+ exportCsv: (collectionId: string, filename?: string) => Promise<void>;
9
+ loading: boolean;
10
+ error: Error | null;
11
+ }
12
+ export declare function useCsvExport({ baseUrl, limit, csvOptions, }: UseCsvExportOptions): UseCsvExportResult;
13
+ //# sourceMappingURL=useCsvExport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCsvExport.d.ts","sourceRoot":"","sources":["../../src/hooks/useCsvExport.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAY,EACZ,UAAU,GACX,EAAE,mBAAmB,GAAG,kBAAkB,CA2C1C"}
package/dist/main.js CHANGED
@@ -1,47 +1,56 @@
1
1
  import { B as o } from "./BasemapSwitcher-BW7lyZ2Y.js";
2
- import { C as t } from "./CollapsibleControl-Dz11KBrL.js";
3
- import { C as i, f as l, a as m } from "./CoordinateDisplay-PxPmVjpm.js";
4
- import { L as S } from "./LayerPanel-K00X2QUj.js";
5
- import { L as n } from "./Legend-D4cc1JzQ.js";
6
- import { S as g } from "./SearchPanel-CFVQV6JJ.js";
7
- import { u as p, a as d } from "./useOgcFeatures-CmJxErv4.js";
8
- import { f as y, a as L, b as u, g as F, c as P, d as M } from "./ogcApi-BuXSs9i0.js";
9
- import { BasemapConfigSchema as V, CirclePaintSchema as b, CircleStyleSchema as B, FillPaintSchema as D, FillStyleSchema as O, FilterConfigSchema as T, LayerConfigSchema as w, LegendConfigSchema as v, LegendEntrySchema as A, LinePaintSchema as E, LineStyleSchema as I, MapConfigSchema as J, OgcApiSourceSchema as Q, SearchConfigSchema as j, SearchFieldSchema as k, StyleConfigSchema as q, UIConfigSchema as z, ViewConfigSchema as G, safeValidateMapConfig as H, validateMapConfig as K } from "./schemas/index.js";
2
+ import { C as t } from "./CollapsibleControl-VFUTWb_5.js";
3
+ import { C as i, f as l, a as c } from "./CoordinateDisplay-PxPmVjpm.js";
4
+ import { E as f } from "./ExportButton-D2xn4G74.js";
5
+ import { F as S } from "./FeatureDetailPanel-DpcaTS9I.js";
6
+ import { F as p } from "./FeatureTooltip-CM0ZTudi.js";
7
+ import { L as g } from "./LayerPanel-K00X2QUj.js";
8
+ import { L as d } from "./Legend-D4cc1JzQ.js";
9
+ import { S as F } from "./SearchPanel-CFVQV6JJ.js";
10
+ import { d as L, f as P, u as T, a as b, b as v } from "./useCsvExport-wr7hy0P-.js";
11
+ import { f as D, a as E, b as M, g as U, c as V, d as w } from "./ogcApi-BuXSs9i0.js";
12
+ import { BasemapConfigSchema as A, CirclePaintSchema as I, CircleStyleSchema as J, FillPaintSchema as Q, FillStyleSchema as j, FilterConfigSchema as k, LayerConfigSchema as q, LegendConfigSchema as z, LegendEntrySchema as G, LinePaintSchema as H, LineStyleSchema as K, MapConfigSchema as N, OgcApiSourceSchema as R, SearchConfigSchema as W, SearchFieldSchema as X, StyleConfigSchema as Y, UIConfigSchema as Z, ViewConfigSchema as _, safeValidateMapConfig as $, validateMapConfig as ee } from "./schemas/index.js";
10
13
  import './style.css';export {
11
- V as BasemapConfigSchema,
14
+ A as BasemapConfigSchema,
12
15
  o as BasemapSwitcher,
13
- b as CirclePaintSchema,
14
- B as CircleStyleSchema,
16
+ I as CirclePaintSchema,
17
+ J as CircleStyleSchema,
15
18
  t as CollapsibleControl,
16
19
  i as CoordinateDisplay,
17
- D as FillPaintSchema,
18
- O as FillStyleSchema,
19
- T as FilterConfigSchema,
20
- w as LayerConfigSchema,
21
- S as LayerPanel,
22
- n as Legend,
23
- v as LegendConfigSchema,
24
- A as LegendEntrySchema,
25
- E as LinePaintSchema,
26
- I as LineStyleSchema,
27
- J as MapConfigSchema,
28
- Q as OgcApiSourceSchema,
29
- j as SearchConfigSchema,
30
- k as SearchFieldSchema,
31
- g as SearchPanel,
32
- q as StyleConfigSchema,
33
- z as UIConfigSchema,
34
- G as ViewConfigSchema,
35
- y as fetchCollections,
36
- L as fetchFeatures,
37
- u as fetchQueryables,
20
+ f as ExportButton,
21
+ S as FeatureDetailPanel,
22
+ p as FeatureTooltip,
23
+ Q as FillPaintSchema,
24
+ j as FillStyleSchema,
25
+ k as FilterConfigSchema,
26
+ q as LayerConfigSchema,
27
+ g as LayerPanel,
28
+ d as Legend,
29
+ z as LegendConfigSchema,
30
+ G as LegendEntrySchema,
31
+ H as LinePaintSchema,
32
+ K as LineStyleSchema,
33
+ N as MapConfigSchema,
34
+ R as OgcApiSourceSchema,
35
+ W as SearchConfigSchema,
36
+ X as SearchFieldSchema,
37
+ F as SearchPanel,
38
+ Y as StyleConfigSchema,
39
+ Z as UIConfigSchema,
40
+ _ as ViewConfigSchema,
41
+ L as downloadCsv,
42
+ P as featuresToCsv,
43
+ D as fetchCollections,
44
+ E as fetchFeatures,
45
+ M as fetchQueryables,
38
46
  l as formatDMS,
39
- m as formatDecimal,
40
- F as getFilteredVectorTileUrl,
41
- P as getTileJsonUrl,
42
- M as getVectorTileUrl,
43
- H as safeValidateMapConfig,
44
- p as useOgcCollections,
45
- d as useOgcFeatures,
46
- K as validateMapConfig
47
+ c as formatDecimal,
48
+ U as getFilteredVectorTileUrl,
49
+ V as getTileJsonUrl,
50
+ w as getVectorTileUrl,
51
+ $ as safeValidateMapConfig,
52
+ T as useCsvExport,
53
+ b as useOgcCollections,
54
+ v as useOgcFeatures,
55
+ ee as validateMapConfig
47
56
  };